Time Off, Attendances and Shifts in Odoo 20

Three Odoo apps quietly decide whether a business runs on time: Time Off tracks who is away, Attendances records who actually showed up, and Planning schedules who works when. None of them got a flashy redesign in Odoo 20 — instead, each received a set of targeted fixes for the exact annoyances HR teams complain about: leave balances that deduct the wrong kind of day, forgotten check-outs, overtime calculated by hand, and shift schedules that ignore where the work actually is. Here is what changed, separated carefully from what was already there.

Time Off: fairer maths, less setup

The most consequential Time Off change is about arithmetic. The amount deducted for a leave request can now be calculated based on either working days or calendar days. That distinction decides real balances: a week away spanning a weekend costs five working days but seven calendar days, and policies differ on which is fair. Odoo 20 lets the time off type follow the policy instead of forcing one convention on everyone.

Three smaller changes remove recurring friction:

  • Minimum request amounts. A minimum amount of time can now be defined for a time off request, so half-hour holiday claims and other noise-level requests can be ruled out where your policy requires it.
  • An overview that shows everyone. The Time Off overview now displays all employees, including those without active leave requests — useful for spotting who has not booked anything, not just who has.
  • A real “keep out” switch. A new “No” user right for Time Off lets administrators prevent specific users from accessing the application at all.

Public holidays also get proper treatment. The “Public Holiday” time type is now available by default for all localisations, so holidays can be generated without manual configuration, and holidays for the year can be loaded with the holidays for the company's country automatically suggested. Anyone who has ever typed a statutory holiday calendar into a new database by hand will appreciate that one.

The payroll connection

Time Off also sits behind a structural Payroll change in Odoo 20: work entries have been removed from the payroll flow, and work entry types and time off types have been merged. For HR teams the practical meaning is that leave types now do double duty — they are both what employees request and what payroll reasons about — so keeping your time off types clean and correctly configured matters more in 20 than it did before.

Attendances: check-in that polices itself

Attendances in Odoo 20 is mostly about closing loopholes in how hours get recorded. Employees on flexible schedules — with no set working hours — can now define a specific automatic check-out time, so a forgotten check-out no longer leaves an attendance record open indefinitely. Alongside it, a Single Check-in Attendance System mode can be enabled with automatic check-out: it records only an employee's first check-in during scheduled working hours, which stops duplicate punches from inflating the day.

Identity and hardware get attention too:

  • Photo at check-in. If the check-in device has a camera, it can take a photo of the employee checking in — a pragmatic answer to buddy-punching.
  • Biometric devices. eSSL and Mantra biometric devices can now be integrated directly with Odoo Attendances, feeding attendance records straight into Odoo.
  • Tighter access. Users without Attendances access rights can no longer use the app, closing a gap where attendance tooling was visible to people who should not have had it.

Overtime gets rules instead of spreadsheets

The deepest Attendances work in Odoo 20 is in overtime. Overtime is now organised into rulesets: a new smart button makes it easy to link new employees to a ruleset, and rulesets can define how overtime rates are computed for public holidays — historically the case everyone handled with a manual adjustment. A new overtime analysis report then shows the overtime worked and, crucially, which rules were applied to each piece of it, so a disputed payslip can be traced back to a rule rather than to someone's spreadsheet.

Day-to-day visibility improves as well. The Gantt view's indicators are now colour-coded to highlight underworked, expected, and overtime hours with clearer values, and attendance records can be filtered and grouped by working schedule and day — the two questions managers actually ask (“who was on the late shift?” and “what did Tuesdays look like?”) answered without exporting anything. For multi-site employers, that combination matters: a supervisor can compare sites shift by shift, see where overtime concentrates, and adjust rosters before the pattern turns into a payroll surprise.

Shifts: Planning absorbs Field Service

The “shifts” story of Odoo 20 cannot be told without the release's biggest structural move: the standalone Field Service app has been discontinued, and its features now live in Planning. For shift planners, that means Planning in 20 covers both internal rosters and field work — technicians' locations on a live map, a map view showing shift locations alongside technician availability, and routing that can run in an ordered mode (respect the sequence of addresses) or an optimised mode (shortest path). Travel times from the Mapbox integration can be displayed in the Gantt view, and customers can be invoiced distance-based travel fees or a fixed travel-time fee.

Core Planning also gained practical scheduling muscle:

  • Auto Plan with context. Automatic planning takes customer locations into account, and shifts can carry priorities — higher-priority shifts are scheduled first.
  • Multiple resources per shift. More than one resource can be assigned to the same shift, ending the duplicate-shift workaround for two-person jobs.
  • Employee-specific materials. Materials assigned to an employee are automatically added to a shift's resources when that employee is assigned.
  • Faster scheduling and delivery. Shifts can be scheduled by dragging them from the side panel into the calendar or Gantt view, linked to a specific task, and — a touch staff will actually notice — employees can be sent their schedules via WhatsApp.

What was already there

To keep the record straight: the everyday machinery of these three apps is long-standing Odoo, not new in 20. Time Off already handled leave types, allocations, accrual-style balances, approvals, and a Gantt-style team overview before this release. Attendances already offered kiosk and in-database check-in/out and automatic check-out with a tolerance for scheduled staff. Planning already supported roles, shift templates, and drag-and-drop scheduling. Odoo 20's contribution is refinement — better deduction maths, stricter capture, rule-based overtime, and a Planning app that now also carries the field-service workload — not reinvention.

What to check when you upgrade

  • Review each time off type and decide deliberately whether it should deduct working days or calendar days; the setting now exists, so the default deserves a conscious choice.
  • Load the year's public holidays using the new default type and country suggestions instead of recreating them manually — and confirm your overtime rulesets treat those holidays the way your policy promises.
  • Assign overtime rulesets to existing staff, not just new hires, and test the overtime analysis report against a known pay period before the first live run.
  • For flexible-schedule employees, set the new automatic check-out time so open attendance records stop accumulating.
  • If you used Field Service, plan the move to Planning deliberately: shifts, worksheets, and routing now live there, and the old app is not coming along.

Taken together, the Odoo 20 changes to Time Off, Attendances, and Planning follow the release's housekeeping theme: fewer manual workarounds, more policy expressed as configuration. Leave deducts the way your policy says, attendance closes itself when people forget, overtime explains itself in a report, and the schedule knows where the work is. None of it demos dramatically — all of it saves an HR team time every single week.

Further reading

Leave a Comment