Technical Lab · 0036

Odoo for Trading Companies Bangladesh — multi-warehouse, procurement, pricing.

Bangladesh has tens of thousands of import trading and wholesale distribution businesses — from commodity importers to FMCG distributors to industrial goods dealers. The ERP configuration for trading is distinct from manufacturing: simpler BOMs, more complex pricing, and a procurement process built around LCs and landed costs. This guide covers the full configuration.

Trading company ERP has a reputation for being simpler than manufacturing ERP. That is partially true — there are no BOMs, no production orders, no work centres. But trading ERP has its own complexity that is consistently underestimated: multi-currency procurement from multiple countries, import duty and landed cost allocation, multi-tier customer pricing across hundreds of SKUs, multi-location stock management, and the cash flow discipline of LC-based import financing.

Bangladesh trading companies that I have worked with often come to Odoo from two different starting points: either they are coming from Tally (and need real inventory management and credit control), or they are coming from a custom-built system (and need scalability and process standardization). Either way, the same Odoo configuration applies. This guide covers it from scratch.

For the purchase module configuration that applies across all industries, see the Odoo purchase and vendor management guide. For multi-company or multi-branch setups, see the Odoo multi-company setup guide.

A trading company lives on margin and cash flow. ERP that cannot tell you your gross margin on every sales order and your AP outstanding by supplier is not ERP — it is a digital ledger.

Trading vs manufacturing ERP: what's different

Understanding the difference helps you configure Odoo correctly rather than carrying over assumptions from manufacturing implementations:

Odoo modules for a Bangladesh trading company

Core
Inventory
Multi-warehouse stock management. Receipts, deliveries, internal transfers, stock adjustments, and product moves. Reordering rules for automatic replenishment.
Core
Purchase
Vendor management, RFQ and PO workflow, goods receipt (GRN), landed costs, vendor pricelist, and import documentation tracking.
Core
Sales
Customer management, sales orders, multi-tier pricelists, credit limit enforcement, delivery order generation, and margin reporting.
Core
Accounting
Bangladesh VAT (Mushak), TDS/AIT on purchases, multi-currency (USD/CNY/EUR), bank reconciliation, AP/AR aging, and financial statements.
Add-on
CRM
Sales pipeline for key accounts and distributor onboarding. Follow-up activities, visit logs, and lead conversion tracking for the sales team.
Add-on
Expenses
Sales representative travel, entertainment, and product demonstration expenses. Links to the accounting cost centre for the sales department budget.

Multi-warehouse setup

Enable multi-warehouse in Inventory → Configuration → Settings → enable "Storage Locations" and "Multi-Step Routes". Then create one Odoo Warehouse per physical storage location:

For each warehouse, configure:

Import procurement workflow

01
RFQ
Request quotation from supplier. Compare multiple vendor quotes.
02
Purchase Order
Confirm PO. Record LC number and shipment date.
03
LC & Shipment
Bank issues LC. Supplier ships. B/L received.
04
GRN
Goods received in Odoo. Lot numbers assigned if tracked.
05
Landed Costs
Duty, freight, clearing costs applied to GRN.

Managing the LC lifecycle in Odoo: record the LC number, issuing bank, LC amount, and expiry date on the Purchase Order using the "Customer Reference" field and scheduled activities. Create a recurring activity reminder 30 days before LC expiry to check shipment status. If the shipment is delayed and the LC needs amendment, record the amendment as a chatter message on the PO with the revised expiry date.

LC Stage What happens In Odoo Key date to track
LC Application Company applies to bank for import LC in favour of supplier Purchase Order confirmed. LC number added to PO reference field. LC issue date
Shipment Supplier ships goods before LC shipment deadline. Bills of Lading sent to buyer's bank. Record expected arrival date on PO. Set activity reminder for arrival date − 3 days. LC latest shipment date
Document Presentation Supplier's bank presents shipping documents to buyer's bank within the document presentation period (usually 21 days from B/L date). Attach B/L and commercial invoice PDF to PO chatter. Document presentation deadline
Goods Arrival & Clearance Goods arrive at Chittagong port. Customs broker files Bill of Entry. Duty assessed and paid. Record B/E number and duty amount as notes on the PO. B/E date (for duty drawback if applicable)
GRN in Odoo Goods physically received in warehouse. Inspection done. GRN validated in Odoo. Validate Purchase Receipt in Odoo. Landed costs applied after. GRN date = inventory valuation date
Bank Payment LC retires — payment made to supplier's bank from company's account. Vendor bill posted in Odoo. Payment registered against the bill. LC maturity / payment due date

Landed costs configuration

Landed costs are the single most important configuration for a trading company's inventory valuation accuracy. Without landed costs applied correctly, your product costs in Odoo reflect only the CIF invoice price — not what you actually paid to land the goods in your warehouse. This means your margin calculations are wrong.

