| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/19.0/hr_holidays |
| VERSION | |
| VERSION | 1.6 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo S.A. |
| MAINTAINERS | |
| MAINTAINERS | Odoo S.A. |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, Géry Debongnie, Aaron Bohy, Yannick Tivisse, Pierre Masereel, Adrien Dieudonne, Lucas Perais, Alexandre Kühn, Julien Castiaux, Romeo Fragomeli, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, odoo, Ahmad Khanalizadeh, Didier (did), Abdelouahab (abla), Dossogne Bertrand, luvi, Renaud Thiry, alsh-odoo, Louis Wicket (wil), tsm-odoo, Mylyna Hy, Adrien Widart (awt), Victor Piryns (pivi), Thomas Becquevort (thbe), Levi Siuzdak (sile), Dylan Kiss (dyki), Mayurrajsinh Rathod, Leloup Loïc (lole), Simon Goffaux (sigo), Xavier Bol (xbo), Dawn Hwang, Noe Antoine, omra-odoo, Nicolas Viseur (vin), sesn-odoo, ravb-odoo, Mélanie, Youssef Bashandy, bary, reka-odoo, jugj-odoo, Abderraouf Ghrissi (abgh), Nathaniel (naja), Bastien Fafchamps (bafa), mega, Tanguy Quéguineur, Alex Kühn, Chrysanthe (chgo), asno-odoo, rmun-odoo, aamo-odoo, Mathieu Coutant, Yassin Abdelkarim, kais-odoo, guce, rame-odoo, Abdelrahman Mahmoud (amah), Sanchit Gupta, ahta, Julien Schwanen, st-yes, Chris Duvivier, elhayyany, ayve-odoo, Michaël Mattiello, nikj-odoo, Pierre Pulinckx, Bastien PIERRE, Corentin Heinix (cohe), bona-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), yavy-odoo, Maeva De Keyser (MDEK), nsirjacobs, Gurpreet Singh, pajo, Giorgio Tocco (gito), jayp-odoo, akha, npm, josm-odoo, Bertrand Dossogne, thha-odoo, romc-odoo, kareem, Mongy (abmn), adip-odoo, ksar-odoo, dhka-odoo, Einar Andersen (eian), josv-odoo, path-odoo, Hashem Elmaleeh, assh-odoo, Kevin Gerard (kege), hossamelgendy1, renol-odoo, kuay-odoo, Merlin Guillaume, saurabh, Camila Vives, Abdelouahab Laaroussi (abla), Dilya Anvarbekova, Federico Falcone, Jurgen Gjini, lebm-odoo, karygauss03, Lucas ESTEBAN (lues), dhbr-odoo, Feeedeee, chpa-odoo, Amr Yasser (amry), shmn-odoo, Mohamed Ayman, Kishan (kiga), Faruk Avcı, Joseph Nechleba (jonec), amga-odoo, 3amo-magdy, Kirra Hyde, Devendra Ladhani, adak-ahmed, soukaina tyes, adak(ahmed), Dylan Provoost, Rons, hamza |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/time-off |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 14:10:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - digest - bus - web_tour - html_editor - portal - http_routing - auth_signup - resource - phone_validation - resource_mail - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ======================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_accrual_level_view_form |
hr.leave.accrual.level.form | hr.leave.accrual.level | form | New |
hr_accrual_plan_view_form |
hr.leave.accrual.plan.form | hr.leave.accrual.plan | form | New |
hr_accrual_plan_view_search |
hr.leave.accrual.plan.search | hr.leave.accrual.plan | search | New |
hr_accrual_plan_view_tree |
hr.leave.accrual.plan.list | hr.leave.accrual.plan | list | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_holidays_cancel_leave_form |
hr.holidays.cancel.leave | form | New | |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_generate_multi_wizard_view_form |
hr.leave.allocation.generate.multi.wizard | form | New | |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | div | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager_dashboard |
hr.leave.allocation.view.form.manager.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form_manager |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.list | hr.leave.allocation | list | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.list.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_employee_type_report |
hr.leave.employee.type.report.view.pivot | hr.leave.employee.type.report | pivot | New |
hr_leave_employee_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_generate_multi_wizard_view_form |
hr.leave.generate.multi.wizard | form | New | |
hr_leave_mandatory_day_view_form |
hr.leave.mandatory.day | form | New | |
hr_leave_mandatory_day_view_list |
hr.leave.mandatory.day | list | New | |
hr_leave_mandatory_day_view_search |
hr.leave.mandatory.day | search | New | |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_calendar_view_search |
hr.leave.report.calendar.view.search | hr.leave.report.calendar | search | New |
hr_leave_report_calendar_year_view |
hr.leave.report.calendar.year.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_graph |
report.hr.holidays.report.leave_all.graph | hr.leave.report | graph | New |
hr_leave_report_pivot |
report.hr.holidays.report.leave_all.pivot | hr.leave.report | pivot | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.list | hr.leave.report | list | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | field | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_manager_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard_new_time_off |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | xpath | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_kanban_my |
hr.leave.view.kanban.my | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_kanban |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | field | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_report |
hr.holidays.view.search.report | hr.leave | filter | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.list | hr.leave | list | New |
hr_leave_view_tree_my |
hr.holidays.view.list | hr.leave | xpath | Inherits hr_leave_view_tree |
is_based_on_worked_time_no |
is_based_on_worked_time_no | ir.ui.view | qweb | New |
is_based_on_worked_time_yes |
is_based_on_worked_time_yes | ir.ui.view | qweb | New |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | xpath | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
resource_calendar_leaves_tree_inherit |
resource.calendar.leaves.list.inherit | resource.calendar.leaves | xpath | Inherits resource.resource_calendar_leave_tree |
resource_calendar_leaves_view_search_inherit |
resource.calendar.leaves.search.inherit | resource.calendar.leaves | filter | Inherits resource.view_resource_calendar_leaves_search |
resource_calendar_view_tree |
resource.calendar.view.list.inherit.hr.holidays | resource.calendar | field | Inherits resource.view_resource_calendar_tree |
view_calendar_event_form_inherit |
view.calendar.event.form.inherit | calendar.event | xpath | Inherits calendar.view_calendar_event_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.list.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_list |
hr.holidays.report_list | hr.leave | list | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.list | hr.leave.type | list | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
view_search_hr_holidays_employee_type_report |
hr.holidays.filter | hr.leave.employee.type.report | search | New |
No new fields.
Public methods (0)No public methods.
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
action_open_allocation_department(self)
action_open_leave_department(self)
No new fields.
Public methods (1)action_register_departure(self)
allocation_count
Float
compute='_compute_allocation_count'
groups='hr.group_hr_user'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_remaining_display'
allocation_remaining_display
Char
compute='_compute_allocation_remaining_display'
allocations_count
Integer
compute='_compute_allocation_count'
groups='hr.group_hr_user'
args: 'Total number of allocations'
current_leave_id
Many2one → hr.leave.type
compute='_compute_current_leave'
groups='hr.group_hr_user'
string='Current Time Off Type'
args: 'hr.leave.type'
current_leave_state
Selection
compute='_compute_leave_status'
groups='hr.group_hr_user'
selection=[('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
groups='hr.group_hr_user'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
domain="[('share', '=', False), ('company_ids', 'in', company_id)]"
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off Approver'
args: 'res.users'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
action_time_off_dashboard(self)
create(self, vals_list)
get_allocation_requests_amount(self)
get_mandatory_days(self, start_date, end_date)
get_mandatory_days_data(self, date_start, date_end)
get_public_holidays_data(self, date_start, date_end)
get_special_days_data(self, date_start, date_end)
get_time_off_dashboard_data(self, target_date=None)
write(self, vals)
allocation_display
Char
compute='_compute_allocation_display'
allocation_remaining_display
Char
related='employee_id.allocation_remaining_display'
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
domain="[('share', '=', False), ('company_ids', 'in', company_id)]"
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off Approver'
args: 'res.users'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
action_open_time_off_calendar(self)
action_time_off_dashboard(self)
leave_id
Many2one → hr.leave
required=True
string='Time Off Request'
args: 'hr.leave'
reason
Text
action_cancel_leave(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
active_employee
Boolean
related='employee_id.active'
string='Employee Active'
attachment_ids
One2many → ir.attachment
string='Attachments'
args: 'ir.attachment', 'res_id'
can_approve
Boolean
compute='_compute_can_approve'
export_string_translation=False
can_back_to_approve
Boolean
compute='_compute_can_back_to_approve'
export_string_translation=False
can_cancel
Boolean
compute='_compute_can_cancel'
export_string_translation=False
can_refuse
Boolean
compute='_compute_can_refuse'
export_string_translation=False
can_validate
Boolean
compute='_compute_can_validate'
export_string_translation=False
color
Integer
related='holiday_status_id.color'
args: 'Color'
company_id
Many2one → res.company
compute='_compute_company_id'
store=True
args: 'res.company'
dashboard_warning_message
Char
compute='_compute_dashboard_warning_message'
date_from
Datetime
compute='_compute_date_from_to'
index=True
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
store=True
args: 'Requested'
employee_company_id
Many2one
related='employee_id.company_id'
store=True
string='Employee Company'
employee_id
Many2one → hr.employee
default=<expr>
domain=<expr>
index=True
ondelete='restrict'
required=True
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
has_mandatory_day
Boolean
compute='_compute_has_mandatory_day'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain="[\n '|',\n ('requires_allocation', '=', False),\n ('has_valid_allocation', '=', True),\n ]"
readonly=False
required=True
store=True
string='Time Off Type'
tracking=True
args: 'hr.leave.type'
holiday_status_requires_allocation
Boolean
related='holiday_status_id.requires_allocation'
is_hatched
Boolean
compute='_compute_is_hatched'
args: 'Hatched'
is_striked
Boolean
compute='_compute_is_hatched'
args: 'Striked'
last_several_days
Boolean
compute='_compute_last_several_days'
args: 'All day'
leave_type_increases_duration
Char
compute='_compute_leave_type_increases_duration'
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
leave_type_support_document
Boolean
related='holiday_status_id.support_document'
max_leaves
Float
compute='_compute_leaves'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
name
Char
compute='_compute_description'
compute_sudo=False
copy=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_duration'
help='Number of days of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Days)'
number_of_hours
Float
compute='_compute_duration'
help='Number of hours of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Hours)'
private_name
Char
groups='hr_holidays.group_hr_holidays_responsible'
args: 'Time Off Description'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_date_to_period
Selection
default='pm'
string='Date Period End'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_hour_from
Float
compute='_compute_request_hour_from_to'
readonly=False
store=True
string='Hour from'
request_hour_to
Float
compute='_compute_request_hour_from_to'
readonly=False
store=True
string='Hour to'
request_unit_half
Boolean
compute='_compute_request_unit_half'
store=True
args: 'Half-Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
store=True
args: 'Specific Time'
resource_calendar_id
Many2one → resource.calendar
compute='_compute_resource_calendar_id'
copy=False
readonly=False
store=True
args: 'resource.calendar'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
readonly=False
store=True
string='Status'
tracking=True
args: [('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
supported_attachment_ids
Many2many → ir.attachment
compute='_compute_supported_attachment_ids'
inverse='_inverse_supported_attachment_ids'
string='Attach File'
args: 'ir.attachment'
supported_attachment_ids_count
Integer
compute='_compute_supported_attachment_ids'
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
index=True
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
virtual_remaining_leaves
Float
compute='_compute_leaves'
string='Available Time Off'
action_approve(self, check_state=True)
action_back_to_approval(self)
action_cancel(self)
action_documents(self)
action_refuse(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
open_pending_requests(self)
unlink(self)
write(self, vals)
accrual_plan_id
Many2one → hr.leave.accrual.plan
default=<expr>
index=True
ondelete='cascade'
required=True
args: 'hr.leave.accrual.plan', 'Accrual Plan'
accrual_validity
Boolean
compute='_compute_accrual_validity'
export_string_translation=False
readonly=False
store=True
accrual_validity_count
Integer
default='1'
export_string_translation=False
help='You can define a period of time where the days carried over will be available'
accrual_validity_type
Selection
default='day'
export_string_translation=False
help='This field defines the unit of time after which the accrual ends.'
required=True
args: [('day', 'Days'), ('month', 'Months')]
accrued_gain_time
Selection
export_string_translation=False
related='accrual_plan_id.accrued_gain_time'
action_with_unused_accruals
Selection
compute='_compute_action_with_unused_accruals'
default='lost'
export_string_translation=False
help="When the Carry-Over Time is reached, according to Plan's setting, select what you want to happen with the unused time off: Lost (time will be reset to zero), Carried over (accrued time carried over to the next period.)"
required=True
store=True
args: [('lost', 'Lost'), ('all', 'Carried over')]
added_value
Float
default=1
digits=(16, 5)
export_string_translation=False
required=True
added_value_type
Selection
compute='_compute_added_value_type'
export_string_translation=False
inverse='_inverse_added_value_type'
precompute=True
readonly=False
required=True
store=True
args: [('day', 'Day(s)'), ('hour', 'Hour(s)')]
can_be_carryover
Boolean
export_string_translation=False
readonly=True
related='accrual_plan_id.can_be_carryover'
can_modify_value_type
Boolean
compute='_compute_can_modify_value_type'
default=False
export_string_translation=False
cap_accrued_time
Boolean
export_string_translation=False
help='When the field is checked the balance of an allocation using this accrual plan will never exceed the specified amount.'
cap_accrued_time_yearly
Boolean
export_string_translation=False
help='When the field is checked the total amount accrued each year will be capped at the specified amount'
readonly=False
store=True
carryover_options
Selection
compute='_compute_carryover_options'
default='unlimited'
export_string_translation=False
help='You can limit the accrued time carried over for the next period.'
readonly=False
required=True
store=True
args: [('unlimited', 'Unlimited'), ('limited', 'Up to')]
first_day
Selection
default='1'
export_string_translation=False
args: _get_selection_days
first_month
Selection
default='1'
export_string_translation=False
args: [('1', 'January'), ('2', 'February'), ('3', 'March'), ('4', 'April'), ('5', 'May'), ('6', 'June')]
first_month_day
Selection
compute='_compute_first_month_day'
default='1'
export_string_translation=False
readonly=False
store=True
args: _get_selection_days
frequency
Selection
default='daily'
required=True
string='Frequency'
args: [('hourly', 'Hourly'), ('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a month'), ('monthly', 'Monthly'), ('biyearly', 'Twice a year'), ('yearly', 'Yearly')]
maximum_leave
Float
compute='_compute_maximum_leave'
default=0
digits=(16, 2)
export_string_translation=False
help='Choose a cap for this accrual.'
readonly=False
store=True
maximum_leave_yearly
Float
digits=(16, 2)
export_string_translation=False
milestone_date
Selection
compute='_compute_milestone_date'
default='creation'
export_string_translation=False
inverse='_inverse_milestone_date'
readonly=False
required=True
store=True
args: [('creation', 'At allocation creation'), ('after', 'After')]
postpone_max_days
Integer
export_string_translation=False
help='Set a maximum of accruals an allocation keeps at the end of the year.'
second_day
Selection
default='15'
export_string_translation=False
args: _get_selection_days
second_month
Selection
default='7'
export_string_translation=False
args: [('7', 'July'), ('8', 'August'), ('9', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')]
second_month_day
Selection
compute='_compute_second_month_day'
default='1'
export_string_translation=False
readonly=False
store=True
args: _get_selection_days
sequence
Integer
compute='_compute_sequence'
help='Sequence is generated automatically by start time delta.'
store=True
string='sequence'
start_count
Integer
export_string_translation=False
help='The accrual starts after a defined period from the allocation start date. This field defines the number of days, months or years after which accrual is used.'
start_type
Selection
default='day'
export_string_translation=False
help='This field defines the unit of time after which the accrual starts.'
required=True
args: [('day', 'Days'), ('month', 'Months'), ('year', 'Years')]
week_day
Selection
default='0'
required=True
string='Allocation on'
args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')]
yearly_day
Selection
compute='_compute_yearly_day'
default='1'
export_string_translation=False
readonly=False
store=True
args: _get_selection_days
yearly_month
Selection
default='1'
export_string_translation=False
args: [('1', 'January'), ('2', 'February'), ('3', 'March'), ('4', 'April'), ('5', 'May'), ('6', 'June'), ('7', 'July'), ('8', 'August'), ('9', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')]
action_save_new(self)
accrued_gain_time
Selection
default='end'
export_string_translation=False
required=True
args: [('start', 'At the start of the accrual period'), ('end', 'At the end of the accrual period')]
active
Boolean
default=True
added_value_type
Selection
default='day'
export_string_translation=False
store=True
args: [('day', 'Days'), ('hour', 'Hours')]
allocation_ids
One2many → hr.leave.allocation
export_string_translation=False
args: 'hr.leave.allocation', 'accrual_plan_id'
can_be_carryover
Boolean
export_string_translation=False
carryover_date
Selection
default='year_start'
export_string_translation=False
required=True
string='Carry-Over Time'
args: [('year_start', 'At the start of the year'), ('allocation', 'At the allocation date'), ('other', 'Custom date')]
carryover_day
Selection
compute='_compute_carryover_day'
default='1'
export_string_translation=False
readonly=False
store=True
args: _get_selection_days
carryover_month
Selection
default=<expr>
export_string_translation=False
args: [('1', 'January'), ('2', 'February'), ('3', 'March'), ('4', 'April'), ('5', 'May'), ('6', 'June'), ('7', 'July'), ('8', 'August'), ('9', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')]
company_id
Many2one → res.company
compute='_compute_company_id'
domain=<expr>
readonly=False
store='True'
string='Company'
args: 'res.company'
employees_count
Integer
compute='_compute_employee_count'
args: 'Employees'
is_based_on_worked_time
Boolean
compute='_compute_is_based_on_worked_time'
export_string_translation=False
help='Only excludes requests where the time off type is set as unpaid kind of.'
readonly=False
store=True
level_count
Integer
compute='_compute_level_count'
args: 'Levels'
level_ids
One2many → hr.leave.accrual.level
copy=True
string='Milestones'
args: 'hr.leave.accrual.level', 'accrual_plan_id'
name
Char
required=True
args: 'Name'
show_transition_mode
Boolean
compute='_compute_show_transition_mode'
export_string_translation=False
time_off_type_id
Many2one → hr.leave.type
check_company=True
help='Specify if this accrual plan can only be used with this Time Off Type.\n Leave empty if this accrual plan can be used with any Time Off Type.'
index='btree_not_null'
string='Time Off Type'
args: 'hr.leave.type'
transition_mode
Selection
default='immediately'
export_string_translation=False
required=True
args: [('immediately', 'Immediately'), ('end_of_accrual', "After this accrual's period")]
action_create_accrual_plan_level(self)
action_open_accrual_plan_employees(self)
action_open_accrual_plan_level(self, level_id)
copy_data(self, default=None)
create(self, vals_list)
accrual_plan_id
Many2one → hr.leave.accrual.plan
compute='_compute_accrual_plan_id'
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
index='btree_not_null'
inverse='_inverse_accrual_plan_id'
readonly=False
store=True
tracking=True
args: 'hr.leave.accrual.plan'
active_employee
Boolean
readonly=True
related='employee_id.active'
args: 'Active Employee'
actual_lastcall
Date
export_string_translation=False
allocation_type
Selection
default='regular'
readonly=True
required=True
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
already_accrued
Boolean
approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_refuse
Boolean
compute='_compute_can_refuse'
args: 'Can Refuse'
can_validate
Boolean
compute='_compute_can_validate'
args: 'Can Validate'
carried_over_days_expiration_date
Date
date_from
Date
copy=False
default=fields.Date.context_today
index=True
required=True
tracking=True
args: 'Start Date'
date_to
Date
copy=False
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
default=<expr>
domain=_domain_employee_id
index=True
ondelete='restrict'
required=True
string='Employee'
tracking=True
args: 'hr.employee'
expiring_carryover_days
Float
holiday_status_id
Many2one → hr.leave.type
compute='_compute_holiday_status_id'
default=_default_holiday_status_id
domain=_domain_holiday_status_id
readonly=False
required=True
store=True
string='Time Off Type'
args: 'hr.leave.type'
is_name_custom
Boolean
readonly=True
store=False
is_officer
Boolean
compute='_compute_is_officer'
last_executed_carryover_date
Date
export_string_translation=False
lastcall
Date
readonly=True
args: 'Date of the last accrual allocation'
leaves_taken
Float
compute='_compute_leaves'
string='Time off Taken'
manager_id
Many2one → hr.employee
compute='_compute_manager_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
name
Char
compute='_compute_description'
compute_sudo=False
readonly=False
store=True
string='Description'
name_validity
Char
compute='_compute_description_validity'
args: 'Description with validity'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
default_export_compatible=True
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
store=True
args: 'Duration (hours)'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help="The status is 'To Approve', when an allocation request is created.\nThe status is 'Refused', when an allocation request is refused by manager.\nThe status is 'Approved', when an allocation request is approved by manager."
readonly=True
string='Status'
tracking=True
args: [('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type_request_unit
Selection
compute='_compute_type_request_unit'
args: [('hour', 'Hours'), ('half_day', 'Half-Day'), ('day', 'Day')]
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
virtual_remaining_leaves
Float
compute='_compute_leaves'
string='Available Time Off'
yearly_accrued_amount
Float
export_string_translation=False
action_approve(self)
action_refuse(self)
activity_update(self)
add_follower(self, employee_id)
copy(self, default=None)
create(self, vals_list)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
write(self, vals)
accrual_plan_id
Many2one → hr.leave.accrual.plan
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
args: 'hr.leave.accrual.plan'
allocation_mode
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
allocation_type
Selection
default='regular'
required=True
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Based on Accrual Plan')]
category_id
Many2one → hr.employee.category
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
date_from
Date
default=fields.Date.context_today
required=True
args: 'Start Date'
date_to
Date
department_id
Many2one → hr.department
duration
Float
string='Allocation'
employee_ids
Many2many → hr.employee
domain=<expr>
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain=_domain_holiday_status_id
required=True
string='Time Off Type'
args: 'hr.leave.type'
name
Char
compute='_compute_name'
readonly=False
store=True
args: 'Description'
notes
Text
request_unit
Selection
related='holiday_status_id.request_unit'
action_generate_allocations(self)
active_employee
Boolean
readonly=True
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status
Selection
leave_type
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
number_of_days
Float
aggregator='sum'
readonly=True
args: 'Number of Days'
number_of_hours
Float
aggregator='sum'
readonly=True
args: 'Number of Hours'
state
Selection
readonly=True
string='Status'
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
allocation_mode
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
category_id
Many2one → hr.employee.category
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
date_from
Date
required=True
args: 'Start Date'
date_to
Date
required=True
args: 'End Date'
department_id
Many2one → hr.department
employee_ids
Many2many → hr.employee
domain=<expr>
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain="[('company_id', 'in', [company_id, False])]"
required=True
string='Time Off Type'
args: 'hr.leave.type'
name
Char
action_generate_time_off(self)
color
Integer
default=<expr>
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
department_ids
Many2many → hr.department
string='Departments'
args: 'hr.department'
end_date
Date
required=True
job_ids
Many2many → hr.job
string='Job Position'
args: 'hr.job'
name
Char
required=True
resource_calendar_id
Many2one → resource.calendar
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'resource.calendar', 'Working Hours'
start_date
Date
required=True
No public methods.
allocation_id
Many2one → hr.leave.allocation
readonly=True
string='Allocation Request'
args: 'hr.leave.allocation'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
leave_id
Many2one → hr.leave
readonly=True
string='Time Off Request'
args: 'hr.leave'
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
number_of_hours
Float
readonly=True
args: 'Number of Hours'
state
Selection
readonly=True
string='Status'
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_open_record(self)
init(self)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
department_id
Many2one → hr.department
readonly=True
args: 'hr.department'
description
Char
groups='hr_holidays.group_hr_holidays_user'
readonly=True
args: 'Description'
duration
Float
readonly=True
string='Duration'
duration_display
Char
readonly=True
related='leave_id.duration_display'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
groups='hr_holidays.group_hr_holidays_user'
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
is_absent
Boolean
related='employee_id.is_absent'
is_hatched
Boolean
readonly=True
args: 'Hatched'
is_manager
Boolean
compute='_compute_is_manager'
args: 'Manager'
is_striked
Boolean
readonly=True
args: 'Striked'
job_id
Many2one → hr.job
readonly=True
args: 'hr.job'
leave_id
Many2one → hr.leave
comodel_name='hr.leave'
groups='hr_holidays.group_hr_holidays_user'
readonly=True
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
member_of_department
Boolean
related='employee_id.member_of_department'
name
Char
compute='_compute_name'
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
user_id
Many2one → res.users
readonly=True
args: 'res.users'
action_approve(self)
action_refuse(self)
get_unusual_days(self, date_from, date_to=None)
init(self)
accrual_count
Float
compute='_compute_accrual_count'
string='Accruals count'
accruals_ids
One2many → hr.leave.accrual.plan
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_count
Integer
compute='_compute_allocation_count'
string='Allocations'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_validation_type
Selection
default='hr'
help="Select the level of approval needed in case of request by employee\n # - No validation needed: The employee's request is automatically approved.\n # - Approved by Time Off Officer: The employee's request need to be manually approved\n # by the Time Off Officer, Employee's Approver or both."
string='Approval'
args: [('no_validation', 'None needed'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
allow_request_on_top
Boolean
default=False
help='If checked, users can request another leave on top of the ones of this type.'
string='Allow Request on Top'
allows_negative
Boolean
help='If checked, users request can exceed the allocated days and balance can go in negative.'
string='Allow Negative Cap'
color
Integer
help='The color selected here will be used in every screen with the time off type.'
string='Color'
company_id
Many2one → res.company
domain=<expr>
string='Company'
args: 'res.company'
country_code
Char
depends=['country_id']
readonly=True
related='country_id.code'
country_id
Many2one → res.country
compute='_compute_country_id'
default=<expr>
domain=<expr>
store=True
string='Country'
args: 'res.country'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
elligible_for_accrual_rate
Boolean
compute='_compute_eligible_for_accrual_rate'
help='If checked, this time off type will be taken into account for accruals computation.'
readonly=False
store=True
string='Eligible for Accrual Rate'
employee_requests
Boolean
default=False
help='Extra Days Requests Allowed: User can request an allocation for himself.\n\n Not Allowed: User cannot request an allocation.'
required=True
string='Allow Employee Requests'
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
has_valid_allocation
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
hide_on_dashboard
Boolean
default=False
help='Non-visible allocations can still be selected when taking a leave, but will simply not be displayed on the leave dashboard.'
string='Hide On Dashboard'
icon_id
Many2one → ir.attachment
domain="[('res_model', '=', 'hr.leave.type'), ('res_field', '=', 'icon_id')]"
string='Cover Image'
args: 'ir.attachment'
include_public_holidays_in_duration
Boolean
default=False
help='Public holidays should be counted in the leave duration when applying for leaves'
args: 'Ignore Public Holidays'
is_used
Boolean
compute='_compute_is_used'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Time Off Validation'
args: [('no_validation', 'None needed'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_allowed_negative
Integer
help='Define the maximum level of negative days this kind of time off can reach. Value must be at least 1.'
string='Maximum Excess Amount'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
request_unit
Selection
default='day'
required=True
string='Duration Type'
args: [('day', 'Day'), ('half_day', 'Half-Day'), ('hour', 'Hours')]
requires_allocation
Boolean
default=True
required=True
string='Requires allocation'
responsible_ids
Many2many → res.users
domain=<expr>
help='Choose the Time Off Officers who will be notified to approve allocation or Time Off Request. If empty, nobody will be notified'
string='Notify HR'
args: 'res.users', 'hr_leave_type_res_users_rel', 'hr_leave_type_id', 'res_users_id'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
support_document
Boolean
string='Supporting Document'
time_type
Selection
default='leave'
help="The distinction between working time (ex. Attendance) and absence (ex. Training) will be used in the computation of Accrual's plan rate."
string='Kind of Time Off'
args: [('other', 'Worked Time'), ('leave', 'Absence')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_accrual_plans(self)
action_see_days_allocated(self)
action_see_group_leaves(self)
check_allocation_requirement_edit_validity(self)
copy_data(self, default=None)
get_allocation_data(self, employees, target_date=None)
get_allocation_data_request(self, target_date=None, hidden_allocations=True)
has_accrual_allocation(self)
requested_display_name(self)
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
leave_date_to
Date
compute='_compute_leave_date_to'
No public methods.
leave_date_to
Date
related='employee_id.leave_date_to'
SELF_READABLE_FIELDS(self)
create(self, vals_list)
associated_leaves_count
Integer
compute='_compute_associated_leaves_count'
args: 'Time Off Count'
No public methods.
elligible_for_accrual_rate
Boolean
default=False
help='If checked, this time off type will be taken into account for accruals computation.'
string='Eligible for Accrual Rate'
holiday_id
Many2one → hr.leave
string='Time Off Request'
args: 'hr.leave'
create(self, vals_list)
unlink(self)
write(self, vals)
leave_date_to
Date
related='user_id.leave_date_to'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/18.0/hr_holidays |
| VERSION | |
| VERSION | 1.6 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Odoo Online, Pierre Masereel, Christophe Monniez, Jorge Pinna Puissant, Alexandre Kühn, Xavier-Do, Romeo Fragomeli, Sébastien Theys, Florent de Labarre, Julien Mougenot, Samuel Degueldre, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, William Braeckman, odoo, roen-odoo, Ahmad Khanalizadeh, sofiagvaladze, Didier (did), Abdelouahab (abla), Aurelien van Delft (avd), Dossogne Bertrand, Vincent Larcin, Thomas Lefebvre (thle), alsh-odoo, Gaetan Vanden Bergh (gavb), Louis Wicket (wil), tsm-odoo, Mylyna Hy, Victor Piryns (pivi), Yash Vaishnav, Thomas Becquevort (thbe), amdi-odoo, Pierre-Yves Dufays, Levi Siuzdak (sile), Dylan Kiss (dyki), Nguyen Viet Phuong, Rahul Prajapati, Leloup Loïc (lole), Simon Goffaux (sigo), Hugo Carlier (Huca), Xavier Bol (xbo), Brieuc-brd, Sarah Bellefroid, Dawn Hwang, omra-odoo, Andrzej(pian), kdeb@odoo.com, ravb-odoo, Mattis Megevand, Mélanie, Youssef Bashandy, bary, Maryam Kia, reka-odoo, Flotchet, jugj-odoo, vava-odoo, Julien Carion (juca), mega, Tanguy Quéguineur, Alex Kühn, Ahmad (khah), Chrysanthe (chgo), sami odoo, Louis (wil), asno-odoo, mano-odoo, Mathieu Coutant, Yassin Abdelkarim, kais-odoo, rame-odoo, Kacper Gasior, Rob Coekaerts, Abdelrahman Mahmoud (amah), Sanchit Gupta, sapp-odoo, Sina Chaichi Maleki (cmsi), Pierre Pulinckx (PIPU), ahta, Julien Schwanen, st-yes, Chris Duvivier, elhayyany, ayve-odoo, Pierre Pulinckx (pipu), laro-odoo, Pierre Pulinckx, Bastien PIERRE, Corentin Heinix (cohe), sura-odoo, kusi-odoo, bona-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), yavy-odoo, Hazem Ibrahim, Guillaume V, Maeva De Keyser (MDEK), Ester Andreetto, nsirjacobs, pajo, Giorgio Tocco (gito), jayp-odoo, bsra-odoo, akha, npm, josm-odoo, Bertrand Dossogne, thha-odoo, romc-odoo, kareem, KAEI, Mongy (abmn), adip-odoo, Einar Andersen (eian), josv-odoo, path-odoo, Amr Elkhatieb, arpr-odoo, saurabh, Dilya Anvarbekova, Federico Falcone, Abdelrahman-Hanafy, Jurgen Gjini, lebm-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/time-off |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 20:13:49 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - digest - bus - web_tour - html_editor - portal - web_editor - http_routing - auth_signup - resource - phone_validation - resource_mail - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ===================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_accrual_level_view_form |
hr.leave.accrual.level.form | hr.leave.accrual.level | form | New |
hr_accrual_plan_view_form |
hr.leave.accrual.plan.form | hr.leave.accrual.plan | form | New |
hr_accrual_plan_view_search |
hr.leave.accrual.plan.search | hr.leave.accrual.plan | search | New |
hr_accrual_plan_view_tree |
hr.leave.accrual.plan.list | hr.leave.accrual.plan | list | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_holidays_cancel_leave_form |
hr.holidays.cancel.leave | form | New | |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_generate_multi_wizard_view_form |
hr.leave.allocation.generate.multi.wizard | form | New | |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | field | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager_dashboard |
hr.leave.allocation.view.form.manager.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form_manager |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.list | hr.leave.allocation | list | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.list.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_employee_type_report |
hr.leave.employee.type.report.view.pivot | hr.leave.employee.type.report | pivot | New |
hr_leave_employee_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_generate_multi_wizard_view_form |
hr.leave.generate.multi.wizard | form | New | |
hr_leave_mandatory_day_view_form |
hr.leave.mandatory.day | form | New | |
hr_leave_mandatory_day_view_list |
hr.leave.mandatory.day | list | New | |
hr_leave_mandatory_day_view_search |
hr.leave.mandatory.day | search | New | |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_calendar_view_search |
hr.leave.report.calendar.view.search | hr.leave.report.calendar | search | New |
hr_leave_report_graph |
report.hr.holidays.report.leave_all.graph | hr.leave.report | graph | New |
hr_leave_report_pivot |
report.hr.holidays.report.leave_all.pivot | hr.leave.report | pivot | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.list | hr.leave.report | list | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | xpath | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_kanban_approve_department |
hr.leave.view.kanban.approve.department | hr.leave | xpath | Inherits hr_leave_view_kanban |
hr_leave_view_kanban_my |
hr.leave.view.kanban.my | hr.leave | field | Inherits hr_leave_view_kanban |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | field | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_report |
hr.holidays.view.search.report | hr.leave | filter | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.list | hr.leave | list | New |
hr_leave_view_tree_my |
hr.holidays.view.list | hr.leave | xpath | Inherits hr_leave_view_tree |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | xpath | Inherits hr.res_users_view_form_profile |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | xpath | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
resource_calendar_leaves_tree_inherit |
resource.calendar.leaves.list.inherit | resource.calendar.leaves | xpath | Inherits resource.resource_calendar_leave_tree |
resource_calendar_leaves_view_search_inherit |
resource.calendar.leaves.search.inherit | resource.calendar.leaves | filter | Inherits resource.view_resource_calendar_leaves_search |
view_calendar_event_form_inherit |
view.calendar.event.form.inherit | calendar.event | xpath | Inherits calendar.view_calendar_event_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.list.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_list |
hr.holidays.report_list | hr.leave | list | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.list | hr.leave.type | list | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
view_search_hr_holidays_employee_type_report |
hr.holidays.filter | hr.leave.employee.type.report | search | New |
No new fields.
Public methods (0)No public methods.
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
action_open_allocation_department(self)
action_open_leave_department(self)
No new fields.
Public methods (1)action_register_departure(self)
current_leave_id
Many2one → hr.leave.type
compute='_compute_current_leave'
groups='hr.group_hr_user'
string='Current Time Off Type'
args: 'hr.leave.type'
action_time_off_dashboard(self)
get_allocation_requests_amount(self)
get_mandatory_days(self, start_date, end_date)
get_mandatory_days_data(self, date_start, date_end)
get_public_holidays_data(self, date_start, date_end)
get_special_days_data(self, date_start, date_end)
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_remaining_display'
allocation_remaining_display
Char
compute='_compute_allocation_remaining_display'
allocations_count
Integer
compute='_compute_allocation_count'
args: 'Total number of allocations'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
domain="[('share', '=', False), ('company_ids', 'in', company_id)]"
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Available Time Off Days'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, vals_list)
write(self, values)
leave_id
Many2one → hr.leave
required=True
string='Time Off Request'
args: 'hr.leave'
reason
Text
required=True
action_cancel_leave(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
active_employee
Boolean
related='employee_id.active'
string='Employee Active'
attachment_ids
One2many → ir.attachment
string='Attachments'
args: 'ir.attachment', 'res_id'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_cancel
Boolean
compute='_compute_can_cancel'
args: 'Can Cancel'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
color
Integer
related='holiday_status_id.color'
args: 'Color'
company_id
Many2one → res.company
compute='_compute_company_id'
store=True
args: 'res.company'
date_from
Datetime
compute='_compute_date_from_to'
index=True
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
store=True
args: 'Requested (Days/Hours)'
employee_company_id
Many2one
related='employee_id.company_id'
store=True
string='Employee Company'
employee_id
Many2one → hr.employee
default=<expr>
domain=<expr>
index=True
ondelete='restrict'
required=True
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
has_mandatory_day
Boolean
compute='_compute_has_mandatory_day'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain="[\n ('company_id', 'in', [employee_company_id, False]),\n '|',\n ('requires_allocation', '=', 'no'),\n ('has_valid_allocation', '=', True),\n ]"
readonly=False
required=True
store=True
string='Time Off Type'
tracking=True
args: 'hr.leave.type'
is_hatched
Boolean
compute='_compute_is_hatched'
args: 'Hatched'
is_striked
Boolean
compute='_compute_is_hatched'
args: 'Striked'
last_several_days
Boolean
compute='_compute_last_several_days'
args: 'All day'
leave_type_increases_duration
Boolean
compute='_compute_leave_type_increases_duration'
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
leave_type_support_document
Boolean
related='holiday_status_id.support_document'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
readonly=False
store=True
args: 'hr.employee'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
name
Char
compute='_compute_description'
compute_sudo=False
copy=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_duration'
help='Number of days of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Days)'
number_of_hours
Float
compute='_compute_duration'
help='Number of hours of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Hours)'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Time Off Description'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Float
string='Hour from'
request_hour_to
Float
string='Hour to'
request_unit_half
Boolean
compute='_compute_request_unit_half'
readonly=False
store=True
args: 'Half Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
readonly=False
store=True
args: 'Custom Hours'
resource_calendar_id
Many2one → resource.calendar
compute='_compute_resource_calendar_id'
copy=False
readonly=False
store=True
args: 'resource.calendar'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=False
store=True
string='Status'
tracking=True
args: [('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
supported_attachment_ids
Many2many → ir.attachment
compute='_compute_supported_attachment_ids'
inverse='_inverse_supported_attachment_ids'
string='Attach File'
args: 'ir.attachment'
supported_attachment_ids_count
Integer
compute='_compute_supported_attachment_ids'
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
index=True
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
action_approve(self, check_state=True)
action_cancel(self)
action_documents(self)
action_open_records(self, leave_ids)
action_refuse(self)
action_reset_confirm(self)
action_validate(self, check_state=True)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
open_pending_requests(self)
unlink(self)
write(self, values)
accrual_plan_id
Many2one → hr.leave.accrual.plan
ondelete='cascade'
required=True
args: 'hr.leave.accrual.plan', 'Accrual Plan'
accrual_validity
Boolean
string='Accrual Validity'
accrual_validity_count
Integer
default='1'
help='You can define a period of time where the days carried over will be available'
args: 'Accrual Validity Count'
accrual_validity_type
Selection
default='day'
help='This field defines the unit of time after which the accrual ends.'
required=True
string='Accrual Validity Type'
args: [('day', 'Days'), ('month', 'Months')]
accrued_gain_time
Selection
related='accrual_plan_id.accrued_gain_time'
action_with_unused_accruals
Selection
default='all'
help="When the Carry-Over Time is reached, according to Plan's setting, select what you want to happen with the unused time off: None (time will be reset to zero), All accrued time carried over to the next period; or Carryover with a maximum)."
required=True
string='Carry over'
args: [('lost', 'None. Accrued time reset to 0'), ('all', 'All accrued time carried over'), ('maximum', 'Carry over with a maximum')]
added_value
Float
default=1
digits=(16, 5)
help='The number of hours/days that will be incremented in the specified Time Off Type for every period'
required=True
args: 'Rate'
added_value_type
Selection
compute='_compute_added_value_type'
default='day'
readonly=False
required=True
store=True
args: [('day', 'Days'), ('hour', 'Hours')]
can_modify_value_type
Boolean
compute='_compute_can_modify_value_type'
cap_accrued_time
Boolean
default=True
help='When the field is checked the balance of an allocation using this accrual plan will never exceed the specified amount.'
args: 'Cap accrued time'
cap_accrued_time_yearly
Boolean
help='When the field is checked the total amount accrued each year will be capped at the specified amount'
string='Milestone cap'
first_day
Integer
default=1
first_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_day_display'
args: _get_selection_days
first_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June')]
first_month_day
Integer
default=1
first_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_month_day_display'
args: _get_selection_days
frequency
Selection
default='daily'
required=True
string='Frequency'
args: [('hourly', 'Hourly'), ('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a month'), ('monthly', 'Monthly'), ('biyearly', 'Twice a year'), ('yearly', 'Yearly')]
maximum_leave
Float
compute='_compute_maximum_leave'
digits=(16, 2)
help='Choose a cap for this accrual.'
readonly=False
store=True
args: 'Limit to'
maximum_leave_yearly
Float
digits=(16, 2)
string='Yearly limit to'
postpone_max_days
Integer
help='Set a maximum of accruals an allocation keeps at the end of the year.'
args: 'Maximum amount of accruals to transfer'
second_day
Integer
default=15
second_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_day_display'
args: _get_selection_days
second_month
Selection
default='jul'
args: [('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
second_month_day
Integer
default=1
second_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_month_day_display'
args: _get_selection_days
sequence
Integer
compute='_compute_sequence'
help='Sequence is generated automatically by start time delta.'
store=True
string='sequence'
start_count
Integer
default='1'
help='The accrual starts after a defined period from the allocation start date. This field defines the number of days, months or years after which accrual is used.'
args: 'Start after'
start_type
Selection
default='day'
help='This field defines the unit of time after which the accrual starts.'
required=True
string=' '
args: [('day', 'Days'), ('month', 'Months'), ('year', 'Years')]
week_day
Selection
default='mon'
required=True
string='Allocation on'
args: [('mon', 'Monday'), ('tue', 'Tuesday'), ('wed', 'Wednesday'), ('thu', 'Thursday'), ('fri', 'Friday'), ('sat', 'Saturday'), ('sun', 'Sunday')]
yearly_day
Integer
default=1
yearly_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_yearly_day_display'
args: _get_selection_days
yearly_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
No public methods.
accrued_gain_time
Selection
default='end'
required=True
args: [('start', 'At the start of the accrual period'), ('end', 'At the end of the accrual period')]
active
Boolean
default=True
added_value_type
Selection
compute='_compute_added_value_type'
store=True
args: [('day', 'Days'), ('hour', 'Hours')]
allocation_ids
One2many → hr.leave.allocation
carryover_date
Selection
default='year_start'
required=True
string='Carry-Over Time'
args: [('year_start', 'At the start of the year'), ('allocation', 'At the allocation date'), ('other', 'Other')]
carryover_day
Integer
default=1
carryover_day_display
Selection
compute='_compute_carryover_day_display'
inverse='_inverse_carryover_day_display'
args: _get_selection_days
carryover_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
company_id
Many2one → res.company
compute='_compute_company_id'
readonly=False
store='True'
string='Company'
args: 'res.company'
employees_count
Integer
compute='_compute_employee_count'
args: 'Employees'
is_based_on_worked_time
Boolean
compute='_compute_is_based_on_worked_time'
help='If checked, the accrual period will be calculated according to the work days, not calendar days.'
readonly=False
store=True
args: 'Based on worked time'
level_count
Integer
compute='_compute_level_count'
args: 'Levels'
level_ids
One2many → hr.leave.accrual.level
copy=True
string='Milestone'
args: 'hr.leave.accrual.level', 'accrual_plan_id'
name
Char
required=True
args: 'Name'
show_transition_mode
Boolean
compute='_compute_show_transition_mode'
time_off_type_id
Many2one → hr.leave.type
check_company=True
help='Specify if this accrual plan can only be used with this Time Off Type.\n Leave empty if this accrual plan can be used with any Time Off Type.'
string='Time Off Type'
args: 'hr.leave.type'
transition_mode
Selection
default='immediately'
help="Specify what occurs if a level transition takes place in the middle of a pay period.\n\n 'Immediately' will switch the employee to the new accrual level on the exact date during the ongoing pay period.\n\n 'After this accrual's period' will keep the employee on the same accrual level until the ongoing pay period is complete.\n After it is complete, the new level will take effect when the next pay period begins."
required=True
string='Milestone Transition'
args: [('immediately', 'Immediately'), ('end_of_accrual', "After this accrual's period")]
action_open_accrual_plan_employees(self)
copy_data(self, default=None)
accrual_plan_id
Many2one → hr.leave.accrual.plan
compute='_compute_accrual_plan_id'
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
inverse='_inverse_accrual_plan_id'
readonly=False
store=True
tracking=True
args: 'hr.leave.accrual.plan'
active_employee
Boolean
readonly=True
related='employee_id.active'
args: 'Active Employee'
actual_lastcall
Date
export_string_translation=False
allocation_type
Selection
default='regular'
readonly=True
required=True
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
already_accrued
Boolean
approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
carried_over_days_expiration_date
Date
date_from
Date
copy=False
default=fields.Date.context_today
index=True
required=True
tracking=True
args: 'Start Date'
date_to
Date
copy=False
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
default=<expr>
domain=_domain_employee_id
index=True
ondelete='restrict'
required=True
string='Employee'
tracking=True
args: 'hr.employee'
expiring_carryover_days
Float
holiday_status_id
Many2one → hr.leave.type
compute='_compute_holiday_status_id'
default=_default_holiday_status_id
domain=_domain_holiday_status_id
readonly=False
required=True
store=True
string='Time Off Type'
args: 'hr.leave.type'
is_name_custom
Boolean
readonly=True
store=False
is_officer
Boolean
compute='_compute_is_officer'
last_executed_carryover_date
Date
export_string_translation=False
lastcall
Date
readonly=True
args: 'Date of the last accrual allocation'
leaves_taken
Float
compute='_compute_leaves'
string='Time off Taken'
manager_id
Many2one → hr.employee
compute='_compute_manager_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
name
Char
compute='_compute_description'
compute_sudo=False
readonly=False
store=True
string='Description'
name_validity
Char
compute='_compute_description_validity'
args: 'Description with validity'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
default_export_compatible=True
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
store=True
args: 'Duration (hours)'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help="The status is 'To Approve', when an allocation request is created.\nThe status is 'Refused', when an allocation request is refused by manager.\nThe status is 'Approved', when an allocation request is approved by manager."
readonly=True
string='Status'
tracking=True
args: [('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type_request_unit
Selection
compute='_compute_type_request_unit'
args: [('hour', 'Hours'), ('half_day', 'Half Day'), ('day', 'Day')]
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
yearly_accrued_amount
Float
export_string_translation=False
action_approve(self)
action_refuse(self)
action_set_to_confirm(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy(self, default=None)
create(self, vals_list)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
write(self, values)
accrual_plan_id
Many2one → hr.leave.accrual.plan
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
args: 'hr.leave.accrual.plan'
allocation_mode
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
allocation_type
Selection
default='regular'
required=True
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
category_id
Many2one → hr.employee.category
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
date_from
Date
default=fields.Date.context_today
required=True
args: 'Start Date'
date_to
Date
department_id
Many2one → hr.department
duration
Float
string='Allocation'
employee_ids
Many2many → hr.employee
domain="[('company_id', '=', company_id)]"
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain="[('company_id', 'in', [company_id, False])]"
required=True
string='Time Off Type'
args: 'hr.leave.type'
name
Char
compute='_compute_name'
readonly=False
store=True
args: 'Description'
notes
Text
request_unit
Selection
related='holiday_status_id.request_unit'
action_generate_allocations(self)
active_employee
Boolean
readonly=True
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status
Selection
leave_type
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
number_of_days
Float
aggregator='sum'
readonly=True
args: 'Number of Days'
number_of_hours
Float
aggregator='sum'
readonly=True
args: 'Number of Hours'
state
Selection
readonly=True
string='Status'
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
allocation_mode
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
category_id
Many2one → hr.employee.category
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
date_from
Date
required=True
args: 'Start Date'
date_to
Date
required=True
args: 'End Date'
department_id
Many2one → hr.department
employee_ids
Many2many → hr.employee
domain="[('company_id', '=', company_id)]"
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain="[('company_id', 'in', [company_id, False])]"
required=True
string='Time Off Type'
args: 'hr.leave.type'
name
Char
action_generate_time_off(self)
color
Integer
default=<expr>
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
department_ids
Many2many → hr.department
string='Departments'
args: 'hr.department'
end_date
Date
required=True
name
Char
required=True
resource_calendar_id
Many2one → resource.calendar
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'resource.calendar', 'Working Hours'
start_date
Date
required=True
No public methods.
allocation_id
Many2one → hr.leave.allocation
readonly=True
string='Allocation Request'
args: 'hr.leave.allocation'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
leave_id
Many2one → hr.leave
readonly=True
string='Time Off Request'
args: 'hr.leave'
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
number_of_hours
Float
readonly=True
args: 'Number of Hours'
state
Selection
readonly=True
string='Status'
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_open_record(self)
init(self)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
department_id
Many2one → hr.department
readonly=True
args: 'hr.department'
description
Char
groups='hr_holidays.group_hr_holidays_user'
readonly=True
args: 'Description'
duration
Float
readonly=True
string='Duration'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
groups='hr_holidays.group_hr_holidays_user'
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
is_absent
Boolean
related='employee_id.is_absent'
is_hatched
Boolean
readonly=True
args: 'Hatched'
is_manager
Boolean
compute='_compute_is_manager'
args: 'Manager'
is_striked
Boolean
readonly=True
args: 'Striked'
job_id
Many2one → hr.job
readonly=True
args: 'hr.job'
leave_id
Many2one → hr.leave
comodel_name='hr.leave'
groups='hr_holidays.group_hr_holidays_user'
readonly=True
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
name
Char
compute='_compute_name'
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
action_approve(self)
action_refuse(self)
action_validate(self)
get_unusual_days(self, date_from, date_to=None)
init(self)
accrual_count
Float
compute='_compute_accrual_count'
string='Accruals count'
accruals_ids
One2many → hr.leave.accrual.plan
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_count
Integer
compute='_compute_allocation_count'
string='Allocations'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_validation_type
Selection
default='hr'
help="Select the level of approval needed in case of request by employee\n # - No validation needed: The employee's request is automatically approved.\n # - Approved by Time Off Officer: The employee's request need to be manually approved\n # by the Time Off Officer, Employee's Approver or both."
string='Approval'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
allows_negative
Boolean
help='If checked, users request can exceed the allocated days and balance can go in negative.'
string='Allow Negative Cap'
color
Integer
help='The color selected here will be used in every screen with the time off type.'
string='Color'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
country_code
Char
depends=['country_id']
readonly=True
related='country_id.code'
country_id
Many2one → res.country
readonly=True
related='company_id.country_id'
string='Country'
args: 'res.country'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
employee_requests
Selection
default='no'
help='Extra Days Requests Allowed: User can request an allocation for himself.\n\n Not Allowed: User cannot request an allocation.'
required=True
string='Employee Requests'
args: [('yes', 'Extra Days Requests Allowed'), ('no', 'Not Allowed')]
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
has_valid_allocation
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
icon_id
Many2one → ir.attachment
domain="[('res_model', '=', 'hr.leave.type'), ('res_field', '=', 'icon_id')]"
string='Cover Image'
args: 'ir.attachment'
include_public_holidays_in_duration
Boolean
default=False
help='Public holidays should be counted in the leave duration when applying for leaves'
args: 'Public Holiday Included'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Time Off Validation'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_allowed_negative
Integer
help='Define the maximum level of negative days this kind of time off can reach. Value must be at least 1.'
string='Maximum Excess Amount'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
requires_allocation
Selection
default='yes'
help='Yes: Time off requests need to have a valid allocation.\n\n No Limit: Time Off requests can be taken without any prior allocation.'
required=True
string='Requires allocation'
args: [('yes', 'Yes'), ('no', 'No Limit')]
responsible_ids
Many2many → res.users
auto_join=True
domain=<expr>
help='Choose the Time Off Officers who will be notified to approve allocation or Time Off Request. If empty, nobody will be notified'
string='Notified Time Off Officer'
args: 'res.users', 'hr_leave_type_res_users_rel', 'hr_leave_type_id', 'res_users_id'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
show_on_dashboard
Boolean
default=True
help='Non-visible allocations can still be selected when taking a leave, but will simply not be displayed on the leave dashboard.'
support_document
Boolean
string='Supporting Document'
time_type
Selection
default='leave'
help="The distinction between working time (ex. Attendance) and absence (ex. Training) will be used in the computation of Accrual's plan rate."
string='Kind of Time Off'
args: [('other', 'Worked Time'), ('leave', 'Absence')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_accrual_plans(self)
action_see_days_allocated(self)
action_see_group_leaves(self)
check_allocation_requirement_edit_validity(self)
copy_data(self, default=None)
get_allocation_data(self, employees, target_date=None)
get_allocation_data_request(self, target_date=None, hidden_allocations=True)
has_accrual_allocation(self)
requested_display_name(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_remaining_display
Char
related='employee_id.allocation_remaining_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
hr_icon_display
Selection
related='employee_id.hr_icon_display'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
SELF_READABLE_FIELDS(self)
create(self, vals_list)
associated_leaves_count
Integer
compute='_compute_associated_leaves_count'
args: 'Time Off Count'
No public methods.
holiday_id
Many2one → hr.leave
string='Time Off Request'
args: 'hr.leave'
create(self, vals_list)
unlink(self)
write(self, vals)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_accrual_level_view_form |
hr.leave.accrual.level.form | hr.leave.accrual.level | form | New |
hr_accrual_plan_view_form |
hr.leave.accrual.plan.form | hr.leave.accrual.plan | form | New |
hr_accrual_plan_view_search |
hr.leave.accrual.plan.search | hr.leave.accrual.plan | search | New |
hr_accrual_plan_view_tree |
hr.leave.accrual.plan.tree | hr.leave.accrual.plan | tree | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_departure_wizard_view_form |
hr.departure.wizard.view.form.extend3 | hr.departure.wizard | xpath | Inherits hr.hr_departure_wizard_view_form |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_holidays_cancel_leave_form |
hr.holidays.cancel.leave | form | New | |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | field | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager_dashboard |
hr.leave.allocation.view.form.manager.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form_manager |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_employee_type_report |
hr.leave.employee.type.report.view.pivot | hr.leave.employee.type.report | pivot | New |
hr_leave_employee_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_mandatory_day_view_form |
hr.leave.mandatory.day | form | New | |
hr_leave_mandatory_day_view_list |
hr.leave.mandatory.day | tree | New | |
hr_leave_mandatory_day_view_search |
hr.leave.mandatory.day | search | New | |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_calendar_view_search |
hr.leave.report.calendar.view.search | hr.leave.report.calendar | search | New |
hr_leave_report_graph |
report.hr.holidays.report.leave_all.graph | hr.leave.report | graph | New |
hr_leave_report_pivot |
report.hr.holidays.report.leave_all.pivot | hr.leave.report | pivot | New |
hr_leave_report_search_view |
he.leave.report.search.view | hr.leave | filter | Inherits view_hr_holidays_filter |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | xpath | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_kanban_approve_department |
hr.leave.view.kanban.approve.department | hr.leave | xpath | Inherits hr_leave_view_kanban |
hr_leave_view_kanban_my |
hr.leave.view.kanban.my | hr.leave | strong | Inherits hr_leave_view_kanban |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | xpath | Inherits hr.res_users_view_form_profile |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | xpath | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
resource_calendar_leaves_tree_inherit |
resource.calendar.leaves.tree.inherit | resource.calendar.leaves | xpath | Inherits resource.resource_calendar_leave_tree |
resource_calendar_leaves_view_search_inherit |
resource.calendar.leaves.search.inherit | resource.calendar.leaves | filter | Inherits resource.view_resource_calendar_leaves_search |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.tree.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_list |
hr.holidays.report_list | hr.leave | tree | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
view_search_hr_holidays_employee_type_report |
hr.holidays.filter | hr.leave.employee.type.report | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
action_open_allocation_department(self)
action_open_leave_department(self)
archive_allocation
Boolean
default=True
help='Remove employee from existing accrual plans.'
args: 'Archive Employee Allocations'
cancel_leaves
Boolean
default=True
help='Cancel all time off after this date.'
args: 'Cancel Future Time Off'
action_register_departure(self)
current_leave_id
Many2one → hr.leave.type
compute='_compute_current_leave'
groups='hr.group_hr_user'
string='Current Time Off Type'
args: 'hr.leave.type'
action_time_off_dashboard(self)
get_mandatory_days(self, start_date, end_date)
get_mandatory_days_data(self, date_start, date_end)
get_public_holidays_data(self, date_start, date_end)
get_special_days_data(self, date_start, date_end)
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_remaining_display'
allocation_remaining_display
Char
compute='_compute_allocation_remaining_display'
allocations_count
Integer
compute='_compute_allocation_count'
args: 'Total number of allocations'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
domain="[('share', '=', False), ('company_ids', 'in', company_id)]"
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Remaining Paid Time Off'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, vals_list)
write(self, values)
leave_id
Many2one → hr.leave
required=True
string='Time Off Request'
args: 'hr.leave'
reason
Text
required=True
action_cancel_leave(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
readonly=True
active_employee
Boolean
related='employee_id.active'
string='Employee Active'
all_employee_ids
Many2many → hr.employee
compute='_compute_all_employees'
compute_sudo=True
args: 'hr.employee'
attachment_ids
One2many → ir.attachment
string='Attachments'
args: 'ir.attachment', 'res_id'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_cancel
Boolean
compute='_compute_can_cancel'
args: 'Can Cancel'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
help='Category of Employee'
readonly=False
store=True
string='Employee Tag'
args: 'hr.employee.category'
color
Integer
related='holiday_status_id.color'
args: 'Color'
company_id
Many2one → res.company
compute='_compute_company_id'
store=True
args: 'res.company'
date_from
Datetime
compute='_compute_date_from_to'
index=True
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
store=True
args: 'Requested (Days/Hours)'
employee_company_id
Many2one
related='employee_id.company_id'
store=True
string='Employee Company'
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
compute_sudo=False
domain=<expr>
index=True
ondelete='restrict'
readonly=False
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
domain=<expr>
groups='hr_holidays.group_hr_holidays_responsible'
readonly=True
store=True
string='Employees'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
has_mandatory_day
Boolean
compute='_compute_has_mandatory_day'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain="[\n ('company_id', 'in', [employee_company_id, False]),\n '|',\n ('requires_allocation', '=', 'no'),\n ('has_valid_allocation', '=', True),\n ]"
readonly=False
required=True
store=True
string='Time Off Type'
tracking=True
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_hatched
Boolean
compute='_compute_is_hatched'
args: 'Hatched'
is_striked
Boolean
compute='_compute_is_hatched'
args: 'Striked'
is_user_only_responsible
Boolean
compute='_compute_is_user_only_responsible'
last_several_days
Boolean
compute='_compute_last_several_days'
args: 'All day'
leave_type_increases_duration
Boolean
compute='_compute_leave_type_increases_duration'
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
leave_type_support_document
Boolean
related='holiday_status_id.support_document'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
readonly=False
store=True
args: 'hr.employee'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
readonly=False
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
compute_sudo=False
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
copy=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_duration'
help='Number of days of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='Number of days of the time off request according to your working schedule. Used for interface.'
args: 'Duration in days'
number_of_hours
Float
compute='_compute_duration'
help='Number of hours of the time off request. Used in the calculation.'
store=True
tracking=True
args: 'Duration (Hours)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='Number of hours of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
number_of_hours_text
Char
compute='_compute_number_of_hours_text'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Time Off Description'
report_note
Text
copy=False
groups='hr_holidays.group_hr_holidays_manager'
args: 'HR Comments'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_unit_half
Boolean
compute='_compute_request_unit_half'
readonly=False
store=True
args: 'Half Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
readonly=False
store=True
args: 'Custom Hours'
resource_calendar_id
Many2one → resource.calendar
compute='_compute_resource_calendar_id'
copy=False
readonly=False
store=True
args: 'resource.calendar'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
compute='_compute_state'
copy=False
help=<expr>
readonly=False
store=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
supported_attachment_ids
Many2many → ir.attachment
compute='_compute_supported_attachment_ids'
inverse='_inverse_supported_attachment_ids'
string='Attach File'
args: 'ir.attachment'
supported_attachment_ids_count
Integer
compute='_compute_supported_attachment_ids'
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
index=True
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
action_approve(self, check_state=True)
action_cancel(self)
action_confirm(self)
action_documents(self)
action_draft(self)
action_open_records(self, leave_ids)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
unlink(self)
write(self, values)
accrual_plan_id
Many2one → hr.leave.accrual.plan
ondelete='cascade'
required=True
args: 'hr.leave.accrual.plan', 'Accrual Plan'
accrued_gain_time
Selection
related='accrual_plan_id.accrued_gain_time'
action_with_unused_accruals
Selection
default='all'
required=True
string='Carry over'
args: [('lost', 'None. Accrued time reset to 0'), ('all', 'All accrued time carried over'), ('maximum', 'Carry over with a maximum')]
added_value
Float
default=1
digits=(16, 5)
help='The number of hours/days that will be incremented in the specified Time Off Type for every period'
required=True
args: 'Rate'
added_value_type
Selection
compute='_compute_added_value_type'
default='day'
readonly=False
required=True
store=True
args: [('day', 'Days'), ('hour', 'Hours')]
can_modify_value_type
Boolean
compute='_compute_can_modify_value_type'
cap_accrued_time
Boolean
default=True
args: 'Cap accrued time'
first_day
Integer
default=1
first_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_day_display'
args: _get_selection_days
first_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June')]
first_month_day
Integer
default=1
first_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_month_day_display'
args: _get_selection_days
frequency
Selection
default='daily'
required=True
string='Frequency'
args: [('hourly', 'Hourly'), ('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a month'), ('monthly', 'Monthly'), ('biyearly', 'Twice a year'), ('yearly', 'Yearly')]
maximum_leave
Float
compute='_compute_maximum_leave'
digits=(16, 2)
help='Choose a cap for this accrual.'
readonly=False
store=True
args: 'Limit to'
postpone_max_days
Integer
help='Set a maximum of accruals an allocation keeps at the end of the year.'
args: 'Maximum amount of accruals to transfer'
second_day
Integer
default=15
second_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_day_display'
args: _get_selection_days
second_month
Selection
default='jul'
args: [('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
second_month_day
Integer
default=1
second_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_month_day_display'
args: _get_selection_days
sequence
Integer
compute='_compute_sequence'
help='Sequence is generated automatically by start time delta.'
store=True
string='sequence'
start_count
Integer
default='1'
help='The accrual starts after a defined period from the allocation start date. This field defines the number of days, months or years after which accrual is used.'
args: 'Start after'
start_type
Selection
default='day'
help='This field defines the unit of time after which the accrual starts.'
required=True
string=' '
args: [('day', 'Days'), ('month', 'Months'), ('year', 'Years')]
week_day
Selection
default='mon'
required=True
string='Allocation on'
args: [('mon', 'Monday'), ('tue', 'Tuesday'), ('wed', 'Wednesday'), ('thu', 'Thursday'), ('fri', 'Friday'), ('sat', 'Saturday'), ('sun', 'Sunday')]
yearly_day
Integer
default=1
yearly_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_yearly_day_display'
args: _get_selection_days
yearly_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
No public methods.
accrued_gain_time
Selection
default='end'
required=True
args: [('start', 'At the start of the accrual period'), ('end', 'At the end of the accrual period')]
active
Boolean
default=True
added_value_type
Selection
compute='_compute_added_value_type'
store=True
args: [('day', 'Days'), ('hour', 'Hours')]
allocation_ids
One2many → hr.leave.allocation
carryover_date
Selection
default='year_start'
required=True
string='Carry-Over Time'
args: [('year_start', 'At the start of the year'), ('allocation', 'At the allocation date'), ('other', 'Other')]
carryover_day
Integer
default=1
carryover_day_display
Selection
compute='_compute_carryover_day_display'
inverse='_inverse_carryover_day_display'
args: _get_selection_days
carryover_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
company_id
Many2one → res.company
compute='_compute_company_id'
readonly=False
store='True'
string='Company'
args: 'res.company'
employees_count
Integer
compute='_compute_employee_count'
args: 'Employees'
is_based_on_worked_time
Boolean
compute='_compute_is_based_on_worked_time'
help='If checked, the accrual period will be calculated according to the work days, not calendar days.'
readonly=False
store=True
args: 'Based on worked time'
level_count
Integer
compute='_compute_level_count'
args: 'Levels'
level_ids
One2many → hr.leave.accrual.level
copy=True
string='Milestone'
args: 'hr.leave.accrual.level', 'accrual_plan_id'
name
Char
required=True
args: 'Name'
show_transition_mode
Boolean
compute='_compute_show_transition_mode'
time_off_type_id
Many2one → hr.leave.type
check_company=True
help='Specify if this accrual plan can only be used with this Time Off Type.\n Leave empty if this accrual plan can be used with any Time Off Type.'
string='Time Off Type'
args: 'hr.leave.type'
transition_mode
Selection
default='immediately'
help="Specify what occurs if a level transition takes place in the middle of a pay period.\n\n 'Immediately' will switch the employee to the new accrual level on the exact date during the ongoing pay period.\n\n 'After this accrual's period' will keep the employee on the same accrual level until the ongoing pay period is complete.\n After it is complete, the new level will take effect when the next pay period begins."
required=True
string='Milestone Transition'
args: [('immediately', 'Immediately'), ('end_of_accrual', "After this accrual's period")]
action_open_accrual_plan_employees(self)
copy(self, default=None)
No new fields.
Public methods (0)No public methods.
accrual_plan_id
Many2one → hr.leave.accrual.plan
compute='_compute_from_holiday_status_id'
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
readonly=False
store=True
tracking=True
args: 'hr.leave.accrual.plan'
active
Boolean
default=True
active_employee
Boolean
readonly=True
related='employee_id.active'
args: 'Active Employee'
allocation_type
Selection
default='regular'
readonly=True
required=True
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
already_accrued
Boolean
approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
readonly=False
store=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Date
copy=False
default=fields.Date.context_today
index=True
required=True
tracking=True
args: 'Start Date'
date_to
Date
copy=False
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
index=True
ondelete='restrict'
readonly=False
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
readonly=False
store=True
string='Employees'
args: 'hr.employee'
has_accrual_plan
Boolean
compute='_compute_has_accrual_plan'
string='Accrual Plan Available'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_holiday_status_id'
default=_default_holiday_status_id
domain=_domain_holiday_status_id
readonly=False
required=True
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=False
required=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_officer
Boolean
compute='_compute_is_officer'
lastcall
Date
readonly=True
args: 'Date of the last accrual allocation'
leaves_taken
Float
compute='_compute_leaves'
string='Time off Taken'
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_manager_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
readonly=False
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
string='Description'
name_validity
Char
compute='_compute_description_validity'
args: 'Description with validity'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=False
args: 'Reasons'
number_of_days
Float
compute='_compute_from_holiday_status_id'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited.'
args: 'Duration (hours)'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Allocation Description'
state
Selection
copy=False
default='confirm'
help="The status is set to 'To Submit', when an allocation request is created.\nThe status is 'To Approve', when an allocation request is confirmed by user.\nThe status is 'Refused', when an allocation request is refused by manager.\nThe status is 'Approved', when an allocation request is approved by manager."
readonly=True
string='Status'
tracking=True
args: [('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate', 'Approved')]
type_request_unit
Selection
compute='_compute_type_request_unit'
args: [('hour', 'Hours'), ('half_day', 'Half Day'), ('day', 'Day')]
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
create(self, vals_list)
message_subscribe(self, partner_ids=None, subtype_ids=None)
onchange(self, values, field_names, fields_spec)
write(self, values)
active_employee
Boolean
readonly=True
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status
Selection
leave_type
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
number_of_days
Float
group_operator='sum'
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
color
Integer
default=<expr>
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
department_ids
Many2many → hr.department
string='Departments'
args: 'hr.department'
end_date
Date
required=True
name
Char
required=True
resource_calendar_id
Many2one → resource.calendar
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'resource.calendar', 'Working Hours'
start_date
Date
required=True
No public methods.
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
leave_id
Many2one → hr.leave
readonly=True
string='Time Off Request'
args: 'hr.leave'
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_open_record(self)
init(self)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
department_id
Many2one → hr.department
readonly=True
args: 'hr.department'
duration
Float
readonly=True
string='Duration'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
is_absent
Boolean
related='employee_id.is_absent'
is_hatched
Boolean
readonly=True
args: 'Hatched'
is_striked
Boolean
readonly=True
args: 'Striked'
job_id
Many2one → hr.job
readonly=True
args: 'hr.job'
name
Char
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
get_unusual_days(self, date_from, date_to=None)
init(self)
No new fields.
Public methods (0)No public methods.
accrual_count
Float
compute='_compute_accrual_count'
string='Accruals count'
accruals_ids
One2many → hr.leave.accrual.plan
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_count
Integer
compute='_compute_allocation_count'
string='Allocations'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_validation_type
Selection
compute='_compute_allocation_validation_type'
default='no'
help="Select the level of approval needed in case of request by employee\n - No validation needed: The employee's request is automatically approved.\n - Approved by Time Off Officer: The employee's request need to be manually approved by the Time Off Officer."
readonly=False
store=True
string='Approval'
args: [('officer', 'Approved by Time Off Officer'), ('no', 'No validation needed')]
allows_negative
Boolean
help='If checked, users request can exceed the allocated days and balance can go in negative.'
string='Allow Negative Cap'
color
Integer
help='The color selected here will be used in every screen with the time off type.'
string='Color'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
employee_requests
Selection
default='no'
help='Extra Days Requests Allowed: User can request an allocation for himself.\n\n Not Allowed: User cannot request an allocation.'
required=True
string='Employee Requests'
args: [('yes', 'Extra Days Requests Allowed'), ('no', 'Not Allowed')]
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
has_valid_allocation
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
icon_id
Many2one → ir.attachment
domain="[('res_model', '=', 'hr.leave.type'), ('res_field', '=', 'icon_id')]"
string='Cover Image'
args: 'ir.attachment'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Time Off Validation'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_allowed_negative
Integer
help='Define the maximum level of negative days this kind of time off can reach. Value must be at least 1.'
string='Amount in Negative'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
requires_allocation
Selection
default='yes'
help='Yes: Time off requests need to have a valid allocation.\n\n No Limit: Time Off requests can be taken without any prior allocation.'
required=True
string='Requires allocation'
args: [('yes', 'Yes'), ('no', 'No Limit')]
responsible_ids
Many2many → res.users
auto_join=True
domain=<expr>
help='Choose the Time Off Officers who will be notified to approve allocation or Time Off Request. If empty, nobody will be notified'
string='Notified Time Off Officer'
args: 'res.users', 'hr_leave_type_res_users_rel', 'hr_leave_type_id', 'res_users_id'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
support_document
Boolean
string='Supporting Document'
time_type
Selection
default='leave'
help="The distinction between working time (ex. Attendance) and absence (ex. Training) will be used in the computation of Accrual's plan rate."
string='Kind of Time Off'
args: [('other', 'Worked Time'), ('leave', 'Absence')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_accrual_plans(self)
action_see_days_allocated(self)
action_see_group_leaves(self)
check_allocation_requirement_edit_validity(self)
get_allocation_data(self, employees, target_date=None)
get_allocation_data_request(self, target_date=None)
has_accrual_allocation(self)
requested_display_name(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)mail_partner_format(self, fields=None)
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_remaining_display
Char
related='employee_id.allocation_remaining_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
hr_icon_display
Selection
related='employee_id.hr_icon_display'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
SELF_READABLE_FIELDS(self)
create(self, vals_list)
associated_leaves_count
Integer
compute='_compute_associated_leaves_count'
args: 'Time Off Count'
No public methods.
holiday_id
Many2one → hr.leave
string='Time Off Request'
args: 'hr.leave'
create(self, vals_list)
unlink(self)
write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/16.0/hr_holidays |
| VERSION | |
| VERSION | 1.6 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Wolfgang Taferner, Yannick Tivisse, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Lucas Perais, Alexandre Kühn, Xavier-Do, Romeo Fragomeli, Victor Feyens, Sébastien Theys, alt-odoo, Julien Mougenot, Samuel Degueldre, Achraf (abz), Ivan Yelizariev, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, Kevin Baptiste, Philippe Wauthy, Xavier BOL (xbo), sofiagvaladze, Víctor Martínez, Florian Damhaut, Merlin (megu), MerlinGuillaume, tranngocson1996, mafo-odoo, Audric Onockx (auon), Agustín Castro Bugallo, Yolann Sabaux, Abdelouahab (abla), Aurelien van Delft (avd), Dossogne Bertrand, niyasraphy, Thomas Lefebvre (thle), Gaetan Vanden Bergh (gavb), Louis Wicket (wil), tsm-odoo, Yash Vaishnav, Tommy (tong), Thomas Becquevort (thbe), Tom De Caluwé, Malay Khamar, duongnguyen, Jurgen (jugj), Levi Siuzdak (sile), Bruno Boi, Krina Oza, Kamlesh Pathekar, Nguyen Viet Phuong, Michael (mcm), Cedric Prieels (cpr), Simon Goffaux (sigo), prye-odoo, Kartik Chavda, Brieuc-brd, Daniel Duque, fkantelberg, Leonardo Pavan Rocha, Dawn Hwang, Andrzej(pian), stefanorigano (SRI), ravb-odoo, Dang Van Loc, Mattis Megevand, tronghung0398, dasz, Mélanie, Youssef Bashandy, bary, Flotchet, Tanguy Quéguineur, Martin Trigaux (mat), xlu-odoo, asno-odoo, rmun-odoo, rame-odoo, Hadi (alha), Kacper Gasior, jich-odoo, Rob Coekaerts, Abdelrahman Mahmoud (amah), Andrea Gidalti, Sanchit Gupta, sapp-odoo, Sina Chaichi Maleki (cmsi), mash |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/time-off |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:47 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ===================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_accrual_level_view_form |
hr.leave.accrual.level.form | hr.leave.accrual.level | form | New |
hr_accrual_plan_view_form |
hr.leave.accrual.plan.form | hr.leave.accrual.plan | form | New |
hr_accrual_plan_view_tree |
hr.leave.accrual.plan.tree | hr.leave.accrual.plan | tree | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_departure_wizard_view_form |
hr.departure.wizard.view.form.extend3 | hr.departure.wizard | xpath | Inherits hr.hr_departure_wizard_view_form |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_holidays_cancel_leave_form |
hr.holidays.cancel.leave | form | New | |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager_dashboard |
hr.leave.allocation.view.form.manager.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form_manager |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_employee_type_report |
hr.leave.employee.type.report.view.pivot | hr.leave.employee.type.report | pivot | New |
hr_leave_employee_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_calendar_view_search |
hr.leave.report.calendar.view.search | hr.leave.report.calendar | search | New |
hr_leave_report_pivot |
report.hr.holidays.report.leave_all.pivot | hr.leave.report | pivot | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_report_view_form |
hr.leave.report.view.form | hr.leave.report | form | New |
hr_leave_stress_day_view_form |
hr.leave.stress.day | form | New | |
hr_leave_stress_day_view_list |
hr.leave.stress.day | tree | New | |
hr_leave_stress_day_view_search |
hr.leave.stress.day | search | New | |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | xpath | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_kanban_approve_department |
hr.leave.view.kanban.approve.department | hr.leave | xpath | Inherits hr_leave_view_kanban |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | xpath | Inherits hr.res_users_view_form_profile |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | xpath | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
resource_calendar_leaves_tree_inherit |
resource.calendar.leaves.tree.inherit | resource.calendar.leaves | xpath | Inherits resource.resource_calendar_leave_tree |
resource_calendar_leaves_view_search_inherit |
resource.calendar.leaves.search.inherit | resource.calendar.leaves | filter | Inherits resource.view_resource_calendar_leaves_search |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.tree.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
view_search_hr_holidays_employee_type_report |
hr.holidays.filter | hr.leave.employee.type.report | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
action_open_allocation_department(self)
action_open_leave_department(self)
archive_allocation
Boolean
default=True
help='Remove employee from existing accrual plans.'
args: 'Archive Employee Allocations'
cancel_leaves
Boolean
default=True
help='Cancel all time off after this date.'
args: 'Cancel Future Leaves'
action_register_departure(self)
current_leave_id
Many2one → hr.leave.type
compute='_compute_current_leave'
groups='hr.group_hr_user'
string='Current Time Off Type'
args: 'hr.leave.type'
action_time_off_dashboard(self)
get_public_holidays_data(self, date_start, date_end)
get_special_days_data(self, date_start, date_end)
get_stress_days(self, start_date, end_date)
get_stress_days_data(self, date_start, date_end)
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_count'
allocation_remaining_display
Char
compute='_compute_allocation_remaining_display'
allocations_count
Integer
compute='_compute_allocation_count'
args: 'Total number of allocations'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
domain="[('share', '=', False), ('company_ids', 'in', company_id)]"
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Remaining Paid Time Off'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, vals_list)
write(self, values)
leave_id
Many2one → hr.leave
required=True
args: 'hr.leave'
reason
Text
required=True
action_cancel_leave(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
readonly=True
active_employee
Boolean
readonly=True
related='employee_id.active'
string='Employee Active'
all_employee_ids
Many2many → hr.employee
compute='_compute_all_employees'
compute_sudo=True
args: 'hr.employee'
attachment_ids
One2many → ir.attachment
string='Attachments'
args: 'ir.attachment', 'res_id'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_cancel
Boolean
compute='_compute_can_cancel'
args: 'Can Cancel'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
help='Category of Employee'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
color
Integer
related='holiday_status_id.color'
args: 'Color'
date_from
Datetime
compute='_compute_date_from_to'
copy=False
index=True
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
copy=False
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
store=True
args: 'Requested (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
compute_sudo=False
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
groups='hr_holidays.group_hr_holidays_user'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employees'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
has_stress_day
Boolean
compute='_compute_has_stress_day'
holiday_allocation_id
Many2one → hr.leave.allocation
compute='_compute_from_holiday_status_id'
readonly=False
store=True
string='Allocation'
args: 'hr.leave.allocation'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain="[('company_id', '=?', employee_company_id), '|', ('requires_allocation', '=', 'no'), ('has_valid_allocation', '=', True)]"
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
tracking=True
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_hatched
Boolean
compute='_compute_is_hatched'
args: 'Hatched'
is_striked
Boolean
compute='_compute_is_hatched'
args: 'Striked'
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
leave_type_support_document
Boolean
related='holiday_status_id.support_document'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
readonly=False
store=True
args: 'hr.employee'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
compute_sudo=False
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
copy=False
help='Number of days of the time off request. Used in the calculation. To manually correct the duration, use this field.'
readonly=False
store=True
tracking=True
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='Number of days of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in days'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='Number of hours of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
number_of_hours_text
Char
compute='_compute_number_of_hours_text'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Time Off Description'
report_note
Text
copy=False
groups='hr_holidays.group_hr_holidays_manager'
args: 'HR Comments'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_unit_half
Boolean
compute='_compute_request_unit_half'
readonly=False
store=True
args: 'Half Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
readonly=False
store=True
args: 'Custom Hours'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
compute='_compute_state'
copy=False
help=<expr>
readonly=False
store=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
supported_attachment_ids
Many2many → ir.attachment
compute='_compute_supported_attachment_ids'
inverse='_inverse_supported_attachment_ids'
string='Attach File'
args: 'ir.attachment'
supported_attachment_ids_count
Integer
compute='_compute_supported_attachment_ids'
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
index=True
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_documents(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, subtype_ids=None)
name_get(self)
onchange(self, values, field_name, field_onchange)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
split_leave(self, time_domain_dict)
unlink(self)
write(self, values)
accrual_plan_id
Many2one → hr.leave.accrual.plan
required=True
args: 'hr.leave.accrual.plan', 'Accrual Plan'
action_with_unused_accruals
Selection
default='postponed'
required='True'
string='At the end of the calendar year, unused accruals will be'
args: [('postponed', 'Transferred to the next year'), ('lost', 'Lost')]
added_value
Float
digits=(16, 5)
help='The number of hours/days that will be incremented in the specified Time Off Type for every period'
required=True
args: 'Rate'
added_value_type
Selection
default='days'
required=True
args: [('days', 'Days'), ('hours', 'Hours')]
first_day
Integer
default=1
first_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_day_display'
args: _get_selection_days
first_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June')]
first_month_day
Integer
default=1
first_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_month_day_display'
args: _get_selection_days
frequency
Selection
default='daily'
required=True
string='Frequency'
args: [('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a month'), ('monthly', 'Monthly'), ('biyearly', 'Twice a year'), ('yearly', 'Yearly')]
is_based_on_worked_time
Boolean
help='If checked, the rate will be prorated on time off type where type is set on Working Time in the configuration.'
args: 'Based on worked time'
maximum_leave
Float
default=100
help='Choose a cap for this accrual. 0 means no cap.'
required=False
args: 'Limit to'
parent_id
Many2one → hr.leave.accrual.level
help='If this field is empty, this level is the first one.'
string='Previous Level'
args: 'hr.leave.accrual.level'
postpone_max_days
Integer
help='Set a maximum of days an allocation keeps at the end of the year. 0 for no limit.'
args: 'Maximum amount of accruals to transfer'
second_day
Integer
default=15
second_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_day_display'
args: _get_selection_days
second_month
Selection
default='jul'
args: [('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
second_month_day
Integer
default=1
second_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_month_day_display'
args: _get_selection_days
sequence
Integer
compute='_compute_sequence'
help='Sequence is generated automatically by start time delta.'
store=True
string='sequence'
start_count
Integer
default='1'
help='The accrual starts after a defined period from the allocation start date. This field defines the number of days, months or years after which accrual is used.'
args: 'Start after'
start_type
Selection
default='day'
help='This field defines the unit of time after which the accrual starts.'
required=True
string=' '
args: [('day', 'day(s)'), ('month', 'month(s)'), ('year', 'year(s)')]
week_day
Selection
default='mon'
required=True
string='Allocation on'
args: [('mon', 'Monday'), ('tue', 'Tuesday'), ('wed', 'Wednesday'), ('thu', 'Thursday'), ('fri', 'Friday'), ('sat', 'Saturday'), ('sun', 'Sunday')]
yearly_day
Integer
default=1
yearly_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_yearly_day_display'
args: _get_selection_days
yearly_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
No public methods.
allocation_ids
One2many → hr.leave.allocation
employees_count
Integer
compute='_compute_employee_count'
args: 'Employees'
level_count
Integer
compute='_compute_level_count'
args: 'Levels'
level_ids
One2many → hr.leave.accrual.level
copy=True
args: 'hr.leave.accrual.level', 'accrual_plan_id'
name
Char
required=True
args: 'Name'
show_transition_mode
Boolean
compute='_compute_show_transition_mode'
time_off_type_id
Many2one → hr.leave.type
help='Specify if this accrual plan can only be used with this Time Off Type.\n Leave empty if this accrual plan can be used with any Time Off Type.'
string='Time Off Type'
args: 'hr.leave.type'
transition_mode
Selection
default='immediately'
help="Immediately: When the date corresponds to the new level, your accrual is automatically computed, granted and you switch to new level\n After this accrual's period: When the accrual is complete (a week, a month), and granted, you switch to next level if allocation date corresponds"
required=True
string='Level Transition'
args: [('immediately', 'Immediately'), ('end_of_accrual', "After this accrual's period")]
action_open_accrual_plan_employees(self)
copy(self, default=None)
No new fields.
Public methods (0)No public methods.
accrual_plan_id
Many2one → hr.leave.accrual.plan
compute='_compute_from_holiday_status_id'
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
readonly=False
store=True
tracking=True
args: 'hr.leave.accrual.plan'
active
Boolean
default=True
active_employee
Boolean
readonly=True
related='employee_id.active'
args: 'Active Employee'
allocation_type
Selection
default='regular'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Date
copy=False
default=fields.Date.context_today
index=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'Start Date'
date_to
Date
copy=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_holiday_status_id'
default=_default_holiday_status_id
domain=_domain_holiday_status_id
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_officer
Boolean
compute='_compute_is_officer'
lastcall
Date
default=fields.Date.context_today
readonly=True
args: 'Date of the last accrual allocation'
leaves_taken
Float
compute='_compute_leaves'
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_manager_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
name_validity
Char
compute='_compute_description_validity'
args: 'Description with validity'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_from_holiday_status_id'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='If Accrual Allocation: Days given by the accrual system.'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help="If Accrual Allocation: Number of hours allocated in addition to the ones you will get via the accrual' system."
args: 'Duration (hours)'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Allocation Description'
state
Selection
copy=False
default='draft'
help=<expr>
readonly=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate', 'Approved')]
taken_leave_ids
One2many → hr.leave
domain="[('state', 'in', ['confirm', 'validate1', 'validate'])]"
args: 'hr.leave', 'holiday_allocation_id'
type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
create(self, vals_list)
message_subscribe(self, partner_ids=None, subtype_ids=None)
name_get(self)
onchange(self, values, field_name, field_onchange)
write(self, values)
active_employee
Boolean
readonly=True
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status
Selection
leave_type
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
number_of_days
Float
group_operator='sum'
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
active
Boolean
readonly=True
active_employee
Boolean
readonly=True
allocation_id
Many2one → hr.leave.allocation
readonly=True
string='Allocation Request'
args: 'hr.leave.allocation'
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
leave_id
Many2one → hr.leave
readonly=True
string='Leave Request'
args: 'hr.leave'
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_open_record(self)
action_time_off_analysis(self)
init(self)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
department_id
Many2one → hr.department
readonly=True
args: 'hr.department'
duration
Float
readonly=True
string='Duration'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
is_hatched
Boolean
readonly=True
args: 'Hatched'
is_striked
Boolean
readonly=True
args: 'Striked'
job_id
Many2one → hr.job
readonly=True
args: 'hr.job'
name
Char
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
get_unusual_days(self, date_from, date_to=None)
init(self)
color
Integer
default=<expr>
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
department_ids
Many2many → hr.department
string='Departments'
args: 'hr.department'
end_date
Date
required=True
name
Char
required=True
resource_calendar_id
Many2one → resource.calendar
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'resource.calendar', 'Working Hours'
start_date
Date
required=True
No public methods.
No new fields.
Public methods (0)No public methods.
accrual_count
Float
compute='_compute_accrual_count'
string='Accruals count'
accruals_ids
One2many → hr.leave.accrual.plan
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_count
Integer
compute='_compute_allocation_count'
string='Allocations'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_validation_type
Selection
compute='_compute_allocation_validation_type'
default='no'
help="Select the level of approval needed in case of request by employee\n - No validation needed: The employee's request is automatically approved.\n - Approved by Time Off Officer: The employee's request need to be manually approved by the Time Off Officer."
readonly=False
store=True
string='Approval'
args: [('officer', 'Approved by Time Off Officer'), ('no', 'No validation needed')]
closest_allocation_to_expire
Many2one → hr.leave.allocation
compute='_compute_leaves'
args: 'hr.leave.allocation', 'Allocation'
color
Integer
help='The color selected here will be used in every screen with the time off type.'
string='Color'
color_name
Selection
default='red'
help='This color will be used in the time off summary located in Reporting > Time off by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
employee_requests
Selection
default='no'
help='Extra Days Requests Allowed: User can request an allocation for himself.\n\n Not Allowed: User cannot request an allocation.'
required=True
string='Employee Requests'
args: [('yes', 'Extra Days Requests Allowed'), ('no', 'Not Allowed')]
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
has_valid_allocation
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
icon_id
Many2one → ir.attachment
domain="[('res_model', '=', 'hr.leave.type'), ('res_field', '=', 'icon_id')]"
string='Cover Image'
args: 'ir.attachment'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Leave Validation'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken'
string='Remaining Time Off'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
requires_allocation
Selection
default='yes'
help='Yes: Time off requests need to have a valid allocation.\n\n No Limit: Time Off requests can be taken without any prior allocation.'
required=True
string='Requires allocation'
args: [('yes', 'Yes'), ('no', 'No Limit')]
responsible_id
Many2one → res.users
domain=<expr>
help='Choose the Time Off Officer who will be notified to approve allocation or Time Off request'
args: 'res.users', 'Responsible Time Off Officer'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
support_document
Boolean
string='Supporting Document'
time_type
Selection
default='leave'
help="The distinction between working time (ex. Attendance) and absence (ex. Training) will be used in the computation of Accrual's plan rate."
string='Kind of Time Off'
args: [('other', 'Worked Time'), ('leave', 'Absence')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
virtual_leaves_taken
Float
compute='_compute_leaves'
help='Sum of validated and non validated time off requests.'
string='Virtual Time Off Already Taken'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_accrual_plans(self)
action_see_days_allocated(self)
action_see_group_leaves(self)
check_allocation_requirement_edit_validity(self)
get_days_all_request(self)
get_employees_days(self, employee_ids, date=None)
name_get(self)
requested_name_get(self)
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)mail_partner_format(self, fields=None)
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_remaining_display
Char
related='employee_id.allocation_remaining_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
hr_icon_display
Selection
related='employee_id.hr_icon_display'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
SELF_READABLE_FIELDS(self)
create(self, vals_list)
associated_leaves_count
Integer
compute='_compute_associated_leaves_count'
args: 'Leave Count'
No public methods.
holiday_id
Many2one → hr.leave
string='Leave Request'
args: 'hr.leave'
create(self, vals_list)
unlink(self)
write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, Aaron Bohy, Barad Mahendra, Yannick Tivisse, Dharmraj Jhala, Romain Derie, Adrien Dieudonne, Christophe Monniez, Julien Castiaux, Xavier-Do, Paul Morelle, Xavier Dubuc, Sébastien Theys, Nasreddin (bon), alt-odoo, Julien Mougenot, Samuel Degueldre, Achraf (abz), Adrien Widart, Ivan Yelizariev, Jérémy Hennecart, Touati Djamel (otd), Prakash Prajapati, nie, Tiffany Chang (tic), IEL, Ivàn Todorovich, Mathieu Duckerts-Antoine, Hiral Bhavsar, yograj tandel, Arnaud Joset, William Braeckman, nounoubensebia, Kevin Baptiste, Philippe Wauthy, Arnaud Baes, Hubert Van de Walle (huvw), sofiagvaladze, Florian Damhaut, Merlin (megu), MerlinGuillaume, tranngocson1996, mafo-odoo, Audric Onockx (auon), Agustín Castro Bugallo, Yolann Sabaux, Aurelien van Delft (avd), Michael Mattiello (mcm), Dossogne Bertrand, dht-odoo, Roy Le, Thomas Lefebvre (thle), Louis Wicket (wil), Tommy (tong), Tom De Caluwé, Malay Khamar, Qiuyu (QHO), Jurgen (jugj), arsi, Krina Oza, Michael (mcm), Simon Goffaux (sigo), prye-odoo, Leonardo Pavan Rocha, Dawn Hwang, Andrzej(pian), Zelong Lin, ravb-odoo, Dang Van Loc, Mattis Megevand, tronghung0398, dasz, Mélanie, Youssef Bashandy |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/time-off |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:26 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ===================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_accrual_level_view_form |
hr.leave.accrual.level.form | hr.leave.accrual.level | form | New |
hr_accrual_plan_view_form |
hr.leave.accrual.plan.form | hr.leave.accrual.plan | form | New |
hr_accrual_plan_view_tree |
hr.leave.accrual.plan.tree | hr.leave.accrual.plan | tree | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_departure_wizard_view_form |
hr.departure.wizard.view.form.extend3 | hr.departure.wizard | xpath | Inherits hr.hr_departure_wizard_view_form |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager_dashboard |
hr.leave.allocation.view.form.manager.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form_manager |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_employee_type_report |
hr.leave.employee.type.report.view.pivot | hr.leave.employee.type.report | pivot | New |
hr_leave_employee_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_calendar_view_search |
hr.leave.report.calendar.view.search | hr.leave.report.calendar | search | New |
hr_leave_report_pivot |
report.hr.holidays.report.leave_all.pivot | hr.leave.report | pivot | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | field | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | xpath | Inherits hr.res_users_view_form_profile |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | xpath | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
resource_calendar_leaves_tree_inherit |
resource.calendar.leaves.tree.inherit | resource.calendar.leaves | xpath | Inherits resource.resource_calendar_leave_tree |
resource_calendar_leaves_view_search_inherit |
resource.calendar.leaves.search.inherit | resource.calendar.leaves | filter | Inherits resource.view_resource_calendar_leaves_search |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.tree.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
view_search_hr_holidays_employee_type_report |
hr.holidays.filter | hr.leave.employee.type.report | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
action_open_allocation_department(self)
action_open_leave_department(self)
archive_allocation
Boolean
default=True
help='Remove employee from existing accrual plans.'
args: 'Archive Employee Allocations'
cancel_leaves
Boolean
default=True
help='Cancel all time off after this date.'
args: 'Cancel Future Leaves'
action_register_departure(self)
current_leave_id
Many2one → hr.leave.type
compute='_compute_current_leave'
groups='hr.group_hr_user'
string='Current Time Off Type'
args: 'hr.leave.type'
action_time_off_dashboard(self)
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_count'
allocation_used_count
Float
compute='_compute_total_allocation_used'
args: 'Total number of days off used'
allocation_used_display
Char
compute='_compute_total_allocation_used'
allocations_count
Integer
compute='_compute_allocation_count'
args: 'Total number of allocations'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Remaining Paid Time Off'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, values)
write(self, values)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
active_employee
Boolean
readonly=True
related='employee_id.active'
attachment_ids
One2many → ir.attachment
string='Attachments'
args: 'ir.attachment', 'res_id'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
help='Category of Employee'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
color
Integer
related='holiday_status_id.color'
args: 'Color'
date_from
Datetime
compute='_compute_date_from_to'
copy=False
index=True
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
copy=False
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
store=True
args: 'Requested (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
compute_sudo=False
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
groups='hr_holidays.group_hr_holidays_user'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employees'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_allocation_id
Many2one → hr.leave.allocation
compute='_compute_from_holiday_status_id'
readonly=False
store=True
string='Allocation'
args: 'hr.leave.allocation'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain=['|', ('requires_allocation', '=', 'no'), ('has_valid_allocation', '=', True)]
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_hatched
Boolean
compute='_compute_is_hatched'
args: 'Hatched'
is_striked
Boolean
compute='_compute_is_hatched'
args: 'Striked'
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
leave_type_support_document
Boolean
related='holiday_status_id.support_document'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
readonly=False
store=True
args: 'hr.employee'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
compute_sudo=False
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
copy=False
help='Number of days of the time off request. Used in the calculation. To manually correct the duration, use this field.'
readonly=False
store=True
tracking=True
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='Number of days of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in days'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='Number of hours of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
number_of_hours_text
Char
compute='_compute_number_of_hours_text'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Time Off Description'
report_note
Text
copy=False
groups='hr_holidays.group_hr_holidays_manager'
args: 'HR Comments'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_unit_custom
Boolean
compute='_compute_request_unit_custom'
readonly=False
store=True
args: 'Days-long custom hours'
request_unit_half
Boolean
compute='_compute_request_unit_half'
readonly=False
store=True
args: 'Half Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
readonly=False
store=True
args: 'Custom Hours'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
compute='_compute_state'
copy=False
help=<expr>
readonly=False
store=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
supported_attachment_ids
Many2many → ir.attachment
compute='_compute_supported_attachment_ids'
inverse='_inverse_supported_attachment_ids'
string='Attach File'
args: 'ir.attachment'
supported_attachment_ids_count
Integer
compute='_compute_supported_attachment_ids'
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
action_approve(self)
action_confirm(self)
action_documents(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, subtype_ids=None)
name_get(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
unlink(self)
write(self, values)
accrual_plan_id
Many2one → hr.leave.accrual.plan
required=True
args: 'hr.leave.accrual.plan', 'Accrual Plan'
action_with_unused_accruals
Selection
default='postponed'
required='True'
string='At the end of the calendar year, unused accruals will be'
args: [('postponed', 'Transferred to the next year'), ('lost', 'Lost')]
added_value
Float
digits=(16, 5)
help='The number of hours/days that will be incremented in the specified Time Off Type for every period'
required=True
args: 'Rate'
added_value_type
Selection
default='days'
required=True
args: [('days', 'Days'), ('hours', 'Hours')]
first_day
Integer
default=1
first_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_day_display'
args: _get_selection_days
first_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June')]
first_month_day
Integer
default=1
first_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_first_month_day_display'
args: _get_selection_days
frequency
Selection
default='daily'
required=True
string='Frequency'
args: [('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a month'), ('monthly', 'Monthly'), ('biyearly', 'Twice a year'), ('yearly', 'Yearly')]
is_based_on_worked_time
Boolean
help='Only accrue for the time worked by the employee. This is the time when the employee did not take time off.'
args: 'Based on worked time'
level
Integer
compute='_compute_level'
help='Level computed through the sequence.'
maximum_leave
Float
default=100
help='Choose a cap for this accrual. 0 means no cap.'
required=False
args: 'Limit to'
parent_id
Many2one → hr.leave.accrual.level
help='If this field is empty, this level is the first one.'
string='Previous Level'
args: 'hr.leave.accrual.level'
second_day
Integer
default=15
second_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_day_display'
args: _get_selection_days
second_month
Selection
default='jul'
args: [('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
second_month_day
Integer
default=1
second_month_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_second_month_day_display'
args: _get_selection_days
sequence
Integer
compute='_compute_sequence'
help='Sequence is generated automatically by start time delta.'
store=True
string='sequence'
start_count
Integer
default='1'
help='The accrual starts after a defined period from the allocation start date. This field defines the number of days, months or years after which accrual is used.'
args: 'Start after'
start_type
Selection
default='day'
help='This field defines the unit of time after which the accrual starts.'
required=True
string=' '
args: [('day', 'day(s)'), ('month', 'month(s)'), ('year', 'year(s)')]
week_day
Selection
default='mon'
required=True
string='Allocation on'
args: [('mon', 'Monday'), ('tue', 'Tuesday'), ('wed', 'Wednesday'), ('thu', 'Thursday'), ('fri', 'Friday'), ('sat', 'Saturday'), ('sun', 'Sunday')]
yearly_day
Integer
default=1
yearly_day_display
Selection
compute='_compute_days_display'
inverse='_inverse_yearly_day_display'
args: _get_selection_days
yearly_month
Selection
default='jan'
args: [('jan', 'January'), ('feb', 'February'), ('mar', 'March'), ('apr', 'April'), ('may', 'May'), ('jun', 'June'), ('jul', 'July'), ('aug', 'August'), ('sep', 'September'), ('oct', 'October'), ('nov', 'November'), ('dec', 'December')]
No public methods.
allocation_ids
One2many → hr.leave.allocation
employees_count
Integer
compute='_compute_employee_count'
args: 'Employees'
level_count
Integer
compute='_compute_level_count'
args: 'Levels'
level_ids
One2many → hr.leave.accrual.level
copy=True
args: 'hr.leave.accrual.level', 'accrual_plan_id'
name
Char
required=True
args: 'Name'
time_off_type_id
Many2one → hr.leave.type
help='Specify if this accrual plan can only be used with this Time Off Type.\n Leave empty if this accrual plan can be used with any Time Off Type.'
string='Time Off Type'
args: 'hr.leave.type'
transition_mode
Selection
default='immediately'
help="Immediately: When the date corresponds to the new level, your accrual is automatically computed, granted and you switch to new level\n After this accrual's period: When the accrual is complete (a week, a month), and granted, you switch to next level if allocation date corresponds"
required=True
string='Level Transition'
args: [('immediately', 'Immediately'), ('end_of_accrual', "After this accrual's period")]
action_open_accrual_plan_employees(self)
copy(self, default=None)
accrual_plan_id
Many2one → hr.leave.accrual.plan
compute='_compute_from_holiday_status_id'
domain="['|', ('time_off_type_id', '=', False), ('time_off_type_id', '=', holiday_status_id)]"
readonly=False
store=True
tracking=True
args: 'hr.leave.accrual.plan'
active
Boolean
default=True
active_employee
Boolean
readonly=True
related='employee_id.active'
args: 'Active Employee'
allocation_type
Selection
default='regular'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Date
copy=False
default=fields.Date.context_today
index=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'Start Date'
date_to
Date
copy=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_company_id
Many2one
readonly=True
related='employee_id.company_id'
store=True
employee_id
Many2one → hr.employee
compute='_compute_from_employee_ids'
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
employee_ids
Many2many → hr.employee
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employees'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_holiday_status_id'
default=_default_holiday_status_id
domain=_domain_holiday_status_id
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
is_officer
Boolean
compute='_compute_is_officer'
lastcall
Date
default=fields.Date.context_today
readonly=True
args: 'Date of the last accrual allocation'
leaves_taken
Float
compute='_compute_leaves'
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_manager_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Company Mode'
args: 'res.company'
multi_employee
Boolean
compute='_compute_from_employee_ids'
help='Holds whether this allocation concerns more than 1 employee'
store=True
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
name_validity
Char
compute='_compute_description_validity'
args: 'Description with validity'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_from_holiday_status_id'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help="If Accrual Allocation: Number of days allocated in addition to the ones you will get via the accrual' system."
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help="If Accrual Allocation: Number of hours allocated in addition to the ones you will get via the accrual' system."
args: 'Duration (hours)'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Allocation Description'
state
Selection
copy=False
default='draft'
help=<expr>
readonly=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate', 'Approved')]
taken_leave_ids
One2many → hr.leave
domain="[('state', 'in', ['confirm', 'validate1', 'validate'])]"
args: 'hr.leave', 'holiday_allocation_id'
type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
create(self, vals_list)
message_subscribe(self, partner_ids=None, subtype_ids=None)
name_get(self)
write(self, values)
active_employee
Boolean
readonly=True
related='employee_id.active'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status
Selection
leave_type
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
number_of_days
Float
group_operator='sum'
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
active_employee
Boolean
readonly=True
related='employee_id.active'
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
company_id
Many2one → res.company
readonly=True
string='Company'
args: 'res.company'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
department_id
Many2one → hr.department
readonly=True
args: 'hr.department'
duration
Float
readonly=True
store=False
string='Duration'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
is_hatched
Boolean
readonly=True
args: 'Hatched'
is_striked
Boolean
readonly=True
args: 'Striked'
job_id
Many2one → hr.job
readonly=True
args: 'hr.job'
name
Char
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
get_unusual_days(self, date_from, date_to=None)
init(self)
accrual_count
Float
compute='_compute_accrual_count'
string='Accruals count'
accruals_ids
One2many → hr.leave.accrual.plan
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_validation_type
Selection
default='officer'
string='Approval'
args: [('no', 'No validation needed'), ('officer', 'Approved by Time Off Officer'), ('set', 'Set by Time Off Officer')]
color
Integer
help='The color selected here will be used in every screen with the time off type.'
string='Color'
color_name
Selection
default='red'
help='This color will be used in the time off summary located in Reporting > Time off by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
employee_requests
Selection
default='no'
required=True
string='Employee Requests'
args: [('yes', 'Extra Days Requests Allowed'), ('no', 'Not Allowed')]
group_days_allocation
Float
compute='_compute_group_days_allocation'
string='Days Allocated'
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
has_valid_allocation
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
icon_id
Many2one → ir.attachment
domain="[('res_model', '=', 'hr.leave.type'), ('res_field', '=', 'icon_id')]"
string='Cover Image'
args: 'ir.attachment'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Leave Validation'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Approver"), ('both', "By Employee's Approver and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken'
string='Remaining Time Off'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
requires_allocation
Selection
default='yes'
required=True
string='Requires allocation'
args: [('yes', 'Yes'), ('no', 'No Limit')]
responsible_id
Many2one → res.users
domain=<expr>
help='Choose the Time Off Officer who will be notified to approve allocation or Time Off request'
args: 'res.users', 'Responsible Time Off Officer'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
support_document
Boolean
string='Supporting Document'
time_type
Selection
default='leave'
help='Whether this should be computed as a holiday or as work time (eg: formation)'
string='Kind of Leave'
args: [('leave', 'Time Off'), ('other', 'Other')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
virtual_leaves_taken
Float
compute='_compute_leaves'
help='Sum of validated and non validated time off requests.'
string='Virtual Time Off Already Taken'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_accrual_plans(self)
action_see_days_allocated(self)
action_see_group_leaves(self)
get_days_all_request(self)
get_employees_days(self, employee_ids, date=None)
name_get(self)
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)mail_partner_format(self)
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_used_count
Float
related='employee_id.allocation_used_count'
allocation_used_display
Char
related='employee_id.allocation_used_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
hr_icon_display
Selection
related='employee_id.hr_icon_display'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
SELF_READABLE_FIELDS(self)
holiday_id
Many2one → hr.leave
string='Leave Request'
args: 'hr.leave'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Barad Mahendra, Yannick Tivisse, Christophe Monniez, Nans Lefebvre, Alexandre Kühn, Xavier-Do, David Tran, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Sébastien Theys, Nasreddin (bon), alt-odoo, Julien Mougenot, fw-bot, Rémy Baranx (bar), Achraf (abz), Lucas Lefèvre, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Touati Djamel (otd), nie, IEL, Mathieu Duckerts-Antoine, jbm-odoo, Arnaud Joset, William Braeckman, Kevin Baptiste, Philippe Wauthy, Arnaud Baes, laa, Víctor Martínez, Florian Damhaut, MerlinGuillaume, Didier (did), Audric Onockx (auon), Michael Mattiello (mcm), Dossogne Bertrand, bve-odoo, Thomas Lefebvre (thle), Louis Wicket (wil), Tommy (tong), Tom De Caluwé, Anna Janiszewska, Simon Genin (ges) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/leaves |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:27 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ===================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_departure_wizard_view_form |
hr.departure.wizard.view.form.extend3 | hr.departure.wizard | xpath | Inherits hr.hr_departure_wizard_view_form |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_kanban_view_public_employees_kanban |
hr.employee.public.kanban.leaves.status | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_kanban |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_search_manager |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_search_my |
hr.leave.allocation.view.search.my | hr.leave.allocation | xpath | Inherits view_hr_leave_allocation_filter |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_report_calendar_view |
hr.leave.report.calendar.view | hr.leave.report.calendar | calendar | New |
hr_leave_report_calendar_view_form |
hr.leave.report.calendar.view.form | hr.leave.report.calendar | form | New |
hr_leave_report_kanban |
report.hr.holidays.report.leave_all.kanban | hr.leave.report | kanban | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_dashboard_new_time_off |
hr.leave.view.form.dashboard.new.time.off | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form_dashboard |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | div | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_search_manager |
hr.holidays.view.search.manager | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_search_my |
hr.holidays.view.search.my | hr.leave | xpath | Inherits view_hr_holidays_filter |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
qunit_suite |
hr_holidays_qunit_suite | ir.ui.view | qweb | Inherits web.qunit_suite_tests |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | xpath | Inherits hr.res_users_view_form_profile |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_employee_tree_inherit_leave |
hr.employee.tree.leave | hr.employee | xpath | Inherits hr.view_employee_tree |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
cancel_leaves
Boolean
default=True
args: 'Cancel Future Leaves'
action_register_departure(self)
No new fields.
Public methods (0)No public methods.
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_count'
allocation_used_count
Float
compute='_compute_total_allocation_used'
args: 'Total number of days off used'
allocation_used_display
Char
compute='_compute_total_allocation_used'
current_leave_id
Many2one → hr.leave.type
compute='_compute_leave_status'
string='Current Time Off Type'
args: 'hr.leave.type'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
hr_icon_display
Selection
selection_add=[('presence_holiday_absent', 'On leave'), ('presence_holiday_present', 'Present but on leave')]
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
compute='_compute_leave_manager'
help='Select the user responsible for approving "Time Off" of this employee.\nIf empty, the approval is done by an Administrator or Approver (determined in settings/users).'
readonly=False
store=True
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Remaining Paid Time Off'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, values)
write(self, values)
No new fields.
Public methods (0)No public methods.
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
help='Category of Employee'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
compute='_compute_date_from_to'
copy=False
index=True
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_date_from_to'
copy=False
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
store=True
args: 'Requested (Days/Hours)'
employee_id
Many2one → hr.employee
compute='_compute_from_holiday_type'
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain=[('valid', '=', True)]
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
readonly=False
store=True
args: 'hr.employee'
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Company Mode'
args: 'res.company'
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
copy=False
help='Number of days of the time off request. Used in the calculation. To manually correct the duration, use this field.'
readonly=False
store=True
tracking=True
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='Number of days of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in days'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='Number of hours of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
number_of_hours_text
Char
compute='_compute_number_of_hours_text'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
payslip_status
Boolean
copy=False
help='Green this button when the time off has been taken into account in the payslip.'
args: 'Reported in last payslips'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Time Off Description'
report_note
Text
copy=False
groups='hr_holidays.group_hr_holidays_manager'
args: 'HR Comments'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [('0', '12:00 AM'), ('0.5', '12:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '12:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_unit_custom
Boolean
compute='_compute_request_unit_custom'
readonly=False
store=True
args: 'Days-long custom hours'
request_unit_half
Boolean
compute='_compute_request_unit_half'
readonly=False
store=True
args: 'Half Day'
request_unit_hours
Boolean
compute='_compute_request_unit_hours'
readonly=False
store=True
args: 'Custom Hours'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
compute='_compute_state'
copy=False
help=<expr>
readonly=False
store=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
default=<expr>
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.leave_validation_type'
string='Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
get_unusual_days(self, date_from, date_to=None)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
unlink(self)
write(self, values)
accrual_limit
Integer
default=0
help='Maximum of allocation for accrual; 0 means no maximum.'
args: 'Balance limit'
allocation_type
Selection
default='regular'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
default=fields.Date.context_today
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'Start Date'
date_to
Datetime
compute='_compute_from_holiday_status_id'
copy=False
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
compute='_compute_department_id'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
store=True
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_id
Many2one → hr.employee
compute='_compute_from_holiday_type'
index=True
ondelete='restrict'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
compute='_compute_from_employee_id'
domain=_holiday_status_id_domain
readonly=False
required=True
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
interval_number
Integer
compute='_compute_from_holiday_status_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
args: 'Number of unit between two intervals'
interval_unit
Selection
compute='_compute_from_holiday_status_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Unit of time between two intervals'
args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
leaves_taken
Float
compute='_compute_leaves'
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
manager_id
Many2one → hr.employee
compute='_compute_from_employee_id'
store=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
mode_company_id
Many2one → res.company
compute='_compute_from_holiday_type'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Company Mode'
args: 'res.company'
name
Char
compute='_compute_description'
compute_sudo=False
inverse='_inverse_description'
search='_search_description'
args: 'Description'
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_from_holiday_status_id'
default=1
help='Duration in days. Reference field to use when necessary.'
readonly=False
store=True
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help="If Accrual Allocation: Number of days allocated in addition to the ones you will get via the accrual' system."
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help="If Accrual Allocation: Number of hours allocated in addition to the ones you will get via the accrual' system."
args: 'Duration (hours)'
number_per_interval
Float
compute='_compute_from_holiday_status_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
args: 'Number of unit per interval'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
private_name
Char
groups='hr_holidays.group_hr_holidays_user'
args: 'Allocation Description'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validates the allocation with second level (If allocation type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
unit_per_interval
Selection
compute='_compute_from_holiday_status_id'
readonly=False
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]}
store=True
string='Unit of time added at each interval'
args: [('hours', 'Hours'), ('days', 'Days')]
validation_type
Selection
readonly=True
related='holiday_status_id.allocation_validation_type'
string='Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
create(self, values)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
unlink(self)
write(self, values)
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation'), ('request', 'Time Off')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
payslip_status
Boolean
readonly=True
args: 'Reported in last payslips'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
company_id
Many2one → res.company
readonly=True
args: 'res.company'
duration
Float
readonly=True
store=False
string='Duration'
employee_id
Many2one → hr.employee
readonly=True
args: 'hr.employee'
name
Char
readonly=True
string='Name'
start_datetime
Datetime
readonly=True
string='From'
state
Selection
readonly=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
stop_datetime
Datetime
readonly=True
string='To'
tz
Selection
readonly=True
string='Timezone'
args: _tz_get
get_unusual_days(self, date_from, date_to=None)
init(self)
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_type
Selection
default='no'
help='\tNo Limit: no allocation by default, users can freely request time off; \tAllow Employees Requests: allocated by HR and users can request time off and allocations; \tSet by Time Off Officer: allocated by HR and cannot be bypassed; users can request time off;'
string='Mode'
args: [('no', 'No Limit'), ('fixed_allocation', 'Allow Employees Requests'), ('fixed', 'Set by Time Off Officer')]
allocation_validation_type
Selection
default='manager'
string='Allocation Validation'
args: [('hr', 'By Time Off Officer'), ('manager', "By Employee's Manager"), ('both', "By Employee's Manager and Time Off Officer")]
code
Char
color_name
Selection
default='red'
help='This color will be used in the time off summary located in Reporting > Time off by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
group_days_allocation
Float
compute='_compute_group_days_allocation'
string='Days Allocated'
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leave_validation_type
Selection
default='hr'
string='Leave Validation'
args: [('no_validation', 'No Validation'), ('hr', 'By Time Off Officer'), ('manager', "By Employee's Manager"), ('both', "By Employee's Manager and Time Off Officer")]
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken'
string='Remaining Time Off'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
responsible_id
Many2one → res.users
domain=<expr>
help="This user will be responsible for approving this type of time off. This is only used when validation is 'By Time Off Officer' or 'By Employee's Manager and Time Off Officer'"
args: 'res.users', 'Responsible'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
time_type
Selection
default='leave'
help='Whether this should be computed as a holiday or as work time (eg: formation)'
string='Kind of Leave'
args: [('leave', 'Time Off'), ('other', 'Other')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
valid
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
validity_start
Date
help='Adding validity to types of time off so that it cannot be selected outside this time period'
args: 'From'
validity_stop
Date
virtual_leaves_taken
Float
compute='_compute_leaves'
help='Sum of validated and non validated time off requests.'
string='Virtual Time Off Already Taken'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_days_allocated(self)
action_see_group_leaves(self)
get_days(self, employee_id)
get_days_all_request(self)
get_employees_days(self, employee_ids)
name_get(self)
No new fields.
Public methods (1)partner_info(self, all_partners, direct_partners)
No new fields.
Public methods (2)create(self, vals)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_used_count
Float
related='employee_id.allocation_used_count'
allocation_used_display
Char
related='employee_id.allocation_used_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
hr_icon_display
Selection
related='employee_id.hr_icon_display'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
No public methods.
holiday_id
Many2one → hr.leave
string='Leave Request'
args: 'hr.leave'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/13.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources/Time Off |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Yannick Tivisse, Martin Geubelle, Odoo Online, Nicolas Seinlet, Jigar Patel, RomainLibert, Christophe Monniez, Jorge Pinna Puissant, Nans Lefebvre, Alexandre Kühn, Toufik Ben Jaa, Adrian Torres, XavierDo, Xavier-Do, David Tran, Romeo Fragomeli, jvm-odoo, Andrea Grazioso (agr-odoo), Enric Tobella, Sébastien Theys, alt-odoo, fw-bot, Lucas Lefèvre, Touati Djamel (otd), jbm-odoo, William Braeckman, Kevin Baptiste, Philippe Wauthy, Víctor Martínez, Florian Damhaut |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/leaves |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:06:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - mail_bot - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage time off requests and allocations ===================================== This application controls the time off schedule of your company. It allows employees to request time off. Then, managers can review requests for time off and approve or reject them. This way you can control the overall time off planning for the company or department. You can configure several kinds of time off (sickness, paid days, ...) and allocate time off to an employee or department quickly using time off allocation. An employee can also make a request for more days off by making a new time off allocation. It will increase the total of available days for that time off type (if the request is accepted). You can keep track of time off in different ways by following reports: * Time Off Summary * Time Off by Department * Time Off Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a time off request is accepted by setting up a type of meeting in time off Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_public_form_view_inherit |
hr.employee.public.leave.form.inherit | hr.employee.public | xpath | Inherits hr.hr_employee_public_view_form |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_leave_allocation_view_activity |
hr.leave.allocation.view.activity | hr.leave.allocation | activity | New |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_report_kanban |
report.hr.holidays.report.leave_all.kanban | hr.leave.report | kanban | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_view_activity |
hr.leave.view.activity | hr.leave | activity | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_dashboard |
hr.leave.view.dashboard | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_dashboard |
hr.leave.view.form.dashboard | hr.leave | xpath | Inherits hr_holidays.hr_leave_view_form |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | div | Inherits hr_leave_view_form |
hr_leave_view_form_manager_approve |
hr.leave.view.form.manager.approve | hr.leave | div | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
qunit_suite |
hr_holidays_qunit_suite | ir.ui.view | qweb | Inherits web.qunit_suite |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
res_users_view_form |
hr.user.preferences.view.form.leave.inherit | res.users | button | Inherits hr.res_users_view_form_profile |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Time Off to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
No new fields.
Public methods (0)No public methods.
allocation_count
Float
compute='_compute_allocation_count'
args: 'Total number of days allocated.'
allocation_display
Char
compute='_compute_allocation_count'
allocation_used_count
Float
compute='_compute_total_allocation_used'
args: 'Total number of days off used'
allocation_used_display
Char
compute='_compute_total_allocation_used'
current_leave_id
Many2one → hr.leave.type
compute='_compute_leave_status'
string='Current Time Off Type'
args: 'hr.leave.type'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Time Off Status'
is_absent
Boolean
compute='_compute_leave_status'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leave_manager_id
Many2one → res.users
help='User responsible of leaves approval.'
string='Time Off'
args: 'res.users'
leaves_count
Float
compute='_compute_remaining_leaves'
args: 'Number of Time Off'
remaining_leaves
Float
compute='_compute_remaining_leaves'
help='Total number of paid time off allocated to this employee, change this value to create allocation/time off request. Total based on all the time off types without overriding limit.'
string='Remaining Paid Time Off'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Time Off'
create(self, values)
write(self, values)
No new fields.
Public methods (0)No public methods.
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Time Off Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
help='Category of Employee'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'Start Date'
date_to
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
args: 'Requested (Days/Hours)'
employee_id
Many2one → hr.employee
default=_default_employee
domain=_employee_id_domain
index=True
ondelete='restrict'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain=[('valid', '=', True)]
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
meeting_id
Many2one → calendar.event
copy=False
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Company'
args: 'res.company'
name
Char
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
copy=False
help='Number of days of the time off request. Used in the calculation. To manually correct the duration, use this field.'
tracking=True
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='Number of days of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in days'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='Number of hours of the time off request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
payslip_status
Boolean
copy=False
help='Green this button when the time off has been taken into account in the payslip.'
args: 'Reported in last payslips'
report_note
Text
copy=False
groups='hr_holidays.group_hr_holidays_manager'
args: 'HR Comments'
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [('0', '12:00 AM'), ('0.5', '0:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '0:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [('0', '12:00 AM'), ('0.5', '0:30 AM'), ('1', '1:00 AM'), ('1.5', '1:30 AM'), ('2', '2:00 AM'), ('2.5', '2:30 AM'), ('3', '3:00 AM'), ('3.5', '3:30 AM'), ('4', '4:00 AM'), ('4.5', '4:30 AM'), ('5', '5:00 AM'), ('5.5', '5:30 AM'), ('6', '6:00 AM'), ('6.5', '6:30 AM'), ('7', '7:00 AM'), ('7.5', '7:30 AM'), ('8', '8:00 AM'), ('8.5', '8:30 AM'), ('9', '9:00 AM'), ('9.5', '9:30 AM'), ('10', '10:00 AM'), ('10.5', '10:30 AM'), ('11', '11:00 AM'), ('11.5', '11:30 AM'), ('12', '12:00 PM'), ('12.5', '0:30 PM'), ('13', '1:00 PM'), ('13.5', '1:30 PM'), ('14', '2:00 PM'), ('14.5', '2:30 PM'), ('15', '3:00 PM'), ('15.5', '3:30 PM'), ('16', '4:00 PM'), ('16.5', '4:30 PM'), ('17', '5:00 PM'), ('17.5', '5:30 PM'), ('18', '6:00 PM'), ('18.5', '6:30 PM'), ('19', '7:00 PM'), ('19.5', '7:30 PM'), ('20', '8:00 PM'), ('20.5', '8:30 PM'), ('21', '9:00 PM'), ('21.5', '9:30 PM'), ('22', '10:00 PM'), ('22.5', '10:30 PM'), ('23', '11:00 PM'), ('23.5', '11:30 PM')]
request_unit_custom
Boolean
request_unit_half
Boolean
request_unit_hours
Boolean
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the time off with second level (If time off type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='draft'
help=<expr>
readonly=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
default=<expr>
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.validation_type'
args: 'Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields_list)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
unlink(self)
write(self, values)
accrual_limit
Integer
default=0
help='Maximum of allocation for accrual; 0 means no maximum.'
args: 'Balance limit'
allocation_type
Selection
default='regular'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Type'
args: [('regular', 'Regular Allocation'), ('accrual', 'Accrual Allocation')]
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'Start Date'
date_to
Datetime
copy=False
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
tracking=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_id
Many2one → hr.employee
default=_default_employee
index=True
ondelete='restrict'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
tracking=True
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the allocation'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
default=_default_holiday_status_id
domain=_holiday_status_id_domain
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Time Off Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
interval_number
Integer
default=1
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Number of unit between two intervals'
interval_unit
Selection
default='weeks'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Unit of time between two intervals'
args: [('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
leaves_taken
Float
compute='_compute_leaves'
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
manager_id
Many2one → hr.employee
readonly=True
string='Manager'
args: 'hr.employee'
max_leaves
Float
compute='_compute_leaves'
mode_company_id
Many2one → res.company
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Company'
args: 'res.company'
name
Char
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
default=1
help='Duration in days. Reference field to use when necessary.'
tracking=True
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help="If Accrual Allocation: Number of days allocated in addition to the ones you will get via the accrual' system."
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help="If Accrual Allocation: Number of hours allocated in addition to the ones you will get via the accrual' system."
args: 'Duration (hours)'
number_per_interval
Float
default=1
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Number of unit per interval'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the allocation with second level (If allocation type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
tracking=True
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
unit_per_interval
Selection
default='hours'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Unit of time added at each interval'
args: [('hours', 'Hours'), ('days', 'Days')]
validation_type
Selection
readonly=True
related='holiday_status_id.validation_type'
args: 'Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
create(self, values)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
unlink(self)
write(self, values)
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
leave_type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation Request'), ('request', 'Time Off Request')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
payslip_status
Boolean
readonly=True
args: 'Reported in last payslips'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
action_time_off_analysis(self)
init(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the time off type without removing it.'
args: 'Active'
allocation_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Allocation Notification Subtype'
args: 'mail.message.subtype'
allocation_type
Selection
default='no'
help='\tNo Allocation Needed: no allocation by default, users can freely request time off;\tFree Allocation Request: allocated by HR and users can request time off and allocations;\tAllocated by HR only: allocated by HR and cannot be bypassed; users can request time off;'
string='Mode'
args: [('no', 'No Allocation Needed'), ('fixed_allocation', 'Free Allocation Request'), ('fixed', 'Allocated by HR only')]
code
Char
color_name
Selection
default='red'
help='This color will be used in the time off summary located in Reporting > Time off by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
create_calendar_meeting
Boolean
default=True
string='Display Time Off in Calendar'
group_days_allocation
Float
compute='_compute_group_days_allocation'
string='Days Allocated'
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Time Off'
leave_notif_subtype_id
Many2one → mail.message.subtype
default=<expr>
string='Time Off Notification Subtype'
args: 'mail.message.subtype'
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a negative value.'
string='Time off Already Taken'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all time off requests with a positive value.'
search='_search_max_leaves'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Time Off Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken'
string='Remaining Time Off'
request_unit
Selection
default='day'
required=True
string='Take Time Off in'
args: [('day', 'Day'), ('half_day', 'Half Day'), ('hour', 'Hours')]
responsible_id
Many2one → res.users
domain=<expr>
help="This user will be responsible for approving this type of times offThis is only used when validation is 'hr' or 'both'"
args: 'res.users', 'Responsible'
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in time off request'
time_type
Selection
default='leave'
help='Whether this should be computed as a holiday or as work time (eg: formation)'
string='Kind of Leave'
args: [('leave', 'Time Off'), ('other', 'Other')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
valid
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
validation_type
Selection
default='hr'
string='Validation'
args: [('no_validation', 'No Validation'), ('hr', 'Time Off Officer'), ('manager', 'Team Leader'), ('both', 'Team Leader and Time Off Officer')]
validity_start
Date
help='Adding validity to types of time off so that it cannot be selected outside this time period'
args: 'From'
validity_stop
Date
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Time Off Allowed - Time Off Already Taken - Time Off Waiting Approval'
search='_search_virtual_remaining_leaves'
string='Virtual Remaining Time Off'
action_see_days_allocated(self)
action_see_group_leaves(self)
get_days(self, employee_id)
get_days_all_request(self)
get_employees_days(self, employee_ids)
name_get(self)
No new fields.
Public methods (1)partner_info(self, all_partners, direct_partners)
No new fields.
Public methods (2)create(self, vals)
write(self, vals)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
allocation_count
Float
related='employee_id.allocation_count'
allocation_display
Char
related='employee_id.allocation_display'
allocation_used_count
Float
related='employee_id.allocation_used_count'
allocation_used_display
Char
related='employee_id.allocation_used_display'
current_leave_state
Selection
related='employee_id.current_leave_state'
is_absent
Boolean
related='employee_id.is_absent'
leave_date_to
Date
related='employee_id.leave_date_to'
leave_manager_id
Many2one
related='employee_id.leave_manager_id'
show_leaves
Boolean
related='employee_id.show_leaves'
No public methods.
holiday_id
Many2one → hr.leave
string='Leave Request'
args: 'hr.leave'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/12.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Géry Debongnie, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Toufik Benjaa, jem-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, len-odoo, Jorge Pinna Puissant, Nans Lefebvre, Alexandre Kühn, Toufik Ben Jaa, Adrian Torres, mreficent, Xavier-Do, jvm-odoo, Fanny He, fw-bot, Lucas Lefèvre, Adrien Widart, Nasreddin Boulif (bon), Touati Djamel (otd), Prakash Prajapati, Cas Vissers |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/leaves |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:57:00 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leave requests and allocations ===================================== This application controls the leave schedule of your company. It allows employees to request leaves. Then, managers can review requests for leaves and approve or reject them. This way you can control the overall leave planning for the company or department. You can configure several kinds of leaves (sickness, paid days, ...) and allocate leaves to an employee or department quickly using leave allocation. An employee can also make a request for more days off by making a new Leave allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a leave request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
assets_backend | ir.ui.view | qweb | Inherits web.assets_backend |
edit_holiday_status_form |
hr.leave.type.form | hr.leave.type | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.leave.type.kanban | hr.leave.type | kanban | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
hr_leave_allocation_view_form |
hr.leave.allocation.view.form | hr.leave.allocation | form | New |
hr_leave_allocation_view_form_manager |
hr.leave.allocation.view.form.manager | hr.leave.allocation | xpath | Inherits hr_holidays.hr_leave_allocation_view_form |
hr_leave_allocation_view_kanban |
hr.leave.allocation.view.kanban | hr.leave.allocation | kanban | New |
hr_leave_allocation_view_tree |
hr.leave.allocation.view.tree | hr.leave.allocation | tree | New |
hr_leave_allocation_view_tree_my |
hr.leave.allocation.view.tree.my | hr.leave.allocation | xpath | Inherits hr_leave_allocation_view_tree |
hr_leave_report_kanban |
report.hr.holidays.report.leave_all.kanban | hr.leave.report | kanban | New |
hr_leave_report_tree |
report.hr.holidays.report.leave_all.tree | hr.leave.report | tree | New |
hr_leave_view_calendar |
hr.leave.view.calendar | hr.leave | calendar | New |
hr_leave_view_form |
hr.leave.view.form | hr.leave | form | New |
hr_leave_view_form_manager |
hr.leave.view.form.manager | hr.leave | xpath | Inherits hr_leave_view_form |
hr_leave_view_kanban |
hr.leave.view.kanban | hr.leave | kanban | New |
hr_leave_view_tree |
hr.holidays.view.tree | hr.leave | tree | New |
hr_leave_view_tree_my |
hr.holidays.view.tree | hr.leave | xpath | Inherits hr_leave_view_tree |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.leave | graph | New |
view_holiday_graph |
hr.holidays.report_graph | hr.leave | graph | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.leave | pivot | New |
view_holiday_status_normal_tree |
hr.leave.type.normal.tree | hr.leave.type | tree | New |
view_holidays_status_filter |
hr.leave.type.filter | hr.leave.type | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.leave | search | New |
view_hr_holidays_filter_report |
hr.holidays.filter | hr.leave.report | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
view_hr_leave_allocation_filter |
hr.holidays.filter_allocations | hr.leave.allocation | search | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Leave to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
current_leave_id
Many2one → hr.leave.type
compute='_compute_leave_status'
string='Current Leave Type'
args: 'hr.leave.type'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Leave Status'
is_absent_totay
Boolean
compute='_compute_absent_employee'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leaves_count
Float
compute='_compute_leaves_count'
args: 'Number of Leaves'
remaining_leaves
Float
compute='_compute_remaining_leaves'
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.'
string='Remaining Legal Leaves'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Leaves'
write(self, values)
date_from
Date
default=<expr>
required=True
string='From'
depts
Many2many → hr.department
string='Department(s)'
args: 'hr.department', 'summary_dept_rel', 'sum_id', 'dept_id'
holiday_type
Selection
default='Approved'
required=True
string='Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
help='Category of Employee'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'Start Date'
date_to
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the leave request duration in days or hours depending on the leave_type_request_unit'
args: 'Requested (Days/Hours)'
employee_id
Many2one → hr.employee
default=_default_employee
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
track_visibility='onchange'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the leave'
oldname='manager_id'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
domain=[('valid', '=', True)]
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
leave_type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
linked_request_ids
One2many → hr.leave
string='Linked Requests'
args: 'hr.leave', 'parent_id'
manager_id
Many2one → hr.employee
readonly=True
string='Manager'
args: 'hr.employee'
meeting_id
Many2one → calendar.event
string='Meeting'
args: 'calendar.event'
mode_company_id
Many2one → res.company
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Company'
args: 'res.company'
name
Char
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
copy=False
help='Number of days of the leave request according to your working schedule.'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'Duration (Days)'
number_of_days_display
Float
compute='_compute_number_of_days_display'
copy=False
help='Number of days of the leave request. Used for interface.'
readonly=True
args: 'Duration in days'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
copy=False
help='Number of hours of the leave request according to your working schedule. Used for interface.'
readonly=True
args: 'Duration in hours'
parent_id
Many2one → hr.leave
copy=False
string='Parent'
args: 'hr.leave'
payslip_status
Boolean
help='Green this button when the leave has been taken into account in the payslip.'
args: 'Reported in last payslips'
report_note
Text
request_date_from
Date
request_date_from_period
Selection
default='am'
string='Date Period Start'
args: [('am', 'Morning'), ('pm', 'Afternoon')]
request_date_to
Date
request_hour_from
Selection
string='Hour from'
args: [(0, '12:00 AM'), (-1, '0:30 AM'), (1, '1:00 AM'), (-2, '1:30 AM'), (2, '2:00 AM'), (-3, '2:30 AM'), (3, '3:00 AM'), (-4, '3:30 AM'), (4, '4:00 AM'), (-5, '4:30 AM'), (5, '5:00 AM'), (-6, '5:30 AM'), (6, '6:00 AM'), (-7, '6:30 AM'), (7, '7:00 AM'), (-8, '7:30 AM'), (8, '8:00 AM'), (-9, '8:30 AM'), (9, '9:00 AM'), (-10, '9:30 AM'), (10, '10:00 AM'), (-11, '10:30 AM'), (11, '11:00 AM'), (-12, '11:30 AM'), (12, '12:00 PM'), (-13, '0:30 PM'), (13, '1:00 PM'), (-14, '1:30 PM'), (14, '2:00 PM'), (-15, '2:30 PM'), (15, '3:00 PM'), (-16, '3:30 PM'), (16, '4:00 PM'), (-17, '4:30 PM'), (17, '5:00 PM'), (-18, '5:30 PM'), (18, '6:00 PM'), (-19, '6:30 PM'), (19, '7:00 PM'), (-20, '7:30 PM'), (20, '8:00 PM'), (-21, '8:30 PM'), (21, '9:00 PM'), (-22, '9:30 PM'), (22, '10:00 PM'), (-23, '10:30 PM'), (23, '11:00 PM'), (-24, '11:30 PM')]
request_hour_to
Selection
string='Hour to'
args: [(0, '12:00 AM'), (-1, '0:30 AM'), (1, '1:00 AM'), (-2, '1:30 AM'), (2, '2:00 AM'), (-3, '2:30 AM'), (3, '3:00 AM'), (-4, '3:30 AM'), (4, '4:00 AM'), (-5, '4:30 AM'), (5, '5:00 AM'), (-6, '5:30 AM'), (6, '6:00 AM'), (-7, '6:30 AM'), (7, '7:00 AM'), (-8, '7:30 AM'), (8, '8:00 AM'), (-9, '8:30 AM'), (9, '9:00 AM'), (-10, '9:30 AM'), (10, '10:00 AM'), (-11, '10:30 AM'), (11, '11:00 AM'), (-12, '11:30 AM'), (12, '12:00 PM'), (-13, '0:30 PM'), (13, '1:00 PM'), (-14, '1:30 PM'), (14, '2:00 PM'), (-15, '2:30 PM'), (15, '3:00 PM'), (-16, '3:30 PM'), (16, '4:00 PM'), (-17, '4:30 PM'), (17, '5:00 PM'), (-18, '5:30 PM'), (18, '6:00 PM'), (-19, '6:30 PM'), (19, '7:00 PM'), (-20, '7:30 PM'), (20, '8:00 PM'), (-21, '8:30 PM'), (21, '9:00 PM'), (-22, '9:30 PM'), (22, '10:00 PM'), (-23, '10:30 PM'), (23, '11:00 PM'), (-24, '11:30 PM')]
request_unit_custom
Boolean
request_unit_half
Boolean
request_unit_hours
Boolean
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'
oldname='manager_id2'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
tz
Selection
compute='_compute_tz'
args: _tz_get
tz_mismatch
Boolean
compute='_compute_tz_mismatch'
user_id
Many2one → res.users
compute_sudo=True
default=<expr>
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
validation_type
Selection
readonly=False
related='holiday_status_id.validation_type'
args: 'Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, values)
default_get(self, fields_list)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
unlink(self)
write(self, values)
accrual
Boolean
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Accrual'
accrual_limit
Integer
default=0
help='Maximum of allocation for accrual; 0 means no maximum.'
args: 'Balance limit'
can_approve
Boolean
compute='_compute_can_approve'
args: 'Can Approve'
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'Start Date'
date_to
Datetime
copy=False
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Department'
args: 'hr.department'
duration_display
Char
compute='_compute_duration_display'
help='Field allowing to see the allocation duration in days or hours depending on the type_request_unit'
args: 'Allocated (Days/Hours)'
employee_id
Many2one → hr.employee
default=_default_employee
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
track_visibility='onchange'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the leave'
oldname='manager_id'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
default=_default_holiday_status_id
domain=[('valid', '=', True)]
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
default='employee'
help='Allow to create requests in batchs:\n- By Employee: for a specific employee\n- By Company: all employees of the specified company\n- By Department: all employees of the specified department\n- By Employee Tag: all employees of the specific employee group category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('company', 'By Company'), ('department', 'By Department'), ('category', 'By Employee Tag')]
interval_number
Integer
default=1
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Number of unit between two intervals'
interval_unit
Selection
default='weeks'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Unit of time between two intervals'
args: [('weeks', 'Week(s)'), ('months', 'Month(s)'), ('years', 'Year(s)')]
linked_request_ids
One2many → hr.leave.allocation
string='Linked Requests'
args: 'hr.leave.allocation', 'parent_id'
mode_company_id
Many2one → res.company
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Company'
args: 'res.company'
name
Char
nextcall
Date
default=False
readonly=True
args: 'Date of the next accrual allocation'
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
help='Duration in days. Reference field to use when necessary.'
track_visibility='onchange'
args: 'Number of Days'
number_of_days_display
Float
compute='_compute_number_of_days_display'
help='UX field allowing to see and modify the allocation duration, computed in days.'
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Duration (days)'
number_of_hours_display
Float
compute='_compute_number_of_hours_display'
help='UX field allowing to see and modify the allocation duration, computed in hours.'
args: 'Duration (hours)'
number_per_interval
Float
default=1
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Number of unit per interval'
parent_id
Many2one → hr.leave.allocation
string='Parent'
args: 'hr.leave.allocation'
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'
oldname='manager_id2'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type_request_unit
Selection
readonly=True
related='holiday_status_id.request_unit'
unit_per_interval
Selection
default='hours'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Unit of time added at each interval'
args: [('hours', 'Hour(s)'), ('days', 'Day(s)')]
validation_type
Selection
readonly=True
related='holiday_status_id.validation_type'
args: 'Validation Type'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
activity_update(self)
add_follower(self, employee_id)
copy_data(self, default=None)
create(self, values)
message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None)
name_get(self)
unlink(self)
write(self, values)
category_id
Many2one → hr.employee.category
readonly=True
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
readonly=True
args: 'Start Date'
date_to
Datetime
readonly=True
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
employee_id
Many2one → hr.employee
readonly=True
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.leave.type
readonly=True
string='Leave Type'
args: 'hr.leave.type'
holiday_type
Selection
readonly=True
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
name
Char
readonly=True
args: 'Description'
number_of_days
Float
readonly=True
args: 'Number of Days'
payslip_status
Boolean
readonly=True
args: 'Reported in last payslips'
state
Selection
readonly=True
string='Status'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type
Selection
readonly=True
string='Request Type'
args: [('allocation', 'Allocation Request'), ('request', 'Leave Request')]
init(self)
read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the leave type without removing it.'
args: 'Active'
allocation_type
Selection
default='fixed'
help='\tFixed by HR: allocated by HR and cannot be bypassed; users can request leaves;\tFixed by HR + allocation request: allocated by HR and users can request leaves and allocations;\tNo allocation: no allocation by default, users can freely request leaves;'
string='Mode'
args: [('fixed', 'Fixed by HR'), ('fixed_allocation', 'Fixed by HR + allocation request'), ('no', 'No allocation')]
categ_id
Many2one → calendar.event.type
help='Once a leave is validated, Odoo will create a corresponding meeting of this type in the calendar.'
string='Meeting Type'
args: 'calendar.event.type'
color_name
Selection
default='red'
help='This color will be used in the leaves summary located in Reporting > Leaves by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
double_validation
Boolean
compute='_compute_validation_type'
help='When selected, the Allocation/Leave Requests for this type require a second validation to be approved.'
inverse='_inverse_validation_type'
string='Apply Double Validation'
group_days_allocation
Float
compute='_compute_group_days_allocation'
string='Days Allocated'
group_days_leave
Float
compute='_compute_group_days_leave'
string='Group Leaves'
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all leaves requests with a negative value.'
string='Leaves Already Taken'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all leaves requests with a positive value.'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Leave Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken'
string='Remaining Leaves'
request_unit
Selection
default='day'
required=True
string='Take Leaves in'
args: [('day', 'Day'), ('hour', 'Hours')]
sequence
Integer
default=100
help='The type with the smallest sequence is the default value in leave request'
time_type
Selection
default='leave'
help='Whether this should be computed as a holiday or as work time (eg: formation)'
string='Kind of Leave'
args: [('leave', 'Leave'), ('other', 'Other')]
unpaid
Boolean
default=False
args: 'Is Unpaid'
valid
Boolean
compute='_compute_valid'
help='This indicates if it is still possible to use this type of leave'
search='_search_valid'
validation_type
Selection
default='hr'
string='Validation By'
args: [('hr', 'Human Resource officer'), ('manager', 'Employee Manager'), ('both', 'Double Validation')]
validity_start
Date
default=fields.Date.today
help='Adding validity to types of leaves so that it cannot be selected outside this time period'
args: 'Start Date'
validity_stop
Date
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken - Leaves Waiting Approval'
string='Virtual Remaining Leaves'
action_see_days_allocated(self)
action_see_group_leaves(self)
get_days(self, employee_id)
name_get(self)
No new fields.
Public methods (0)No public methods.
holiday_id
Many2one → hr.leave
string='Leave Request'
args: 'hr.leave'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/11.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Jérome Maes, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, GitHub, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Laurent Smet, tbe-odoo, Adrien Dieudonne, RomainLibert, Denis Vermylen |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/employees |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:53:42 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web - bus - web_tour - resource - calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leave requests and allocations ===================================== This application controls the leave schedule of your company. It allows employees to request leaves. Then, managers can review requests for leaves and approve or reject them. This way you can control the overall leave planning for the company or department. You can configure several kinds of leaves (sickness, paid days, ...) and allocate leaves to an employee or department quickly using leave allocation. An employee can also make a request for more days off by making a new Leave allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a leave request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holiday_status_view_kanban |
hr.holidays.status.kanban | hr.holidays.status | kanban | New |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.holidays | graph | New |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_allocation_tree_customize |
hr.holidays.allocation.tree.customize | hr.holidays | tree | New |
view_holiday_employee |
hr.holidays.report_employee_tree | hr.holidays | tree | New |
view_holiday_graph |
hr.holidays.report_graph | hr.holidays | graph | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.holidays | pivot | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_kanban |
hr.holidays.kanban | hr.holidays | kanban | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Leave to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
current_leave_id
Many2one → hr.holidays.status
compute='_compute_leave_status'
string='Current Leave Type'
args: 'hr.holidays.status'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Leave Status'
is_absent_totay
Boolean
compute='_compute_absent_employee'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leaves_count
Float
compute='_compute_leaves_count'
args: 'Number of Leaves'
remaining_leaves
Float
compute='_compute_remaining_leaves'
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.'
inverse='_inverse_remaining_leaves'
string='Remaining Legal Leaves'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Leaves'
write(self, values)
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
help='Category of Employee'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'Start Date'
date_to
Datetime
copy=False
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
track_visibility='onchange'
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
string='Department'
args: 'hr.department'
double_validation
Boolean
related='holiday_status_id.double_validation'
args: 'Apply Double Validation'
employee_id
Many2one → hr.employee
default=_default_employee
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
track_visibility='onchange'
args: 'hr.employee'
first_approver_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the leave'
oldname='manager_id'
readonly=True
string='First Approval'
args: 'hr.employee'
holiday_status_id
Many2one → hr.holidays.status
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Leave Type'
args: 'hr.holidays.status'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
linked_request_ids
One2many → hr.holidays
string='Linked Requests'
args: 'hr.holidays', 'parent_id'
manager_id
Many2one → hr.employee
readonly=True
string='Manager'
args: 'hr.employee'
meeting_id
Many2one → calendar.event
string='Meeting'
args: 'calendar.event'
name
Char
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
store=True
track_visibility='onchange'
args: 'Number of Days'
number_of_days_temp
Float
copy=False
help='Number of days of the leave request according to your working schedule.'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Allocation'
parent_id
Many2one → hr.holidays
copy=False
string='Parent'
args: 'hr.holidays'
payslip_status
Boolean
help='Green this button when the leave has been taken into account in the payslip.'
args: 'Reported in last payslips'
report_note
Text
second_approver_id
Many2one → hr.employee
copy=False
help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'
oldname='manager_id2'
readonly=True
string='Second Approval'
args: 'hr.employee'
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type
Selection
default='remove'
help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone"
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Request Type'
track_visibility='always'
args: [('remove', 'Leave Request'), ('add', 'Allocation Request')]
user_id
Many2one → res.users
compute_sudo=True
default=<expr>
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
add_follower(self, employee_id)
create(self, values)
name_get(self)
unlink(self)
write(self, values)
leave_type
Char
readonly=True
args: 'Leave Type'
name
Char
readonly=True
args: 'Employee'
no_of_leaves
Integer
readonly=True
args: 'Remaining leaves'
user_id
Many2one → res.users
readonly=True
string='User'
args: 'res.users'
init(self)
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the leave type without removing it.'
args: 'Active'
categ_id
Many2one → calendar.event.type
help='Once a leave is validated, Odoo will create a corresponding meeting of this type in the calendar.'
string='Meeting Type'
args: 'calendar.event.type'
color_name
Selection
default='red'
help='This color will be used in the leaves summary located in Reporting > Leaves by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
double_validation
Boolean
help='When selected, the Allocation/Leave Requests for this type require a second validation to be approved.'
string='Apply Double Validation'
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all leaves requests with a negative value.'
string='Leaves Already Taken'
limit
Boolean
help='If you select this check box, the system allows the employees to take more leaves than the available ones for this type and will not take them into account for the "Remaining Legal Leaves" defined on the employee form.'
args: 'Allow to Override Limit'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all leaves requests with a positive value.'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Leave Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken'
string='Remaining Leaves'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken - Leaves Waiting Approval'
string='Virtual Remaining Leaves'
get_days(self, employee_id)
name_get(self)
date_from
Date
default=<expr>
required=True
string='From'
depts
Many2many → hr.department
string='Department(s)'
args: 'hr.department', 'summary_dept_rel', 'sum_id', 'dept_id'
holiday_type
Selection
default='Approved'
required=True
string='Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
No new fields.
Public methods (1)get_report_values(self, docids, data=None)
holiday_id
Many2one → hr.holidays
string='Leave Request'
args: 'hr.holidays'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/10.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Nicolas Martinelli, Jérome Maes, Julien Legros, qdp-odoo, Jeremy Kersten, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Pierre Masereel, Denis Vermylen (dve), RomainLibert, Denis Vermylen, Toufik Ben Jaa |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/employees |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:50:47 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web_kanban - web - bus - web_tour - resource - calendar - base_action_rule - web_calendar - product - decimal_precision - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leave requests and allocations ===================================== This application controls the leave schedule of your company. It allows employees to request leaves. Then, managers can review requests for leaves and approve or reject them. This way you can control the overall leave planning for the company or department. You can configure several kinds of leaves (sickness, paid days, ...) and allocate leaves to an employee or department quickly using leave allocation. An employee can also make a request for more days off by making a new Leave allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a leave request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
hr.employee.kanban.leaves.status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
resource_calendar_form_inherit |
resource.calendar.form.inherit | resource.calendar | field | Inherits resource.resource_calendar_form |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.holidays | graph | New |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_allocation_tree_customize |
hr.holidays.allocation.tree.customize | hr.holidays | tree | New |
view_holiday_employee |
hr.holidays.report_employee_tree | hr.holidays | tree | New |
view_holiday_graph |
hr.holidays.report_graph | hr.holidays | graph | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.holidays | pivot | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Leave to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
current_leave_id
Many2one → hr.holidays.status
compute='_compute_leave_status'
string='Current Leave Type'
args: 'hr.holidays.status'
current_leave_state
Selection
compute='_compute_leave_status'
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'), ('validate1', 'Waiting Second Approval'), ('validate', 'Approved'), ('cancel', 'Cancelled')]
string='Current Leave Status'
is_absent_totay
Boolean
compute='_compute_absent_employee'
search='_search_absent_employee'
args: 'Absent Today'
leave_date_from
Date
compute='_compute_leave_status'
args: 'From Date'
leave_date_to
Date
compute='_compute_leave_status'
args: 'To Date'
leaves_count
Integer
compute='_compute_leaves_count'
args: 'Number of Leaves'
remaining_leaves
Float
compute='_compute_remaining_leaves'
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.'
inverse='_inverse_remaining_leaves'
string='Remaining Legal Leaves'
show_leaves
Boolean
compute='_compute_show_leaves'
args: 'Able to see Remaining Leaves'
No public methods.
can_reset
Boolean
compute='_compute_can_reset'
args: 'Can reset'
category_id
Many2one → hr.employee.category
help='Category of Employee'
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee Tag'
args: 'hr.employee.category'
date_from
Datetime
copy=False
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Start Date'
date_to
Datetime
copy=False
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'End Date'
department_id
Many2one → hr.department
readonly=True
related='employee_id.department_id'
store=True
string='Department'
args: 'hr.department'
double_validation
Boolean
related='holiday_status_id.double_validation'
args: 'Apply Double Validation'
employee_id
Many2one → hr.employee
default=_default_employee
index=True
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Employee'
args: 'hr.employee'
holiday_status_id
Many2one → hr.holidays.status
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Leave Type'
args: 'hr.holidays.status'
holiday_type
Selection
default='employee'
help='By Employee: Allocation/Request for individual Employee, By Employee Tag: Allocation/Request for group of employees in category'
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Allocation Mode'
args: [('employee', 'By Employee'), ('category', 'By Employee Tag')]
linked_request_ids
One2many → hr.holidays
string='Linked Requests'
args: 'hr.holidays', 'parent_id'
manager_id
Many2one → hr.employee
copy=False
help='This area is automatically filled by the user who validate the leave'
readonly=True
string='First Approval'
args: 'hr.employee'
manager_id2
Many2one → hr.employee
copy=False
help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'
readonly=True
string='Second Approval'
args: 'hr.employee'
meeting_id
Many2one → calendar.event
string='Meeting'
args: 'calendar.event'
name
Char
notes
Text
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Reasons'
number_of_days
Float
compute='_compute_number_of_days'
store=True
args: 'Number of Days'
number_of_days_temp
Float
copy=False
readonly=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
args: 'Allocation'
parent_id
Many2one → hr.holidays
string='Parent'
args: 'hr.holidays'
payslip_status
Boolean
help='Green this button when the leave has been taken into account in the payslip.'
args: 'Reported in last payslips'
report_note
Text
state
Selection
copy=False
default='confirm'
help=<expr>
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'To Submit'), ('cancel', 'Cancelled'), ('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')]
type
Selection
default='remove'
help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone"
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}
string='Request Type'
args: [('remove', 'Leave Request'), ('add', 'Allocation Request')]
user_id
Many2one → res.users
compute_sudo=True
default=<expr>
readonly=True
related='employee_id.user_id'
related_sudo=True
store=True
string='User'
args: 'res.users'
action_approve(self)
action_confirm(self)
action_draft(self)
action_refuse(self)
action_validate(self)
add_follower(self, employee_id)
create(self, values)
name_get(self)
toggle_payslip_status(self)
unlink(self)
write(self, values)
leave_type
Char
readonly=True
args: 'Leave Type'
name
Char
readonly=True
args: 'Employee'
no_of_leaves
Integer
readonly=True
args: 'Remaining leaves'
user_id
Many2one → res.users
readonly=True
string='User'
args: 'res.users'
init(self)
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the leave type without removing it.'
args: 'Active'
categ_id
Many2one → calendar.event.type
help='Once a leave is validated, Odoo will create a corresponding meeting of this type in the calendar.'
string='Meeting Type'
args: 'calendar.event.type'
color_name
Selection
default='red'
help='This color will be used in the leaves summary located in Reporting > Leaves by Department.'
required=True
string='Color in Report'
args: [('red', 'Red'), ('blue', 'Blue'), ('lightgreen', 'Light Green'), ('lightblue', 'Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'), ('lightcyan', 'Light Cyan'), ('black', 'Black'), ('lightpink', 'Light Pink'), ('brown', 'Brown'), ('violet', 'Violet'), ('lightcoral', 'Light Coral'), ('lightsalmon', 'Light Salmon'), ('lavender', 'Lavender'), ('wheat', 'Wheat'), ('ivory', 'Ivory')]
company_id
Many2one → res.company
string='Company'
args: 'res.company'
double_validation
Boolean
help='When selected, the Allocation/Leave Requests for this type require a second validation to be approved.'
string='Apply Double Validation'
leaves_taken
Float
compute='_compute_leaves'
help='This value is given by the sum of all holidays requests with a negative value.'
string='Leaves Already Taken'
limit
Boolean
help='If you select this check box, the system allows the employees to take more leaves than the available ones for this type and will not take them into account for the "Remaining Legal Leaves" defined on the employee form.'
args: 'Allow to Override Limit'
max_leaves
Float
compute='_compute_leaves'
help='This value is given by the sum of all holidays requests with a positive value.'
string='Maximum Allowed'
name
Char
required=True
translate=True
args: 'Leave Type'
remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken'
string='Remaining Leaves'
virtual_remaining_leaves
Float
compute='_compute_leaves'
help='Maximum Leaves Allowed - Leaves Already Taken - Leaves Waiting Approval'
string='Virtual Remaining Leaves'
get_days(self, employee_id)
name_get(self)
date_from
Date
default=<expr>
required=True
string='From'
depts
Many2many → hr.department
string='Department(s)'
args: 'hr.department', 'summary_dept_rel', 'sum_id', 'dept_id'
holiday_type
Selection
default='Approved'
required=True
string='Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
date_from
Date
default=<expr>
required=True
string='From'
emp
Many2many → hr.employee
string='Employee(s)'
args: 'hr.employee', 'summary_emp_rel', 'sum_id', 'emp_id'
holiday_type
Selection
default='Approved'
required=True
string='Select Leave Type'
args: [('Approved', 'Approved'), ('Confirmed', 'Confirmed'), ('both', 'Both Approved and Confirmed')]
print_report(self)
No new fields.
Public methods (1)render_html(self, docids, data=None)
uom_id
Many2one → product.uom
default=<expr>
help='Average hours of work per day.\n It is used in an employee leave request to compute the number of days consumed based on the resource calendar.\n It can be used to handle various contract types, e.g.:\n - 38 Hours/Week, 5 Days/Week: 1 Day = 7.6 Hours\n - 45 Hours/Week, 5 Days/Week: 1 Day = 9.0 Hours'
required=True
string='Hours per Day'
args: 'product.uom'
No public methods.
holiday_id
Many2one → hr.holidays
string='Leave Request'
args: 'hr.holidays'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/9.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Jérome Maes, Richard Mathot, Géry Debongnie, Aaron Bohy, Damien Bouvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Denis Vermylen (dve) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/employees |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:48:29 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web_kanban - web - bus - resource - web_tip - calendar - base_action_rule - web_calendar - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leave requests and allocations ===================================== This application controls the leave schedule of your company. It allows employees to request leaves. Then, managers can review requests for leaves and approve or reject them. This way you can control the overall leave planning for the company or department. You can configure several kinds of leaves (sickness, paid days, ...) and allocate leaves to an employee or department quickly using leave allocation. An employee can also make a request for more days off by making a new Leave allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a leave request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_department_view_kanban |
hr.department.kanban.inherit | hr.department | data | Inherits hr.hr_department_view_kanban |
hr_employee_view_search |
hr.employee.search.view.inherit | hr.employee | xpath | Inherits hr.view_employee_filter |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
HR - Employees Kanban with leave status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
report_holidayssummary |
report_holidayssummary | ir.ui.view | qweb | New |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.holidays | graph | New |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_allocation_tree_customize |
hr.holidays.allocation.tree.customize | hr.holidays | tree | New |
view_holiday_employee |
hr.holidays.report_employee_tree | hr.holidays | tree | New |
view_holiday_graph |
hr.holidays.report_graph | hr.holidays | graph | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_pivot |
hr.holidays.report_pivot | hr.holidays | pivot | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
absence_of_today
Integer
compute='_compute_leave_count'
string='Absence by Today'
allocation_to_approve_count
Integer
compute='_compute_leave_count'
string='Allocation to Approve'
leave_to_approve_count
Integer
compute='_compute_leave_count'
string='Leave to Approve'
total_employee
Integer
compute='_compute_total_employee'
string='Total Employee'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)render_html(self, cr, uid, ids, data=None, context=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/8.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Stephane Wirtel, Odoo Translation Bot, Christophe Matthieu, DBR (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, ggh-openerp, Christophe Simonis, Xavier Morel, Goffin Simon, Frédéric van der Essen, Vishmita, Nicolas Martinelli, Kersten Jeremy, Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Richard Mathot, Géry Debongnie, jke-openerp, Aaron Bohy, Vishmita Jadeja (openerp), Richard Mathot (OpenERP), ged-odoo, Jeremy Kersten, Gery Debongnie, Randhir Mayatra rma-openerp, Darshan Kalola (OpenERP), Darshan Kalola, Jitendra Prajapati (OpenERP), Yogesh Parekh (OpenERP), Sunil Sharma (OpenERP) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/employees |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:45:38 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web_kanban - web - resource - board - calendar - base_action_rule - web_calendar |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leaves and allocation requests ===================================== This application controls the holiday schedule of your company. It allows employees to request holidays. Then, managers can review requests for holidays and approve or reject them. This way you can control the overall holiday planning for the company or department. You can configure several kinds of leaves (sickness, holidays, paid days, ...) and allocate leaves to an employee or department quickly using allocation requests. An employee can also make a request for more days off by making a new Allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
allocation_company_new |
Leaves Management | hr.holidays | form | New |
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
HR - Employees Kanban with leave status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_evaluation_report_graph |
hr.holidays.graph | hr.holidays | graph | New |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_graph |
hr.holidays.report_graph | hr.holidays | graph | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
No models found for this module.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/7.0/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, Pinakin Nayi (OpenERP), DBR (OpenERP), Harry (OpenERP), Antonin Bourguignon, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Thibault Delavallée, Vo Minh Thu, Hardik, Josse Colpaert, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, ara@tinyerp.com, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), help, Xavier ALT, Khushboo Bhatt (Open ERP), dle@openerp.com, Amit Patel, Frédéric van der Essen, Gilles Major, Vijaykumar Baladaniya, Hardik Ansodariya, Dhruti Shastri (OpenERP), Jigar Amin, Somesh Khare (OpenERP), antonylesuisse, JoshuaJan, Ashvin Rathod (OpenERP), Meera Trambadia |
| WEBSITE | |
| WEBSITE | http://www.openerp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:43:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - web_kanban - web - resource - process - board - base_calendar - base_status - base_action_rule |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Manage leaves and allocation requests ===================================== This application controls the holiday schedule of your company. It allows employees to request holidays. Then, managers can review requests for holidays and approve or reject them. This way you can control the overall holiday planning for the company or department. You can configure several kinds of leaves (sickness, holidays, paid days, ...) and allocate leaves to an employee or department quickly using allocation requests. An employee can also make a request for more days off by making a new Allocation. It will increase the total of available days for that leave type (if the request is accepted). You can keep track of leaves in different ways by following reports: * Leaves Summary * Leaves by Department * Leaves Analysis A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
allocation_company_new |
Leaves Management | hr.holidays | form | New |
allocation_leave_new |
Allocation Request | hr.holidays | form | New |
board_hr_holidays_leave_by_month_form |
board.hr.holidays.leave.month.form | board.board | xpath | Inherits hr.board_hr_form |
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
HR - Employees Kanban with leave status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | xpath | Inherits hr.view_employee_form |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
No models found for this module.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/6.1/hr_holidays |
| VERSION | |
| VERSION | 1.5 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Fabien Pinckaers, Antony Lesuisse, Meera Trambadia (OpenERP), Olivier Dony, Divyesh Makwana (Open ERP), Thibault Delavallée, Vo Minh Thu, pso (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, vro, niv-openerp, Xavier ALT, Christophe Simonis, Ujjvala Collins (OpenERP), Xavier Morel, Chris Biersbach, Amit (OpenERP), Minh Tran, Amit Bhavsar (Open ERP), Thibault Francois, Carlos Vásquez, Mantavya Gajjar, ksa (Open ERP), Husen Daudi, Els Van Vossel, Israel Fermin Montilla, mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), ssu, rch-openerp, Bharat (OpenERP), ARA (OpenERP), aag (OpenERP), ron@tinyerp.com, mtr, fp, AMP (OpenERP), Mustufa Rangwala, psi (Open ERP), Tejas (OpenERP), Hemendra Paregi (Open ERP), skh, Atik Agewan (OpenERP), Julien Thewys |
| WEBSITE | |
| WEBSITE | http://www.openerp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:41:35 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - hr - base_setup - base - base_tools - resource - process - board - crm - base_action_rule - base_calendar - fetchmail |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
This module allows you to manage leaves and leaves' requests.
=============================================================
Implements a dashboard for human resource management that includes.
* Leaves
Note that:
- A synchronisation with an internal agenda (use of the CRM module) is possible: in order to automatically create a case when an holiday request is accepted, you have to link the holidays status to a case section. You can set up this info and your colour preferences in
Human Resources/Configuration/Holidays/Leave Type
- An employee can make an ask for more off-days by making a new Allocation It will increase his total of that leave type available (if the request is accepted).
- There are two ways to print the employee's holidays:
* The first will allow to choose employees by department and is used by clicking the menu item located in
Human Resources/Reporting/Holidays/Leaves by Department
* The second will allow you to choose the holidays report for specific employees. Go on the list
Human Resources/Human Resources/Employees
then select the ones you want to choose, click on the print icon and select the option
'Employee's Holidays'
- The wizard allows you to choose if you want to print either the Confirmed & Validated holidays or only the Validated ones. These states must be set up by a user from the group 'HR'. You can define these features in the security tab from the user data in
Administration / Users / Users
for example, you maybe will do it for the user 'admin'.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
allocation_company_new |
Leaves Management | hr.holidays | form | New |
allocation_leave_new |
Allocation Request | hr.holidays | form | New |
board_hr_holidays_leave_by_month_form |
board.hr.holidays.leave.month.form | board.board | xpath | Inherits hr.board_hr_form |
board_hr_holidays_manager_form |
board.hr.holidays.manager.form | board.board | xpath | Inherits hr.board_hr_manager_form |
edit_holiday_new |
Leave Request | hr.holidays | form | New |
edit_holiday_status_form |
hr.holidays.status.form | hr.holidays.status | form | New |
hr_holidays_leaves_assign_tree_view |
hr.employee.leave.tree | hr.employee | tree | New |
hr_kanban_view_employees_kanban |
HR - Employees Kanban with leave status | hr.employee | xpath | Inherits hr.hr_kanban_view_employees |
resource_calendar_leave_form_inherit |
resource.calendar.leaves.form.inherit | resource.calendar.leaves | field | Inherits resource.resource_calendar_leave_form |
view_employee_form_leave_inherit |
hr.employee.leave.form.inherit | hr.employee | field | Inherits hr.view_employee_form |
view_holiday |
hr.holidays.tree | hr.holidays | tree | New |
view_holiday_allocation_tree |
hr.holidays.allocation.tree | hr.holidays | tree | New |
view_holiday_new_calendar |
Leave Request | hr.holidays | calendar | New |
view_holiday_simple |
hr.holidays.report_tree | hr.holidays | tree | New |
view_holiday_status_normal_tree |
hr.holidays.status.normal.tree | hr.holidays.status | tree | New |
view_holiday_status_tree |
hr.holidays.status.tree | hr.holidays.status | tree | New |
view_holidays_status_filter |
hr.holidays.status.filter | hr.holidays.status | search | New |
view_hr_holidays_filter |
hr.holidays.filter | hr.holidays | search | New |
view_hr_holidays_remaining_leaves_user_graph |
hr.holidays.remaining.leaves.user.graph | hr.holidays.remaining.leaves.user | graph | New |
view_hr_holidays_remaining_leaves_user_tree |
hr.holidays.remaining.leaves.user.tree | hr.holidays.remaining.leaves.user | tree | New |
view_hr_holidays_status_search |
hr.holidays.status.search | hr.holidays.status | search | New |
view_hr_holidays_summary_dept |
hr.holidays.summary.dept.form | hr.holidays.summary.dept | form | New |
view_hr_holidays_summary_employee |
hr.holidays.summary.employee.form | hr.holidays.summary.employee | form | New |
No models found for this module.