From d27e19409ba1d8fc58fe224f6dfa9b1562ce313d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Thu, 6 Nov 2025 10:05:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/yuthon_vacation_reports.py | 51 ++++++++++++------- yuthon_salary/models/inherit_hr_payslip.py | 3 +- .../models/inherit_hr_payslip_run.py | 4 +- yuthon_salary/wizard/payslip_send_wizard.py | 32 ++++++------ .../wizard/payslip_send_wizard_views.xml | 1 - 5 files changed, 55 insertions(+), 36 deletions(-) diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index 10a1b140b..9f28d9d80 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -389,7 +389,7 @@ class YuthonVacationReports(models.Model): def button_put(self): url = f'https://oa.thtzjt.com/webh5/#/vacation?id={self.id}' we_id = self.env['hr.employee'].search([('id', '=', self.employee_id.id)]).wecom_userid - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='default', user_id='18562027762', title="考勤确认", + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='default', user_id=we_id, title="考勤确认", description=self.employee_id.name + '请确认你的考勤:', url=url, btntxt="详细信息") return { @@ -403,15 +403,25 @@ class YuthonVacationReports(models.Model): } def button_all_put(self): - detail_ids = self.env["yuthon.vacation.reports"].browse(self._context.get('active_ids', self._context.get('active_id'))) + detail_ids = self.env["yuthon.vacation.reports"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) unique_employee_ids = list({detail.employee_id.id for detail in detail_ids if detail.employee_id}) for employee_id in unique_employee_ids: - menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的考勤确认'), ('parent_id', '!=', False)]) - url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance.month.detail&view_type=list&menu_id={menu_id.id}' - we_id = self.env['hr.employee'].search([('id', '=', employee_id)]).wecom_userid - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认", - description=employee_id.name + '请确认你的考勤:', - url=url, btntxt="详细信息") + # 筛选当前员工对应的考勤记录 + employee_details = detail_ids.filtered(lambda d: d.employee_id.id == employee_id) + for detail in employee_details: + url = f'https://oa.thtzjt.com/webh5/#/vacation?id={detail.id}' + we_id = self.env['hr.employee'].browse(employee_id).wecom_userid + if we_id: + self.sudo().env["wecom.apps"].sync_send_message_textcard( + category='attendance', + user_id=we_id, + title="考勤确认", + description=f'{self.env["hr.employee"].browse(employee_id).name} 请确认你的考勤:', + url=url, + btntxt="详细信息" + ) return { 'type': 'ir.actions.client', 'tag': 'display_notification', @@ -423,15 +433,22 @@ class YuthonVacationReports(models.Model): } def attendance_confirmation(self): - for record in self: - employee = self.env['hr.employee'].search([('id', '=', '叶华锋')]) - menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的考勤确认'), ('parent_id', '!=', False)]) - url = f'https://oa.thtzjt.com/webh5/#/vacation?id={self.id}' - we_id = self.env['hr.employee'].search([('id', '=', employee.id)]).wecom_userid - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='default', user_id='18562027762', - title="考勤确认", - description=employee.name + '请确认你的考勤:', - url=url, btntxt="详细信息") + reports = self.env["yuthon.vacation.reports"].search([]) + employee_ids = {report.employee_id for report in reports if report.employee_id} + for employee in employee_ids: + employee_reports = reports.filtered(lambda r: r.employee_id == employee) + for report in employee_reports: + url = f'https://oa.thtzjt.com/webh5/#/vacation?id={report.id}' + we_id = employee.wecom_userid + if we_id: + self.sudo().env["wecom.apps"].sync_send_message_textcard( + category='default', + user_id=we_id, + title="考勤确认", + description=f'{employee.name} 请确认你的考勤:', + url=url, + btntxt="详细信息" + ) def automatic_confirmation(self): for rec in self: diff --git a/yuthon_salary/models/inherit_hr_payslip.py b/yuthon_salary/models/inherit_hr_payslip.py index afd21f693..41e912194 100644 --- a/yuthon_salary/models/inherit_hr_payslip.py +++ b/yuthon_salary/models/inherit_hr_payslip.py @@ -602,7 +602,8 @@ class InheritHrPayslip(models.Model): "view_mode": "form", "target": "new", "context": { - 'default_employee_id': self.employee_id.id + 'default_employee_id': self.employee_id.id, + 'default_payslip_ids': [(6, 0, [self.id])] } } diff --git a/yuthon_salary/models/inherit_hr_payslip_run.py b/yuthon_salary/models/inherit_hr_payslip_run.py index e250f46f4..d7f3eba58 100644 --- a/yuthon_salary/models/inherit_hr_payslip_run.py +++ b/yuthon_salary/models/inherit_hr_payslip_run.py @@ -49,6 +49,7 @@ class InheritHrPayslipRun(models.Model): ]) for slip in run_payslips: employee_list.append(slip.employee_id.id) + payslip_list = run_payslips.ids return { "type": "ir.actions.act_window", @@ -58,7 +59,8 @@ class InheritHrPayslipRun(models.Model): "target": "new", "context": { 'default_employee_ids': employee_list, - 'default_payslip_run_id': self.id + 'default_payslip_run_id': self.id, + 'default_payslip_ids': [(6, 0, payslip_list)] } } diff --git a/yuthon_salary/wizard/payslip_send_wizard.py b/yuthon_salary/wizard/payslip_send_wizard.py index 98ea72252..e2c99a511 100644 --- a/yuthon_salary/wizard/payslip_send_wizard.py +++ b/yuthon_salary/wizard/payslip_send_wizard.py @@ -11,33 +11,33 @@ class PayslipSendWizard(models.Model): name = fields.Char(string='你确定要发送吗?', readonly=1) employee_ids = fields.Many2many('hr.employee', string='员工') payslip_run_id = fields.Many2one('hr.payslip.run', string='工资单') + payslip_ids = fields.Many2many('hr.payslip', string='工资条') + def button_send(self): - self.ensure_one() - for employee_id in self.env['hr.employee'].search([('id', '=', self.employee_id.id)]): - if not employee_id.wecom_userid: - raise UserError("请同步{}的企业微信".format(employee_id.name)) - url = f"https://oa.thtzjt.com/webh5/#/salary?id={employee_id.user_id.id}" + for payslip in self.payslip_ids: + # 获取工资单关联的员工 + employee = payslip.employee_id + if not employee.wecom_userid: + raise UserError(f"请同步{employee.name}的企业微信") + url = f"https://oa.thtzjt.com/webh5/#/salary?id={payslip.id}" self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', - user_id=employee_id.wecom_userid, + user_id=employee.wecom_userid, title="薪资确认", url=url, btntxt="详细信息") def button_all_send(self): - self.ensure_one() - for employee_id in self.env['hr.employee'].search([('id', '=', self.employee_ids.ids)]): - if not employee_id.wecom_userid: - raise UserError("请同步{}的企业微信".format(employee_id.name)) - url = f"https://oa.thtzjt.com/webh5/#/salary?id={employee_id.user_id.id}" + for payslip in self.payslip_ids: + employee = payslip.employee_id + if not employee.wecom_userid: + raise UserError(f"请同步{employee.name}的企业微信") + url = f"https://oa.thtzjt.com/webh5/#/salary?id={payslip.id}" self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', - user_id=employee_id.wecom_userid, + user_id=employee.wecom_userid, title="薪资确认", url=url, btntxt="详细信息") self.payslip_run_id.run_stage = 'issued' - run_payslips = self.env["hr.payslip"].search([ - ('payslip_run_id', '=', self.payslip_run_id.id) - ]) - for slip in run_payslips: + for slip in self.payslip_ids: meal_misunderstanding_fee = slip.meal_misunderstanding_fee overtime_pay = slip.overtime_pay base_salary = slip.base_salary diff --git a/yuthon_salary/wizard/payslip_send_wizard_views.xml b/yuthon_salary/wizard/payslip_send_wizard_views.xml index bad91fc0a..429c4c44a 100644 --- a/yuthon_salary/wizard/payslip_send_wizard_views.xml +++ b/yuthon_salary/wizard/payslip_send_wizard_views.xml @@ -10,7 +10,6 @@ -