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.'
 | |
|     )
 |