The problem
A box of fish does not sell like a pair of shoes. The customer buys weight, inventory counts packages, and the same product leaves the door by the kilo or by the piece depending on whether it goes over the counter or out to a reseller. Odoo handles both — but not both at once, in the same place, under the hand of a busy cashier.
The second friction point is timing. With fresh goods, the shipment leaves now, and the invoice has to leave with it. Odoo's standard cycle insists on invoicing only what has actually been delivered: a perfectly sound accounting safeguard, but not one that matches a trade where the truck does not wait.
Finally, outbound paperwork was missing what the warehouse actually needs. A delivery note without a total weight, without room for the driver's signature, proves nothing on arrival.
The approach
The scope was cut into small independent modules rather than one block: the till customisation, the sales-cycle change and the document work switch on separately, and can evolve without stepping on each other.
Where a solution already existed on the market it was bought rather than rewritten — that is the case for dual units of measure at the till. Custom development was spent on what existed nowhere: what the cashier sees, what the delivery note carries, and when the invoice is issued.
No new business model was created. Everything is added by inheritance onto standard models, which keeps the instance cleanly upgradable.
The solution
Five custom modules on Odoo 18.
At the till, the product screen gains a unit switch that flips the same item between kilo and piece, plus live available stock — because with fresh goods, the only question that matters is what is genuinely left. Cash moves, margins and other cashiers' order history are restricted to managers; several employees share one station, each identifying themselves on arrival. The receipt prints twice on validation, one copy for the customer, one for the till.
On the sales cycle, a button issues and posts a sales order's invoice without waiting for the delivery to be validated.
On documents, quotations, invoices, delivery notes and picking slips display a total weight in kilos and a total quantity. The delivery note carries a full signature block — warehouse manager, truck, driver, recipient — so that handover of goods can actually be evidenced.
Beyond the commercial scope, a payroll reporting suite compliant with Ivorian regulations was delivered alongside: CNPS and CMU filings, contribution summary, employer charges, form 301, leave statement, all exportable to Excel and individually switchable.
The result
One product now sells by weight or by unit without a duplicate catalogue entry. The cashier sees remaining stock before taking payment. The invoice can follow the goods instead of waiting on them. And the delivery note finally carries the weight and the signatures the warehouse was asking for.
Stack
- Odoo
- Odoo 18
- Modules
- SalesPoint of SaleInventoryDeliveryAccountingPayroll
- Tech
- PythonOWLJavaScriptXLSX