Timesheet Approval & OT
Overtime rules, approval chain and payroll lock/export for timesheets
Native Odoo timesheets have weak overtime handling and no real approval workflow, so managers reconcile hours by hand each period and payroll gets the figures late. This module adds a configurable, auditable approval and overtime engine on top of your existing account.analytic.line timesheet data, splitting regular versus overtime hours band by band with per-band multipliers. Sheets run a submit, approve and lock workflow, export payroll-ready lines, and flag any worker whose effective rate falls below the National Minimum Wage. It suits operations and HR managers, professional-services and field teams, and UK employers needing defensible approved hours for payroll and NMW compliance.
Key Features
Configurable overtime rule sets
The ts.overtime.rule model sets a daily_threshold, weekly_threshold and a basis of weekly, daily or greater-of, plus a rounding increment. ts.overtime.band rows define pay multipliers (1.5 time-and-a-half, 2.0 double-time) from a given overtime hour, with distinct start-hour validation.
Sheets built from real timesheet data
ts.sheet.action_compute reads the employee's account.analytic.line project timesheets for the week via _collect_timesheets, groups them by day and applies the rule. No parallel time record is kept, so the figures always trace back to actual logged time.
Band-by-band overtime split
split_overtime distributes each day's overtime across the configured bands, and ts.sheet.line._compute_band_split weights the hours by their multipliers into payable_hours and a readable band_summary. Weekly overtime is allocated to the latest days of the week first.
Submit, approve, reject workflow
The sheet state runs draft, submitted, approved, rejected, locked. action_submit schedules a to-do activity for the employee's manager, action_approve blocks self-approval unless the user is in group_ts_approval_manager, and action_reject records a reason, all tracked in the chatter.
Lock approved hours for payroll
action_lock moves an approved sheet to locked, and action_compute refuses to rebuild approved or locked sheets, so the hours feeding payroll cannot be silently changed after sign-off. Rejected or submitted sheets can be reset to draft for correction.
Payroll-ready export lines
get_payroll_lines returns one dict per pay category, a REGULAR line plus an OT_ line per band with hours, multiplier, rate and amount, and action_open_payroll_export launches the ts.payroll.export.wizard. get_week_summary gives a compact dashboard view of the week.
National Minimum Wage check
The sheet computes effective_rate as pay divided by hours actually worked and _compute_nmw flags nmw_breach and the nmw_shortfall against the nmw_reference_rate. action_check_nmw raises a clear warning when the effective rate falls below the statutory minimum.
Use Cases
Screenshots
Overtime Rules
Timesheet Sheets
Why Choose This Module
Native Odoo timesheets have weak overtime handling and no real approval workflow, so managers reconcile hours by hand each period. This module adds a configurable, auditable approval and overtime engine on top of your existing timesheet data, splitting regular vs overtime hours band by band and locking approved hours ready for payroll.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: hr_timesheet
- Support: support@pokutsoft.com
Update date: 2026-07-02