Flectic
Odoo HR — Time Off moduleOdoo

Odoo Holidays: Time Off, Balances, and Approvals for SMEs

Odoo Holidays is the Time Off app: employees request leave against balances earned from regular or accrual allocations; managers approve (optionally in two steps), public holidays and mandatory days shape the calendar, and validated absences feed Payroll work entries—so payslips match leave without spreadsheet reconciliation.

10 min readUpdated Aug 3, 202619 sources cited

TL;DR — Key takeaways

  • Six preconfigured types: Paid Time Off, Sick Time Off, Unpaid, Compensatory Days, Extra Time Off, Extra Hours.
  • My Time dashboard: balances, planned/approved split, expiry warnings, Balance at date for accruals.
  • D365 HR Leave and absence = leave types + leave plans + accrual schedules + request workflows + self-service.
01

What Is Odoo Holidays (the Time Off App)?

Odoo Holidays is the leave and absence module inside Odoo's HR suite. In the product UI and official documentation it appears as the Time Off application; under the hood it still carries the hr.holidays lineage (now hr.leave for requests and hr.leave.allocation for grants).

The Time Off app is a centralized hub for requests, balances, allocations, approvals, and reports. Employees open My Time to see balances, planned and approved leave, and any soon-to-expire allocations; managers allocate leave to individuals, tags, departments, or the whole company, then approve from a Waiting For Me queue.

On the operations side, Overview shows a color-coded Gantt of the user's team—approved absences solid, second-approval requests striped—plus a Total bar graph of how many people are projected out on any day. Reporting pivots by employee, by type, or by remaining balance so coverage decisions are not guesswork.

Because Holidays shares the same database as Payroll, Attendances, Planning, and Calendar, approved time off generates the Work Entries that Payroll consumes on the payslip. That is the practical reason SMEs move leave out of spreadsheets: one request updates balance, calendar, and pay in one flow.

02

Time Off Types: The Spine of the Module

Every absence is categorized by a Time Off Type. Odoo ships six preconfigured types—Paid Time Off, Sick Time Off, Unpaid, Compensatory Days, Extra Time Off, and Extra Hours—and you add more under Time Off → Configuration → Time Off Types. Types are the spine: duration unit, approval chain, allocation rules, and payroll mapping all hang off them.

Duration Type is Day, Half Day, or Hours. Count as is Worked Time (still counts toward accrual of other leave) or Absence (does not). Notify HR sets who is alerted for that type; in multi-company databases a type can be scoped to one Company, and in multi-country databases to one Country—leave blank to apply everywhere.

Request approvals have four options: None Needed (auto-approved on submit), By Time Off Officer (default), By Employee's Approver (the leave approver on the employee record), or By Employee's Approver and Time Off Officer (double validation). Allocation requests use the same four-way pattern when Requires allocation is enabled. Allow Employee Requests lets staff ask for extra days beyond the current grant without guaranteeing approval.

Configuration toggles that matter in production: Require Supporting Document (sick leave, jury duty), Allow Negative Cap with an up-to limit, Ignore Public Holidays (so a week that includes a national holiday consumes only the working days of the leave balance), Deduct Extra Hours, Allow Request on Top, Hide On Dashboard, and Eligible for Accrual Rate. A Payroll section maps the type to a Work Entry Type so payslips treat paid leave, unpaid leave, and public holidays correctly.

  • Six preconfigured types: Paid Time Off, Sick Time Off, Unpaid, Compensatory Days, Extra Time Off, Extra Hours.
  • Duration per type: Day, Half Day, or Hours; Count as Worked Time vs Absence for accrual interaction.
  • Four approval options for requests and for allocations: None Needed, By Time Off Officer, By Employee's Approver, or both.
  • Requires allocation + Allow Employee Requests control whether balance is required and whether staff can petition for more days.
  • Multi-company and multi-country scoping, Ignore Public Holidays, negative caps, supporting documents, and Work Entry Type mapping are all per-type settings.
