From a9e8e4c737c5752443caa0dcd0c4ced4fc8a0c2d Mon Sep 17 00:00:00 2001
From: zhou <123@>
Date: Tue, 17 Jun 2025 10:18:13 +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
---
.../models/soong_workflow_inspector.py | 1 +
yuthon_hr_attendance/models/hr_attendance.py | 9 ++-
.../views/hr_attendance_views.xml | 18 ++---
.../wizard/attendance_correct_wizard.py | 68 +++++++++++++++++--
4 files changed, 81 insertions(+), 15 deletions(-)
diff --git a/soong_workflow/models/soong_workflow_inspector.py b/soong_workflow/models/soong_workflow_inspector.py
index 45e712e0f..0dc18859a 100644
--- a/soong_workflow/models/soong_workflow_inspector.py
+++ b/soong_workflow/models/soong_workflow_inspector.py
@@ -8,6 +8,7 @@ from odoo.exceptions import ValidationError, UserError
class SoongWorkflowInspector(models.Model):
_name = "soong.workflow.inspector"
_description = "督查督办"
+ _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
name = fields.Char(string="标题")
start_data = fields.Date(string="督办日期", default=fields.Date.today)
diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py
index 0935ab297..182534b31 100644
--- a/yuthon_hr_attendance/models/hr_attendance.py
+++ b/yuthon_hr_attendance/models/hr_attendance.py
@@ -46,7 +46,9 @@ class HrAttendance(models.Model):
noon_duty = fields.Datetime(string="中值")
night_duty = fields.Datetime(string="晚值")
is_approval = fields.Boolean(string="是否审批修正", default=False)
- is_red = fields.Boolean()
+ is_check_in_red = fields.Boolean(string="是否上班打卡异常")
+ is_check_out_red = fields.Boolean(string="是否下班打卡异常")
+
approval_check_in = fields.Datetime(string="修正前上班打卡时间")
approval_check_out = fields.Datetime(string="修正前下班打卡时间")
is_month = fields.Boolean(string="是否为本月数据", compute='_compute_month_status', store=True)
@@ -200,7 +202,10 @@ class HrAttendance(models.Model):
self.is_late_card = self.is_approval_late
self.is_abnormal = self.is_approval_abnormal
self.absenteeism_card = self.is_approval_abs
- self.is_red = False
+ if self.is_check_in_red == True:
+ self.is_check_in_red = False
+ if self.is_check_out_red == True:
+ self.is_check_out_red = False
def button_correct_wizard(self):
self.approval_check_in = self.check_in
diff --git a/yuthon_hr_attendance/views/hr_attendance_views.xml b/yuthon_hr_attendance/views/hr_attendance_views.xml
index d265e3593..689af4016 100644
--- a/yuthon_hr_attendance/views/hr_attendance_views.xml
+++ b/yuthon_hr_attendance/views/hr_attendance_views.xml
@@ -4,7 +4,7 @@
hr.attendance.going.tree2
hr.attendance
-
-
-
+
+
@@ -31,10 +31,11 @@
-
+
+
-
+
@@ -43,7 +44,7 @@
hr.attendance.going.tree2
hr.attendance
-
@@ -69,10 +70,11 @@
-
+
+
-
+
diff --git a/yuthon_hr_attendance/wizard/attendance_correct_wizard.py b/yuthon_hr_attendance/wizard/attendance_correct_wizard.py
index 320745354..5b6edf39b 100644
--- a/yuthon_hr_attendance/wizard/attendance_correct_wizard.py
+++ b/yuthon_hr_attendance/wizard/attendance_correct_wizard.py
@@ -16,6 +16,17 @@ class AttendanceCorrectWizard(models.TransientModel):
def confirm(self):
for record in self:
+ # 准备更新的值
+ values = {
+ 'is_approval': True,
+ 'is_abnormal': False,
+ 'is_no_card': False,
+ 'is_early_card': False,
+ 'is_late_card': False,
+ 'is_check_in_red': False,
+ 'is_check_out_red': False
+ }
+
if not record.attendance_id.shift_id:
year = record.attendance_id.current_data.year
month = record.attendance_id.current_data.month
@@ -25,12 +36,41 @@ class AttendanceCorrectWizard(models.TransientModel):
min_hour = int(min_hour_from)
min_minute = int(min_hour_from * 10 % min_hour_from)
will_datetime_start = current_date.replace(year=year, month=month, day=day, hour=min_hour, minute=min_minute) - timedelta(hours=8)
- record.attendance_id.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False, 'is_red':True})
max_hour_to = record.attendance_id.employee_id.resource_id.calendar_id.attendance_ids[-1].hour_to
max_hour = int(max_hour_to)
max_minute = int(max_hour_to * 10 % max_hour_to)
will_datetime_end = current_date.replace(year=year, month=month, day=day, hour=max_hour, minute=max_minute) - timedelta(hours=8)
- record.attendance_id.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False, 'absenteeism_card':False, 'is_red':True})
+ # 准备更新的值
+ values = {
+ 'is_approval': True,
+ 'is_abnormal': False,
+ 'is_no_card': False,
+ 'is_early_card': False,
+ 'is_late_card': False,
+ 'is_check_in_red': False,
+ 'is_check_out_red': False
+ }
+ # 处理上班打卡
+ if not self.attendance_id.check_in:
+ values['check_in'] = will_datetime_start
+ values['is_check_in_red'] = True
+ values['is_no_card'] = False
+ elif self.attendance_id.check_in > will_datetime_start:
+ values['check_in'] = will_datetime_start
+ values['is_check_in_red'] = True
+ values['is_late_card'] = False
+ # 处理下班打卡
+ if not self.attendance_id.check_out:
+ values['check_out'] = will_datetime_end
+ values['is_check_out_red'] = True
+ values['is_no_card'] = False
+ elif self.attendance_id.check_out < will_datetime_end:
+ values['check_out'] = will_datetime_end
+ values['is_check_out_red'] = True
+ values['is_early_card'] = False
+ # 应用修改
+ self.attendance_id.write(values)
+
else:
check_in_start = record.attendance_id.shift_id.template_id.check_in_start
check_out_end = record.attendance_id.shift_id.template_id.check_out_end
@@ -48,6 +88,24 @@ class AttendanceCorrectWizard(models.TransientModel):
)
if record.attendance_id.shift_id.template_id.day2 == '次日':
end_datetime = end_datetime + timedelta(days=1)
- record.attendance_id.write(
- {'check_out': end_datetime, 'check_in':start_datetime, 'is_approval': True, 'is_abnormal': False, 'is_no_card': False,
- 'is_early_card': False, 'is_late_card': False, 'absenteeism_card':False})
\ No newline at end of file
+
+ # 处理上班打卡
+ if not self.attendance_id.check_in:
+ values['check_in'] = start_datetime
+ values['is_check_in_red'] = True
+ values['is_no_card'] = False
+ elif self.attendance_id.check_in > start_datetime:
+ values['check_in'] = start_datetime
+ values['is_check_in_red'] = True
+ values['is_late_card'] = False
+ # 处理下班打卡
+ if not self.attendance_id.check_out:
+ values['check_out'] = end_datetime
+ values['is_check_out_red'] = True
+ values['is_no_card'] = False
+ elif self.attendance_id.check_out < end_datetime:
+ values['check_out'] = end_datetime
+ values['is_check_out_red'] = True
+ values['is_early_card'] = False
+ # 应用修改
+ self.attendance_id.write(values)
\ No newline at end of file