How to Manage Leave and Public Holidays in Odoo 19 Timesheets
Managing employee leave and public holidays in Odoo 19 Timesheets is one of the most impactful configuration steps you can take to ensure accurate payroll reporting, project costing, and HR compliance. This complete tutorial is a beginner guide and step by step walkthrough of how the Odoo 19 Time Off module integrates directly with the Timesheets application to generate automatic absence entries, enforce approval workflows, and incorporate public holidays into working schedules — all without requiring manual timesheet updates from employees or managers. By the end of this guide you will understand exactly how to enable the integration, configure public holidays and mandatory days, set up time off types with the correct approval chain, submit leave requests, and verify that approved absences appear correctly in the Timesheets calendar view.
What You'll Learn:
- How to activate Developer Mode and enable the Time Off integration in Timesheets Settings
- How to configure Public Holidays with working schedules and work entry types in the Time Off module
- How to create Mandatory Days to restrict leave requests during critical business periods
- How to set up Time Off Types with the four available approval options — from instant approval to dual-sign-off
- How to submit a time-off request and control whether public holidays within the leave period count against the employee's balance
- How approved time-off entries appear automatically in the Timesheets calendar view under the configured project and task
- How automatic timesheet integration eliminates manual absence logging and improves payroll and project accuracy
Why Integrating Time Off with Timesheets Matters in Odoo 19
In many Odoo deployments, timesheets and leave management are treated as separate concerns: employees log their working hours in Timesheets while HR manages absences in Time Off, and the two datasets never meet. This separation creates immediate problems for any business that uses timesheets for payroll calculation, project billing, or resource capacity planning. When an employee takes three days of annual leave and those days do not appear in the timesheet, the project looks under-resourced, payroll figures are incomplete, and managers have no accurate picture of actual availability.
Odoo 19 solves this with a native integration between the Time Off and Timesheets modules. Once enabled, every approved leave request automatically generates a timesheet entry on the configured project and task — typically an internal "Time Off" task. Public holidays defined in the system are also reflected in timesheets, so bank holidays and company-wide closures are accounted for without any manual intervention. This beginner guide walks through every configuration step in sequence so you can enable and verify the integration in a single session.
Automatic Timesheet Integration
Once the Time Off checkbox is enabled in Timesheets Settings, every approved leave request automatically generates a timesheet entry on the designated Project and Task. Employees never need to manually log absence hours — the system handles it the moment a request is approved or saved, depending on the approval type configured.
Public Holidays Management
Define national and company public holidays in the Time Off module with precise start and end dates, working schedule assignments, and work entry types. When a leave request overlaps a public holiday, the Ignore Public Holidays option gives HR full control over whether those days consume the employee's leave balance or are excluded from the duration calculation.
Mandatory Days Control
Create Mandatory Days records to block leave requests during critical periods such as end-of-year financial close, peak trading seasons, or scheduled company events. Each mandatory day carries a date and a description visible to employees, giving HR a transparent and policy-aligned mechanism for restricting absences without manual intervention on individual requests.
Flexible Approval Workflows
Choose from four approval modes per time off type: instant self-approval, review by a Time Off Officer, sign-off by the employee's manager, or dual approval requiring both the manager and the officer. Each mode has clear implications for when timesheet entries are created, making it straightforward to align your Odoo configuration with your company's HR policy.
Step by Step Guide: Setting Up Leave and Public Holidays in Odoo 19 Timesheets
This step by step guide walks through the complete configuration sequence from enabling Developer Mode through to verifying that approved time-off entries appear correctly in the Timesheets calendar. Follow the steps in order — the integration cannot function without the settings enabled in Step 2, and meaningful time-off requests require the types and holidays configured in Steps 3, 4, and 5.
Enable Developer Mode in Odoo 19
Developer Mode must be active before the Time Off configuration option becomes visible in Timesheets Settings. Navigate to Settings using the main application menu. Scroll to the bottom of the General Settings page and locate the Developer Tools section. Click Activate the Developer Mode. The page will reload and you will see a small bug icon in the top navigation bar confirming that Developer Mode is now active. Alternatively, append ?debug=1 to any Odoo URL to activate it immediately. Developer Mode exposes advanced configuration options across all modules — it is required here because the Time Off integration settings in Timesheets are hidden in standard user mode to prevent accidental misconfiguration by non-technical staff.
Enable the Time Off Integration in Timesheets Settings
Open the Timesheets application from the main menu. Go to Configuration in the top navigation bar and select Settings. Scroll down the settings page until you reach the Time Off section — this section is only visible when Developer Mode is active. Enable the Time Off checkbox. As soon as the checkbox is ticked, two new configuration fields appear directly below it: Project and Task. These fields determine which project and task will receive the automatically generated timesheet entries for approved leave requests. By default, Odoo sets the Project to Internal and the Task to Time Off, but you can change these to any project and task that fits your reporting structure. Click Save to apply the settings before proceeding.
Configure Public Holidays in the Time Off Module
Navigate to the Time Off application. Go to Configuration and select Public Holidays. Odoo 19 comes with a set of preconfigured public holiday records for many countries. Each record displays five fields in the list view: Name (the official holiday name), Start Date (the holiday start), End Date (the holiday end — for single-day holidays this matches the start date), Working Schedule (the employee schedule to which this holiday applies), and Work Entry Type (the payroll entry classification for this absence). To add a new public holiday, click New. Enter a descriptive name such as "Christmas Day 2026", set the start and end dates, assign the appropriate working schedule so that only employees on that schedule are affected, and select the correct work entry type for payroll processing. Click Save. Repeat for each additional public holiday relevant to your workforce.
Set Up Mandatory Days to Restrict Leave Requests
Still in the Time Off application, go to Configuration and select Mandatory Days. This feature allows HR to designate specific dates on which employees are not permitted to submit leave requests — for example, during a financial year-end, a product launch, or a regulatory reporting deadline. Click New to create a mandatory day record. Enter the date for the restriction and a clear description that employees will see when they attempt to book leave on that day — for example, "Year-End Financial Close: All staff required on-site". The description is important because it gives employees a transparent, policy-backed explanation rather than a generic refusal. Save the record. You can create as many mandatory day records as your business requires, and they can be removed or archived once the critical period has passed.
Create and Configure Time Off Types with Approval Workflows
In the Time Off application, go to Configuration and select Time Off Types. Click New to create a new leave type. Give it a meaningful name such as "Annual Leave", "Sick Leave", or "Compassionate Leave". In the TIME OFF REQUESTS section of the form, locate the Approval dropdown. This is the most important setting for timesheet integration because it controls both who must approve requests and when timesheet entries are generated. Choose the appropriate option for this leave type — the four options are described in detail in the table below. Configure any additional settings required for your policy such as leave duration limits, carry-over rules, and accrual plans. Save the record. Repeat for each leave type your organisation uses.
Submit and Track Leave Requests with Timesheet Integration
Navigate to Time Off and go to My Time Off. Click New to open the leave request form. Select the appropriate Time Off Type from the dropdown — the type you configured in Step 5. Specify the start date and end date of the requested absence. If the period overlaps with any public holidays configured in Step 3, pay attention to the Ignore Public Holidays option described in the insight box below this step section. Add any relevant notes in the Description field to provide context to the approver. Click Save. Depending on the approval type configured on the selected time off type, the request will either be automatically approved (creating a timesheet entry immediately) or enter a pending state awaiting review. Once approved, open the Timesheets application, switch to the calendar view, and verify that the absence days appear as entries under the configured Project and Task. Click the magnifying glass icon on any entry to see detailed records showing the logged hours per day.
Time Off Approval Types: Complete Reference
The approval type you select on a Time Off Type record is the single most consequential setting for how that leave category integrates with Timesheets. It determines who must act on a request, how long employees wait for confirmation, and — critically — at what point the automatic timesheet entry is created. The table below documents all four options with their workflow behaviour and recommended use cases.
| Approval Type | Description | Timesheet Entry Created | Recommended Use Case |
|---|---|---|---|
| None needed | The request is approved immediately without any review step. No Time Off Officer or manager involvement is required. The employee submits the request and it is granted automatically in a single action. | Immediately when the request is saved — no approval action required | Low-risk leave types with no balance impact, such as flex days, lieu days, or informational absences where HR simply needs a record |
| By Time Off Officer | The request enters a pending state and must be reviewed and approved by the designated Time Off Officer — typically an HR manager or administrator with the Time Off Officer access rights in Odoo. | When the Time Off Officer explicitly approves the request | Centralised HR departments where all leave approvals are managed by a dedicated HR resource, regardless of the employee's direct manager |
| By Employee's Approver | The request is routed to the employee's designated approver — typically their direct line manager or department head as configured on the employee record. The Time Off Officer is not involved in the approval chain. | When the employee's manager or designated approver approves the request | Companies with distributed management structures where team leads have authority to approve their own team members' leave without HR intervention |
| By Employee's Approver and Time Off Officer | The request requires two separate approval actions: first from the employee's manager or approver, and then from the Time Off Officer. Both must approve before the leave is granted and the timesheet entry is generated. | Only after both the manager and the Time Off Officer have approved | Sensitive or high-value leave types such as extended unpaid leave, sabbaticals, or parental leave where both operational and HR sign-off is required for compliance or payroll accuracy |
Important: "None needed" Creates Timesheet Entries Instantly on Save
When a Time Off Type is configured with the "None needed" approval option, Odoo creates the corresponding timesheet entry the moment the employee clicks Save on the leave request form — before any human review occurs. This means that if an employee submits a request by mistake and immediately deletes or cancels it, a timesheet entry may already have been created. Always use this approval type only for non-critical or informational leave categories. For any leave type that affects payroll calculations, leave balance deductions, or project costing, use one of the approval-required options to ensure a human review step occurs before the timesheet is updated.
How Timesheets Reflect Different Time-Off Request States
Not every time-off request state results in a timesheet entry. Understanding the relationship between request validation status and timesheet generation is essential for HR administrators and project managers who need to ensure their timesheet data reflects real, confirmed absences — not pending or cancelled requests.
| Request State | Timesheet Impact | Leave Balance Impact | Visible in Calendar? |
|---|---|---|---|
| Approved / Validated | Timesheet entries are created automatically for each absence day under the configured Project and Task. Hours are logged based on the employee's working schedule. | Leave balance is deducted for the approved period | Yes — entries appear in the Timesheets calendar view and can be clicked for details |
| Draft / Pending Approval | No timesheet entries are generated. The request exists only in the Time Off module awaiting action from the designated approver. | No deduction — balance unchanged until approved | No — pending requests do not appear in Timesheets |
| Refused / Rejected | No timesheet entries are created. If the request had previously been approved and timesheet entries already existed, those entries are removed when the request is refused. | No deduction — any prior deduction is reversed on refusal | No — refused requests are removed from the calendar view |
| Auto-approved (None needed type) | Timesheet entries are created immediately upon saving the request, without waiting for any human approval action. | Balance deducted immediately on save | Yes — entries appear in Timesheets immediately after the request is saved |
Understanding the Ignore Public Holidays Option
When an employee submits a leave request that spans multiple days, public holidays that fall within that period create a calculation question: should those public holidays count as part of the leave duration, reducing the employee's leave balance? Or should they be excluded, preserving the balance for genuine rest days? Odoo 19 gives HR full control over this via the Ignore Public Holidays option on each leave request form.
Key Insight: Ignore Public Holidays Controls Leave Balance Calculation
When Ignore Public Holidays is activated on a leave request, any public holidays that fall within the requested period are included in the leave duration count. For example, if an employee requests five consecutive working days and Christmas Day falls within that period, the full five days are deducted from the leave balance — the public holiday is not treated as a free day. When Ignore Public Holidays is deactivated (the default behaviour), public holidays are automatically excluded from the leave duration calculation. In the same example, only four days would be deducted from the balance because Christmas Day is recognised as a holiday and not counted as a leave day. This setting allows HR to apply different policies for different leave types — for instance, sick leave might always ignore public holidays (full calendar duration is counted), while annual leave always excludes them (preserving the employee's rest entitlement).
Verifying Timesheet Entries for Approved Leave
Once a leave request has been approved — or auto-approved in the case of a "None needed" type — the timesheet entries are generated automatically in the background. To verify that the integration is working correctly, open the Timesheets application and switch to the calendar view using the view switcher in the top right corner of the screen.
In the calendar view, navigate to the period covered by the approved leave request. You should see entries appearing on each working day of the approved absence, displayed under the project and task you configured in Step 2 (by default, the Internal project and the Time Off task). Each entry shows the employee name and the number of hours logged for that day — typically the number of working hours in the employee's daily schedule.
To inspect the details of an individual timesheet entry, click the magnifying glass icon that appears when you hover over any calendar entry. This opens a detailed record view showing the full timesheet line including the date, project, task, employee, and the exact number of hours logged. Multiple leave days generate multiple individual timesheet records — one per day — all linked to the original leave request.
If you do not see entries in the Timesheets calendar after approving a leave request, check the following: confirm that the Time Off checkbox is enabled in Timesheets Settings (Step 2), verify that the Project and Task fields are populated and point to valid records, ensure the leave request status is "Approved" and not still in "Draft" or "Refused" state, and confirm that the employee's working schedule includes working hours on the days covered by the leave request — Odoo only generates timesheet entries for days that have scheduled working hours.
Benefits of Automatic Leave and Holiday Integration
The automatic integration between Time Off and Timesheets in Odoo 19 delivers measurable benefits across HR, payroll, project management, and employee experience. Understanding these benefits helps justify the configuration effort and ensures that the integration is used consistently across all leave types and business units.
Eliminates Manual Timesheet Updates: Without the integration, employees must remember to log their own absence hours in Timesheets after their leave is approved — or HR must do it on their behalf. This creates a lag between the approved absence and the timesheet record, and introduces human error through forgotten or incorrectly logged entries. The automatic integration removes this entirely: timesheet entries are generated the moment a leave request is approved, with no further action required from the employee or HR team.
Improves Payroll and Project Accuracy: Payroll calculations that rely on timesheet data are only as accurate as the timesheets themselves. When leave absences are missing from timesheets, payroll processes see a gap in working hours that may trigger incorrect pay calculations or flag exceptions for manual review. Similarly, project managers using Timesheets to track resource availability and project burn rate need accurate absence data to make informed scheduling decisions. The integration ensures that both payroll and project reporting include complete, validated absence data automatically.
Reduces Scheduling Conflicts: When approved absences are visible in the Timesheets calendar, project managers can immediately see when team members are unavailable. This visibility allows them to reallocate tasks proactively, avoid scheduling meetings or deliverables during confirmed absence periods, and plan around public holidays without consulting separate HR systems. The calendar view provides a unified picture of who is working and who is absent on any given day.
Maintains Business Continuity: Public holidays configured in the Time Off module with correct working schedule assignments ensure that the system never expects work from employees on days they are legally or contractually off. Mandatory Days prevent employees from booking leave during critical business periods, ensuring that sufficient staffing levels are maintained for end-of-period processes, regulatory deadlines, or high-demand trading seasons. Together, these features give management proactive control over workforce availability without requiring manual policing of the leave request queue.
Supports Compliance and Audit Requirements: Many employment regulations require organisations to maintain accurate records of employee working hours and absences. The automatic integration creates a complete, timestamped audit trail in both the Time Off module (showing the leave request, approvals, and status history) and the Timesheets module (showing the resulting timesheet entries). This dual record is invaluable during HR audits, employment tribunal proceedings, or statutory reporting requirements where evidence of approved absences and corresponding timesheet adjustments may be requested.
Navigating the Time Off Module Configuration Menu
For administrators who are new to the Odoo 19 Time Off module, it helps to understand the full structure of the Configuration menu before beginning setup. The menu contains four main sections that are all relevant to the integration covered in this tutorial.
Go to the Time Off application and click Configuration in the top navigation bar. The dropdown menu reveals the following options: Time Off Types (where you define leave categories and approval workflows, as covered in Step 5), Accrual Plans (for configuring automatic leave accrual rules — not required for basic integration but useful for annual leave policies), Public Holidays (where you define bank holidays and company-wide closures, as covered in Step 3), and Mandatory Days (where you block leave requests during restricted periods, as covered in Step 4). If you have Developer Mode enabled, you may see additional technical options in this menu related to work entry types and leave activities. These are advanced options that are not required for the standard timesheet integration described in this tutorial.
It is worth noting that Public Holidays in Odoo 19 can be scoped to specific working schedules. This means that if your organisation operates multiple working schedules — for example, a standard 9-to-5 schedule for office staff and a shift-based schedule for warehouse operatives — you can create separate public holiday records for each schedule, reflecting any differences in holiday entitlement between groups. This level of granularity ensures that the timesheet entries generated for public holidays are always correct for the specific employee, regardless of which schedule they are assigned to.
Practical Example: Configuring Annual Leave with Manager Approval
To bring all of the configuration steps together into a practical scenario, consider the most common use case: setting up Annual Leave so that employee requests go to their manager for approval, and approved absences automatically appear in Timesheets under an Internal project. This scenario is the standard starting point for most Odoo 19 deployments.
STEP 1 — Activate Developer Mode
Settings > General Settings > Developer Tools > Activate Developer Mode
STEP 2 — Enable Time Off in Timesheets
Timesheets > Configuration > Settings
Enable: Time Off checkbox
Project: Internal
Task: Time Off
Click Save
STEP 3 — Create Annual Leave Time Off Type
Time Off > Configuration > Time Off Types > New
Name: Annual Leave
TIME OFF REQUESTS section:
Approval: By Employee's Approver
(leave request goes to employee's manager)
Click Save
STEP 4 — Employee Submits a Request
Time Off > My Time Off > New
Time Off Type: Annual Leave
Start Date: 2026-12-22
End Date: 2026-12-24
Ignore Public Holidays: unchecked (Christmas Day excluded from count)
Description: "End of year leave"
Click Save — request enters "Pending" state
STEP 5 — Manager Approves the Request
Manager opens Time Off > Managers > All Time Off
Locates the pending request
Clicks Approve — status changes to "Approved"
STEP 6 — Verify Timesheet Entries
Timesheets application > Calendar View
Navigate to 22–24 December 2026
Entries appear under: Internal / Time Off
Each working day shows logged hours equal to
the employee's daily working schedule hours
In this example, with Ignore Public Holidays unchecked (the default), if Christmas Day (25 December) falls within a different period that the employee requests, it would be excluded from the leave count. For the 22nd to 24th window, no public holidays are involved, so the employee's balance is deducted by three days. The Timesheets calendar will show entries on 22, 23, and 24 December — with 25 December (Christmas) appearing as a separate public holiday entry if it has been configured in the Public Holidays list.
Troubleshooting Common Integration Issues
Even with a correct configuration, administrators occasionally encounter issues with the Time Off and Timesheets integration. The following are the most common problems and their solutions.
Time Off section not visible in Timesheets Settings: This is almost always caused by Developer Mode not being active. Go to Settings, scroll to Developer Tools, and activate Developer Mode. Then return to Timesheets Settings and the Time Off section will be visible. If it is still not visible after enabling Developer Mode, verify that both the Timesheets and Time Off modules are installed — navigate to Settings > Apps and search for both. They must be installed for the integration option to appear.
Approved leave request not creating timesheet entries: Check three things in sequence. First, verify that the Time Off checkbox is enabled and the Project and Task fields are populated in Timesheets Settings. Second, confirm that the leave request status is "Approved" (green) rather than "To Approve" (orange) or "Refused" (red) — only fully approved requests generate entries. Third, check the employee's working schedule to confirm that working hours exist on the days covered by the leave request. If the employee's schedule shows those days as non-working, Odoo will not generate timesheet entries for them.
Public holiday entries not appearing in Timesheets: Public holidays generate timesheet entries only when the employee's working schedule matches the schedule assigned to the public holiday record in the Time Off module. Go to Time Off > Configuration > Public Holidays and verify that the Working Schedule on each holiday record matches the schedule used by the affected employees. If a mismatch exists, edit the public holiday record to assign the correct working schedule.
Leave request duration incorrect when public holidays are involved: Review the Ignore Public Holidays setting on the specific leave request form. If the duration appears too long (public holidays are being counted against the balance), deactivate the Ignore Public Holidays option on that request or on the Time Off Type configuration so that holidays are excluded by default. If the duration appears too short, check whether any dates in the requested period have been incorrectly configured as public holidays in the system.
Employee blocked from submitting leave on a specific date: Check whether a Mandatory Day record exists for that date. Go to Time Off > Configuration > Mandatory Days and review the list. If the date is listed as mandatory, the description field will explain the reason. If the restriction is no longer applicable, delete or archive the Mandatory Day record and the employee will be able to submit leave for that date normally.
Frequently Asked Questions
Does Odoo 19 automatically create timesheet entries for all approved leave requests?
Yes, but only after the Time Off integration is enabled in Timesheets Settings (Configuration > Settings > Time Off checkbox). Once enabled, every approved leave request automatically generates timesheet entries on the configured Project and Task for each working day of the absence. For leave types with "None needed" approval, entries are created the moment the request is saved. For types requiring manager or officer approval, entries are created when the request is formally approved.
What is the difference between Public Holidays and Mandatory Days in Odoo 19?
Public Holidays are dates on which the company does not operate — employees are off work and the days are excluded from leave balance calculations by default. Mandatory Days are the opposite: dates on which attendance is required and leave requests are blocked. Public Holidays reduce workload expectations; Mandatory Days enforce attendance. Both are configured under Time Off > Configuration but serve entirely different HR policy purposes.
Can I change which project and task timesheet entries are linked to for approved leave?
Yes. In the Timesheets application, go to Configuration > Settings and locate the Time Off section (Developer Mode must be active). The Project and Task fields are fully editable and accept any existing project and task in your Odoo instance. The defaults are the "Internal" project and "Time Off" task, but you can assign any project and task that fits your reporting or cost centre structure. Changes apply to all future approved leave requests — existing timesheet entries are not retroactively updated.
Why is the Time Off option not visible in Timesheets Settings in Odoo 19?
The Time Off section in Timesheets Settings is hidden unless Developer Mode is active. Go to Settings > General Settings, scroll to Developer Tools, and click Activate Developer Mode. Once active, return to Timesheets > Configuration > Settings and scroll down — the Time Off section with its checkbox and Project/Task fields will now be visible. Also verify that both the Timesheets and Time Off modules are installed in your Odoo instance.
How does the Ignore Public Holidays option affect an employee's leave balance in Odoo 19?
When Ignore Public Holidays is unchecked (the default), public holidays within the leave period are excluded from the duration calculation and the employee's balance is not deducted for those days — preserving their leave entitlement. When Ignore Public Holidays is checked, public holidays count as leave days and the full calendar duration is deducted from the balance. HR typically activates this option for sick leave or other leave types where the policy requires the full absence period to be recorded regardless of whether public holidays fall within it.
Need Help Configuring Odoo 19 Timesheets and Time Off?
Our certified Odoo consultants can configure the complete leave and public holiday integration for your organisation — including working schedules, approval workflows, mandatory days, and timesheet reporting — so your HR and project data is always accurate and up to date.
About the author
Founder & Odoo Practice Lead, Braincuber Technologies
Founder of Braincuber. Has scoped and shipped 500+ Odoo implementations for US mid-market and global brands. Takes every founder call personally — no SDR layer between buyers and the people building the system.
