Employment Hero Timesheet Sync
Bring Employment Hero timesheet entries into the standard Odoo Timesheets app as analytic lines, with the field mapping and sync job shipped as data you tune from the screen.
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 Timesheet Sync
Lands in the Timesheets app, not a silo
Entries become account.analytic.line records, exactly what the native Odoo Timesheets app uses, so synced time flows into the reports, projects and payroll links you already run. Nothing new to learn.
Mapping and job ship as editable data
Endpoints, the field mapping and the sync job arrive as configuration. Adjust source paths, required flags and conflict policy from the screen. The starter mapping is upgrade safe, so your changes survive a module update.
Idempotent by external id
Every entry is keyed to its Employment Hero id through a cross reference with a unique database constraint. Re running a job never duplicates, an unchanged entry is a no op, and one bad record is isolated and skipped while the rest continue.
Day in the life
A week of timesheets, reconciled without retyping
Staff log their time in Employment Hero through the week. The sync job pulls each entry into Odoo as an analytic line, resolving the employee through the external id cross reference and the project and task the same way. An entry edited upstream is updated in place rather than duplicated, because the line is keyed to its Employment Hero id. An entry that arrives with no resolvable project is reported as an error and skipped, never created against no project, so a payroll administrator sees exactly which entries need a mapping rather than discovering orphaned lines later. When the team is ready, the push leg is scoped to a set of records and turned on, sending Odoo entered lines back to Employment Hero through the create endpoint.
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 entry is keyed to its Employment Hero id through a cross reference with a unique database constraint, so re running a job, or replaying the same payload, links the existing line instead of creating a second one.
The mapped values are hashed together with a fingerprint of the mapping. An entry whose mapped result has not changed is skipped as unchanged, and editing the mapping itself forces a clean rewrite on the next run.
Each record is processed inside its own savepoint. A failed write rolls back just that record, is logged as an error line, and the run continues and ends in a partial state rather than aborting the whole batch.
Odoo requires a project on every analytic line. An entry with no resolvable project is reported as an error and skipped, rather than created against no project, so gaps are visible instead of silent.
The job can pull only entries changed since the last run. The cursor advances only past records that succeeded and never past a failed one, so a failed or late changed entry is re fetched next run instead of being skipped forever.
Transient errors, timeouts and rate limit responses are retried with exponential backoff and jitter. A server Retry-After header is honoured and clamped so a bad header cannot park a worker for hours.
The timesheet list is read page by page, stopping on a short or empty page, so a large history is pulled in full without holding it all in one request.
When the push leg is enabled, each create carries a stable idempotency key per Odoo record, so a retried push is deduplicated by the platform instead of creating a duplicate entry upstream.
Connections and external id links are scoped per company, and a job resolves the connection for its product and company, so links never cross between companies.
What is inside
Built to do the job, end to end.
- Endpoints (data). An organisation level list endpoint and a per employee endpoint for reading timesheet entries, plus a create endpoint for the push leg, all shipped as editable records. Adjust the path to the resource your organisation exposes if it differs.
- Field mapping (data). A starter mapping from the timesheet payload to account.analytic.line: the comment becomes the line description, units becomes the worked quantity, the date is parsed, and employee, project and task are resolved through the external id cross reference. Task is optional and skipped when absent.
- Sync job (data). A two way job that pulls entries and can push Odoo lines back through the create endpoint. It declares the external id path, the updated_at path for delta and newest wins, an Employment Hero wins inbound conflict policy and an Odoo wins push policy. The push domain ships empty so the push leg stays off until configured.
- Shared sync engine. Runs on the suite sync engine: cross reference keyed records, payload hashing, per record savepoint isolation, delta cursor bookkeeping, conflict and push policies, retry with backoff, pagination strategies and structured per record run logs.
- Scheduling. The engine ships the scheduled run. Mark the timesheet job as scheduled to include it, or run it on demand, with a dry run preview that reports what would change without writing anything.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a configuration module on the shared Employment Hero sync engine. It does not add new screens of its own; you work through the standard Timesheets app and the engine's sync job, mapping and run views.
- A connection to the Employment Hero people platform must be configured separately through the suite base module. This module ships the endpoints, mapping and job, not the credentials.
- Odoo requires a project on every analytic line. A default project must exist and be mapped through the external id cross reference, otherwise entries with no resolvable project are reported as errors and skipped.
- Employees and projects must already exist in Odoo and be cross referenced, synced by other modules in the suite or registered, so the analytic line relations resolve.
- The job is configured two way, but the push leg ships with an empty domain and stays dormant until a deployment scopes the records to send and enables it.
- This module does not subscribe to or process real time webhooks itself. The shipped job runs on demand or on the scheduled batch. Event driven delivery is handled by separate modules in the suite.
- The starter endpoint paths and source field names follow the documented Employment Hero shape and are tunable from the screen; confirm them against the exact payload your organisation returns before going live.
- Built and tested for Odoo 18 Community. No Enterprise dependency.
Employment Hero timesheet integration, Employment Hero Odoo connector, Odoo 18 timesheet sync, hr_timesheet integration, analytic line import Odoo, two way timesheet sync, external id cross reference, delta sync Odoo, idempotent API sync, payroll timesheet bridge, Odoo Community timesheet connector, timesheet entries import, configurable field mapping Odoo, multi company 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.
Connect Odoo partner records to the Saudi SPL National Address service and the Wathq commercial registry
One click install of the full Employment Hero integration for Odoo Community, covering the connector, two way syn...
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 |
•
Discuss (mail)
• Employees (hr) • Project (project) |
| Community Apps Dependencies | Show |
| Lines of code | 3650 |
| Technical Name |
eh_hero_timesheet |
| 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