EH HR Custody
Hand company assets to employees and get them back, on a tamper-evident audit trail.
Why this module
EH HR Custody
Every change is on the chain
Each custody record inherits the platform audit mixin, so create, assign, return, and field edits land in an append-only, sha256 hash-chained log with a verify_chain check. Any silent edit breaks the chain and is caught.
Assets never leak across companies
Records are company-scoped by default and required. A write that tries to move a record into a company the user does not belong to is refused, and any audited cross-company override is recorded in full.
Rides the engine, claims nothing extra
The assign and return steps, the status bar, and the audit trail all come from the shared platform engine. This module adds the asset fields and the return logic, and nothing it cannot back with code.
Day in the life
A laptop goes out and comes back
An HR officer opens a new custody record, picks the employee, names the asset, and saves. It gets a CUST reference automatically and sits in Draft. They press Assign and the record moves to Assigned, gated to the HR officer group. Weeks later the expected return date passes and the record shows as overdue on the list. When the laptop comes back the officer presses Return, the actual return date is stamped, they pick a condition and add a note, and the record settles in the final Returned state. Every one of those steps is on the hash-chained audit log.
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.
Returned and Cancelled are marked final in the workflow definition, so the engine refuses any further transition on them even if a misconfigured definition declared one.
A transition that is not defined from the record's current state is rejected with a clear error, so you cannot return an asset that was never assigned.
Assign, Return, and Cancel are restricted to the HR officer group. A user outside the allowed groups is blocked from advancing the workflow.
Pressing Return stamps the actual return date only if it is still blank, so re-running the action never overwrites a date someone already recorded.
Audit rows are appended under a Postgres transaction-scoped advisory lock, so two concurrent saves cannot fork the hash chain.
Reassigning a record into a company the user is not a member of is refused, and any allowed override is written to the audit log with every affected record id.
What is inside
Built to do the job, end to end.
- The custody record. A single eh.hr.custody model holds the employee, asset name and description, assigned date, expected and actual return dates, return condition, return notes, and an estimated value. The reference number is generated from a CUST year-padded sequence the first time you save.
- Workflow and overdue logic. Draft, Assigned, Returned, and Cancelled states come from the platform workflow definition and render as a status bar. Return stamps the actual date, and a live computed flag marks any record whose expected return date has passed while the asset is still out.
- Audit and company scoping. The record inherits the platform audited and company-aware mixins, giving it an append-only hash-chained audit trail over a defined set of captured fields, plus required company scoping with refusal of unauthorized cross-company writes. The module ships only the fields, views, security, and return action on top.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a custody register, not a full fixed-asset or depreciation system. The value field is an estimate for reference only, with no accounting link.
- The custody workflow has no approval chain or escalation ladder. Assign, Return, and Cancel are direct, group-gated actions, not multi-step approvals.
- Overdue is shown as a live flag on the record and list. There is no scheduled job, email reminder, or notification in this module.
- The reference sequence is shared across companies, so custody numbers are global rather than per-company.
- Requires the EH HR Platform engine modules (eh_hr_core, eh_hr_compat, eh_hr_engine_workflow) and Odoo hr. It is not a standalone app.
- Built for Odoo 16 Community.
odoo 16 employee asset custody, company asset tracking odoo, hr custody management, asset handover and return log, equipment assignment register, overdue asset tracking odoo, tamper evident hr audit trail, multi company asset custody, employee equipment tracking, laptop and phone custody odoo, company property register hr, odoo community custody module
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.
Bring Employment Hero onboarding workflows, employee goals and contractor flags into Odoo Community as real recor...
End to end French B2B and B2G electronic invoicing for the DGFiP reform, generating Factur-X PDF/A-3 with embedde...
Accept ZainCash wallet payments in Iraq at your Odoo checkout, on the ZainCash Payment Gateway v2 with OAuth2, re...
Sync Employment Hero ATS recruitment job openings into the standard Odoo Recruitment app, mapping each opening on...
The New Zealand country pack for the ERP Heritage Employment Hero integration
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 1350 |
| Technical Name |
eh_hr_custody |
| License | LGPL-3 |
| Website | https://erpheritage.com.au |
Please log in to comment on this module