Technical Lab · 0015

Odoo Purchase & vendor management for Bangladesh SMEs — the full playbook.

From vendor master setup to 3-way matching, purchase approvals, reorder automation, and vendor payment with TDS deduction — everything the Odoo Purchase module needs to run clean in a Bangladesh SME.

Procurement is where cash leaves the business. In Bangladesh SMEs, it is also where the most informal processes live — verbal agreements with vendors, handwritten receipts, payments before documents, and no systematic record of what was ordered vs. what arrived vs. what was billed. Odoo's Purchase module formalises all of this. The discipline it enforces is valuable. The configuration required to make it fit Bangladesh workflows is non-trivial.

This guide covers the full setup: vendor master, RFQ-to-PO workflow, approval controls, 3-way matching, vendor bill management, reorder automation, and the Bangladesh-specific considerations that most Odoo guides overlook.

The gap between "what was ordered" and "what was paid" is where procurement fraud lives. 3-way matching closes it.

What the Purchase module covers

Odoo Purchase manages the buy side of the business: requesting quotes from vendors, issuing Purchase Orders, receiving goods against those orders, and processing vendor invoices for payment. It integrates directly with:

Vendor master setup

Every vendor is a Contact in Odoo (Contacts → New). The Purchase tab adds procurement-specific fields. Here is what to configure for each vendor in Bangladesh:

Migration tip

When importing vendor master data from spreadsheets, clean TIN/BIN numbers first — they come in inconsistent formats (with dashes, without dashes, with letters). Odoo stores them as plain text but your VAT reports need them formatted correctly. See my Excel → Odoo migration checklist for the vendor data cleaning steps I run before every go-live.

RFQ to Purchase Order workflow

The standard Odoo purchase flow is: Request for Quotation (RFQ) → Purchase Order (PO) → Goods Receipt → Vendor Bill → Payment. Here is each step:

RFQ Created
Purchase → Orders → New. Select vendor, add product lines with quantity and unit price. RFQ status is "Draft". At this stage you can send the RFQ to the vendor by email (Odoo generates a formatted PDF). Multiple vendors can receive the same RFQ for comparison.
RFQ Sent
Send RFQ button. Odoo emails the RFQ to the vendor contact. The vendor can respond with a price confirmation. You update the unit price and delivery date in Odoo based on the vendor's response. If comparing multiple vendors, use the Purchase Alternatives view to select the best offer.
PO Confirmed
Confirm Order button. RFQ becomes a Purchase Order. Status changes from "RFQ" to "Purchase Order". A Goods Receipt (incoming shipment) is automatically created in Inventory. If approval is required (configured separately), the PO waits for approval before confirmation.
Goods Received
Inventory → Receipts. When goods arrive, validate the receipt. Enter actual received quantities — if they differ from the PO, Odoo creates a backorder for the remaining quantity or lets you close the shortfall. Stock is added to inventory and the inventory valuation is updated.
Vendor Bill
Purchase → Vendor Bills (from the PO). Create the vendor bill from the PO or receipt. Odoo pre-fills the lines from the receipt quantities (3-way match). Review for discrepancies, add TDS/AIT deduction, and validate. The bill is now in Accounting → to be paid.
Payment
Accounting → Vendor Bills → Register Payment. Select payment journal (bank account), enter payment date and amount. If TDS was deducted, the net payment amount is automatically calculated. Payment is reconciled against the vendor bill and the AP balance clears.

Purchase approval matrix

Enable purchase approvals in Settings → Purchase → Purchase Orders → tick "Purchase Order Approval". Set a threshold amount — any PO above this amount requires a designated approver to confirm before it is sent to the vendor.

Bangladesh SMEs typically implement a two-level approval matrix:

PO AmountRequired ApproverOdoo implementation
Under BDT 50,000 Purchase Officer (self-approve) Threshold set at BDT 50,000 — no approval popup below this
BDT 50,000 – 5 lakh Purchase Manager PO goes to "To Approve" state; manager receives notification
Above BDT 5 lakh Director / CFO Use the Approvals app for multi-level routing; Odoo base only supports one approval level natively

For the third level (Director/CFO approval), the Approvals app (part of the Community edition) extends the base approval mechanism. Configure an Approval Type linked to "Purchase" with a minimum amount threshold and assign the approver by user group.

Goods receipt & 3-way matching

3-way matching is the control that prevents overpayment. Odoo enforces it when you set the Vendor Bills control policy to "On Receipt" (Settings → Purchase → Invoicing Control).

01

Purchase Order

What you agreed to buy: product, quantity, unit price, delivery date. This is your contractual commitment.

02

Goods Receipt

What was actually delivered to your warehouse: actual quantity received and accepted. Odoo records this as a stock move.

03

Vendor Bill

What the vendor is charging: quantity billed and price. Odoo pre-fills from the receipt — discrepancies are immediately visible before the bill is validated.

