Shift Planning & Rota
Build staff rotas, track availability, spot coverage gaps and publish shifts
Building staff rotas in spreadsheets means double-bookings, missed time-off and no visibility of coverage gaps until someone fails to turn up. Manual scheduling also hides labour cost until payroll, and Odoo's advanced planning is Enterprise-locked. This pure-Community app lets hospitality, retail, care and any shift-based operation plan costed shifts per employee and role, capture availability and approved leave, and detect coverage gaps and conflicts before publishing. One-click weekly duplication and bulk publish make recurring rotas fast to produce on Odoo Community alone.
Key Features
Weekly rota plans with costed totals
gb.rota.plan covers a Monday-to-Sunday week with a draft, published and closed lifecycle. _compute_totals rolls up shift_count, total_hours and a Monetary total_cost so each rota shows its labour spend, and action_publish writes published on every shift in one step.
Costed shift assignments
Each gb.rota.shift records start, stop, unpaid break_minutes and hourly_cost. _compute_hours derives duration_hours, paid_hours (gross minus break) and cost, falling back to the role default_hourly_cost when the shift has no rate of its own.
Four-way conflict detection
_compute_conflicts checks double-booking via _find_overlapping_shifts, approved time-off clashes, availability breaches and rest-period breaches. It sets conflict_level to error or warning, and action_publish refuses to publish while any blocking double-booking or time-off clash remains.
Employee availability windows
gb.rota.availability stores per-day hour_from/hour_to windows with an available flag for explicit unavailability. A constrains check blocks overlapping windows, and the covers method feeds the shift availability test so staff are not rostered outside their stated hours.
Approved time-off blocks
gb.rota.timeoff records requested, approved or refused absence with action_approve/action_refuse. Its overlaps method only counts approved blocks, which the shift engine treats as a blocking conflict so you never schedule someone who is off.
Coverage requirements and gap analysis
gb.rota.coverage sets a required_headcount per day, hour window and role. _compute_assigned counts distinct employees actually rostered in that window and computes gap, surplus and a gap/ok/over status, surfacing under- and over-staffing on the plan as gap_count.
Reusable roles with rest rules
gb.rota.role holds a colour, default_hourly_cost and a min_rest_hours value (default 11h) used by the rest-period conflict check. Roles drive both shift costing and the statutory rest gap between consecutive shifts.
One-click rota duplication
The gb.rota.duplicate.wizard clones an existing rota to a new week via copy_to_week, shifting every shift's start and stop dates by the week offset and resetting them to unpublished. Coverage requirements are copied unless you untick the option.
Use Cases
Screenshots
Rotas
Roles
All Shifts
Skills
Why Choose This Module
A complete rota and scheduling tool for Odoo Community. Plan shifts per employee and role, capture staff availability and time-off, detect over- and under-coverage against a required-headcount template, and publish the rota so staff can see their assigned shifts — with no Enterprise dependency.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: hr
- Support: support@pokutsoft.com
Update date: 2026-07-02