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