oca-ocb-hr/odoo-bringout-oca-ocb-hr_holidays/hr_holidays/models/hr_employee_public.py
Ernad Husremovic e1d89e11e3 19.0 vanilla
2026-03-09 09:31:00 +01:00

69 lines
2.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import date, timedelta
from odoo import fields, models
class HrEmployeePublic(models.Model):
_inherit = 'hr.employee.public'
leave_manager_id = fields.Many2one(
'res.users', string='Time Off Approver',
compute='_compute_leave_manager', store=True, readonly=False,
domain="[('share', '=', False), ('company_ids', 'in', company_id)]",
help='Select the user responsible for approving "Time Off" of this employee.\n'
'If empty, the approval is done by an Administrator or Approver (determined in settings/users).')
leave_date_to = fields.Date('To Date', compute='_compute_leave_status')
show_leaves = fields.Boolean('Able to see Remaining Time Off', compute='_compute_show_leaves')
is_absent = fields.Boolean('Absent Today', compute='_compute_leave_status', search='_search_absent_employee')
allocation_display = fields.Char(compute='_compute_allocation_display')
allocation_remaining_display = fields.Char(related='employee_id.allocation_remaining_display')
def _compute_show_leaves(self):
self._compute_from_employee('show_leaves')
def _compute_leave_manager(self):
self._compute_from_employee('leave_manager_id')
def _compute_leave_status(self):
self._compute_from_employee(['leave_date_to', 'is_absent'])
def _search_absent_employee(self, operator, value):
if operator != 'in':
return NotImplemented
# This search is only used for the 'Absent Today' filter however
# this only returns employees that are absent right now.
today_start = date.today()
today_end = today_start + timedelta(1)
holidays = self.env['hr.leave'].sudo().search([
('employee_id', '!=', False),
('state', '=', 'validate'),
('date_from', '<', today_end),
('date_to', '>=', today_start),
])
return [('id', 'in', holidays.employee_id.ids)]
def _compute_allocation_display(self):
self._compute_from_employee('allocation_display')
def action_time_off_dashboard(self):
self.ensure_one()
if self.is_user:
return self.employee_id.action_time_off_dashboard()
def action_open_time_off_calendar(self):
"""Open the time off calendar filtered on this employee."""
self.ensure_one()
action = self.env.ref('hr_holidays.action_my_days_off_dashboard_calendar').sudo().read()[0]
action['domain'] = [('employee_id', '=', self.id)]
ctx = ({
'active_employee_id': self.id,
'search_default_employee_id': [self.id],
'search_default_my_leaves': 0,
'search_default_team': 0,
'search_default_current_year': 1,
'hide_employee_name': 1,
})
action['context'] = ctx
return action