From 9ba637aa4f270b575910c149ed3a6aef83e36987 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: Tue, 4 Nov 2025 18:10:39 +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_shift_approval.py | 133 +++++++++++++----- .../views/yuthon_shift_approval_views.xml | 78 +++++----- .../wizard/property_reconciliation_wizard.py | 2 +- 3 files changed, 135 insertions(+), 78 deletions(-) diff --git a/yuthon_hr_attendance/models/yuthon_shift_approval.py b/yuthon_hr_attendance/models/yuthon_shift_approval.py index d6494fb95..3c205305e 100644 --- a/yuthon_hr_attendance/models/yuthon_shift_approval.py +++ b/yuthon_hr_attendance/models/yuthon_shift_approval.py @@ -18,12 +18,16 @@ class YuthonShiftApproval(models.Model): alternate_shifts = fields.Selection([('transferees', '换班'), ('alternate', '顶班')], string="申请类型" , default='transferees') shift_date = fields.Date(string="日期") shift_id = fields.Many2one('planning.slot', string="我的班次") + shift_rest = fields.Char(string="休息") shift_two_date = fields.Date(string="日期") shift_two_id = fields.Many2one('planning.slot', string="我的班次") + shift_two_rest = fields.Char(string="休息") return_date = fields.Date(string="日期") return_id = fields.Many2one('planning.slot', string="对方班次") + return_rest = fields.Char(string="休息") return_two_date = fields.Date(string="日期") return_two_id = fields.Many2one('planning.slot', string="对方班次") + return_two_rest = fields.Char(string="休息") department_id = fields.Many2one('hr.department', string="部门", related='resource_id.employee_id.department_id') resource_ids = fields.Many2many('resource.resource', string="资源用户列表") is_issues = fields.Boolean(string='是否上会') @@ -51,7 +55,9 @@ class YuthonShiftApproval(models.Model): if self.shift_date and self.resource_id: slot = self._get_slot(self.resource_id.id, self.shift_date) if not slot: - raise UserError(f"申请人在 {self.shift_date} 没有班次,请重新选择日期!") + self.shift_rest = '休息' + else: + self.shift_rest = None self.shift_id = slot else: self.shift_id = False @@ -60,7 +66,10 @@ class YuthonShiftApproval(models.Model): if self.shift_two_date and self.resource_id: slot = self._get_slot(self.resource_id.id, self.shift_two_date) if not slot: - raise UserError(f"申请人在 {self.shift_two_date} 没有班次,请重新选择日期!") + if not slot: + self.shift_two_rest = '休息' + else: + self.shift_two_rest = None self.shift_two_id = slot else: self.shift_two_id = False @@ -72,7 +81,9 @@ class YuthonShiftApproval(models.Model): if self.return_date and other_resource: slot = self._get_slot(other_resource.id, self.return_date) if not slot: - raise UserError(f"{other_resource.name} 在 {self.return_date} 没有班次,请重新选择日期!") + self.return_rest = '休息' + else: + self.return_rest = None self.return_id = slot else: self.return_id = False @@ -81,7 +92,9 @@ class YuthonShiftApproval(models.Model): if self.return_two_date and other_resource: slot = self._get_slot(other_resource.id, self.return_two_date) if not slot: - raise UserError(f"{other_resource.name} 在 {self.return_two_date} 没有班次,请重新选择日期!") + self.return_two_rest = '休息' + else: + self.return_two_rest = None self.return_two_id = slot else: self.return_two_id = False @@ -111,36 +124,88 @@ class YuthonShiftApproval(models.Model): }) def button_shift_approval(self): - shift_id = self.shift_id - return_id = self.return_id - shift_two_id = self.shift_two_id - return_two_id = self.return_two_id - start_time= shift_id.start_datetime - end_time = shift_id.end_datetime - role_id = shift_id.role_id - template_id = self.env['planning.slot.template'].search([('id', '=', shift_id.template_id.id)]) - if self.alternate_id: - shift_id.unlink() - self.env['planning.slot'].create({ - 'resource_id':self.alternate_id.id, - 'template_id':template_id.id, - 'start_datetime':start_time, - 'end_datetime':end_time, - 'role_id':role_id.id, - 'allocated_hours':8 - }) - else: - shift_id.write({ - 'template_id': return_id.template_id.id, - }) - shift_two_id.write({ - 'template_id':return_two_id.template_id.id, - }) - return_id.write({ - 'template_id':shift_id.template_id.id, - }) - return_two_id.write({ - 'template_id':return_two_id.template_id.id}) + for record in self: + shift_id = record.shift_id # 申请人原班次 + shift_two_id = record.shift_two_id + return_id = record.return_id # 对方原班次 + return_two_id = record.return_two_id + + # 休息标记(非空即视为需要休息) + self_rest = bool(record.shift_rest) # 申请人第一班次休息 + self_rest_two = bool(record.shift_two_rest) # 申请人第二班次休息 + other_rest = bool(record.return_rest) # 对方第一班次休息 + other_rest_two = bool(record.return_two_rest) # 对方第二班次休息 + + if record.alternate_id: + if shift_id: + shift_id.unlink() + self.env['planning.slot'].create({ + 'resource_id': record.alternate_id.id, + 'template_id': shift_id.template_id.id, + 'start_datetime': shift_id.start_datetime, + 'end_datetime': shift_id.end_datetime, + 'role_id': shift_id.role_id.id, + 'allocated_hours': 8 + }) + else: + # 申请人休息(第一班次) + if self_rest and return_id: + self.env['planning.slot'].create({ + 'resource_id': record.resource_id.id, # 申请人 + 'template_id': return_id.template_id.id, # 对方模板 + 'start_datetime': return_id.start_datetime, + 'end_datetime': return_id.end_datetime, + 'role_id': return_id.role_id.id, + 'allocated_hours': 8, + 'name': f"申请人休息调整:{record.shift_rest}" + }) + return_id.unlink() #删除对方原班次 + + # 申请人休息(第二班次) + if self_rest_two and return_two_id: + self.env['planning.slot'].create({ + 'resource_id': record.resource_id.id, + 'template_id': return_two_id.template_id.id, + 'start_datetime': return_two_id.start_datetime, + 'end_datetime': return_two_id.end_datetime, + 'role_id': return_two_id.role_id.id, + 'allocated_hours': 8, + 'name': f"申请人第二班次休息调整:{record.shift_two_rest}" + }) + return_two_id.unlink() # 删除对方第二班次 + + # 对方休息 + if other_rest and shift_id: + self.env['planning.slot'].create({ + 'resource_id': record.transferees_id.id, # 对方 + 'template_id': shift_id.template_id.id, # 申请人模板 + 'start_datetime': shift_id.start_datetime, + 'end_datetime': shift_id.end_datetime, + 'role_id': shift_id.role_id.id, + 'allocated_hours': 8, + 'name': f"对方休息调整:{record.return_rest}" + }) + shift_id.unlink() # 删除申请人原班次 + + # 对方休息(第二班次) + if other_rest_two and shift_two_id: + self.env['planning.slot'].create({ + 'resource_id': record.transferees_id.id, + 'template_id': shift_two_id.template_id.id, + 'start_datetime': shift_two_id.start_datetime, + 'end_datetime': shift_two_id.end_datetime, + 'role_id': shift_two_id.role_id.id, + 'allocated_hours': 8, + }) + shift_two_id.unlink() # 删除申请人第二班次 + + if not any([self_rest, self_rest_two, other_rest, other_rest_two]): + if shift_id and return_id: + shift_id.write({'template_id': return_id.template_id.id}) + return_id.write({'template_id': shift_id.template_id.id}) + if shift_two_id and return_two_id: + shift_two_id.write({'template_id': return_two_id.template_id.id}) + return_two_id.write({'template_id': shift_two_id.template_id.id}) @api.onchange('resource_id', 'transferees_id', 'alternate_id') def onchange_name(self): diff --git a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml index f4f52e483..f083e28f3 100644 --- a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml +++ b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml @@ -64,53 +64,45 @@ - - - - - - - - - + + - - - - - - - - + - - - - - - - - + diff --git a/yuthon_property_approval/wizard/property_reconciliation_wizard.py b/yuthon_property_approval/wizard/property_reconciliation_wizard.py index 2be60ae09..4a85275d0 100644 --- a/yuthon_property_approval/wizard/property_reconciliation_wizard.py +++ b/yuthon_property_approval/wizard/property_reconciliation_wizard.py @@ -509,7 +509,7 @@ class PropertyReconciliationWizard(models.Model): rec.amount_been_reconciled += line.amount yes_amount += line.amount - rec.bank_id.yes_amount = yes_amount + rec.bank_id.yes_amount = rec.bank_id.yes_amount + yes_amount rec.bank_id.change_amount = sum(line.amount for line in rec.reconciliation_line_ids) all_contracts = self.bank_id.contract_ids