| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Purchase (purchase) • Sales (sale_management) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 9002 |
| Technical Name |
eh_log_container_mgmt |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Purchase (purchase) • Sales (sale_management) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 9002 |
| Technical Name |
eh_log_container_mgmt |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Container Management
Track depots, gate movements, repairs, leases, and demurrage on one append-only container spine.
Why this module
Container Management
The movement log cannot be quietly edited
A gate movement is append-only at the ORM layer. Once captured, every field except the condition note, seal number, and gate operator is locked, so the history behind an EIR and a demurrage charge stays trustworthy. To fix a mistake you cancel and re-capture, leaving a trail.
Repairs and leases follow a real state machine
Work orders move draft to estimated to approved to in progress to completed to closed, with cancel from any pre-completed state. You cannot estimate without a cost line, cannot complete with a zero actual cost line, and only a logistics manager can approve. Direct state writes are rejected.
Demurrage is computed, not guessed
Per container, free time starts at gate-out and chargeable days are max of zero and days at destination minus free time, multiplied by the per-day rate. A return date freezes the clock, and a daily cron flags containers that have crossed their threshold.
Day in the life
A container comes back damaged
A box gates in at the depot and the operator ticks needs repair on the movement and notes the dent. On save the movement is sealed into the append-only log and a draft M&R work order spawns automatically against that container, pre-filled with the condition note. The depot supervisor adds cost lines, moves it to estimated, and a logistics manager approves. Meanwhile the same container that gated out three weeks ago and has not returned shows its chargeable demurrage days and amount on the D&D tab, and the nightly cron has already flagged it for crossing free time. One Equipment Interchange Receipt PDF prints from the gate-in movement for the driver to sign.
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.
After a movement is created, editing any field other than the condition note, seal number, or gate operator raises an error. Corrections are made by cancelling and re-capturing, never by silently overwriting the gate history.
A movement flagged needs repair spawns a draft M&R work order against the same container and depot on save, carrying the gate condition note forward as the fault description so damage on arrival is never lost between the gate and the repair yard.
Demurrage accrues from gate-out using the current time until a return date is set, after which the chargeable window is frozen between gate-out and return. A zero per-day rate yields a zero amount even when chargeable days exist, so unpriced containers do not invent charges.
A lease contract whose end date precedes its start date is rejected, and the term length is counted inclusively. Headline value is fleet count times daily rate times term days, marked as indicative so it never poses as a final bill.
Approving a work order requires the logistics manager group. A work order cannot leave estimated without at least one cost line, and cannot complete while any line still has a zero actual cost, so estimates and actuals are both forced to exist.
A container's current depot is recomputed from its most recent gate movement after every capture, a deliberate latest-wins rule that a customer-specific subclass can refine without touching the append-only log.
What is inside
Built to do the job, end to end.
- Depot master. The eh.log.container.mgmt.depot record carries a unique code, depot kind (port terminal, inland depot, dry port, free zone, repair yard, storage yard), operator partner, country, indicative TEU capacity, reefer / dangerous / tank accept flags, and free-text gate hours. Master data reused across every movement and work order.
- Gate movements and EIR. The eh.log.container.mgmt.movement record logs gate-in, gate-out, transfer in and out, survey, and repair in and out events with timestamp, depot, counterparty depot, seal, and gate operator. It is append-only, and each movement prints an Equipment Interchange Receipt PDF with equipment, depot, condition note, and a signature block.
- M&R work orders. The eh.log.container.mgmt.work.order model runs a six-state lifecycle plus cancel, with cost lines carrying repair kind, quantity, and estimated versus actual unit cost. Estimated and actual totals roll up automatically, with chatter tracking and timestamps for estimated, approved, started, and completed.
- Lease in and out contracts. The eh.log.container.mgmt.lease.contract model captures direction (lease-in from a vendor, lease-out to a customer), counterparty, ISO type, fleet count, daily per-container rate, free days, and term. Containers attach to a contract, the term and headline value compute, and the contract has its own draft to active to expired state machine.
- Demurrage and detention. Each container gains free time days (default seven), a per-day rate, and computed days at destination, chargeable days, and amount, surfaced on a dedicated D&D tab. A daily cron scans containers in the gate-out-but-not-returned window and logs those past free time for follow-up.
- Multi-company and tests. Global record rules scope depots, movements, work orders, and lease contracts by company. The module ships with twenty automated tests covering the D&D calculation, the movement append-only guard and auto work order, the work order and lease state machines, and the lease term arithmetic.
Honest about the edges
What this does not do, so nothing surprises you.
- This module provides list and form views with search filters and group-by. It does not ship kanban, pivot, graph, or dashboard views, and there is no aggregate exposure tile or stock-on-hand pivot.
- Demurrage and detention is a flat calendar-day calculation (gate-out to return or now, minus free time). It does not subtract weekends or public holidays and does not consult a working-time calendar.
- There is no customs declaration, EDI message generation, or single-window adapter (for example Mirsal, FASAH, or Bayan) in this module. Depots carry an accepts dangerous goods flag, but there is no HS-code validation or dangerous-goods classification guard.
- Demurrage and lease figures are computed and surfaced on the record for visibility and the daily cron logs threshold crossings. The module does not auto-generate invoices, post journal entries, or raise mail activities from the cron on its own.
- The Equipment Interchange Receipt prints one document per movement from the form or list. There is no bulk multi-receipt PDF action.
- Depends on eh_log_base, eh_log_quotation, and eh_log_freight. The freight container record is the source of truth for container identity, ISO type, and bill of lading linkage; this module extends that spine rather than replacing it.
Odoo container management, container depot management Odoo, gate in gate out tracking, demurrage and detention Odoo, container free time calculation, Equipment Interchange Receipt EIR, container M&R work order, container lease in lease out, freight forwarding Odoo 19, 3PL container fleet, container yard management, Odoo 19 Community logistics, ISO container tracking, multi-company container operations
Please log in to comment on this module
There are no comments yet!