| 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 | 7712 |
| Technical Name |
eh_log_freight |
| 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 | 7712 |
| Technical Name |
eh_log_freight |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Freight Forwarding
Turn a confirmed logistics quote into a structured forwarding job with a gated lifecycle, milestone timeline, bills of lading, container tracking, and a live cost versus revenue ledger.
Why this module
Freight Forwarding
The quote spawns the job
Confirming a logistics sale order spawns one forwarding job per mode and direction on the order. Re-confirming reuses the existing draft instead of duplicating, and cancelling the order cancels the non-terminal jobs it created. An order can also be attached to an existing in-flight job as an additional-charge source rather than spawning a new file.
A lifecycle that holds
Jobs and bills of lading move only through action buttons, never direct field writes. Each transition is validated against an allowed-transitions map, so a job cannot skip from draft to delivered, and a BL cannot be issued without its carrier number. Every move is logged to the shared logistics event stream.
Planned versus actual, side by side
The job header carries the planned margin snapshotted from the quotation alongside actuals summed from the cost and revenue ledgers, with multi-currency lines converted to company currency at line date. Disbursement revenue is excluded from margin, and margin drift in percentage points shows whether the file is beating or missing the quote.
Day in the life
From booking confirmed to file closed
An operator confirms a sea import quote. A freight job spawns in draft with its sea milestone timeline already seeded (booking, gate-in, loaded, sailed, arrived, discharged, gate-out, POD) and its own analytic account created. The operator books it, records the HBL under the consolidating MBL, adds two 40HC containers (numbers checked against ISO 6346), and stamps gate-in and loaded timestamps so each container state advances on its own. As the vessel sails and arrives, milestones get actual datetimes and variance against plan is computed automatically. Cost and revenue lines are captured against the job, and the header shows actual margin and drift against the original quote. POD received, the job closes, and the file is finalised with a full chatter audit trail.
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.
Moving a job from draft straight to delivered, or issuing a BL without a carrier number, is rejected with a coded message naming the allowed transitions from the current state. Direct writes to the state field are blocked outside the action methods.
Container numbers are normalised to uppercase and validated against the ISO 6346 format and check-digit algorithm at save. A genuine upstream typo can be forced through with an explicit Manual Number Override flag so traceability is never broken silently.
Re-confirming a logistics order that already has a live job does not create a second file. The hook finds the existing non-cancelled job, posts a note, and skips the duplicate; cancelling the order cancels only its non-terminal jobs.
Additional THC, demurrage, or a customs query fee raised after the job is moving can be booked by attaching a new quotation to the existing open job instead of spawning a new one. Closed jobs reject attachment and direct you to a variation.
When volumetric chargeable weight runs well above gross weight (1 cbm = 1000 kg basis), the form warns the operator to confirm the chargeable basis with carrier and customer before it becomes an invoicing dispute.
If a shipper or consignee country does not match the declared origin or destination on an export, the form flags it up front as the common cause of a customs declaration rejection downstream.
Cost and revenue lines in a foreign currency are converted to company currency at the line accrual or invoice date, so the job margin stays correct even when buy and sell sit in different currencies.
House bills point to their consolidating master via a parent link restricted to MBL or MAWB types, and BL numbers are unique per company and document type, so a duplicate from a carrier surfaces rather than overwriting.
What is inside
Built to do the job, end to end.
- Forwarding job. eh.log.freight.job carries shipper, consignee, notify party, customer, origin and destination country and location, mode, direction, Incoterm, cargo summary, cutoff and ETD and ETA dates, and a seven-state lifecycle (draft, booked, in transit, at destination, delivered, closed, cancelled). Each job auto-creates its own analytic account on first need.
- Bills of lading. eh.log.freight.bl covers House BL, Master BL, House AWB, and Master AWB on one model with the right fields surfaced per type. Sea fields (vessel, voyage), air fields (flight), freight terms, release type, parent and child consolidation links, and a draft to issued to released to closed lifecycle with a void path.
- Containers and ULDs. eh.log.freight.container records ISO type, container and seal number, gross weight and volume, and pickup, gate-in, loaded, discharged, gate-out, and returned timestamps. Equipment state is computed from the timestamps, and numbers are ISO 6346 check-digit validated.
- Milestone timeline. eh.log.freight.milestone records planned and actual datetime per milestone type with variance in hours computed automatically. Required milestones for the job's mode are seeded at creation from a data-driven milestone catalogue, including customs cleared and proof of delivery.
- Cost and revenue ledgers. eh.log.freight.cost.line and eh.log.freight.revenue.line track charges against the job by charge code, with quantity, unit amount, state, and multi-currency conversion to company currency. The job header rolls them into actual cost, actual revenue, actual margin, and margin drift against the planned quote.
- Operator tooling. Kanban, calendar, pivot, and graph views, search filters, a mass-advance wizard that moves many jobs in one pass and reports skips, smart shipper and consignee defaults by direction, action toasts, and a printable job report. Mail thread and activity tracking on jobs and bills of lading.
Honest about the edges
What this does not do, so nothing surprises you.
- This module manages forwarding jobs, bills of lading, containers, milestones, and a job cost and revenue ledger. It does not file customs declarations, validate HS codes, classify dangerous goods, or generate customs paperwork. Customs cleared exists as a milestone you stamp, not as a declaration engine.
- Cost and revenue ledger lines are entered against the job; the module does not yet auto-populate them from purchase orders, vendor bills, or customer invoices. Charge codes, the analytic account, and multi-currency conversion are in place for that wiring to build on.
- Milestone source records who reported a milestone (manual, EDI, adapter, telematics, portal, API) as a label. The module does not ship a live carrier tracking feed, EDI message parser, or telematics adapter; those are integration points, not included connectors.
- The supported way to create a job is to confirm a logistics sale order. Direct creation from the menu is restricted to managers by design. The module requires eh_log_base and eh_log_quotation from the ERP Heritage logistics suite.
- Air ULD handling reuses the container model with an ISO type selected; a dedicated ULD type catalogue and specialised equipment (open-top, flat-rack, tank) are seeded or extended by later modules in the suite.
freight forwarding software Odoo, freight forwarder Odoo 19, sea freight management, air freight management, ocean freight forwarding, house bill of lading Odoo, HBL MBL HAWB MAWB, container tracking ISO 6346, shipment milestone tracking, freight job cost sheet, forwarding gross margin, multimodal freight Odoo, NVOCC software, import export forwarding, 3PL logistics Odoo, freight quotation to job
Please log in to comment on this module