!5958 添加功能

Merge pull request !5958 from 李鹏宇/dev_zhou
This commit is contained in:
李鹏宇
2025-10-25 08:10:57 +00:00
committed by Gitee
+32 -21
View File
@@ -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'))):