| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2449 |
| Technical Name |
wt_hrms_shifts |
| License | OPL-1 |
| Website | https://way4tech.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2449 |
| Technical Name |
wt_hrms_shifts |
| License | OPL-1 |
| Website | https://way4tech.com |
WT HRMS Shifts — Roster, Swap, Track
Editable shift roster with shift types, daily schedules, swap requests that auto-swap on approval, night-shift flag, and a one-shift-per-day database constraint that stops double-booking forever.
shift roster · shift schedule · shift swap · shift management · night shift · rotating shift · employee shift · shift planner · shift tracker · Odoo 19 · Odoo 18 · community edition · enterprise alternative · open hrms · HR software · HR automation · way4tech
Live Preview
A real screenshot from a working WT HRMS install on Odoo 19.
The Problem This Solves
Odoo's resource calendar is for working hours, not for "who is on Night Shift this Tuesday?". Anyone running a 24/7 operation, retail floor, support team, or factory needs a real roster.
Spreadsheet rosters
Roster lives in a tab on a Google Sheet. Anyone can edit. Conflicts are silent. Last-minute swaps go on WhatsApp.
No swap workflow
"Can you do my Tuesday morning?" Manager says yes verbally, then forgets. Roster never updated. Two people arrive for the morning, nobody for the night.
No payroll feed
Night-shift allowances depend on actual shift dates. Without structured roster data, payroll has to ask the supervisor every cycle.
The Solution — Editable List Roster + Approval-Driven Swaps
Define shift types once. Edit the roster directly in a list view. Conflicts blocked by a database constraint. Swaps go through the WT HRMS approval engine and auto-swap shift types between the two schedule rows on approval.
- ✓ Shift Type registry — name, code, start time, end time, break hours, color, night-shift flag
- ✓ Float-time widget — enter 9.0 as 09:00, 17.5 as 17:30 — familiar to anyone who has used Odoo time fields
- ✓ Daily schedule rows — one row = one employee + one date + one shift type
- ✓ Editable list view — mass-edit the roster like a spreadsheet, with proper validation
- ✓ Database-level uniqueness —
UNIQUE(employee_id, date)constraint stops accidental double-bookings - ✓ 4 schedule states — Scheduled / Worked / Absent / On Leave
- ✓ Department auto-link — stored related from employee, ready to filter or group
- ✓ "This Week" filter — one-click roster for the current Mon–Sun window
- ✓ Group by Department or Shift — instant operational read-out
- ✓ Shift Swap workflow — submitted via the WT HRMS approval engine
- ✓ Auto-swap on approval — once the swap is approved, the two schedule rows have their shift types literally exchanged in the database
- ✓ Mail thread on swap requests — full audit, internal notes, follower notifications
- ✓ Night-shift flag — first-class boolean on shift_type, ready for downstream payroll allowances
- ✓ Multi-company aware — company_id on all three models
Schedule
Swap Request
Step-by-Step User Guide
Install
Apps → install WT HRMS Shifts. Pulls in WT HRMS Core.
Define shift types
WT HRMS → Configuration → Shift Types. Add Morning (08:00–16:00), Evening (16:00–00:00), Night (00:00–08:00, night-shift flag on). Set break hours.
Build the roster
WT HRMS → Shifts → Schedule. Editable list view: enter date, employee, shift type. Use This Week filter to see the current window.
Mark daily status
As shifts complete, change state from Scheduled to Worked / Absent / On Leave. Pivot/group by department to spot gaps.
Process swap requests
WT HRMS → Shifts → Swap Requests → New. Pick "My Shift" + "Their Shift" rows, plus the colleague. Click Submit; manager approves.
Auto-swap kicks in
On approval, the two schedule rows have their shift types literally exchanged. The roster updates in place — no second edit needed.
Every Feature That Matters
Shift Type Registry
Name, code, start/end time, break hours, kanban color, night-shift flag — the building blocks of any roster.
Float-Time Widget
9.0 = 09:00, 17.5 = 17:30. Familiar to Odoo users, faster than entering datetime widgets.
Editable List Roster
Mass-edit the schedule like a spreadsheet, with all the proper Odoo permissions, audit, and constraints.
DB-Level Uniqueness
UNIQUE(employee_id, date) constraint stops double-booking the same person on the same day. Defended at the database, not just the form.
4 Schedule States
Scheduled / Worked / Absent / On Leave — ready for payroll feed and absence reports.
Stored Department
Stored related field from employee → group, filter, search the roster by department in one click.
"This Week" Filter
Pre-built search filter shows the Monday–Sunday window of the current week. Saves a search every time you open the roster.
Shift Swap Workflow
Inherits the WT HRMS approval mixin — configurable approval chain, full state lifecycle, audit log.
Auto-Swap on Approval
Override of action_approve exchanges the shift types between the two schedule rows in one go — nobody has to remember to edit the roster afterwards.
Night-Shift Flag
First-class boolean on shift_type. Hook downstream payroll modules onto it for night allowances and shift differentials.
Mail Thread on Swaps
Full chatter, follower notifications — the colleagues, the manager, the HR team all stay in the loop automatically.
Multi-Company
Shift types, schedules and swaps all carry company_id — safe for groups with shared user pools across companies.
Compatibility & Requirements
| Odoo Edition | Community & Enterprise |
| Odoo Version | 19.0 |
| Dependencies | wt_hrms_core (which depends on hr, mail, hr_contract) |
| Python Packages | None |
| External Services | None — runs entirely inside your Odoo instance |
About Waqas Riasat & Way4Tech
We build Odoo modules that fix real business pain — not nice-to-have features. Every WT HRMS module is hand-tested on a fresh Odoo 19 install before being published.
way4tech.com · info@way4tech.com
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module