When all three documents match, the vendor bill can be validated and paid. When they don't — a vendor bills for 100 units but only 80 were received, or the price on the bill exceeds the PO — Odoo flags the discrepancy. Finance must resolve it before payment. This single control, consistently applied, eliminates the most common procurement fraud pattern in Bangladesh SMEs.

Note · SME trading company, DhakaFirst month on 3-way matching
The most persuasive moment in a Purchase module rollout I ran was not a training session — it was the first variance Odoo caught. Within weeks of switching invoice control to "On Receipt", a vendor bill came in for the full ordered quantity on a delivery the warehouse had logged as short. Under the old spreadsheet process it would have been paid; the receiving record and the bill never met the same pair of eyes. The control did not need anyone to be suspicious — it simply made the bill un-payable until the numbers agreed. That single catch settled the internal argument about whether the new discipline was worth the extra clicks.

Vendor bills & payments

Once a vendor bill is validated in Odoo, it sits in Accounting → Vendor Bills → To Pay. Key payment controls for Bangladesh businesses:

Reorder rules & automation

Odoo can trigger Purchase Orders automatically when stock falls below a minimum level. This is configured via Inventory → Replenishment → Reorder Rules.

For each product that needs automatic replenishment, set:

Run the scheduler manually (Inventory → Replenishment → Run Scheduler) or let Odoo run it daily via the automated scheduler. For Bangladesh factories where raw material consumption is predictable, reorder rules eliminate the "we ran out of thread at midnight" emergency purchases that cost 20% more from local markets.

Inventory valuation link

The unit cost of goods received through Purchase Orders directly affects your inventory valuation. If you're using AVCO, each receipt recalculates the weighted average cost of the product. If the price on your PO doesn't match what you're actually paying (a common issue with vendor price changes), your COGS and gross margin reports will be wrong. See my inventory valuation cheatsheet for how to handle price variance correctly.

Bangladesh-specific procurement notes

Bangladesh PatternOdoo handling
Vendor advance payments before delivery Create a vendor bill for the advance amount posted to "Advance to Suppliers" account. Apply as a credit note against the final vendor bill on delivery. Never post directly to the expense account — it overstates cost before the goods arrive.
Cash purchases from local markets Create a Purchase Order (even for cash purchases) to maintain the 3-way match. Use Petty Cash as the payment journal. This keeps procurement records complete for audit — "no PO, no payment" is a policy worth enforcing from day one.
Vendor price renegotiation mid-contract Update the vendor pricelist in Odoo. For open POs, amend the unit price before the receipt is validated — changing price after validation requires a credit note and a new bill.
Import purchases with LC and customs duty Create the PO in the foreign currency. Receive goods at the PO price. Add landed costs (freight, customs duty, port charges) separately via Inventory → Landed Costs — this adds them to the product cost. Do not add to the vendor bill of the supplier.
Multiple vendors for same product Add all vendors in the product's Vendor Pricelist tab with their respective prices and minimum quantities. When creating an RFQ, Odoo shows the best vendor price automatically. Use Purchase Alternatives to compare simultaneously.
Next step

Purchase module configuration is part of every SME implementation I lead in Bangladesh. If you're running procurement on WhatsApp and spreadsheets and want to formalise it, let's talk about a structured transition →

Frequently asked questions

How does 3-way matching work in Odoo for Bangladesh businesses?

3-way matching checks that the Purchase Order, Goods Receipt, and Vendor Bill all agree. With invoice control set to "On Receipt", a vendor bill can only be created after goods are received. Odoo pre-fills the bill from the receipt quantities — any variance from the PO price or quantity is immediately visible before the bill is validated or paid. This is the primary control against overpayment and duplicate billing.

How do I set up purchase approval workflows in Odoo?

Enable Settings → Purchase → Purchase Order Approval → tick "Require approval for purchase orders above..." and set your threshold (e.g., BDT 50,000). Any PO above that amount requires a user with the "Purchase Manager" role to approve before the order is sent. For two-level approval (e.g., manager then director), install the Approvals app and create a custom approval type linked to purchase documents.

How do I handle vendor advance payments in Odoo?

Post advances to a dedicated "Advance to Suppliers" balance sheet account — never directly to expense. When the vendor delivers and bills, create a vendor credit note from the advance entry and apply it against the vendor bill. The net remaining amount is the payment due. This gives you a clean advance balance per vendor and prevents double-counting cost.

Can Odoo generate Purchase Orders automatically for manufacturing?

Yes. When the Manufacturing module's MRP scheduler runs, it calculates raw material requirements from open Manufacturing Orders and existing stock, and generates RFQs for the shortfall — automatically, for the correct vendor, at the correct lead time. This is called Make to Stock replenishment. For custom or job-order production, use Make to Order rules on the product, and Odoo generates the PO when the Sales Order is confirmed.