@@ -64,30 +64,41 @@ class HrAttendance(models.Model):
|
||||
|
||||
def create_attendance_data_holiday(self):
|
||||
"""
|
||||
定时任务create_attendance_data_holiday
|
||||
定时任务create_attendance_data_holiday(处理2025-10-01至2025-10-25的考勤数据)
|
||||
:return:
|
||||
"""
|
||||
att_ids = self.sudo().env['hr.attendance']
|
||||
# 补充假期橙色逻辑,班次逻辑
|
||||
for emp in self.sudo().env['hr.employee'].search([('user_state', '!=', 'withdraw')]):
|
||||
test1 = att_ids.search([('current_data', '=', fields.Date.today()), ('employee_id', '=', emp.id)])
|
||||
resource_user_ids = emp.resource_calendar_id.resource_user_ids.ids
|
||||
is_resource_user = True if emp.id in resource_user_ids else False
|
||||
if not is_resource_user and not test1:
|
||||
slot_start = datetime.combine(fields.Date.today(), datetime.min.time())
|
||||
slot_end = datetime.combine(fields.Date.today() + timedelta(days=1), datetime.min.time())
|
||||
# 查找员工对应的班次
|
||||
planning_slots = self.env['planning.slot'].search([
|
||||
('employee_id', '=', emp.id),
|
||||
('start_datetime', '>=', slot_start),
|
||||
('start_datetime', '<', slot_end),
|
||||
], limit=1)
|
||||
att_ids.create({
|
||||
'employee_id': emp.id,
|
||||
'shift_id': planning_slots.id,
|
||||
'shift_name': planning_slots.display_name,
|
||||
'current_data': fields.Date.today(),
|
||||
})
|
||||
start_date = fields.Date.from_string('2025-10-01') # 起始日期
|
||||
end_date = fields.Date.from_string('2025-10-25') # 结束日期
|
||||
current_date = start_date
|
||||
while current_date <= end_date:
|
||||
for emp in self.sudo().env['hr.employee'].search([('user_state', '!=', 'withdraw')]):
|
||||
# 检查该员工在当前日期是否已有考勤记录
|
||||
existing_attendance = att_ids.search([
|
||||
('current_data', '=', current_date),
|
||||
('employee_id', '=', emp.id)
|
||||
])
|
||||
# 检查员工是否在资源日历的用户列表中
|
||||
resource_user_ids = emp.resource_calendar_id.resource_user_ids.ids
|
||||
is_resource_user = emp.id in resource_user_ids # 简化判断
|
||||
# 如果不是资源用户且无考勤记录,则创建考勤
|
||||
if not is_resource_user and not existing_attendance:
|
||||
slot_start = datetime.combine(current_date, datetime.min.time())
|
||||
slot_end = datetime.combine(current_date + timedelta(days=1), datetime.min.time())
|
||||
|
||||
# 查找该员工当天的班次
|
||||
planning_slot = self.env['planning.slot'].search([
|
||||
('employee_id', '=', emp.id),
|
||||
('start_datetime', '>=', slot_start),
|
||||
('start_datetime', '<', slot_end),
|
||||
], limit=1)
|
||||
att_ids.create({
|
||||
'employee_id': emp.id,
|
||||
'shift_id': planning_slot.id,
|
||||
'shift_name': planning_slot.display_name,
|
||||
'current_data': current_date,
|
||||
})
|
||||
current_date += timedelta(days=1)
|
||||
|
||||
def state_fix(self):
|
||||
for att in self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))):
|
||||
|
||||
Reference in New Issue
Block a user