Skip to content
ERP Expert

Station 4 of 10

Purchase cycle in Odoo, from request to payment

Ahmed Hassan Algammal8 min read

What you leave this station with

A full purchase cycle executed inside your database, and the ability to state before each step which entry will be generated and what both sides of it are — then open it and check.

This is the first station that produces a document, and it is built to teach one thing larger than purchasing: the exact moment an operational event becomes an accounting entry.

Understand that here and you understand it in every cycle afterwards, and in every other system too.

The governing rule is the second rule of this whole path: after every step, open the journal entry and read both sides. Do not move on before you have.

The cycle in five steps, and what each one moves

This is the table worth memorising. The last column is the difference between running the system and understanding it.

Step Document Stock effect Accounting effect
1 Request for quotation None None
2 Confirmed purchase order Forecast quantity only None
3 Confirmed receipt Quantity actually enters An entry — under perpetual valuation only
4 Posted supplier invoice None Always an entry
5 Posted payment None Always an entry

Read the last two columns together. The first two steps generate no entry at all, and that is the first thing that contradicts a beginner’s instinct: a purchase order for a million riyals appears in no account whatsoever. It is a commitment, not a financial event. No goods arrived and no amount became due.

Note the condition on the third row. The receipt entry is generated under perpetual valuation and not under periodic — that is the field you chose at station three, and this is where its effect first appears. If you find no entry after the receipt, nothing is broken. Your item is on periodic valuation.

Steps 1 and 2: from quotation to order

There is one document changing state, not two: the request for quotation becomes a purchase order on confirmation. That pattern is constant in Odoo and you will meet it again in sales.

The practical value is that the order holds what you contracted for, which makes every later step comparable against it. Adjust quantity or price on the order so you know what to expect, then leave both alone — because half the value of this station is watching the system catch the difference.

Step 3: the receipt, and an account nobody understands first time

Confirm the receipt, then open the entry. Under perpetual valuation you will find two sides:

  • Debit: the stock account — goods came in, so assets rose.
  • Credit: goods received not invoiced — the intermediate account defined at station three.

And the question to ask yourself: why is the supplier account not credited directly?

The answer is the heart of this station: the invoice has not arrived. You genuinely own the goods, but the amount you will pay has not yet been fixed by a document from the supplier. So the system records the asset and parks the obligation in an intermediate account waiting for the invoice. Credit the supplier now and credit them again when their invoice lands, and the liability doubles.

That account is also the first report you open in any month-end close: a balance on it means goods received whose invoice never arrived. If it is large, you have missing supplier invoices and your reported profit is higher than the truth. We return to it at station seven.

Try this now: receive less than was ordered. Odoo will ask about the remainder, and the document stays open with a quantity outstanding. That is a partial receipt, and in the real world it is the normal case rather than the exception.

Step 4: the supplier invoice, and three-way matching

Create the invoice from the purchase order itself, not from a blank screen. The difference is not a click count: an invoice created from the order is linked to it, so the system can compare three documents — order, receipt, invoice. That is three-way matching, the first control in purchasing in every ERP, not only this one.

What it prevents in practice: paying an invoice for goods that never arrived, or at a price the order did not agree, or for a quantity larger than what was received.

The posted invoice entry:

  • Debit: goods received not invoiced — the intermediate account closes.
  • Debit: tax — where it is recoverable.
  • Credit: the supplier account — the liability is now fixed against a name.

Read it alongside the receipt entry. The intermediate account was credited there and debited here, so it nets to nothing. That is the cycle closed: the goods raised assets, and the obligation moved from provisional to specific.

The test that opens your eyes

Do this deliberately: enter a price on the invoice higher than the price on the purchase order.

Under perpetual valuation with average costing, the system records the difference as a price variance — because stock came in at the order price and the invoice said otherwise. That variance is the real answer to a question that recurs constantly: “why doesn’t the item’s cost equal what I paid?” It becomes visible with numbers at station six.

Step 5: payment

Register the payment, then open the entry: debit the supplier, credit the bank. The simplest entry in the cycle, and there is nothing in it to explain.

But watch one distinction that catches a great many people: a registered payment is not a reconciled payment. What you just did was record in your own books that you paid. Matching that against a bank statement is a separate operation with its own station — station seven. Confuse the two and you close a month on bank balances nobody ever checked.

The stock effect running alongside

Throughout the above there was a second movement happening in inventory, and it deserves to be read explicitly:

  • After confirming the order, the quantity is forecast, not on hand. The difference is that forecast quantity satisfies later demand in planning and cannot be sold today.
  • After the receipt, the quantity is on hand, and the cost has updated according to the costing method you chose.

Open the item’s movement report after every step and watch which column moved when. Understanding forecast versus on hand here is what keeps you out of the commonest error at station five: selling a quantity that exists in a report and not on the shelf.

The return

Execute one purchase return before you move on. Send part of the quantity back to the supplier, then open the entry. You will find the receipt entry reversed, stock reduced, and a liability that can be settled with a credit note.

The return matters because it proves that entries are not a memorised sequence of clicks but a logical reflection of an event. Understand the direction of an entry and you can predict the return’s entry before you see it — which is the real test of comprehension.

The acceptance test for this station

  1. Run the full cycle on a storable item under perpetual valuation, and read the entries at all three steps.
  2. State — before opening the screen — both sides of the receipt entry and both sides of the invoice entry, then verify.
  3. Open the balance of the goods-received-not-invoiced account and confirm it is zero once the cycle is complete.
  4. Execute a partial receipt and follow the outstanding quantity on the order.
  5. Run the cycle again on an item under periodic valuation, and watch the receipt entry disappear. If you do not notice the difference, you did not understand the field you chose at station three.

If you want the same cycle in its accounting logic, independent of any product, it is set out in the procurement cycle. What this product covers of it and what falls outside is detailed in the Odoo guide.

What comes next

Purchasing brings goods in and creates a liability. The next station is its mirror: the sales cycle from quotation to customer collection — and it answers two questions most people who “know Odoo” cannot: exactly when quantity is reserved, and exactly when revenue is recognised.