该函数逻辑为:
区间考勤明细中有签入和签出时间的日期,去除加班明细中审批状态为done的日期,所得到结果集的总天数。
代码如下:
result = {}
employee_list = [''] + employee_ids
attendance_details = env['hr.attendance.details'].search([('employee_id','in', employee_list), ('clock_in_time', '!=', False), ('clock_out_time', '!=', False), ('title', '>=', start_date), ('title', '<=', end_date)])
attendance_overtime = env['hr.overtime.details'].search([('employee_id','in', employee_list), ('state', '=', 'done'), ('overtime_date', '>=', start_date), ('overtime_date', '<=', end_date)])
attendance_details_dic = {}
if attendance_details:
for attendance_detail in attendance_details:
if attendance_details_dic.get(attendance_detail.employee_id.id, False):
attendance_details_dic[attendance_detail.employee_id.id].append(attendance_detail.title)
else:
attendance_details_dic[attendance_detail.employee_id.id] = [attendance_detail.title]
overtime_details_dic = {}
if attendance_overtime:
for overtime_detail in attendance_overtime:
if overtime_details_dic.get(overtime_detail.employee_id.id, False):
overtime_details_dic[overtime_detail.employee_id.id].append(overtime_detail.overtime_date)
else:
overtime_details_dic[overtime_detail.employee_id.id] = [overtime_detail.overtime_date]
for employee_id in employee_ids:
attendance_details_set = set(attendance_details_dic.get(employee_id, []))
overtime_details_set = set(overtime_details_dic.get(employee_id, []))
result[employee_id]=len(attendance_details_set - overtime_details_set)