Skip to Content
MAFA · Odoo 17

Overtime that can be paid, not only taken as leave

Earned overtime had one exit — a leave allocation. Now an administrator pays the days they choose, at a rate, and the rest stay pending.

Led by Haseeb · ~8,000 LOC
OWL

The problem a client brought us

“Overtime only ever turns into leave days. If we want to pay someone for it instead, there is no rate, no amount, and nowhere in the system to record that it happened.”

Before and after

What overtime could become

  • A compensatory-leave allocation
  • and nothing else

What it can become now

Leave, or cash — chosen day by day

What we found and built

A dashboard listing every employee with overtime in the period. Expand one and their individual overtime days appear; an administrator ticks the days to pay now and enters an hourly rate. Days left unticked stay pending, so five earned days can be paid three this month and two the next — and none of it goes near the payroll run.

  • 22 files and roughly 3,900 lines in one change: a payment model, per-company settings, its own sequence and access rules, an OWL screen, and 700 lines of tests

Result

Overtime has a second exit. An administrator pays part of it now, leaves the rest pending, and the payroll run is never involved.

The pattern behind it

The model fills the form; a person approves it

AI earns its place where a person can check the output. Our models never write to the database directly: they draft, and someone signs off.

How we think about problems

Recognise any of this?

Most of our work starts with a message that sounds a lot like this one did.