Odoo Time Off Type approval options
Approval settingWho must actTypical use
None NeededNo one — request auto-validates on submitWFH, training, or low-risk absences
By Time Off OfficerHR / Time Off Officer named on the typeCentralized policy control
By Employee's ApproverLeave approver on the employee recordLine-manager ownership of coverage
By Employee's Approver and Time Off OfficerManager first, then Time Off Officer (Validate)Sick leave, long absences, dual control
03

Allocations and Accrual Plans

Allocations are amounts of time off given to employees. Odoo distinguishes Regular Allocation (granted immediately) from Accrual Allocation (earned as the employee works via an Accrual Plan). Allocations live under Time Off → Management → Allocations and are visible only to Time Off Officer or Administrator access.

To grant leave at scale, Multiple Requests exposes Mode: By Employee, By Employee Tag, By Department, By Company, or By All Employees. That is how January 1 bulk grants, department pilots, and multi-entity policies stay consistent without one-by-one clicks. Employees who run out of balance can request additional allocations when the type allows it—those requests still follow the allocation Approval setting.

Accrual Plans drive earned leave through milestones (also called levels). A milestone can start At allocation creation or After N days, months, or years from the allocation start—exactly how you encode seniority bands (for example more annual leave after three or five years). Frequency options include Hourly, Daily, Weekly, Twice a month, Monthly, Twice a year, Yearly, or Per Hour Worked. Accrual can be based on worked time (excluding time off taken) or whole calendar days, and credit can land at the start or end of the period.

Carry-over and caps finish the policy. Carry-over can be Lost or Carried Over with a cap (Unlimited or Up to N days) and optional carry-over expiry. A yearly cap pauses accrual once the yearly maximum is hit until the next carry-over date; a balance cap holds the plan once the running balance reaches a maximum. Competitors that win on "accrual formula" SERPs usually document these milestone + frequency + carry-over triples explicitly—configure them before the first go-live allocation, not after the first disputed balance.

Regular vs Accrual allocations in Odoo Holidays
AspectRegular AllocationAccrual Allocation
Grant timingImmediately on allocation creationEarned over time per the accrual plan
Requires Accrual PlanNoYes
Best forAnnual entitlements granted up frontSeniority-based or worked-time-based earning
Typical controlsMode: By Employee / Tag / Department / Company / AllMilestones, frequency, carry-over, yearly and balance caps
04

Public Holidays, Mandatory Days, and Multi-Company Calendars

Odoo's Time Off app does not ship any public holidays by default, because holidays vary by country, region, and city. Configure them under Time Off → Configuration → Public Holidays. Each entry has Name, Start/End (full-day 12:00 AM–11:59 PM is recommended so every shift is covered), optional Working Hours (blank = all employees), and Work Entry Type for Payroll. In multi-company databases the company is set on the holiday; regional calendars must not be collapsed into one global list or people on another schedule will get the wrong non-working days.

Public holidays propagate into every app that uses working schedules—Calendar, Planning, Manufacturing, and more—so entering them once prevents both false leave requests and false capacity on production lines. Pair this with Ignore Public Holidays on relevant leave types: if someone books the week of a national holiday, Odoo can consume only the working days of their vacation balance instead of forcing two separate requests around the holiday.

Mandatory days (Time Off → Configuration → Mandatory Days; marketed on odoo.com as stress days) are the inverse: dates when a company, department, or job position must be present and employees cannot submit time off. None are configured by default. Each mandatory day has start/end dates, color for the dashboard legend, optional Departments and Job Positions (blank = everyone), and multi-company scoping. Use them for inventory freezes, month-end close, and peak retail periods—not as a substitute for clear policy communication.

Public holidays vs mandatory days in Odoo Time Off
AspectPublic holidayMandatory day (stress day)
IntentNon-working day; extra day offMust-work day; leave blocked
Default in OdooNone preloadedNone preloaded
Typical scopeCompany / working hours setCompany, department, and/or job position
Payroll linkWork Entry Type on the holidayNo leave request; schedules stay working
Downstream appsCalendar, Planning, Manufacturing, etc.Blocks Time Off requests for scoped staff
05

How Time Off Connects to Payroll

