Employment Hero Attendance
Pull people-platform clock events into the standard Odoo Attendances app, carrying kiosk, geofence and face verification metadata for audit.
Store price is USD 117 all-in: installing this also pulls the 2 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Attendance
Lands in native Odoo Attendances
Clock events become ordinary hr.attendance records with real check in and check out times, visible in the stock Attendances app. No parallel screen to learn and no Enterprise dependency.
Provenance travels with the record
Each synced attendance carries the kiosk id, capture source, latitude, longitude, face verification flag and the platform reference. Stored for audit and reporting only, never read back into any pay calculation.
Safe to re-run any time
Every record is keyed to its platform id through an external id cross reference, so running the job twice reconciles in place. An unchanged payload is detected by hash and skipped as a no op.
Day in the life
From clock event to Odoo, on a schedule
Staff clock in and out on Employment Hero kiosks and the mobile app. The scheduled job pages through the platform timesheet entries endpoint, resolves each employee through the external id cross reference, and upserts an Odoo attendance with the matching check in and check out. Kiosk, source, geofence coordinates and the face verification flag ride along as audit metadata. A bad record is logged and isolated so the rest of the batch still lands, and the run is recorded with created, updated, skipped and failed counts. Run it again an hour later and only genuine changes are written.
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.
Each clock event is keyed to its platform id through the external id cross reference, unique per connection. A re-run finds the existing Odoo attendance and updates it rather than creating a second.
The mapped values plus a fingerprint of the mapping are hashed. If nothing changed since the last sync the record is skipped, so steady state runs do almost no writing.
Every record is processed inside its own savepoint. One row that fails (for example a missing employee link) is recorded as an error line and rolled back alone, while the rest of the page still commits and the run ends in a partial state.
The platform timesheet entries feed is read page by page using the page index and item per page strategy, stopping on a short or empty page, with a safety cap that warns loudly rather than silently truncating.
Transient failures, timeouts and HTTP 429 are retried with exponential backoff and jitter at the transport layer. A server Retry-After header is honoured and clamped so a hostile value cannot park a worker.
An attendance resolves its employee through the external id cross reference, so employees are expected to be synced first. A record whose employee cannot be resolved is failed and re-tried on the next run, never guessed.
The HR platform connection refreshes its OAuth2 bearer token lazily through the shared transport, so a long running schedule keeps working without manual credential rotation.
Geofence, kiosk and face verification source paths ship as best guess defaults and the capture source falls back to a default value when absent, so a payload that omits a field degrades cleanly instead of erroring.
What is inside
Built to do the job, end to end.
- Attendance pull job. A scheduled sync job that reads the platform timesheet entries endpoint and upserts Odoo attendances with check in and check out times, idempotently keyed by external id.
- Capture metadata fields. Six fields added to hr.attendance: kiosk id, capture source, geofence latitude and longitude, a face verified flag and the platform reference. All descriptive, none interpreted for pay.
- Endpoints as data. List and create endpoints for the timesheet entries resource ship as data rows with page size, items path and rate group, editable without a code change.
- Field mapping as data. A starter mapping with one line per field, marked no-update so a deployment can tune source paths to its own payload shape without an upgrade overwriting the changes.
- Audited sync runs. Every run is recorded with created, updated, skipped, deleted and failed counts plus per record lines and duration, readable straight into a compliance review.
- Automated test. A shipped test drives the mapping and job against a faked API response and asserts the attendance, times and every metadata field land correctly, run on Odoo 16, 17, 18 and 19.
Honest about the edges
What this does not do, so nothing surprises you.
- The kiosk, capture source, geofence and face verification fields are descriptive metadata only. None are interpreted for payroll, rostering or compliance inside Odoo; pay rules stay entirely with the relevant payroll system.
- The default direction is a pull from the platform into Odoo. The job is two way capable and ships a create endpoint and reverse mapping, but the push leg is left disabled by default (its filter is empty) and a deployment must narrow it before enabling outbound writes.
- The geofence, kiosk and face verification source paths are best guess defaults. Confirm them against the exact payload your organisation returns and adjust the shipped mapping rows from the user interface.
- Real time webhook delivery and an in database retry queue are provided by separate modules in the suite, not by this module. Installed on its own, attendance syncs on its scheduled job. The engine is webhook aware and will use those modules when they are present.
- Employees are expected to be synced first so the attendance to employee relation resolves through the external id cross reference. An attendance whose employee is not yet linked is failed and retried, not created without an owner.
- Requires the Employment Hero sync engine module and stock Odoo hr_attendance. It does not bundle the connector or sync engine; those install as dependencies.
Employment Hero attendance sync, Odoo attendance integration, clock in clock out Odoo, kiosk attendance Odoo, geofence attendance, face verification attendance, time clock import Odoo, hr_attendance connector, people platform attendance API, idempotent attendance upsert, Odoo 19 attendance sync, Community attendance integration, scheduled attendance import, timesheet entries sync
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.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 19 Community
Real-time fiscalisation of customer invoices and credit notes with the Mauritius Revenue Authority e-Invoicing (E...
The Malaysia country pack for the ERP Heritage Employment Hero integration
A dependency free asynchronous job queue that runs long running and fan out work out of band of the request that...
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Employees (hr) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3697 |
| Technical Name |
eh_hero_attendance |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module