48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
| # Copyright 2017-2018 Tecnativa - Pedro M. Baeza
 | |
| # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 | |
| 
 | |
| from odoo import api, fields, models
 | |
| import datetime
 | |
| from dateutil import rrule
 | |
| 
 | |
| 
 | |
| class ResourceCalendar(models.Model):
 | |
|     _inherit = 'resource.calendar'
 | |
| 
 | |
|     def _get_holidays_public_leaves(self, start_dt, end_dt, employe_id):
 | |
|         """Get the public holidays for the current employee and given dates in
 | |
|         the format expected by resource methods.
 | |
| 
 | |
|         :param: start_dt: Initial datetime.
 | |
|         :param: end_dt: End datetime.
 | |
|         :param: employee_id: Employee ID. It can be false.
 | |
|         :return: List of tuples with (start_date, end_date) as elements.
 | |
|         """
 | |
|         leaves = []
 | |
|         for day in rrule.rrule(rrule.YEARLY, dtstart=start_dt, until=end_dt):
 | |
|             lines = self.env['hr.holidays.public'].get_holidays_list(
 | |
|                 day.year, employee_id=employe_id,
 | |
|             )
 | |
|             for line in lines:
 | |
|                 date = fields.Datetime.from_string(line.date)
 | |
|                 leaves.append(
 | |
|                     (datetime.datetime.combine(date, datetime.time.min),
 | |
|                      datetime.datetime.combine(date, datetime.time.max)),
 | |
|                 )
 | |
|         return leaves
 | |
| 
 | |
|     @api.multi
 | |
|     def _get_leave_intervals(self, resource_id=None,
 | |
|                              start_datetime=None, end_datetime=None):
 | |
|         res = super(ResourceCalendar, self)._get_leave_intervals(
 | |
|             resource_id=resource_id,
 | |
|             start_datetime=start_datetime,
 | |
|             end_datetime=end_datetime,
 | |
|         )
 | |
|         if self.env.context.get('exclude_public_holidays'):
 | |
|             res += self._get_holidays_public_leaves(
 | |
|                 start_datetime, end_datetime,
 | |
|                 self.env.context.get('employee_id', False),
 | |
|             )
 | |
|         return res
 |