@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user