Repository
odoo/odoo · module folder
Module version
1.6
Category
Human Resources/Time Off
Folder size
14.58 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/time-off
Last tracking update
2026-08-17 16:17:05
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Aaron Bohy, Géry Debongnie, Yannick Tivisse, Pierre Masereel, Adrien Dieudonne, Lucas Perais, Alexandre Kühn, Julien Castiaux, Romeo Fragomeli, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, Ahmad Khanalizadeh, Didier (did), Abdelouahab (abla), Dossogne Bertrand, luvi, Renaud Thiry, tsm-odoo, Louis Wicket (wil), alsh-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, sesn-odoo, Nicolas Viseur (vin), maad-odoo, Mélanie, Youssef Bashandy, ravb-odoo, bary, reka-odoo, jugj-odoo, Abderraouf Ghrissi (abgh), Nathaniel (naja), Bastien Fafchamps (bafa), mega, Tanguy Quéguineur, Alex Kühn, Chrysanthe (chgo), asno-odoo, aamo-odoo, rmun-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, Pierre Pulinckx, Bastien PIERRE, nikj-odoo, Michaël Mattiello, Corentin Heinix (cohe), Mahdi Alijani (malj), bona-odoo, Krzysztof Magusiak (krma), yavy-odoo, Hazem Ibrahim, Maeva De Keyser (MDEK), nsirjacobs, Gurpreet Singh, pajo, Giorgio Tocco (gito), akha, kareem, jayp-odoo, josm-odoo, Bertrand Dossogne, thha-odoo, romc-odoo, npm, 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, YoussefM890, kuay-odoo, Merlin Guillaume, saurabh, Abdelouahab Laaroussi (abla), lebm-odoo, Dilya Anvarbekova, Jurgen Gjini, Federico Falcone, karygauss03, Lucas ESTEBAN (lues), dhbr-odoo, Camila Vives, Feeedeee, chpa-odoo, Faruk Avcı, Amr Yasser (amry), shmn-odoo, adak-ahmed, mear-odoo, Dylan Provoost, 3amo-magdy, soukaina tyes, Mohamed Ayman, Joseph Nechleba (jonec), Rons, Kirra Hyde, adak(ahmed), amga-odoo, Kishan (kiga), Devendra Ladhani, hamza, Brian Nguyen, Ahmed Naem (Ahnae)
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
hr_employee_calendar_planning, hr_holidays_attendance, hr_holidays_homeworking, hr_holidays_leave_report_calendar_type, hr_holidays_natural_period, hr_holidays_public, hr_holidays_settings, hr_presence, hr_work_entry_holidays, l10n_fr_hr_holidays, l10n_in_hr_holidays, payroll, project_timesheet_holidays, test_discuss_full
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.

Code Analysis

Views touched (73)
XML IDNameModelTypeStatus
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 kanban Inherits hr.hr_department_view_kanban
hr_employee_public_form_view_inherit hr.employee.public.leave.form.inherit hr.employee.public form Inherits hr.hr_employee_public_view_form
hr_employee_view_search hr.employee.search.view.inherit hr.employee search 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 kanban Inherits hr.hr_kanban_view_employees
hr_kanban_view_public_employees_kanban hr.employee.public.kanban.leaves.status hr.employee.public kanban 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 form Inherits hr_holidays.hr_leave_allocation_view_form
hr_leave_allocation_view_form_manager hr.leave.allocation.view.form.manager hr.leave.allocation form 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 form 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 search Inherits view_hr_leave_allocation_filter
hr_leave_allocation_view_search_my hr.leave.allocation.view.search.my hr.leave.allocation search 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 list 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 form 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 form 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 form Inherits hr_holidays.hr_leave_view_form_dashboard
hr_leave_view_form_manager hr.leave.view.form.manager hr.leave form 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 kanban Inherits hr_holidays.hr_leave_view_kanban
hr_leave_view_search_manager hr.holidays.view.search.manager hr.leave search Inherits view_hr_holidays_filter
hr_leave_view_search_my hr.holidays.view.search.my hr.leave search Inherits view_hr_holidays_filter
hr_leave_view_search_report hr.holidays.view.search.report hr.leave search 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 list 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 form Inherits resource.resource_calendar_form
resource_calendar_leave_form_inherit resource.calendar.leaves.form.inherit resource.calendar.leaves form Inherits resource.resource_calendar_leave_form
resource_calendar_leaves_tree_inherit resource.calendar.leaves.list.inherit resource.calendar.leaves list Inherits resource.resource_calendar_leave_tree
resource_calendar_leaves_view_search_inherit resource.calendar.leaves.search.inherit resource.calendar.leaves search Inherits resource.view_resource_calendar_leaves_search
resource_calendar_view_tree resource.calendar.view.list.inherit.hr.holidays resource.calendar list Inherits resource.view_resource_calendar_tree
view_calendar_event_form_inherit view.calendar.event.form.inherit calendar.event form Inherits calendar.view_calendar_event_form
view_employee_form_leave_inherit hr.employee.leave.form.inherit hr.employee form Inherits hr.view_employee_form
view_employee_tree_inherit_leave hr.employee.list.leave hr.employee list 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
HTTP endpoints (5)
Route(s)HandlerAuthTypeMethodsFlags
/allocation/refuse HrHolidaysController.hr_holidays_allocation_refuse user http GET
/allocation/validate HrHolidaysController.hr_holidays_allocation_validate user http GET
/leave/approve HrHolidaysController.hr_holidays_request_approve user http GET
/leave/refuse HrHolidaysController.hr_holidays_request_refuse user http GET
/leave/validate HrHolidaysController.hr_holidays_request_validate user http GET
Models touched (28)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (2)
  • action_open_allocation_department(self)
  • action_open_leave_department(self)

