From dfd8ae7beca0403e635283f4239c91d6ec2b5952 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?=
<9664676+pengyuthon@user.noreply.gitee.com>
Date: Sat, 15 Nov 2025 18:58:33 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
yuthon_base/__manifest__.py | 1 +
yuthon_base/data/ir_cron_type_data.xml | 9 ++
yuthon_base/models/__init__.py | 1 +
yuthon_base/models/ir_cron_act.py | 18 +++
yuthon_base/security/ir.model.access.csv | 2 +-
yuthon_base/views/ir_cron_act_views.xml | 40 ++++++
yuthon_base/views/menu.xml | 14 +++
yuthon_hr_attendance/__manifest__.py | 3 +-
yuthon_hr_attendance/models/hr_attendance.py | 115 ------------------
.../models/yuthon_vacation_reports.py | 11 +-
.../views/attendance_message_log.xml | 41 +++++++
.../views/yuthon_vacation_reports_views.xml | 46 +++----
12 files changed, 159 insertions(+), 142 deletions(-)
create mode 100644 yuthon_base/data/ir_cron_type_data.xml
create mode 100644 yuthon_base/models/ir_cron_act.py
create mode 100644 yuthon_base/views/ir_cron_act_views.xml
create mode 100644 yuthon_hr_attendance/views/attendance_message_log.xml
diff --git a/yuthon_base/__manifest__.py b/yuthon_base/__manifest__.py
index bd165c8cd..3a8ecbd2b 100644
--- a/yuthon_base/__manifest__.py
+++ b/yuthon_base/__manifest__.py
@@ -9,6 +9,7 @@
'data': [
'security/ir.model.access.csv',
'views/system_version_views.xml',
+ 'views/ir_cron_act_views.xml',
'views/menu.xml',
],
'assets': {
diff --git a/yuthon_base/data/ir_cron_type_data.xml b/yuthon_base/data/ir_cron_type_data.xml
new file mode 100644
index 000000000..967b1d63f
--- /dev/null
+++ b/yuthon_base/data/ir_cron_type_data.xml
@@ -0,0 +1,9 @@
+
+
+
+ 出勤
+
+
+ 其他
+
+
diff --git a/yuthon_base/models/__init__.py b/yuthon_base/models/__init__.py
index f2a92dd06..024efa1ca 100644
--- a/yuthon_base/models/__init__.py
+++ b/yuthon_base/models/__init__.py
@@ -2,4 +2,5 @@ from . import ir_model
from . import inherit_ir_attachment
from . import system_version
from . import fields_piyin
+from . import ir_cron_act
# from . import res_partner
\ No newline at end of file
diff --git a/yuthon_base/models/ir_cron_act.py b/yuthon_base/models/ir_cron_act.py
new file mode 100644
index 000000000..681e3a4d4
--- /dev/null
+++ b/yuthon_base/models/ir_cron_act.py
@@ -0,0 +1,18 @@
+from odoo import fields, models, api
+
+
+class InheritCronAct(models.Model):
+ _inherit = 'ir.cron'
+ _description = '定时任务'
+
+ is_corn_customer = fields.Boolean(string='是否用户', default=True)
+ cron_type_id = fields.Many2one('ir.cron.type', string='类型')
+
+
+class InheritCronType(models.Model):
+ _name = 'ir.cron.type'
+ _description = '定时任务类型'
+
+ name = fields.Char(string='名称')
+
+
diff --git a/yuthon_base/security/ir.model.access.csv b/yuthon_base/security/ir.model.access.csv
index 507510627..318f27c43 100644
--- a/yuthon_base/security/ir.model.access.csv
+++ b/yuthon_base/security/ir.model.access.csv
@@ -1,3 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_system_version,system_version,model_system_version,base.group_system,1,1,1,1
-
+access_ir_cron_type,ir.cron.type,model_ir_cron_type,base.group_system,1,1,1,1
diff --git a/yuthon_base/views/ir_cron_act_views.xml b/yuthon_base/views/ir_cron_act_views.xml
new file mode 100644
index 000000000..dd9fcc395
--- /dev/null
+++ b/yuthon_base/views/ir_cron_act_views.xml
@@ -0,0 +1,40 @@
+
+
+
+ ir.cron.tree.inherit
+ ir.cron
+
+
+
+
+
+
+
+
+
+ ir.cron.form.inherit
+ ir.cron
+
+
+
+
+
+
+
+
+
+ ir.cron.type.tree
+ ir.cron.type
+
+
+
+
+
+
+
+ 定时任务类型
+ ir.cron.type
+ tree
+
+
+
diff --git a/yuthon_base/views/menu.xml b/yuthon_base/views/menu.xml
index 5e62aff44..1f176ca23 100644
--- a/yuthon_base/views/menu.xml
+++ b/yuthon_base/views/menu.xml
@@ -9,4 +9,18 @@
parent="system_version_menu_root_board"
action="action_system_version"
sequence="1"/>
+
+
+
\ No newline at end of file
diff --git a/yuthon_hr_attendance/__manifest__.py b/yuthon_hr_attendance/__manifest__.py
index bbc8548b0..6fcc14b2b 100644
--- a/yuthon_hr_attendance/__manifest__.py
+++ b/yuthon_hr_attendance/__manifest__.py
@@ -12,7 +12,7 @@
'category': 'Human Resources/Attendances',
'sequence': 240,
'website': 'https://www.pengyuthon.com',
- 'depends': ['hr_attendance', 'resource', 'base', 'hr', 'mail',
+ 'depends': ['hr_attendance', 'resource', 'base', 'hr', 'mail', 'yuthon_base',
'soong_workflow', 'yuthon_issue', 'planning', 'calendar', 'web_gantt', 'yuthon_wechat', 'yuthon_hr_employee','planning'],
'data': [
'security/ir.model.access.csv',
@@ -31,6 +31,7 @@
'views/inherit_hr_employee.xml',
'views/inherit_planning_role_views.xml',
'views/inherit_planning_slot_views.xml',
+ 'views/attendance_message_log.xml',
'views/inherit_planning_slot_template_views.xml',
'views/yuthon_customer_approval_views.xml',
'views/yuthon_shift_planning_views.xml',
diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py
index bf64dc7c8..2efe0d12c 100644
--- a/yuthon_hr_attendance/models/hr_attendance.py
+++ b/yuthon_hr_attendance/models/hr_attendance.py
@@ -831,11 +831,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '早班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def ba_card_white_down(self):
@@ -843,11 +838,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '早班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
# 保安部 - 中班
@@ -856,11 +846,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '中班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def ba_card_mid_down(self):
@@ -868,11 +853,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '中班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
# 保安部 - 夜班
@@ -881,11 +861,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '夜班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def ba_card_night_down(self):
@@ -893,11 +868,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '夜班')])
for user in ba_up_users:
if user.end_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
# 工程部 - 白班
@@ -906,11 +876,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def gc_white_shift_remind(self):
@@ -918,11 +883,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_duty_remind(user.resource_id.employee_id)
def gc_white_out_remind(self):
@@ -930,11 +890,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
# 工程部 - 白值
@@ -943,11 +898,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
def gc_white_remind_out(self):
@@ -955,11 +905,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
# 工程部-中值夜
@@ -968,11 +913,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def gc_night_remind_shift(self):
@@ -980,11 +920,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
for user in ba_up_users:
if user.end_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_duty_remind(user.resource_id.employee_id)
def gc_night_remind_out(self):
@@ -992,11 +927,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
for user in ba_up_users:
if user.end_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
# 粮储-白班
@@ -1005,11 +935,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
def card_lc_remind_out(self):
@@ -1030,11 +955,6 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
def card_lc_shift_remind(self):
@@ -1042,44 +962,24 @@ class HrAttendance(models.Model):
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_duty_remind(user.resource_id.employee_id)
def card_lc_shift_remind_out(self):
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
def card_lc_shift_remind_on_administrative(self):
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
def card_lc_shift_remind_out_administrative(self):
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
# 客服上班消息提醒
@@ -1087,11 +987,6 @@ class HrAttendance(models.Model):
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '白班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
# 客服下班消息提醒
@@ -1099,11 +994,6 @@ class HrAttendance(models.Model):
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '白班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
# 客服值班消息提醒
@@ -1111,11 +1001,6 @@ class HrAttendance(models.Model):
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '值班')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
- self.env['card.remind.form'].create({
- 'name': user.resource_id.employee_id.name,
- 'start_time': datetime.now(),
- 'shift': user.template_id.planning_name,
- 'department': user.department_id.name, })
self.card_duty_remind(user.resource_id.employee_id)
def _create_message_log(self, employee_id, message_type, url):
diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py
index 63796ce0d..bcdb3381a 100644
--- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py
+++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py
@@ -1,5 +1,7 @@
from datetime import datetime, timedelta, time
from email.policy import default
+from operator import index
+
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
import calendar
@@ -1057,8 +1059,13 @@ class AttendanceMessageLog(models.Model):
vacation_id = fields.Many2one('yuthon.vacation.reports', string='关联假期额度记录')
employee_id = fields.Many2one('hr.employee', string='员工')
- update_date = fields.Datetime(string='更新时间')
- message_type = fields.Selection([('1', '上班'), ('2', '下班'), ('3', '异常'), ('4', '考勤确认'), ('5', '薪资')], string="类型")
+ department_id = fields.Many2one(related='employee_id.department_id', string="部门", index=True)
+ company_id = fields.Many2one(related='employee_id.company_id', string="公司")
+ update_date = fields.Datetime(string='提醒时间')
+ shift_id = fields.Many2one('planning.slot', string="班次", store=True)
+ content = fields.Text(string='内容')
+ notice_type = fields.Selection([('attendance', '出勤'), ('schedule', '日程'), ('announcement', '公告'), ('attendance_confirmation', '考勤确认单'), ('salary_slip', '薪资条'),
+ ('process', '流程'), ('other', '其他')], string='类型')
message_url = fields.Char(string="url")
diff --git a/yuthon_hr_attendance/views/attendance_message_log.xml b/yuthon_hr_attendance/views/attendance_message_log.xml
new file mode 100644
index 000000000..e3387894f
--- /dev/null
+++ b/yuthon_hr_attendance/views/attendance_message_log.xml
@@ -0,0 +1,41 @@
+
+
+ attendance.message.log.tree
+ attendance.message.log
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ attendance.message.log.search
+ attendance.message.log
+
+
+
+
+
+
+
+
+ 消息提醒日志
+ attendance.message.log
+ tree,search
+
+
+
+
diff --git a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
index 4cf871344..1885cc740 100644
--- a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
+++ b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
@@ -230,18 +230,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -394,17 +394,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+