Merge pull request !7944 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-01-14 02:21:26 +00:00
committed by Gitee
@@ -123,7 +123,6 @@ class OvertimeApprovals(models.Model):
corrected_end_time = max_allowed_end_time - timedelta(hours=8)
rec.end_time = corrected_end_time
@api.depends('start_time', 'end_time', 'attendance_id', 'rest_start_time', 'rest_end_time')
def _compute_duration(self):
for rec in self:
@@ -132,18 +131,28 @@ class OvertimeApprovals(models.Model):
rec.overtime_hours = 0.0
if not (rec.start_time and rec.end_time):
continue
base_start_time = rec.start_time + timedelta(hours=8) # 基准开始时间(+8小时后)
end_time = rec.end_time + timedelta(hours=8) # 结束时间(+8小时后)
nine_clock = base_start_time.replace(hour=9, minute=0, second=0, microsecond=0)
total_seconds = 0.0
if base_start_time < nine_clock:
morning_end = min(nine_clock, end_time)
total_seconds = (morning_end - base_start_time).total_seconds()
if rec.attendance_id.shift_id:
rel_end_time = rec.attendance_id.shift_id.end_datetime + timedelta(hours=8)
else:
rel_end_time = rec.start_time.replace(hour=18, minute=0, second=0, microsecond=0)
rel_end_time = base_start_time.replace(hour=18, minute=0, second=0, microsecond=0)
rel_end_time = max(rel_end_time, base_start_time)
end_time = rec.end_time + timedelta(hours=8)
rel_end_time = max(rel_end_time, rec.start_time + timedelta(hours=8))
# 只有工作日18点开始算加班
if rec.type_overtime == 'work':
total_seconds = (end_time - rel_end_time).total_seconds()
if end_time > rel_end_time:
total_seconds = (end_time - rel_end_time).total_seconds()
else:
total_seconds = (end_time - (rec.start_time + timedelta(hours=8))).total_seconds()
if end_time > base_start_time:
total_seconds = (end_time - base_start_time).total_seconds()
original_hours = total_seconds / 3600
# 加班起步一小时
@@ -283,6 +292,14 @@ class OvertimeApprovals(models.Model):
elif record.type_overtime == 'holiday':
legal_day = record.duration
start_year = record.start_time.date().year
if record.company_id.name == "天河物管":
valid_date = datetime(start_year + 1, 2, 1).date() + relativedelta(months=1) - relativedelta(days=1)
elif record.company_id.name == "天河粮储":
valid_date = datetime(start_year + 1, 6, 30).date()
else:
valid_date = False
overtime_data = {
'vacation_id': reports_id.id,
'update_type': 'add',
@@ -290,6 +307,7 @@ class OvertimeApprovals(models.Model):
'workflow_record_id': workflow_record_id.id if workflow_record_id else False,
'workday': workday,
'legal_day': legal_day,
'valid_date': valid_date,
'public_holidays': public_holidays,
'update_date': fields.Datetime.now(),
'text': '审批'