Odoo Payroll calculates worked time together with Employees, Time Off, Attendances, and Planning, then builds payslips from work entries. Work entries can represent attendance, sick time off, training, public holidays, and more. The leave type → work entry type mapping (on the type's Payroll section) is what makes paid leave keep salary whole and unpaid leave reduce it; missing that map is a common go-live defect—leave validates in HR but never touches the slip.

Deferred Time Off protects closed pay periods. When leave is submitted after payslips are validated, Odoo defers it to the following period instead of reopening closed slips. Late items appear under Payroll → Work Entries → Time Off to Report (filter To Defer) and can be deferred individually or in bulk (Defer to Next Month / Report to Next Month).

Managers who enter missing leave retroactively (employee forgot to request) set Payslip State on the request: To compute in next payslip, To compute in current payslip, or To defer to next payslip. That single field is how you keep audit-clean payroll when reality arrives after the cut-off. For SMEs running both apps, this closed loop is the strongest argument against a side leave tool that never syncs to pay.

06

Employee Self-Service, Manager Approvals, and Coverage

Employee experience is mostly My Time. The dashboard calendar shows the year (or day/week/month), weekends optionally hidden, and a summary box per allocated type: available balance, icon, and expiration when relevant. A question-mark popover breaks down Allocated, Approved, Planned, and Available; Balance at date estimates future accrual for staff on accrual plans. Validated leave is solid color, To Approve is striped, Refused is struck through—matching the type colors in the legend.

Staff submit from Dashboard → New or My Time → My Time Off → New: type, date range, half-day period or hourly window when the type requires it, description, and attachments when Require Supporting Document is on. If the type needs no approval, submit validates immediately. Otherwise the request lands with the configured approver chain. Extra allocation requests ("I need two more vacation days") follow the type's allocation Approval path.

Approvers work under Management → Time Off (visible only to users with Time Off Officer or Administrator rights for their people). Default filter Waiting For Me shows To Approve and Second Approval for their team. Kanban cards expose Approve, Validate (second step), or Refuse; opening the card allows edits before decision. For dual approval, the employee's approver acts first; the Time Off Officer Validates. Practitioner chatter still complains that multi-step leave approval feels heavier than the vacation itself—so reserve double validation for types that truly need HR control, and keep short absences on a single manager path.

Coverage is the manager's real job. Overview's team Gantt and Total headcount bar answer "who is out the same week?" before you Approve. Reporting → by Employee, by Type, and balance views convert gut feel into pivot data: which types spike, who still has unused days, and whether sick leave is clustering. That is how Time Off becomes operations planning, not only HR admin.

  • My Time dashboard: balances, planned/approved split, expiry warnings, Balance at date for accruals.
  • Request path: New time off with type-driven Day / Half Day / Hours fields and optional attachments.
  • Management queue: Waiting For Me, Approve vs Validate for dual control, Refuse, and retroactive missing leave.
  • Overview + Reporting: team Gantt, daily headcount bars, pivots by employee/type/balance for coverage.
07

The Dynamics 365 Equivalent: Leave and Absence

The Microsoft Dynamics 365 equivalent of Odoo Holidays is the Leave and absence workspace in Dynamics 365 Human Resources. It provides leave plans, request workflows, employee self-service, and analytics for balances and usage.

Setup in D365 HR follows a heavier enterprise pattern: configure leave and absence parameters, create a working time calendar, create a leave request workflow, and configure the Absence manager role. Only then do you create leave and absence types, build leave plans, enroll workers, and run accruals.

Accrual processing in D365 can run for multiple employees or one person, as of today or a custom date, optionally for all companies or a single leave plan, with background processing, recurrence, and job alerts. Leave accrual rounding is prorated on enrollment and un-enrollment, and Leave accrual transaction auditing records balance changes. D365 also supports buy and sell leave policies with a dedicated Buy and sell leave request workflow type—functionality Odoo does not mirror one-for-one.

Conceptually the platforms are parallel: D365 leave plans map to Odoo accrual plans, leave and absence types map to Time Off Types, and request workflows map to Odoo's four approval options. Fit differs. D365 HR is Dataverse-backed and workflow-heavy for large organizations with complex compliance. Odoo Holidays is leaner for SMEs that want fast type/plan setup, native Payroll work entries, and one database with Planning and Attendances. Choose by org size, existing stack, and localization—not a universal winner.

  • D365 HR Leave and absence = leave types + leave plans + accrual schedules + request workflows + self-service.
  • D365 setup order: parameters, working time calendar, request workflow, Absence manager role, then types, plans, enrollment, and accrual runs.
  • D365 accrual: batch-run, all-companies or single-plan, today or custom date, background + recurrence + alerts, prorated rounding, transaction auditing.
  • D365 has a native buy and sell leave policy with its own workflow type.
  • Odoo Holidays is typically faster to stand up for SMEs and integrates natively with Odoo Payroll work entries.
08

Implementation Considerations for SMEs

Sequence configuration the way the module is documented. First lock Time Off Types (duration, Count as, approval, allocation rules, documents, negative cap, Ignore Public Holidays, Work Entry Type). Second load Public Holidays per company and working schedule, then Mandatory Days for true no-leave windows. Third build Accrual Plans with seniority milestones, frequency, carry-over, and caps. Fourth push Allocations—Regular or Accrual—via Multiple Requests by department, tag, or company so nobody starts at zero.

If you run Payroll, map work entry types early and rehearse Deferred Time Off plus missing-leave Payslip State options before the first live cut-off. Multi-entity SMEs should treat company and working-hours scope as first-class design, not a cleanup item: a single global holiday list will mis-pay and mis-plan regional staff. Train employees on My Time (request, balance, attachments) and managers on Waiting For Me plus Overview coverage before go-live—configuration without adoption still produces email leave.

A clean Time Off configuration compounds: trusted balances, fewer manual corrections, audit-ready dual approvals where needed, and payslips that match leave without month-end detective work.

  1. 01
    Lock down Time Off Types first

    Define every leave category with duration, Count as, request and allocation approval, documents, negative cap, Ignore Public Holidays, company/country scope, and Payroll Work Entry Type.

  2. 02
    Configure Public Holidays and Mandatory Days per entity

    Enter regional holidays (working hours + Work Entry Type) and mandatory/stress days (department or job position). Verify they appear in Calendar, Planning, and Manufacturing.

  3. 03
    Build Accrual Plans with seniority milestones

    Encode tenure bands with After N years triggers, monthly or yearly frequency, worked-time basis, carry-over, yearly cap, and balance cap before linking Accrual Allocations.

  4. 04
    Push Allocations with Multiple Requests

    Grant Regular or Accrual allocations By Employee, Tag, Department, Company, or All so balances exist before the first request.

  5. 05
    Validate approvals, self-service, and Payroll

    Walk an employee request through My Time, a Waiting For Me approve/validate path, Overview coverage, and Time Off to Report deferral so late leave never forces a payslip reissue.

FAQ

Frequently asked questions

Is Odoo Holidays the same as the Odoo Time Off app?

Yes. Documentation and the product UI call it the Time Off application; internally it descends from hr.holidays (now hr.leave and hr.leave.allocation). Functionally it is the same leave module: types, requests, balances, allocations, approvals, accrual plans, public holidays, and mandatory days.

Does Odoo Holidays support seniority-based accrual?

Yes. Accrual Plan milestones can trigger At allocation creation or After a set number of days, months, or years from the allocation start. Combine that with frequency, worked-time vs calendar basis, carry-over, yearly cap, and balance cap to tier entitlements by tenure.

What is double validation (two-step approval) in Odoo Time Off?

On a Time Off Type, set Approval to By Employee's Approver and Time Off Officer. The employee's leave approver Approves first; the Time Off Officer Validates. Use it for policy-sensitive types; keep short absences on a single approver so the process does not become heavier than the leave itself.

How does Odoo Holidays compare to Dynamics 365 HR Leave and absence?

Both cover leave types, plans/accruals, request workflows, and self-service. D365 HR is Dataverse-backed and workflow-heavy, with native buy-and-sell leave and accrual transaction auditing for larger enterprises. Odoo Holidays is faster for SMEs to stand up and integrates natively with Odoo Payroll via Work Entries. Fit depends on org size, stack, and localization.

What happens if an employee submits time off after payslips are validated?

Odoo defers that time off to the following pay period rather than reprocessing closed payslips. Late submissions appear at Payroll → Work Entries → Time Off to Report (To Defer) and can be deferred individually or in bulk with Defer to Next Month or Report to Next Month.

Does Odoo ship with public holidays preloaded?

No. Because holidays vary by country, region, and city, you add them under Configuration → Public Holidays, optionally scoped by working hours, with a Work Entry Type for Payroll. They propagate to Calendar, Planning, and Manufacturing. Mandatory days are also empty by default.

Can employees see their leave balances and request leave themselves?

Yes. My Time → Dashboard shows allocated balances (Allocated, Approved, Planned, Available), expiry warnings, and optional Balance at date for accruals. Employees submit New time off requests and, when allowed, New allocation requests; managers process the queue under Management with the Waiting For Me filter.

How should multi-company SMEs configure Odoo Time Off?

Scope Time Off Types by Company (and Country when relevant), maintain Public Holidays and Mandatory Days per company or working schedule, and allocate with Mode By Company or By Department rather than one global list. Shared holidays across mismatched calendars cause wrong balances and wrong capacity in Planning.

Sources & methodology

19 cited

Every pricing figure and statistic on this page is traced to a primary or vendor source with a verification date. Where partner pages are cited, their platform bias is disclosed in-line.

  1. 01
    Odoo's Time Off application (the Holidays module, internally hr.holidays) is a centralized hub for requests, balances, allocations, approvals, and reports; managers allocate to individuals, teams, or the whole company and approve requests.odoo.com · verified Odoo 19.0 official documentation — Time Off overview page (verified verbatim via fetch: 'centralized hub for all time-off-related information... manages requests, balances, allocations, approvals, and reports').
  2. 02
    Employees submit a time off request; if the Time Off Type requires no approval the request is auto-approved, otherwise it is routed to the manager or time off officer depending on the configured approver.odoo.com · verified Odoo 19.0 official documentation — Request time off page.
  3. 03
    Six preconfigured time off types (Paid Time Off, Sick Time Off, Unpaid, Compensatory Days, Extra Time Off, Extra Hours) and four approval options (None Needed, By Time Off Officer, By Employee's Approver, By Employee's Approver and Time Off Officer); per-type settings include Count as, Require Supporting Document, Allow Negative Cap, Ignore Public Holidays, Deduct Extra Hours, and a Payroll Work Entry Type mapping.odoo.com · verified Odoo 19.0 official documentation — Time off types page (verified verbatim via fetch: 'six preconfigured time off types: Paid Time Off, Sick Time Off, Unpaid, Compensatory Days, Extra Time Off, and Extra Hours'; four Approval options listed verbatim).
  4. 04
    Accrual plans use milestones (At allocation creation or After N days/months/years), with frequency, worked-time vs whole-calendar basis, carry-over, yearly cap, and balance cap settings.odoo.com · verified Odoo 19.0 official documentation — Accrual plans page.
  5. 05
    Allocations are Regular (granted immediately) or Accrual (earned); Multiple Requests supports Mode By Employee, By Employee Tag, By Department, By Company, or By All Employees; allocations are visible only to Time Off Officer or Administrator.odoo.com · verified Odoo 19.0 official documentation — Allocations page (Mode options confirmed via official docs + hr_holidays source code selection field: 'employee/By Employee', 'category/By Employee Tag', plus By Department, By Company, By All Employees).
  6. 06
    Odoo's Time Off app includes no public holidays by default; they are configured under Configuration > Public Holidays with an optional Work Entry Type and scope, and propagate to Calendar, Planning, and Manufacturing.odoo.com · verified Odoo 19.0 official documentation — Public holidays page.
  7. 07
    Mandatory Days are configured company-wide or department-specific, and employees in the specified department or company are unable to submit time off requests for those days.odoo.com · verified Odoo 19.0 official documentation — Time Off overview page Mandatory days section (verified verbatim via fetch).
  8. 08
    Odoo Payroll calculates worked time using Employees, Time Off, Attendances, and Planning and creates payslips from work entries; time off types feed those work entries.odoo.com · verified Odoo 19.0 official documentation — Payroll overview page.
  9. 09
    When time off is taken after payslips are validated, Odoo defers it to the following pay period (Deferred Time Off); late submissions appear at Payroll > Work Entries > Time Off to Report and can be deferred with Defer to Next Month / Report to Next Month.odoo.com · verified Odoo 19.0 official documentation — Time off to report page.
  10. 10
    Dynamics 365 Human Resources Leave and absence provides a flexible framework for creating leave plans, workflows for managing requests, and a self-service page for employees, with analytics to measure leave balances and usage; setup requires parameters, a working time calendar, a leave request workflow, and the Absence manager role.learn.microsoft.com · verified Microsoft Learn — Leave and absence overview (verified verbatim via fetch: setup steps listed exactly as 'Configure leave and absence parameters; Create a working time calendar; Create a leave request workflow; Configure the Absence manager role').
  11. 11
    D365 HR leave accrual can be run for multiple employees or an individual, as of today or a custom date, optionally for all companies or a single plan, with background processing, recurrence, job alerts, prorated rounding, and leave accrual transaction auditing.learn.microsoft.com · verified Microsoft Learn — Accrue leave and absence plans (verified verbatim via fetch: all features confirmed including Leave accrual rounding and Leave accrual transaction auditing sections).
  12. 12
    D365 HR supports buy and sell leave policies that can be configured to use workflow for approvals, with a dedicated Buy and sell leave request workflow type created under Leave and absence > Links > Human resource workflows > New.learn.microsoft.com · verified Microsoft Learn — Create a buy and sell leave request workflow (canonical en-us URL; policy configuration also documented in Manage buy and sell leave policies).
  13. 13
    Odoo Time Off product page positions multi-step approvals, accrual plans, stress days (mandatory no-leave days), time-off analysis, and real-time updates to timesheets, attendance, payroll, and balances.odoo.com · verified Odoo product marketing page for Time Off (hr_holidays) — features include Accrual plans, Time off analysis, Stress days, Multi-step approvals (fetched 2026-08-03).
  14. 14
    Mandatory days can be company-wide or limited by department and job position; none ship by default; scoped employees cannot submit time off for those dates.odoo.com · verified Odoo 19.0 documentation — Mandatory days page (Company, Departments, Job Position, Start/End Date fields confirmed via official RST source).
  15. 15
    My Time dashboard shows per-type balances (Allocated, Approved, Planned, Available), optional Balance at date for accrual plans, expiry alerts, and calendar status colors for validated, to-approve, and refused leave.odoo.com · verified Odoo 19.0 documentation — My time page (dashboard balance popover and legend status styling).
  16. 16
    Management Time Off queue defaults to Waiting For Me (To Approve / Second Approval); Approve vs Validate supports dual approval; officers can create missing retroactive leave with Payslip State options.odoo.com · verified Odoo 19.0 documentation — Management page (Waiting For Me filter, Approve/Validate/Refuse, missing time off + Payslip State).
  17. 17
    Time Off reporting includes by Employee (pivot of duration by month), by Type (allocation vs time off vs balance bars), and balance views for managers with access rights.odoo.com · verified Odoo 19.0 documentation — Reporting page.
  18. 18
    Odoo official account announced Odoo 19 HR upgrades including tools for employees, skills, time-off, and evaluations.x.com · verified X post from @Odoo (2025-09-19) announcing Odoo 19 HR upgrades including time-off.
  19. 19
    Practitioners highlight that leave approval chains with multiple gates (form, handover, HR, senior management) create employee friction—supporting a deliberate choice of single vs dual Odoo approval paths per leave type.x.com · verified X post discussing multi-step leave approval burden (2026-03-16); used as practitioner signal, not product documentation.

Configure Odoo Holidays — or compare it to D365 HR — with a dual-platform partner

Flectic implements both Odoo and Microsoft Dynamics 365 for SMEs across Canada, the UK, and the USA. Whether you are standing up Odoo Time Off for the first time, migrating from spreadsheets, or weighing it against Dynamics 365 Human Resources Leave and absence, we can scope the right path for your team. Our AI-accelerated delivery is designed to deliver up to 3x faster, without sacrificing configuration quality.

Book an ERP Readiness Call
Response within one business day