Note · Importer-distributor, DhakaFirst margin report
An import distributor moved from Tally to Odoo and, in the rush to go live, loaded product costs straight from the supplier's CIF invoice — no landed costs applied. The first month's margin report looked excellent. Then the accountant reconciled it against the bank: customs duty, C&F freight, and clearing fees had quietly absorbed 9–14% of every shipment, and several fast-moving SKUs were being sold below true landed cost. We retrofitted landed costs on the open receipts and made it a mandatory step before any GRN is validated. For a trading company, a margin number that excludes landed cost is not optimistic — it is wrong, and it is wrong in the direction that loses money.

Enable landed costs: Inventory → Configuration → Settings → Valuation → enable "Landed Costs". Also ensure your product category's costing method is set to "Average Cost (AVCO)" or "First In First Out (FIFO)" — Standard Price does not reflect landed cost adjustments accurately for imported goods.

Typical landed cost items for a Bangladesh importer:

Customer pricing and margin management

Enable pricelists in Sales → Configuration → Settings → Pricing → enable "Pricelists" and "Discount" if you want to show both list price and discount on the invoice.

Retail
RRP
Recommended retail price. Walk-in and small order customers.
Distributor
−15%
Registered distributors with minimum monthly purchase commitment.
Key Account
−22%
Large accounts with volume commitment. Individually negotiated discounts possible.
Export
USD
Export customers invoiced in USD. Pricelist set in USD currency.

Configure margin monitoring: Sales → Configuration → Settings → enable "Margins". This adds a "Margin" column to every sales order and the sales analysis report. Set a company-wide minimum margin alert: go to Sales → Products and set a "Cost" on each product (this should match or be pulled from the product's average landed cost). When a salesperson tries to sell below the minimum margin, Odoo shows the margin in red as a warning.

Credit limit enforcement: In the customer's Accounting tab, set a Credit Limit (e.g., BDT 500,000). In Accounting → Configuration → Settings, enable "Lock" customer sales when credit is exceeded. When a customer's outstanding AR balance exceeds their credit limit, Odoo blocks new deliveries for that customer until the outstanding balance is reduced. This prevents the common Bangladesh trading company problem of unlimited credit accumulation with distributors.

Stock replenishment

Configure automatic replenishment using Odoo's reordering rules to avoid both stockouts (lost sales) and overstock (working capital trap):

Bangladesh trading company — specific configuration notes

Bottom line

The highest-value configurations for a Bangladesh trading company in Odoo are: landed cost allocation (so your margin is real, not based on CIF price alone), multi-tier pricelists (so pricing is consistent and margin-monitored), and credit limit enforcement (so AR aging does not spiral out of control). These three configurations directly address the three most common financial management failures in Bangladesh wholesale businesses. To budget the licensing and rollout for your business, try the Odoo cost estimator. Need help configuring Odoo for your trading business? Get in touch →

Frequently asked questions

What Odoo modules does a trading company in Bangladesh need?

Core modules: Inventory (multi-warehouse stock), Purchase (vendor management, GRN, landed costs), Sales (customer orders, pricelists, credit control), Accounting (Bangladesh VAT, TDS, multi-currency, financial statements). Optional: CRM for sales pipeline, Expenses for sales team costs. Manufacturing is not needed for pure trading. Total initial setup is simpler than a manufacturer but pricing and procurement configurations are more complex — plan for 4–6 weeks of configuration and training for a mid-size trading company (5–15 users, 3 warehouses, 500+ SKUs).

How to set up multiple warehouses in Odoo for a Bangladesh trading company?

Enable "Storage Locations" and "Multi-Step Routes" in Inventory settings. Create one Odoo Warehouse per physical location (Dhaka head office, Chittagong branch, etc.). Each warehouse gets its own receipt, dispatch, and transfer sequences. Configure incoming shipments as 2-step for imported goods needing inspection, 1-step for trusted local suppliers. Inter-warehouse stock transfers create an "In Transit" movement that shows in-transit quantity separately from on-hand stock at either warehouse. Assign a responsible manager per warehouse for alert notifications.

How to apply landed costs to imports in Odoo Bangladesh?

Go to Inventory → Operations → Landed Costs → New. Select the purchase receipt, add cost lines for customs duty, local freight, and clearing agent fees. Choose splitting method (By Value recommended for most goods). Validate — Odoo adjusts the product's average cost to include these charges. AIT at import is NOT a landed cost — post it to an AIT Receivable (tax asset) account instead. Ensure your product category uses AVCO or FIFO costing (not Standard Price) for landed costs to update the product cost correctly.

How to manage customer pricing for a trading company in Odoo?

Enable Pricelists in Sales settings. Create pricelists for each tier: Retail (full price), Distributor (−15%), Key Account (−22%), Export (USD pricing). Assign pricelist to the customer's Contact record — it applies automatically on all sales orders for that customer. Enable Margins in Sales settings and set product costs from landed cost data. Monitor margin per sales order and use the Margin Analysis report to identify low-margin products or customers. Configure credit limits per customer in their Accounting tab to enforce payment discipline.