@@ -450,6 +450,71 @@ class HrAttendance(models.Model):
|
||||
}
|
||||
}
|
||||
|
||||
def ensure_september_records(self):
|
||||
"""
|
||||
确保9月1日至9月23日期间每位员工至少有一条记录
|
||||
若没有则创建一条默认记录
|
||||
"""
|
||||
# 定义日期范围:9月1日至9月23日
|
||||
start_date = fields.Date.from_string('2025-09-01') # 可根据需要修改年份
|
||||
end_date = fields.Date.from_string('2025-09-23')
|
||||
|
||||
# 获取所有员工
|
||||
existing_employees = self.env['hr.employee'].search([
|
||||
('id', 'in', self.search([]).mapped('employee_id.id')) # 仅包含有过记录的员工
|
||||
])
|
||||
if not existing_employees:
|
||||
return
|
||||
|
||||
# 计算日期范围内的所有日期
|
||||
current_date = start_date
|
||||
date_list = []
|
||||
while current_date <= end_date:
|
||||
date_list.append(current_date)
|
||||
current_date += timedelta(days=1)
|
||||
|
||||
# 批量获取已有记录,减少数据库查询
|
||||
existing_records = self.search([
|
||||
('employee_id', 'in', existing_employees.ids),
|
||||
('check_in', '>=', fields.Date.to_string(start_date)),
|
||||
('check_in', '<=', fields.Date.to_string(end_date + timedelta(days=1)))
|
||||
])
|
||||
|
||||
# 按员工ID和日期分组存储已有记录
|
||||
existing_map = {}
|
||||
for record in existing_records:
|
||||
record_date = fields.Date.from_string(record.check_in) if record.check_in else fields.Date.from_string(
|
||||
record.check_out)
|
||||
if not record_date:
|
||||
continue
|
||||
key = (record.employee_id.id, fields.Date.to_string(record_date))
|
||||
existing_map[key] = True
|
||||
|
||||
# 需要创建的记录列表
|
||||
records_to_create = []
|
||||
|
||||
# 检查每个员工在每个日期是否有记录
|
||||
for employee in existing_employees:
|
||||
for date in date_list:
|
||||
date_str = fields.Date.to_string(date)
|
||||
key = (employee.id, date_str)
|
||||
|
||||
# 如果没有记录,则添加到创建列表
|
||||
if key not in existing_map:
|
||||
records_to_create.append({
|
||||
'employee_id': employee.id,
|
||||
'check_in': date_str, # 设置为当天
|
||||
'check_out': False,
|
||||
'is_no_card': False,
|
||||
'is_abnormal': False
|
||||
})
|
||||
|
||||
# 批量创建记录(效率更高)
|
||||
if records_to_create:
|
||||
self.create(records_to_create)
|
||||
self.env.cr.commit() # 可选:立即提交事务
|
||||
|
||||
|
||||
def button_source(self):
|
||||
employee_id = self.employee_id.id
|
||||
current_date = self.current_data
|
||||
|
||||
Reference in New Issue
Block a user