New fields (0)

No new fields.

Public methods (1)
  • action_register_departure(self)

New fields (12)
  • 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'
Public methods (9)
  • action_time_off_dashboard(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_allocation_requests_amount(self)
    @api.model
  • get_mandatory_days(self, start_date, end_date)
  • get_mandatory_days_data(self, date_start, date_end)
    @api.model
  • get_public_holidays_data(self, date_start, date_end)
    @api.model
  • get_special_days_data(self, date_start, date_end)
    @api.model
  • get_time_off_dashboard_data(self, target_date=None)
    @api.model
  • write(self, vals)

New fields (6)
  • 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'
Public methods (2)
  • action_open_time_off_calendar(self)
    Open the time off calendar filtered on this employee.
  • action_time_off_dashboard(self)

New fields (2)
  • leave_id Many2one → hr.leave
    required=True string='Time Off Request' args: 'hr.leave'
  • reason Text
Public methods (1)
  • action_cancel_leave(self)

New fields (3)
  • 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')]
Public methods (1)
  • print_report(self)

New fields (51)
  • 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
    args: 'Request Start Date'
  • request_date_from_period Selection
    default='am' string='Date Period Start' args: [('am', 'Morning'), ('pm', 'Afternoon')]
  • request_date_to Date
    args: 'Request End 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'
Public methods (16)
  • 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)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_unusual_days(self, date_from, date_to=None)
    @api.model
  • message_subscribe(self, partner_ids=None, subtype_ids=None)
  • onchange(self, values, field_names, fields_spec)
  • open_pending_requests(self)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (30)
  • 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')]
Public methods (1)
  • action_save_new(self)

New fields (17)
  • 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")]
Public methods (5)
  • 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)
    @api.model_create_multi

New fields (38)
  • 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
    args: 'Carried over days expiration 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
    args: 'The number of carried over days that will expire on carried_over_days_expiration_date'
  • 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
Public methods (9)
  • action_approve(self)
  • action_refuse(self)
  • activity_update(self)
  • add_follower(self, employee_id)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
    Override to avoid automatic logging of creation
  • message_subscribe(self, partner_ids=None, subtype_ids=None)
  • onchange(self, values, field_names, fields_spec)
  • write(self, vals)

New fields (14)
  • 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
    args: 'End Date'
  • department_id Many2one → hr.department
    args: '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
    args: 'Reasons'
  • request_unit Selection
    related='holiday_status_id.request_unit'
Public methods (1)
  • action_generate_allocations(self)

New fields (11)
  • 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
    args: [('taken', 'Taken'), ('left', 'Left'), ('planned', 'Planned')]
  • 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')]
Public methods (2)
  • action_time_off_analysis(self)
    @api.model
  • init(self)

New fields (9)
  • 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
    args: '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
    args: 'Description'
Public methods (1)
  • action_generate_time_off(self)

New fields (8)
  • 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
Public methods (0)

No public methods.

New fields (12)
  • 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')]
Public methods (2)
  • action_open_record(self)
  • init(self)

New fields (21)
  • 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'
Public methods (4)
  • action_approve(self)
  • action_refuse(self)
  • get_unusual_days(self, date_from, date_to=None)
    @api.model
  • init(self)

New fields (35)
  • accrual_count Float
    compute='_compute_accrual_count' string='Accruals count'
  • accruals_ids One2many → hr.leave.accrual.plan
    args: 'hr.leave.accrual.plan', 'time_off_type_id'
  • 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 help='If this field is checked, every leave request of this type will have a corresponding entry in the calendar application. There will be no entry if this stays unchecked.' 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'
Public methods (9)
  • action_see_accrual_plans(self)
  • action_see_days_allocated(self)
  • action_see_group_leaves(self)
  • check_allocation_requirement_edit_validity(self)
    @api.constrains('requires_allocation')
  • copy_data(self, default=None)
  • get_allocation_data(self, employees, target_date=None)
  • get_allocation_data_request(self, target_date=None, hidden_allocations=True)
    @api.model
  • has_accrual_allocation(self)
    @api.model
  • requested_display_name(self)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • leave_date_to Date
    compute='_compute_leave_date_to'
Public methods (0)

No public methods.

New fields (1)
  • leave_date_to Date
    related='employee_id.leave_date_to'
Public methods (2)
  • SELF_READABLE_FIELDS(self)
    @property
  • create(self, vals_list)
    @api.model_create_multi

New fields (1)
  • associated_leaves_count Integer
    compute='_compute_associated_leaves_count' args: 'Time Off Count'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (1)
  • leave_date_to Date
    related='user_id.leave_date_to'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…