添加功能

This commit is contained in:
李鹏宇
2025-11-04 18:10:39 +08:00
parent 6d542c48a5
commit 9ba637aa4f
3 changed files with 135 additions and 78 deletions
@@ -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):
@@ -64,53 +64,45 @@
<field name="transferees_id" invisible="alternate_shifts != 'transferees'"/>
<field name="department_id" invisible="1"/>
</group>
<group col="4" invisible="alternate_shifts == 'alternate'" string="班次1">
<group>
<field name="shift_date"/>
</group>
<group>
<field name="shift_id"
context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"/>
</group>
<group/>
<group/>
<group string="班次1" invisible="alternate_shifts == 'alternate'">
<label for="shift_date"/>
<div>
<field name="shift_date" class="oe_inline"/>我的班次:
<field name="shift_id" class="oe_inline" invisible="shift_rest"/>
<field name="shift_rest" class="oe_inline" invisible="shift_id"/>
</div>
</group>
<group col="4">
<group>
<field name="return_date"/>
</group>
<group>
<field name="return_id" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"
/>
</group>
<group/>
<group/>
<label for="return_date"/>
<div>
<field name="return_date" class="oe_inline"/>对方班次:
<field name="return_id" class="oe_inline" invisible="return_rest"/>
<field name="return_rest" class="oe_inline" invisible="return_id"/>
</div>
</group>
<group string="班次2" col="4" invisible="alternate_shifts == 'alternate'">
<group>
<field name="shift_two_date"/>
<field name="return_two_date"/>
</group>
<group>
<field name="shift_two_id"
context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"/>
<field name="return_two_id" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"
<group string="班次2" invisible="alternate_shifts == 'alternate'">
<label for="shift_two_date"/>
<div>
<field name="shift_two_date" class="oe_inline"/>我的班次:
<field name="shift_two_id" class="oe_inline" invisible="shift_two_rest"
context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"
/>
</group>
<group/>
<group/>
<field name="shift_two_rest" class="oe_inline" invisible="shift_two_id"/>
</div>
<label for="return_two_date"/>
<div>
<field name="return_two_date" class="oe_inline"/>对方班次:
<field name="return_two_id" class="oe_inline" invisible="return_two_rest"
context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}" options="{'no_create': True, 'no_edit':True}"
/>
<field name="return_two_rest" class="oe_inline" invisible="return_two_id"/>
</div>
</group>
</sheet>
</form>
@@ -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