Odoo Walkthroughs
Walkthrough 02

Customer Collection

"Out-of-hand" — customer picks up from our premises instead of waiting for a delivery batch.

Overview

When to use this flow

Use Customer Collection when a customer is picking up their order from our premises in person — not waiting for a delivery vehicle. Common cases: contractor with own bakkie, urgent same-day pickups, smaller stockists collecting weekly orders.

i

How this differs from the standard delivery flow

StepStandard deliveryCustomer collection
Sales orderSame — created and confirmed normallySame — created and confirmed normally
Delivery routingAdded to a vehicle batch with driver, route, scheduled dateNo batch. Stays as a standalone WH/OUT
Stock issuedBy driver at customer's premises after route executionAt our counter when the customer arrives
Proof of deliveryDriver captures signature on the slip in transitCustomer signs the slip at the counter
InvoicingUsually invoiced from office once driver returnsOften invoiced & paid on the spot at the counter
📌 The sales order itself is identical

All Phase 1 steps from Walkthrough 01 — Sales Order still apply: customer status checks, discount approval, credit limit, products and prices. The branching point is after the SO is confirmed — instead of pushing the delivery to a vehicle batch, you process it manually at the counter.

Phase 1

Take the Order

Create and confirm the sales order in the normal way, then flag it as a collection so the warehouse doesn't accidentally route it to a delivery batch.

1

Create the sales order

Follow Phase 1 of Walkthrough 01 — Sales Order:

  1. Sales app → New
  2. Select customer (Walk-in / Cash-Sale customers — see variation below)
  3. Add products & quantities
  4. Resolve any credit / discount approvals
  5. Click Confirm

The Sales Order is now created, and Odoo has auto-generated a delivery record WH/OUT/####.

2

Mark the delivery as a collection

This is what stops the warehouse from grouping the order into a vehicle batch tomorrow morning.

From the confirmed SO, click the Delivery smart button → on the WH/OUT record:

  1. Set the Scheduled Date to today (defaults to today, but verify).
  2. In the Note / chatter, log: "Customer collection — do not add to delivery batch".
  3. VERIFY: If our environment has a custom Delivery Method or Shipping Policy field with a Collection option, set it now. Sprint 5 does not document a dedicated collection flag — most South African Odoo deployments add a Carrier = "Customer Collection" option for filtering and reporting.
⚠ VERIFY — collection flag in live environment

Walk this against your live Odoo. If there's a custom field that distinguishes collections from deliveries (Olympic Paints-specific), document the exact field name + value here and replace this placeholder.

Phase 2

Issue the Stock

When the customer arrives, find the delivery record, print the picking slip, hand the stock over with the slip signed, and validate the delivery.

3

Find & open the delivery

(or counter staff)

Navigate Inventory app → Operations tab → Deliveries.

  1. Use the search box — type the customer name, the SO reference, or the WH/OUT number.
  2. Filter by Ready status to see only those waiting to be issued.
  3. Click the row to open the delivery record.
Sprint 5 — locating a delivery record
Sprint 5, p.6–7 — Sorting and filtering deliveries by Street / City / Status to locate the right WH/OUT.
5

Validate the delivery at the counter

The warehouse picks the stock, the customer counts it, signs both copies of the slip. Now mark the delivery done in Odoo:

  1. On the WH/OUT record, confirm each line's Done quantity equals what was physically handed over.
  2. (Optional) In the Note field type: "Collected by [name] — signed slip on file".
  3. Click Validate.
Sprint 5 — validating the delivery
Sprint 5, p.24–25 — The Validate button finalises the delivery, decrements stock, and marks the SO as Delivered.
✓ What "Validate" does for a collection
  • Stock decreases in OP/Stock.
  • The WH/OUT status flips to Done.
  • The Sales Order is marked Delivered.
  • The Create Invoice action becomes available.
6

Partial collection — creating a backorder

If the customer only takes part of the order (e.g. they ordered 10 × 20L drums but only have space for 6):

  1. Set the Done quantity on each line to what they actually take.
  2. Click Validate.
  3. Odoo prompts "Create Backorder?" — click Create Backorder.
  4. A second WH/OUT record is created with the remaining quantity in Ready status — waiting for their next visit.
Sprint 5 — backorder pop-up
Sprint 5, p.18 — Create Backorder pop-up after partial validation.
Phase 3

Invoice & Collect Payment

Customer collections are usually invoiced and paid on the spot — especially for COD customers. The invoice can be created and printed in under a minute.

7

Create and print the invoice

Open the (now-Delivered) Sales Order — Sales app → Orders.

  1. Click Create Invoice.
  2. Choose Regular invoice → click Create and View Invoice.
  3. Review the draft invoice (tax, due date, totals).
  4. Click Confirm to post.
  5. Click Print → hand the printed invoice to the customer.
📷 VERIFY — Create Invoice popup screenshot

The sprint docs cover "View invoices via portal" but not the live Create Invoice popup. Capture this from the live system once.

8

Take payment at the counter

For Account customers paying later — skip this step; the invoice goes to their statement.

For COD / Cash customers paying now:

  1. On the posted invoice click Register Payment.
  2. Set the Journal to Petty Cash (cash) or Bank (card / EFT).
  3. Set Amount = invoice total (or partial if a deposit).
  4. Set Memo — receipt or card transaction reference.
  5. Click Create Payment.

The invoice flips to Paid and the customer's open balance drops accordingly.

9

COD customers — the safety gate

If the customer's status is COD (Cash On Delivery — set during onboarding), the system enforces payment before delivery can be validated.

The recommended counter sequence for COD collections:

  1. Confirm SO and create the draft invoice before validating the delivery.
  2. Take payment / register payment on the invoice.
  3. Only then validate the delivery and hand over the stock.
⚠ Why this order matters

If you validate the delivery first, the COD customer has technically "received goods on credit" — which defeats the purpose of the COD flag. Always: Invoice → Payment → Validate Delivery → Hand over.

Variations

Edge cases

Two situations that come up at the counter and need their own handling.

V1

Walk-in customer with no profile

If a customer arrives with no account on the system and wants to buy a small quantity for cash:

  1. If we have a generic "Cash Sale" / "Walk-in" customer profile: use that as the customer on the SO. Note the actual buyer's name in the SO Customer Reference field.
  2. If we don't: create a quick contact via Contacts → New, capture name + phone + ID number, save. Then create the SO normally.
  3. For one-off cash buys, the simplest path is the POS app at the till (Sprint 5 TC1.6) — that bypasses the SO/Delivery dance entirely. Use POS for cash counter sales under VERIFY: rand-threshold; use the SO flow for larger walk-in orders that need a formal invoice.
⚠ VERIFY — Walk-in policy at Olympic Paints

Confirm with management: (a) is there a standing "Cash Sale" customer? (b) what's the rand threshold above which a walk-in must get a real customer profile? Replace this callout with the agreed policy.

V2

Customer collects part now, we deliver the rest

Useful when a contractor takes a few drums now and asks us to deliver the bulk later.

  1. Validate the counter portion as a partial delivery → Create Backorder (see Step 6).
  2. The backorder WH/OUT stays in Ready status.
  3. From here, follow Walkthrough 03 — Vehicle Scheduling to add the backorder to a delivery batch.

This is the cleanest path: each physical movement of stock has its own validated delivery record, so reporting (and audit) shows exactly when each portion left our premises.