diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index 9393e71d9..a4088da47 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -66,6 +66,13 @@ class HrAttendance(models.Model): 'domain': [('id', '=', self.workflow_id.id)], } + def compute_attendance_ids(self): + attendance_ids = self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))) + for att in attendance_ids: + now_time = fields.Datetime.to_datetime(att.current_data) + timedelta(hours=8, days=1) + start_time = now_time - timedelta(days=2) + self.env["hr.attendance.detail"].get_hr_attendance_time(att.employee_id, now_time, start_time) + @api.depends('current_data') def _compute_month_status(self): today = fields.Date.today() @@ -135,15 +142,11 @@ class HrAttendance(models.Model): if has_abnormal: if employee.id not in [emp.id for emp in abnormal_employees]: abnormal_employees.append(employee) - for emp in abnormal_employees: url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=list&menu_id={menu_id.id}' - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', - user_id=emp.wecom_userid, - title="打卡异常提醒", - description="您本月有打卡异常".format( - url=url, btntxt="详细信息")) - + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id=emp.wecom_userid, + title="打卡异常提醒", description="您本月有打卡异常", + url=url, btntxt="详细信息") @api.depends('employee_id', 'check_in', 'check_out') def _compute_display_name(self): diff --git a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py index 8b1e6df25..c8d23e5d8 100644 --- a/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py +++ b/yuthon_hr_attendance/models/hr_attendance_detail_wechat.py @@ -86,7 +86,9 @@ class HrAttendanceDetail(models.Model): def create(self, vals_list): res = super(HrAttendanceDetail, self).create(vals_list) employee_id = self.env['hr.employee'].search([('id', '=', vals_list[0]['employee_id'])]) - self.get_hr_attendance_time(employee_id) + now_time = datetime.now() + timedelta(hours=8, days=1) + start_time = now_time - timedelta(days=1) + self.get_hr_attendance_time(employee_id, now_time, start_time) return res # # def write(self, vals): @@ -256,16 +258,13 @@ class HrAttendanceDetail(models.Model): _logger.error('检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data), str(traceback.format_exc()))) - def get_hr_attendance_time(self, employee_id): + def get_hr_attendance_time(self, employee_id, now_time, start_time): """ 获取企业微信打卡数据的核心逻辑 :return: 处理结果 """ # 从用户列表里获取企业微信的用户 # user_list = self._get_wx_attendance_user_list() - now_time = datetime.now() + timedelta(hours=8, days=1) - start_time = now_time - timedelta(days=1) - # 企业微信获取打卡数据,要求用户分组100,分批获取打卡记录 # for userid_limit in self.utils_list_page(user_list, 100): # # 获取企业微信的打卡信息 @@ -302,6 +301,7 @@ class HrAttendanceDetail(models.Model): # employee_list = [emp.name for emp in employee_ids] # user_obj = self.sudo().env['res.users'].search([('name', 'not in', ['Administrator', '李鹏宇'] + employee_list), # ('employee_id.contract_id', '!=', False)]).sorted('id') + user_obj = self.sudo().env['res.users'].search([('id', '=', employee_id.user_id.id)]) # 暂时先用for循环,如果后期加大频率,需改成并发 total_users = len(user_obj)