Merge pull request !4262 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-08-03 03:08:02 +00:00
committed by Gitee
+27
View File
@@ -6,12 +6,39 @@ from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
import re
from odoo.tools.misc import format_date
from collections import namedtuple, defaultdict
class HrLeave(models.Model):
_inherit = 'hr.leave'
number_of_days = fields.Float(string='天数', digits=(16, 3))
def _check_validity(self):
sorted_leaves = defaultdict(lambda: self.env['hr.leave'])
for leave in self:
sorted_leaves[(leave.holiday_status_id, leave.date_from.date())] |= leave
for (leave_type, date_from), leaves in sorted_leaves.items():
if leave_type.requires_allocation == 'no':
continue
employees = self.env['hr.employee']
for leave in leaves:
employees |= leave._get_employees_from_holiday_type()
leave_data = leave_type.get_allocation_data(employees, date_from)
if leave_type.allows_negative:
max_excess = leave_type.max_allowed_negative
for employee in employees:
if leave_data[employee] and leave_data[employee][0][1]['virtual_remaining_leaves'] < -max_excess:
raise ValidationError(_("There is no valid allocation to cover that request."))
continue
previous_leave_data = leave_type.with_context(ignored_leave_ids=leaves.ids).get_allocation_data(employees, date_from)
for employee in employees:
previous_emp_data = previous_leave_data[employee] and previous_leave_data[employee][0][1]['virtual_excess_data']
emp_data = leave_data[employee] and leave_data[employee][0][1]['virtual_excess_data']
if not previous_emp_data and not emp_data:
continue
if previous_emp_data != emp_data and len(emp_data) >= len(previous_emp_data):
raise ValidationError("您的假期额度不足,无法申请该假期")
def action_leave_wizard(self):
return {