@@ -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': '审批'
|
||||
|
||||
Reference in New Issue
Block a user