| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Discuss (mail) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 1815 |
| Technical Name |
eh_hr_attendance_reports |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Attendance Reports
An hourly background scan that turns raw check-ins into triaged late and missed-checkout exceptions, plus a live today board for managers.
Why this module
Attendance Reports
Late check-ins surface on their own
Every hour the cron compares today's check-ins against the company default start time plus a grace window and raises a warning-severity late exception. You do not chase timesheets; the exceptions come to you.
Open attendances stop slipping through
Any attendance with no check-out whose check-in is older than the configured threshold, twelve hours by default, raises a critical missed-checkout exception. The row stays open so HR closes it deliberately rather than the system guessing an end time.
Reruns never duplicate a warning
Each pass checks which attendances were already tagged before creating anything, so a manual rerun, an overlapping cron, or a catch-up after downtime produces no double exceptions. A regression test pins this behavior.
Day in the life
08:00, the first scan of the day
The cron wakes on its hourly schedule as the root user and walks every company. For each one it localizes now into that company's timezone, builds today's cutoff from the default start time plus grace, and pulls the check-ins that crossed it. The ones not already tagged become late exceptions. Then it sweeps open attendances older than the threshold and flags missed check-outs as critical. By the time a manager opens the today board, the open rows are the people still on site and the exception log already has the morning's late arrivals waiting to be triaged and resolved.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
Before creating, each pass loads the attendances already tagged with that exception type and skips them, so reruns, overlapping cron ticks, or a catch-up after downtime never duplicate a warning.
The late pass localizes the current moment into the company partner's timezone to build today's window and cutoff, then converts back to UTC for the search. An unknown or missing timezone falls back to UTC rather than erroring.
The scan iterates every company, reads that company's own default time, grace, and threshold settings, filters attendances to employees in that company, and stamps the resulting exception with the correct company_id.
A stale open attendance is flagged critical but the attendance row is deliberately left without a check-out so HR closes it with a real time instead of the system fabricating one.
A default start time like 8.5 is decomposed into hours and minutes for the cutoff, so 08:30 starts are honored, not rounded to the hour.
The cron executes as the root user and creates exceptions with elevated rights, so detection does not depend on which user happens to trigger it and is not blocked by per-user attendance visibility.
What is inside
Built to do the job, end to end.
- Hourly exception-detection cron. A single ir.cron, scheduled every hour and owned by the root user, calls one entry point that runs the late and missed-checkout passes in sequence.
- Late check-in pass. Per company, timezone-aware: today's check-ins past the default start time plus grace minutes become warning-severity late exceptions with a description recording the check-in and the cutoff.
- Missed check-out pass. Open attendances whose check-in predates the company threshold become critical missed-checkout exceptions, leaving the attendance open for manual closure.
- Today's attendance board. A kanban of today's attendance grouped by an open-or-closed state field, with today, open, and closed filters and group-by on state or employee, so a manager sees who is still on site.
- Open or closed state field. A computed attendance state derived from whether a check-out exists, with a matching search method so the open and closed filters and grouping work in list and kanban views.
- Company settings block. An Exceptions block on the Attendance Suite settings page exposes the default check-in time, late grace minutes, and missed-checkout hour threshold, each stored per company.
- Reports menu, gated. A Reports submenu under People Operations, restricted to the manager and auditor groups, hosting the today board.
- Tested behavior. Shipped tests cover late detection firing, on-time check-ins staying clear, idempotent reruns, critical missed-checkout detection, and recent open attendances being left alone.
Honest about the edges
What this does not do, so nothing surprises you.
- This module detects only late check-ins and missed check-outs. It does not raise no-show, geofence, location, or identity exceptions; those types exist in the shared exception log but are populated by other modules.
- Late detection compares against a single company-wide default start time plus grace. It does not read per-employee work schedules or planned shifts, so staggered or shift-based start times are not individually evaluated on this branch.
- The cron flags a missed check-out but never closes the attendance for you; closing it with a correct time is a manual HR step.
- The today board is the reachable dashboard in this module. Triaging and resolving the raised exceptions is done from the shared exception list provided by the suite base, not from a dedicated screen added here.
- No PDF export, scheduled email digest, or audit-log report is included; this module raises and surfaces exceptions, it does not generate documents.
- Requires the ERP Heritage attendance suite base and the standard hr_attendance app; it adds no new models of its own and relies on the base exception model.
Odoo 16 attendance reports, attendance exception detection, late check-in detection Odoo, missed check-out alert, hr_attendance dashboard, open attendance monitoring, attendance exception cron, multi-company attendance Odoo, manager attendance board, attendance reporting Community, idempotent attendance scan, timezone aware attendance
Need this fitted to the way you work?
ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.
We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Please log in to comment on this module