odoo/ext/custom-addons/hr_holidays_legal_leave/models/hr_employee.py

57 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
# © 2015 iDT LABS (http://www.@idtlabs.sl)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, api, fields, _
from odoo.exceptions import UserError
class HrEmployee(models.Model):
_inherit = 'hr.employee'
@api.multi
def _inverse_remaining_days(self):
self.ensure_one()
legal_leave = self.company_id.legal_holidays_status_id
if not legal_leave:
raise UserError(_('Legal/annual leave type is not defined for '
'your company.'))
diff = self.remaining_leaves - legal_leave.get_days(
self.id)[legal_leave.id]['remaining_leaves']
if diff > 0:
leave = self.env['hr.holidays'].create(
{
'name': 'Allocation for %s' % self.name,
'employee_id': self.id,
'holiday_status_id': legal_leave.id,
'type': 'add',
'holiday_type': 'employee',
'number_of_days_temp': diff
}
)
leave.action_approve()
if leave.double_validation:
leave.action_validate()
elif diff < 0:
raise UserError(_('You cannot reduce validated allocation '
'requests.'))
@api.multi
def _compute_remaining_days(self):
for r in self:
legal_leave = r.company_id.legal_holidays_status_id
if not legal_leave:
raise UserError(_('Legal/annual leave type is not defined for '
'your company.'))
r.remaining_leaves = legal_leave.get_days(
r.id)[legal_leave.id]['remaining_leaves']
remaining_leaves = fields.Integer(
'Remaining Legal Leaves',
compute='_compute_remaining_days',
inverse='_inverse_remaining_days',
help='Total number of legal leaves allocated to this employee. '
'Change this value to create allocation/leave request. '
'Total based on all the leave types without overriding limit.'
)