Leave Management Employees Actually Love
A self-service portal that adds a dedicated "My Time Off" card to the Odoo portal home β letting employees request, track, and manage all their leaves without ever touching the backend.

Every Feature Employees Need
Designed from the ground up for the Odoo portal β no backend access required, no IT tickets for balance queries, no email chains for leave requests.
Portal Dashboard Card
A dedicated 'My Time Off' card appears on the Odoo portal home page, giving employees instant access without navigating menus.
Visual Leave Balances
Color-coded progress bars per leave type show remaining days at a glance. Employees always know exactly how much time off they have left.
Smart Overlap Validation
The system detects conflicting requests before submission and alerts the employee, preventing double-bookings and approval frustrations.
Calendar View
A monthly calendar shows all approved and pending leaves in a visual grid, making it easy to plan time off around team schedules.
Real-Time Balance Preview
As employees fill in the date range on the request form, their remaining balance updates live β no surprises after submission.
Fully Mobile Responsive
Every page β dashboard, calendar, request form, and history β is built with Bootstrap 5 and works perfectly on any screen size.
See It in Action
Every screen built for clarity β clean layouts, sensible defaults, and enough information density without cognitive overload. Real screenshots from a live Odoo instance.


Portal Home β Dashboard Card

New Request β 3-Step Form

Request Detail β Approval Timeline
Up and Running in Minutes
No custom configuration wizards. No database migrations. Install, link users, and your employees have a fully functional time-off portal.
Install the Module
Install hr_time_off_portal from the Odoo Apps menu. No configuration wizards β the portal routes and dashboard card activate immediately.
Link Employees to Portal Users
Each employee record must have a linked portal user. Odoo's standard 'Grant Portal Access' flow handles this in a few clicks.
Configure Leave Allocations
Set up leave types and allocations as you normally would in the HR module. The portal reads directly from these records.
Employees Self-Serve
Employees log into the Odoo portal, click 'My Time Off', and manage all their leaves without any backend access.
Everything at a Glance
The main dashboard surface is designed to answer three questions instantly: how much time off do I have, what requests are pending, and what's coming up. No more emailing HR to find out your balance.
- Leave balance cards per type with color-coded progress bars
- Recent requests with live status badges (Draft / Confirmed / Approved / Refused)
- Quick-action buttons: New Request, View Calendar, Full History
- Upcoming approved leaves highlighted in a compact preview
- Responsive two-column layout on tablet and desktop


Three Steps, Zero Confusion
The new request form guides employees through three clear steps: choose the leave type, select the date range, and add an optional reason. Live validation catches issues before they reach the approver.
- Step 1: Select leave type β only types with remaining allocation shown
- Step 2: Pick date range β calendar picker with working day count
- Step 3: Add reason β optional free-text field
- Real-time balance deduction preview below the date picker
- Overlap detection β warning shown if dates conflict with existing request
- Submit creates an hr.leave record in Odoo for normal approval flow
Full Transparency on Every Request
The request detail page shows employees the complete lifecycle of their leave β from submission through approval (or refusal) β with enough context to understand exactly where it stands and why.
- Status timeline: Draft β Confirmed β Validated (or Refused)
- Approver name and decision timestamp
- Manager refusal reason displayed clearly
- Cancel button for pending requests (Draft / Confirmed)
- Back navigation to dashboard and history
- Leave type, dates, duration, and reason summary

Portal Routes
All routes require an authenticated portal user linked to an employee record. Access control is enforced at the controller level via Odoo's portal security model.
| Method | Path |
|---|---|
| GET | /my/timeoff |
| GET | /my/timeoff/new |
| POST | /my/timeoff/submit |
| GET | /my/timeoff/calendar |
| GET | /my/timeoff/<id> |
| GET | /my/timeoff/history |
| GET | /my/timeoff/cancel/<id> |
Technology Stack
Standard Odoo stack β no external dependencies, no npm packages, no runtime surprises. If Odoo runs, this module runs.
11 Models, Fully Secured
Portal access rules are defined for all 11 Odoo models touched by this module. Portal users only ever see their own data β enforced at the ORM level, not just the controller.
Give Your Employees the Portal They Deserve
Install HR Time Off Portal for Odoo 17, 18 or 19 from the Apps store, link your employees to their portal users, and you're done. Free your HR team from leave balance emails β forever.