| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Discuss (mail) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2027 |
| Technical Name |
eh_hr_attendance_payroll_export |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Discuss (mail) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 2027 |
| Technical Name |
eh_hr_attendance_payroll_export |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Payroll Export for Attendance
Turn captured attendance into the exact CSV your payroll provider's bulk import expects, with a dry-run preview and a permanent record of every file you generate.
Why this module
Payroll Export for Attendance
Five formats, no glue code
Pick Generic, Xero, KeyPay, Employment Hero, or MYOB and the wizard writes that vendor's exact bulk-import column set with a UTF-8 byte-order mark, ready to upload through the vendor's own portal.
Dry run is the default
Every run starts as a preview showing row count, employee count, total hours, and the first lines of the file. You only create a saved export and downloadable file once you turn the dry-run flag off.
Every export is on the record
Committed runs are stored as audit rows with provider, date range, totals, who generated them, and when, on a chatter-tracked model. Re-run a period whenever you like; the new file sits next to the old one and stays re-downloadable.
Day in the life
Friday pay run, two minutes
Open Export payroll, the provider and a fortnight-to-today range are already filled in. Run it as a dry run first: 38 rows, 12 employees, 304 hours, headers look right. Two staff worked split shifts on Wednesday and each shows as a single 8 hour row, not two. Turn off dry run, run again, download the CSV, and upload it through your provider's portal. The saved run stays in Past exports if payroll queries it next week.
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.
Two or more attendances on the same calendar day for the same employee aggregate into one row, with hours summed and the earliest check-in and latest check-out kept. Test-confirmed: three attendances over two days produce two rows.
Rows with no check-out are excluded by default so half-finished shifts do not skew totals. An opt-in flag includes them, computing elapsed hours up to the date-to cutoff so an open punch never bleeds past the period end.
Each saved export run carries a company and is fenced by a global record rule to the user's allowed companies. The wizard gathers attendance only for the selected company's employees, so one company's hours never leak into another's file.
Re-running the same date range is allowed by design and never overwrites history. A new audit run is created alongside the previous one rather than mutating it, so the trail of what was sent and when stays intact.
A constraint rejects a date-to earlier than date-from with a clear error before any attendance is read, so a transposed range cannot silently produce an empty or wrong file.
The auditor group gets read-only access to export runs and cannot create, edit, or delete them, while managers and admins can generate. Past files remain inspectable without being alterable by audit staff.
A range with no matching attendance still emits a valid file with the provider's header row and zero data rows, so a quiet pay period produces a clean importable file rather than an error.
What is inside
Built to do the job, end to end.
- Export wizard. A transient eh.hr.payroll.export model with provider, date range, optional employee filter, an include-open-attendances flag, and a dry-run toggle. It gathers and aggregates attendance, then hands clean row dicts to the chosen exporter function.
- Provider exporters. Five pure-Python exporter functions, one per format, each writing its vendor's header and column order. Xero carries the analytic into Tracking 1, KeyPay and Employment Hero write start and end timestamps plus a cost centre, and MYOB writes a Card ID that falls back to work email.
- Audit run model. A stored eh.hr.payroll.export.run model on mail.thread, recording provider, date range, row and employee counts, total hours, the file as an attachment, the generating user, and the timestamp. A retention horizon and built-in sweep method let you trim old runs by company.
- Settings and menus. A default provider and retention-days setting under the attendance suite settings, plus Payroll menu entries for Export payroll and Past exports gated to the manager and auditor groups.
Honest about the edges
What this does not do, so nothing surprises you.
- CSV files only. This module does not maintain live API connectors to any payroll vendor; the operator uploads the generated file through the vendor's own bulk-import portal.
- It reads attendance hours; it does not calculate pay, tax, leave, or award interpretation. It produces timesheet-style input for a payroll system, not payslips.
- The retention horizon ships with a built-in sweep method and a configurable days setting, but no scheduled job is registered out of the box, so trimming old runs is not automatic until a cron is added.
- MYOB Card ID and the analytic or project columns are populated when the relevant employee reference and the attendance job-costing module are present; without them, Card ID falls back to work email and analytic columns stay blank.
- Provider column layouts target each vendor's documented bulk import. Vendors occasionally revise their import templates, and the operator may still need to map columns inside the vendor portal.
- Requires the ERP Heritage attendance base and the standard hr_attendance module; it is part of the suite, not a standalone payroll product.
payroll export odoo 18, attendance to payroll csv, xero timesheet export, keypay timesheet import, employment hero timesheet, myob timesheet import, hr attendance payroll export, timesheet csv export odoo, split shift aggregation, payroll export audit trail, odoo 18 community payroll, dry run payroll export
Please log in to comment on this module