Merge pull request !5337 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-09-23 12:13:09 +00:00
committed by Gitee
@@ -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