Two-Step Odoo Returns and Exchanges for a Building Materials Trader
Goodwill returns replaced by a request and an approval in Odoo Enterprise, with linked credit notes, a returns location and StarBot order inquiries.
OdooStar and StarBot
An importer and distributor now adds freight, duty and clearing charges to the receipts they belong to as soon as the bills arrive, instead of estimating them at month-end. In Odoo Enterprise, its customer price lists and margin per order line work from real landed costs.
An importer and wholesale distributor of household and kitchenware products in the UAE
Client confidentiality: we are not allowed to disclose the name or address of this client. The project details below are shared with that in mind.
Apps and modules in this project
The client imports household and kitchenware products from overseas suppliers and sells them to supermarkets, independent retailers and hospitality buyers across the UAE. Its books ran on a standalone accounting package, while stock, costing and pricing lived in spreadsheets kept up to date by a few experienced people.
The biggest blind spot was cost. Freight, insurance, customs duty and clearing charges arrived on separate bills from forwarders and agents, often after the goods had been received and in many cases after they had been sold. Finance spread these charges with an estimated uplift at month-end, so the cost behind each quotation was a guess and the real margin on a shipment was only known long after the sales team had moved on.
Pricing had grown the same way. Key accounts had their own spreadsheets of agreed prices, discounts were negotiated by phone, and nobody could say with confidence which customers or product lines were profitable. These were the pain points we agreed to remove, and they match the typical challenges we see in Trading and Commerce:
We began with a free consultation, then ran workshops with purchasing, the warehouse, sales and finance. Together we mapped the full import cycle: the purchase order to the supplier, shipment, customs clearance, receipt at the warehouse, the supplier, forwarder and agent bills, and finally the sale. Seeing the cycle end to end showed exactly where each cost appeared and who knew about it first.
The fit-gap review was reassuring. Standard Odoo Enterprise covers this cycle well: landed costs, multi-currency purchasing, price lists, sales margins, credit limits and UAE VAT are all built in. The design therefore relied on configuration rather than custom code, which keeps each future upgrade through Odoo's own upgrade service predictable.
We agreed a phased plan with a sign-off at the end of each phase:
Data migration ran alongside the build. Customers, vendors and products were cleaned and de-duplicated, and product weights and volumes were completed so that charges could be split fairly. Opening stock values, receivables and payables were test-loaded on a copy and reconciled with finance before the final import. Each team had role-based training on a test database built from its own data, and finance ran a parallel month-end close before the old accounting package was retired.
Freight, insurance, customs duty and clearing charges became landed cost products, each with a default split method: freight by volume, duty by current cost and clearing charges equally across the products on a receipt. When a forwarder or customs bill is entered as a vendor bill, the accountant creates the landed cost from it and selects the validated receipts it belongs to.
The client chose average costing with perpetual inventory valuation, so validating a landed cost raises the average cost of the products concerned and adds the charge to their stock value at once. Customs duty and clearing charges are billed at clearance, so they are posted as the goods arrive, and freight is added as soon as the forwarder's bill comes in. The cost behind the next quotation already includes what it took to bring the goods into the warehouse.
The spreadsheets of agreed prices became price lists in Odoo Sales: one for each customer segment, such as supermarkets, independent retailers and hospitality buyers, plus account-specific lists for key customers, with rules by product category, minimum quantity and validity dates for promotions. Some rules are formulas based on cost plus a markup, so when a landed cost raises a product's average cost, the price follows.
The Margins setting is switched on in Sales and the margin columns are shown on order lines, so every quotation shows the margin and margin percentage on each line and for the order as a whole. Sales managers review thin margins before an order is confirmed, and once the goods are delivered, the cost on each line reflects the value of the stock actually shipped.
Every trade customer has a credit limit on its contact record. When a quotation or invoice would take a customer past that limit, Odoo shows a warning on the document. The warning does not block the order, so the agreed rule is that the salesperson refers it to the sales manager before confirming. Overdue balances are chased with follow-up levels in Odoo Accounting, which send reminders and schedule activities for the credit controller instead of relying on a manual list.
Purchasing, stock, sales and VAT now run in one database with one ledger, and a spreadsheet dashboard on live Odoo data shows margin by customer and by product category alongside receivables. The owners review profitability while there is still time to act on it, and our OdooStar team supports the system as new suppliers, product lines and customers are added.
Tell us how your imports, pricing and costing work today. We will show you how landed costs and margin per line would work in Odoo Enterprise on your own data.