diff --git a/yuthon_holiday/models/inherit_hr_leave.py b/yuthon_holiday/models/inherit_hr_leave.py index 626360e7c..e22796eea 100644 --- a/yuthon_holiday/models/inherit_hr_leave.py +++ b/yuthon_holiday/models/inherit_hr_leave.py @@ -646,6 +646,8 @@ class HolidaysRequestBatch(models.Model): @api.constrains('is_day', 'is_hour', 'leave_ids', 'hour_leave_ids') def _check_leave_type_and_details(self): """检查请假类型和明细行是否符合要求""" + current_date = fields.Date.today() + vacation_date = current_date VALID_DAILY_HOURS = [2, 4, 6, 8] for record in self: if not record.is_day and not record.is_hour: @@ -673,6 +675,36 @@ class HolidaysRequestBatch(models.Model): raise ValidationError( _(f"第{line.sequence or '一'}条小时请假记录:休假时长必须为 2、4、6 或 8 小时才可以保存!") ) + leave_days = 0.0 + overtime_days = 0.0 + total_annual_leave_days = 0.0 # 年假总天数 + total_compensatory_leave_days = 0.0 # 补休总天数 + for leave_line in record.leave_ids: + if leave_line.holiday_status_id.name == '年假': + total_annual_leave_days += float(leave_line.number_of_days_display or 0) + elif leave_line.holiday_status_id.name == '补休': + total_compensatory_leave_days += float(leave_line.number_of_days_display or 0) + + for hour_leave_line in record.hour_leave_ids: + leave_hours = float(hour_leave_line.leave_hours or 0) + leave_days = leave_hours / 8 + if hour_leave_line.holiday_status_id == '年假': + total_annual_leave_days += leave_days + elif hour_leave_line.holiday_status_id == '补休': + total_compensatory_leave_days += leave_days + + reports_id = self.env['yuthon.vacation.reports'].search( + [('employee_id', '=', record.users_id.employee_ids.id), + ('vacation_date', '=', vacation_date.replace(day=1)) + ], limit=1) + if reports_id: + leave_days = reports_id.leave + overtime_days = reports_id.working_overtime + if total_annual_leave_days > leave_days: + raise UserError('年假天数额度不足,无法请假') + if total_compensatory_leave_days > overtime_days: + raise UserError('补休天数额度不足,无法请假') + @api.onchange('leave_ids', 'hour_leave_ids', 'employee_id') def _onchange_leave_dates(self):