Merge pull request !6189 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-11-04 10:18:01 +00:00
committed by Gitee
4 changed files with 165 additions and 87 deletions
@@ -179,7 +179,7 @@ class HrLeaveAllocation(models.Model):
def update_vacation(self):
leave_ids = self.env["hr.leave.allocation"].browse(
self._context.get('active_ids', self._context.get('active_id')))
date = datetime(2025, 10, 1) # 修改为你的日期
date = datetime(2025, 11, 1) # 修改为你的日期
for leave in leave_ids:
leave_list = []
compensatory_list = []
@@ -187,6 +187,7 @@ class HrLeaveAllocation(models.Model):
('employee_id', '=', leave.employee_id.id),
('vacation_date', '=', date)
])
other_list = []
if leave.holiday_status_id.name == '年假':
leave_list.append([0, 0, {'vacation_id': reports_id.id,
'update_type': 'add',
@@ -206,11 +207,25 @@ class HrLeaveAllocation(models.Model):
'meal_number': 0,
'text': f"剩余补休"
}])
else:
other_list.append([0, 0, {
'vacation_id': reports_id.id,
'holiday_type': leave.holiday_status_id.id,
'employee_id': leave.employee_id.id,
'update_date': fields.Date.today(),
'update_type': 'add',
'lines': leave.number_of_hours_display,
'text': leave.name
}])
if not reports_id:
reports_id = self.env['yuthon.vacation.reports'].create({
'employee_id': leave.employee_id.id,
'vacation_date': date
})
if reports_id:
reports_id.write({'leave_ids': leave_list})
reports_id.write({'overtime_ids': compensatory_list})
reports_id.write({'leave_ids': leave_list})
reports_id.write({'overtime_ids': compensatory_list})
reports_id.write({'other_fee_ids': other_list})
# def allocation_date(self):
# date = datetime(2025, 1, 1)
# leave_id = self.env['hr.leave.allocation'].search([])
@@ -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):
@@ -49,68 +49,66 @@
<group>
<field name="name" placeholder="请输入标题"/>
<field name="resource_ids" widget="many2many_tags" invisible="1" />
<field name="alternate_shifts"/>
<field name="reason_application"/>
<field name="work_end" invisible="1"/>
<field name="is_issues" invisible="is_issues == False"/>
<field name="documents_ids" widget="preview_many2many"/>
<field name="company_id" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="department_id" invisible="1"/>
</group>
</group>
<group string="调替班信息">
<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"/>
<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>
<group col="4">
<group>
<field name="return_date"/>
<field name="resource_id" domain="[('company_id', '=', company_id)]" options="{'no_create': True, 'no_edit':True}"/>
</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}"
/>
<field name="transferees_id" invisible="alternate_shifts != 'transferees'"/>
<field name="alternate_id" invisible="alternate_shifts != 'alternate'"/>
</group>
<group/>
<group/>
</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="班次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">
<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" 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