Shipping agency
Inquiries that open appointments automatically; a port disbursement account pulling from canal and port calculators, quotations and disbursements; husbandry, cargo and timing; bank charges; PDA reports.
Case Study · Shipping & Logistics · Odoo 17
Migrated an eight-company Suez Canal shipping and logistics group from end-of-life Odoo 8 to Odoo 17 — and built, from scratch, the industry-specific system their business actually runs on: canal-transit and port-call cost engines, shipping-agency disbursement accounting, marine chartering, ship chandlery, and multi-currency accounts rigorous enough to pass a Big Four audit.

01 The client
An eight-company marine-services group operating across Suez Canal logistics — shipping agency, petroleum-vessel operations, marine chartering, ship supply (chandlery), and customs.
The group operates in Egyptian pounds while invoicing customers around the world in US dollars — and it was running on an end-of-life version of Odoo.

02 The core problem
There is no off-the-shelf ERP for a Suez Canal shipping agency. The actual work of the business — calculating canal-transit dues, building and settling a vessel’s port disbursement account, running husbandry and cargo, pricing a charter, supplying a ship against an IMPA catalogue in three currencies — has no standard system behind it. It lived in spreadsheets and in people’s heads.
What existed made it worse. The eight companies ran on eight separate, disconnected instances of an old Odoo 8 — one per company, with no link between them and no reporting layer at all. Nothing rolled up across the group.
Two more constraints raised the bar. The accounting had to be audit-grade: multi-currency, lender-approved, signed off by a Big Four firm. And the platform itself was end-of-life — years of custom domain logic and data had to move from Odoo 8 to a current version without breaking.
To get a single accurate number, the team hand-wrote SQL straight against the database — every figure, every time.
03 The approach
I don’t come from shipping — so I learned it. I diagnosed how a canal-transit charge is actually computed, how a disbursement account is built and settled, how a charter is priced, how a chandler quotes across three currencies to hand a customer one clean dollar figure. Then I modelled that industry into the system and built it.
The bigger change wasn’t code — it was how the work got done. The team had been meeting every gap with custom code and raw SQL, even for things Odoo could already handle. So I brought in a different way of working, and it’s what kept a system this broad maintainable.
Model how a canal-transit charge, a disbursement account and a charter price actually work — no spec to hand me, so I built the understanding first.
An inquiry becomes an appointment, a disbursement, a multi-currency invoice, an accrual — all reconciling across eight companies and standing up to an auditor.
An agile method built around finding the native Odoo capability and reusing it before writing anything bespoke — turning a team firefighting with SQL into one delivering on a platform.
Discover before you build; reuse before you write.

04 The solution
Inquiries that open appointments automatically; a port disbursement account pulling from canal and port calculators, quotations and disbursements; husbandry, cargo and timing; bank charges; PDA reports.
Calculators driven by vessel types, tariffs and rules — so a transit or port-call cost is computed, not guessed.
Charter orders with proforma invoices, down-payment options, and accrued entries.
Operations with proforma invoicing, and accrued revenue and expense recognised by service-completion date.
IMPA-coded products across multiple vendors with prices and lead times; a cost-plus-profit conversion that turns multi-currency vendor costs into one clean USD customer price; made-to-order and drop-ship; invoicing on delivered quantities.
Invoice in USD while operating in EGP; partner balances in their own currency; automatic FX gain and loss; prepaid-expense and accrual entries generated on confirmation — the accounts that passed a Big Four audit and satisfied lenders.
Intercompany transactions, branch-aware invoicing, custody and petty-cash with accountant → operations-manager → payment approvals, and cheque management.
All of it carried from end-of-life Odoo 8 to Odoo 17 — without losing the years of domain logic underneath.
05 The outcome
Eight sister companies that each ran on their own disconnected Odoo 8 now operate on one purpose-built system — canal transit, disbursements, chartering, chandlery, petroleum operations — with reporting that finally rolls up across the group. Numbers come from live reports instead of a developer hand-writing SQL for every figure.
The multi-currency accounts are rigorous enough that a Big Four auditor and the group’s lenders could stand behind them. And the team was left working a better way — reuse-first on a real platform. A niche industry that had no software of its own finally has a system that fits the way it actually works.

Why it matters
The deepest kind of ERP work isn’t configuring modules — it’s modelling an entire industry that has no software, correctly, to audit-grade financial rigour. That takes learning a business you didn’t come from, seeing how every part connects, and building it so it holds under an auditor’s review.
Model an industry that has no software — to audit-grade rigour. That’s the work.