| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Project (project)
• Discuss (mail) • Attendances (hr_attendance) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 3504 |
| Technical Name |
eh_hr_attendance_jobcost |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Project (project)
• Discuss (mail) • Attendances (hr_attendance) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 3504 |
| Technical Name |
eh_hr_attendance_jobcost |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Attendance Job Costing
Analytic account, project, and task on every attendance row. After a successful face match the kiosk shows a job picker scoped to what the worker is allowed on; the selection writes back to hr.attendance and reaches the analytic ledger and project timesheets straight away. Costs follow hours, no second tool required.
Day in the life
Match. Pick the job. Get on with it. Costs follow.
A chippy walks up to the kiosk on Tuesday morning. The face match recognises them. Instead of dropping back to the welcome screen, the kiosk shows a short list of the analytic accounts and projects this worker is allowed on, headed by their default. They tap the job they are on today, the kiosk POSTs the selection to the server, and the just created hr.attendance row picks up the analytic, project, and task. By the time the project manager opens Project at smoko, the timesheet on the right job already has the morning's hours on it, with no second app, no afternoon reconciliation, no dispute.
Overview
What this module does, in one read.
eh_hr_attendance_jobcost adds analytic account, project, and task to hr.attendance and threads a job picker through the face kiosk after match.
No new models; existing analytic and project objects are referenced. Each employee carries a default analytic, default project, and an allowed analytic accounts list, so the kiosk only offers what the worker is on. A company toggle forces the picker even when the worker has only one allowed job; turn it off if attendance only is enough for some teams.
Capabilities
Eight things this module gives you, with no padding.
Analytic, project, task on hr.attendance
Three indexed fields added to the standard attendance row: eh_analytic_account_id, eh_project_id, eh_task_id. The list and form views surface them next to the existing fields.
Per employee defaults
Each employee carries a default analytic account and a default project. The kiosk picker pre selects them; the worker confirms or switches. Defaults flow through to backend created rows too.
Per employee allow list
An eh_allowed_analytic_account_ids many2many on hr.employee constrains the kiosk picker to just the jobs this worker is on. A worker cannot accidentally clock into the wrong job from a public kiosk.
Required punch toggle
eh_hr_require_job_punch on the company forces the picker even when an employee has only one allowed job. Useful when finance wants every clocked minute attached to a billable analytic.
Task scoped to project
A constraint refuses a task whose project is not the selected project. The form domain mirrors the rule, so backend pickers stay sensible.
Kiosk picker hooked into face match
A small JS hook in the kiosk shell appears after a successful match. The selection POSTs to a server endpoint that updates the just created hr.attendance row, then returns to the welcome screen.
Backend list and form views
Analytic, project, and task columns join the standard attendance list and form. HR or finance can edit on a row in the rare case it needs correction, with the standard chatter trail to back it.
Flows through to standard analytic
The fields reference account.analytic.account, project.project, and project.task directly. Standard Odoo reports and dashboards downstream see the data without bespoke views.
Workflow
Configure. Match. Pick. Bill.
Configure
Set the per employee default analytic, default project, and the allowed analytic accounts list. Decide whether the picker is required.
Match
Worker walks up to the kiosk, face matches. The attendance row is created with the worker's defaults already on it.
Pick
Picker offers the allowed analytic accounts and projects. Tap one. The selection writes back to the just created row.
Bill
Standard analytic and project reports already see the hours. Invoice the customer from project; payroll exports pick up the analytic when configured to.
Frequently asked questions
Honest answers to the questions a buyer asks.
Does this need Odoo Enterprise?
No. Standard analytic and project modules from Odoo 19 Community. The fields reference account.analytic.account, project.project, and project.task; both are available in Community.
Can a worker pick any job?
Only the analytic accounts on their allow list. Empty list means everything in the company; populate the list to fence the worker to the right scope.
Do attendance rows without a job picker still work?
Yes. With the require toggle off, the row is created with whatever default the employee carries; the picker is offered but not enforced. Mixed teams can have some workers required and others not.
What if a worker switches jobs mid shift?
The simplest path is to clock out and clock in again at the second job. Each clock in is a fresh attendance row, and the picker fires every time.
Please log in to comment on this module