添加功能

This commit is contained in:
李鹏宇
2025-11-04 15:38:04 +08:00
parent b3ec4c76e6
commit 885323da61
2 changed files with 56 additions and 3 deletions
@@ -17,7 +17,7 @@ class YuthonShiftApproval(models.Model):
alternate_id = fields.Many2one('resource.resource', string="顶班对象", domain="[('id', 'in', resource_ids)]")
alternate_shifts = fields.Selection([('transferees', '换班'), ('alternate', '顶班')], string="申请类型" , default='transferees')
shift_date = fields.Date(string="日期")
shift_id = fields.Many2one('planning.slot', string="我的班次", compute='_compute_shift_id')
shift_id = fields.Many2one('planning.slot', string="我的班次")
shift_two_date = fields.Date(string="日期")
shift_two_id = fields.Many2one('planning.slot', string="我的班次")
return_date = fields.Date(string="日期")
@@ -42,6 +42,59 @@ class YuthonShiftApproval(models.Model):
name_title = fields.Char(default=_get_default_name_title)
self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])])
@api.onchange('shift_date', 'resource_id',
'shift_two_date',
'return_date', 'transferees_id', 'alternate_id', 'alternate_shifts',
'return_two_date')
def _onchange_shifts(self):
# 1. 校验并计算"我的班次"
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_id = slot
else:
self.shift_id = False
# 2. 校验并计算"我的第二班次"
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} 没有班次,请重新选择日期!")
self.shift_two_id = slot
else:
self.shift_two_id = False
# 3. 确定对方资源
other_resource = self.transferees_id if self.alternate_shifts == 'transferees' else self.alternate_id
# 4. 校验并计算"对方班次"
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_id = slot
else:
self.return_id = False
# 5. 校验并计算"对方第二班次"
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_id = slot
else:
self.return_two_id = False
def _get_slot(self, resource_id, date):
if not resource_id or not date:
return False
return self.env['planning.slot'].search([
('resource_id', '=', resource_id),
('start_datetime', '>=', f"{date} 00:00:00"),
('end_datetime', '<=', f"{date} 23:59:59")
], limit=1)
@api.onchange('is_issues')
def _onchange_is_issues(self):
if self.is_issues:
@@ -44,7 +44,7 @@
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>>
</div>
<group string="审批事项">
<group>
<field name="name" placeholder="请输入标题"/>
@@ -56,8 +56,8 @@
</group>
</group>
<group string="调替班信息">
<field name="alternate_shifts"/>
<field name="resource_id" domain="[('company_id', '=', company_id)]" options="{'no_create': True, 'no_edit':True}"/>
<field name="alternate_shifts"/>
<field name="alternate_id" invisible="alternate_shifts != 'alternate'"/>
<field name="company_id" invisible="1"/>
<field name="users_id" invisible="1"/>