diff --git a/yuthon_holiday/models/yuthon_vacation_reports.py b/yuthon_holiday/models/yuthon_vacation_reports.py index 51ec499a3..7ec4be504 100644 --- a/yuthon_holiday/models/yuthon_vacation_reports.py +++ b/yuthon_holiday/models/yuthon_vacation_reports.py @@ -137,17 +137,13 @@ class VacationLeaveLine(models.Model): update_type= fields.Selection([('add', '增加'), ('reduce', '减少')], string='更新类型') update_date = fields.Date(string='更新时间') allocate_credits = fields.Float(string='分配额度') - is_soon = fields.Boolean(string="流程修改") - is_manual = fields.Boolean(string="手动修改") update_lines = fields.Float(string='更新额度') text = fields.Text(string='备注') @api.model def create(self, vals): - vals['is_manual'] = True return super(VacationLeaveLine, self).create(vals) - class VacationOverline(models.Model): _name = 'vacation.over.line' _description = '加班明细' @@ -158,30 +154,29 @@ class VacationOverline(models.Model): workday = fields.Float(string='工作日') legal_day = fields.Float(string='法定节假日') public_holidays = fields.Float(string='公休日') + meal_number = fields.Integer(string='误餐次数') update_date = fields.Date(string='更新时间') - is_soon = fields.Boolean(string="流程修改") - is_manual = fields.Boolean(string="手动修改") text = fields.Text(string='备注') - @api.model - def create(self, vals): - vals['is_manual'] = True - return super(VacationOverline, self).create(vals) - - def _sync_to_employee(self): - """将数据同步到关联员工""" + def _sync_to_employee(self, reverse=False): + """将数据同步到关联员工 + :param reverse: 是否反向操作(用于删除场景) + """ employee = self.vacation_id.employee_id + employee.meal_number -= self.meal_number + # 根据操作类型确定计算方式 + sign = -1 if reverse else 1 if self.update_type == 'add': employee.write({ - 'normal_overtime_hours': employee.normal_overtime_hours + self.workday, - 'holiday_overtime_hours': employee.holiday_overtime_hours + self.legal_day, - 'weekend_overtime_hours': employee.weekend_overtime_hours + self.public_holidays + 'normal_overtime_hours': employee.normal_overtime_hours + (self.workday * sign), + 'holiday_overtime_hours': employee.holiday_overtime_hours + (self.legal_day * sign), + 'weekend_overtime_hours': employee.weekend_overtime_hours + (self.public_holidays * sign) }) elif self.update_type == 'reduce': employee.write({ - 'normal_overtime_hours': employee.normal_overtime_hours - self.workday, - 'holiday_overtime_hours': employee.holiday_overtime_hours - self.legal_day, - 'weekend_overtime_hours': employee.weekend_overtime_hours - self.public_holidays + 'normal_overtime_hours': employee.normal_overtime_hours - (self.workday * sign), + 'holiday_overtime_hours': employee.holiday_overtime_hours - (self.legal_day * sign), + 'weekend_overtime_hours': employee.weekend_overtime_hours - (self.public_holidays * sign) }) @api.model @@ -190,6 +185,10 @@ class VacationOverline(models.Model): record._sync_to_employee() return record + def unlink(self): + """删除记录时同步扣减员工加班时长""" + self._sync_to_employee(reverse=True) + return super(VacationOverline, self).unlink() class VacationMealLine(models.Model): _name = 'vacation.meal.line' @@ -204,20 +203,31 @@ class VacationMealLine(models.Model): is_manual = fields.Boolean(string="手动修改") text = fields.Text(string='备注') - @api.model def create(self, vals): - vals['is_manual'] = True record = super(VacationMealLine, self).create(vals) record._sync_to_employee() return record - def _sync_to_employee(self): - """将数据同步到关联员工""" - employee = self.vacation_id.employee_id - if self.update_type == 'add': - employee.write({'meal_count': employee.meal_count + int(self.update_lines)}) - elif self.update_type == 'reduce': - employee.write({'meal_count': employee.meal_count - int(self.update_lines)}) + def _sync_to_employee(self, reverse=False): + """将数据同步到关联员工 + :param reverse: 是否反向操作(用于删除场景) + """ + for record in self: + employee = record.vacation_id.employee_id + if not employee: + continue + # 根据操作类型和反向标志计算餐补变化量 + sign = -1 if reverse else 1 + delta = int(record.update_lines) * sign + + if record.update_type == 'add': + employee.write({'meal_count': employee.meal_count + delta}) + elif record.update_type == 'reduce': + employee.write({'meal_count': employee.meal_count - delta}) + + def unlink(self): + self._sync_to_employee(reverse=True) + return super(VacationMealLine, self).unlink() class DetailsTree(models.Model): _name = 'details.tree' diff --git a/yuthon_holiday/views/yuthon_vacation_reports_views.xml b/yuthon_holiday/views/yuthon_vacation_reports_views.xml index c49d7a0e4..aaaaf3e1c 100644 --- a/yuthon_holiday/views/yuthon_vacation_reports_views.xml +++ b/yuthon_holiday/views/yuthon_vacation_reports_views.xml @@ -26,7 +26,7 @@ - + @@ -37,29 +37,30 @@ - + - + - - + +