Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Attendances
  3. Attendance Job Costing v 18.0
  4. Sales Conditions FAQ

Attendance Job Costing

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 18.0 Third Party 35
Download for v 18.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Project (project)
• Discuss (mail)
• Attendances (hr_attendance)
• Employees (hr)
Community Apps Dependencies Show
• Attendance Suite Base
• Face Kiosk Attendance
• EH HR Compatibility
• EH HR Platform Core
Lines of code 4431
Technical Name eh_hr_attendance_jobcost
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage Attendance Suite

Attendance Job Costing

Put an analytic account, project, and task on every attendance row, chosen at the kiosk the moment a worker clocks in.

Free · LGPL-3Odoo 18 CommunityLGPL-3v1.0.0
Analytic on every punch
Project and task fields
Allow list per worker
Require job toggle
Token authed kiosk endpoint

Why this module

Attendance Job Costing

At the source

Tag hours when they happen

The job is chosen at the kiosk the moment the worker clocks in, not pieced back together from memory at the end of the week. The selection writes straight onto the attendance row that was just created.

Scoped choices

Workers only see their jobs

An allowed analytic list per employee limits the picker to the jobs that worker is on. Leave it empty and the kiosk offers any active analytic account in the company. The endpoint checks the worker and the attendance both belong to the device's company.

Honest scope

Fields, not magic posting

This module records the analytic account, project, and task on hr.attendance and logs the punch. It is the capture layer. It does not post analytic ledger entries or build timesheets on its own, so what you see claimed is what the code does.

Day in the life

A site supervisor runs two jobs out of one kiosk.

Two crews share a door kiosk at a fit out site working two client jobs at once. With require job punch on, every face match pauses on a picker showing only that worker's allowed analytic accounts. A carpenter taps the right job and the success card clears as usual; the analytic account lands on the attendance row that match just created. A labourer with only one allowed job and the toggle off skips the picker entirely. At week's end the attendance list already shows the analytic column filled in, so there is no spreadsheet to reconcile against the door log and no argument about who was on which job.

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.

No token, no data

Both kiosk endpoints reject any request without a valid X-EH-Kiosk-Token header, returning 401. The token resolves to an active terminal record before anything else runs.

Company scoping

The options endpoint refuses an employee that does not belong to the device's company, and the punch endpoint refuses an attendance whose employee sits in a different company, so a device cannot read or write across company boundaries.

Allow list respects archiving

When an employee has an allowed analytic list, the picker filters it to active accounts only, so an archived job silently drops off the kiosk without breaking the list.

Picker suppression

The picker only interrupts the flow when the company requires it or the worker has more than one option. A single allowed job with the toggle off passes straight through to the normal success screen.

Task must match project

A model constraint blocks saving an attendance whose task does not belong to its selected project, raising a validation error rather than storing an inconsistent pair.

Idempotent partial write

The punch endpoint only writes the keys that were actually sent and skips the write entirely when nothing was selected, so a skip or an empty payload leaves the row untouched.

Default fallback

When require job punch is off and the worker makes no selection, the kiosk can fall back to the employee's default analytic account if that default is among their allowed accounts.

What is inside

Built to do the job, end to end.

  • Fields on hr.attendance. Adds eh_analytic_account_id, eh_project_id, and eh_task_id to hr.attendance, all indexed where it matters, with the task domain bound to the chosen project and a constrains check that the task belongs to that project.
  • Employee defaults and allow list. Adds a default analytic account, a default project, and a many to many allowed analytic accounts list to hr.employee, so each worker carries their own job scope and starting point.
  • Company and settings toggle. Adds eh_hr_require_job_punch on res.company with a matching related field in res.config.settings, exposed in the attendance settings so an administrator flips it without touching data.
  • Kiosk endpoints. Two HTTP routes, a GET options endpoint that returns the worker's scoped job choices and whether the picker is required, and a POST punch endpoint that writes the selection back to the attendance row, both token authenticated and CSRF exempt for kiosk use.
  • Kiosk picker and audit. A job picker injected into the face kiosk shell that interrupts after a successful match, plus a kiosk event log entry written on every job punch recording the device, employee, attendance reference, and the chosen analytic, project, and task.
  • Backend views. Inherited attendance list and form views surface the analytic, project, and task columns next to the existing fields, and the employee form gains a Job costing block under the attendance page.

Honest about the edges

What this does not do, so nothing surprises you.

  • This module captures cost references on hr.attendance. It does not post analytic ledger lines or generate project timesheets by itself; downstream costing relies on standard Odoo or your own posting step.
  • It requires the ERP Heritage attendance base and face kiosk modules, plus the standard analytic and project apps, and is an add on to that kiosk rather than a standalone time entry tool.
  • The kiosk picker offers analytic accounts as the job choice. Project and task can be stored on the row and the endpoint accepts them, but the shipped kiosk UI drives the analytic selection.
  • Allowed lists and defaults are set per employee by an administrator; there is no self service screen for workers to manage their own job list.
  • Built and tested for Odoo 18 Community. Other Odoo versions are not in scope for this branch.
Search

attendance job costing odoo 18, analytic account on attendance, hr.attendance analytic, kiosk job picker odoo, project task time tracking attendance, construction time tracking odoo community, field services billable hours, per employee analytic allowed list, require job punch toggle, face kiosk job costing, project timesheet attendance odoo, multi company kiosk attendance

Work with ERP Heritage

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.

Build and tailor
Odoo Implementation, Customization and Development, scoped to your workflow.
Connect and move
Odoo Integration and Migration across systems and Odoo versions.
Run and support
Odoo Support and Training so your team stays productive after go live.
Plan and advise
Odoo Consultation and ERP Consulting, from discovery to roadmap.

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.

ERP Heritage

Production-grade Odoo HR, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Implementation Australia

v1.0.0 · LGPL-3 · Odoo 18 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with