diff --git a/yuthon_holiday/models/inherit_hr_leave_allocation.py b/yuthon_holiday/models/inherit_hr_leave_allocation.py
index 477f5b2d0..2a0642637 100644
--- a/yuthon_holiday/models/inherit_hr_leave_allocation.py
+++ b/yuthon_holiday/models/inherit_hr_leave_allocation.py
@@ -87,8 +87,6 @@ class HrLeaveAllocation(models.Model):
now_type = 'hours'
else:
now_type = 'days'
- self.write({'is_approval': True, 'is_abnormal': False, 'is_no_card': False,
- 'is_early_card': False, 'is_late_card': False})
return {
"type": "ir.actions.act_window",
"name": "修正申请",
@@ -103,6 +101,7 @@ class HrLeaveAllocation(models.Model):
'default_original_hours': self.number_of_days_display,
}
}
+
def all_refuse(self):
leave_ids = self.env["hr.leave.allocation"].browse(
self._context.get('active_ids', self._context.get('active_id')))
diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py
index 431095c1d..7d76e01e3 100644
--- a/yuthon_hr_attendance/models/hr_attendance.py
+++ b/yuthon_hr_attendance/models/hr_attendance.py
@@ -156,40 +156,83 @@ class HrAttendance(models.Model):
def button_correct_approval(self):
for record in self:
- year = record.current_data.year
- month = record.current_data.month
- day = record.current_data.day
- current_date = datetime.today()
- min_hour_from = record.employee_id.resource_id.calendar_id.attendance_ids[0].hour_from
- 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.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
- max_hour_to = record.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.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False })
+ if not record.shift_id:
+ year = record.current_data.year
+ month = record.current_data.month
+ day = record.current_data.day
+ current_date = datetime.today()
+ min_hour_from = record.employee_id.resource_id.calendar_id.attendance_ids[0].hour_from
+ 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.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
+ max_hour_to = record.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.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False })
+ else:
+ check_in_start = record.shift_id.template_id.check_in_start
+ check_out_end = record.shift_id.template_id.check_out_end
+ date = record.current_data
+ start_hour = int(check_in_start)
+ start_minute = int((check_in_start - start_hour) * 60)
+ end_hour = int(check_out_end)
+ end_minute = int((check_out_end - end_hour) * 60)
+ # 拼接成 datetime 对象
+ start_datetime = datetime.combine(date, datetime.min.time()).replace(
+ hour=start_hour, minute=start_minute, second=0, microsecond=0
+ )
+ end_datetime = datetime.combine(date, datetime.min.time()).replace(
+ hour=end_hour, minute=end_minute, second=0, microsecond=0
+ )
+ if record.shift_id.template_id.day2 == '次日':
+ end_datetime = end_datetime + timedelta(days=1)
+ record.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})
def button_batch_correct(self):
attendance_ids = self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id')))
for record in attendance_ids:
- year = record.current_data.year
- month = record.current_data.month
- day = record.current_data.day
- current_date = datetime.today()
- min_hour_from = record.employee_id.resource_id.calendar_id.attendance_ids[0].hour_from
- 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.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
- max_hour_to = record.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.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
+ if not record.shift_id:
+ year = record.current_data.year
+ month = record.current_data.month
+ day = record.current_data.day
+ current_date = datetime.today()
+ min_hour_from = record.employee_id.resource_id.calendar_id.attendance_ids[0].hour_from
+ 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.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
+ max_hour_to = record.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.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False})
+ else:
+ check_in_start = record.shift_id.template_id.check_in_start
+ check_out_end = record.shift_id.template_id.check_out_end
+ date = record.current_data
+ start_hour = int(check_in_start)
+ start_minute = int((check_in_start - start_hour) * 60)
+ end_hour = int(check_out_end)
+ end_minute = int((check_out_end - end_hour) * 60)
+ # 拼接成 datetime 对象
+ start_datetime = datetime.combine(date, datetime.min.time()).replace(
+ hour=start_hour, minute=start_minute, second=0, microsecond=0
+ )
+ end_datetime = datetime.combine(date, datetime.min.time()).replace(
+ hour=end_hour, minute=end_minute, second=0, microsecond=0
+ )
+ if record.shift_id.template_id.day2 == '次日':
+ end_datetime = end_datetime + timedelta(days=1)
+ record.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})
@api.depends('current_data')
def _compute_week(self):
diff --git a/yuthon_hr_attendance/views/hr_attendance_views.xml b/yuthon_hr_attendance/views/hr_attendance_views.xml
index 7b139e859..3aa6f1e6a 100644
--- a/yuthon_hr_attendance/views/hr_attendance_views.xml
+++ b/yuthon_hr_attendance/views/hr_attendance_views.xml
@@ -28,7 +28,7 @@
-
+