考勤机
This commit is contained in:
@@ -13,61 +13,42 @@ class AttendanceIotImportUserWizard(models.TransientModel):
|
||||
def default_get(self, fields_list):
|
||||
# 先调用父类获取各字段的默认值字典
|
||||
res = super(AttendanceIotImportUserWizard, self).default_get(fields_list)
|
||||
# 源考勤机(默认空记录集)
|
||||
source_iot = self.env['attendance.iot']
|
||||
# 入口一:从员工表单按钮进入,context 直接给了源考勤机 id
|
||||
if self.env.context.get('default_source_attendance_iot_id'):
|
||||
# 按 id 取出源考勤机
|
||||
source_iot = self.env['attendance.iot'].browse(
|
||||
self.env.context.get('default_source_attendance_iot_id'))
|
||||
else:
|
||||
# 入口二:从考勤机用户列表勾选进入,取勾选第一条记录所属的源考勤机
|
||||
active_ids = self.env.context.get('active_ids')
|
||||
records = self.env['attendance.iot.user'].browse(active_ids)
|
||||
# 列表里有勾选记录时才取源考勤机
|
||||
if records:
|
||||
source_iot = records[0].attendance_iot_id
|
||||
# 「当前被拷贝考勤机」显示源考勤机
|
||||
res['current_attendance_iot_id'] = source_iot.id
|
||||
# 是否默认带出本公司全部考勤机:
|
||||
# 1)「同步到全部设备」按钮 default_sync_to_all=True
|
||||
# 2) 考勤机用户列表的「批量拷贝」入口(保持原有默认带出行为)
|
||||
sync_to_all = self.env.context.get('default_sync_to_all') or (
|
||||
not self.env.context.get('default_source_attendance_iot_id')
|
||||
and bool(self.env.context.get('active_ids')))
|
||||
if sync_to_all:
|
||||
# 查出源考勤机所属公司的全部考勤机,作为同步目标默认带出(不排除源设备)
|
||||
company_iots = self.env['attendance.iot'].search(
|
||||
[('company_id', '=', source_iot.company_id.id)])
|
||||
res['attendance_iot_ids'] = [(6, 0, company_iots.ids)]
|
||||
# 从上下文中取出列表页勾选的考勤机用户记录 id 列表
|
||||
active_ids = self.env.context.get('active_ids')
|
||||
# 按 id 批量取出被勾选的考勤机用户记录
|
||||
records = self.env['attendance.iot.user'].browse(active_ids)
|
||||
# 取第一条记录,作为被拷贝的源考勤机
|
||||
source_iot = records[0].attendance_iot_id
|
||||
# 查出源考勤机所属公司的全部考勤机,作为同步目标默认带出(不排除源设备)
|
||||
company_iots = self.env['attendance.iot'].search(
|
||||
[('company_id', '=', source_iot.company_id.id)])
|
||||
|
||||
res.update({
|
||||
'current_attendance_iot_id': source_iot.id,
|
||||
'attendance_iot_ids': [(6, 0, company_iots.ids)],
|
||||
})
|
||||
|
||||
return res
|
||||
|
||||
def action_import(self):
|
||||
# 确定要拷贝的考勤机用户记录:
|
||||
# 入口一:从员工表单按钮进入,context 带了员工 id,取该员工的全部考勤机用户记录
|
||||
employee_id = self.env.context.get('default_source_employee_id')
|
||||
if employee_id:
|
||||
records = self.env['attendance.iot.user'].search(
|
||||
[('employee_id', '=', employee_id)])
|
||||
else:
|
||||
# 入口二:从考勤机用户列表勾选进入,取勾选的记录
|
||||
records = self.env['attendance.iot.user'].browse(
|
||||
self.env.context.get('active_ids'))
|
||||
# 按员工去重,避免同一员工重复创建记录
|
||||
employees = records.mapped('employee_id')
|
||||
# 获取用户, employee_id
|
||||
# 根据 attendance_iot_user.employ_id 批量给每个考勤机创建信息
|
||||
# 完成
|
||||
ids = self.env.context.get('active_ids')
|
||||
records = self.env['attendance.iot.user'].browse(ids)
|
||||
values = []
|
||||
for attendance_iot_id in self.attendance_iot_ids:
|
||||
for employee in employees:
|
||||
for record in records:
|
||||
# 去重,已经有的记录不再更新,
|
||||
iot_user = self.env['attendance.iot.user'].search(
|
||||
[('attendance_iot_id','=', attendance_iot_id.id), ('employee_id', '=', employee.id)])
|
||||
[('attendance_iot_id','=', attendance_iot_id.id), ('employee_id', '=', record.employee_id.id)])
|
||||
if iot_user:
|
||||
if not self.is_force_update:
|
||||
continue
|
||||
iot_user.with_context(iot_sync=True).unlink()
|
||||
values.append({
|
||||
'attendance_iot_id': attendance_iot_id.id,
|
||||
'employee_id': employee.id
|
||||
'employee_id': record.employee_id.id
|
||||
})
|
||||
|
||||
self.env['attendance.iot.user'].sudo().create(values)
|
||||
|
||||
Reference in New Issue
Block a user