57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			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.'
 | 
						|
    )
 |