Home / Help Center / pos-app-bakery / bakery / Wholesale Orders
🏢 bakery

Wholesale Orders

Wholesale Orders is a dedicated ledger for your B2B accounts — hotels, cafés, retailers buying in bulk — with their own wholesale pricing, credit terms and delivery routes, separate from your normal walk-in customer base.

📍 Menu path: Bakery → Wholesale Orders
👤 Who uses it: Staff/managers handling B2B wholesale accounts
🏷️ Plan tier: advanced+

Overview

The page has two tabs: Orders (every wholesale order, with status and balance) and Customers (your wholesale accounts, each with its own discount %, payment terms, credit limit and GST/tax number).

Every wholesale customer can carry a Discount %, Payment Terms (Prepaid, Net 7/15/30/60), a Credit Limit, and — from the account record — a possible Credit Hold and a Minimum Order Value that BazaarPOS enforces automatically when a new order is created.

Order line items track both a Retail Price and a separate Wholesale Price per product/unit, and if a Price List defines a minimum order quantity (MOQ) for an item, the quantity field is highlighted and a warning appears when you enter less than that MOQ.

Orders move through Draft → Confirmed → Dispatched → Delivered (or Cancelled), and partial or full payments can be recorded against the order's balance due at any point once it has one.

Before You Start

Step-by-Step Guide

1 Add a wholesale customer account

  1. Switch to the Customers tab and click Add Customer.
  2. Enter the Business/Org Name (required), Contact Person, Phone, Email, Address and Tax/GST Number.
  3. Set Discount %, Payment Terms (Prepaid / Net 7 / Net 15 / Net 30 / Net 60) and a Credit Limit if you want BazaarPOS to warn you before that account goes over its credit.
  4. Click Add Customer — the account appears as a card showing its terms, discount and credit limit.

2 Create a new wholesale order

  1. Switch to the Orders tab and click New Order.
  2. Select the customer, Order Date, optional Delivery Date, Delivery Route/Zone and Payment Method.
  3. Add line items by searching for each product — Retail Price and Wholesale Price pre-fill from the product record and can be overridden — and enter the Quantity and Unit for each.
  4. If a quantity is entered below that product's configured minimum order quantity (from the wholesale price list), the field is highlighted amber with a "Min order qty is N" warning.
  5. Click Create Order — BazaarPOS runs credit checks first (see below) before saving.
💡 At submit, BazaarPOS blocks the order entirely if the customer is on Credit Hold, blocks it if the order total is below that customer's configured Minimum Order Value, and — if the order would push the customer over their Credit Limit — shows a confirmation dialog stating exactly by how much, letting you choose to proceed or cancel.

3 Advance an order through fulfilment and record payment

  1. In the Orders table, click the status action button on a row to move it forward: Draft → Confirmed → Dispatched → Delivered.
  2. Click the row itself to expand it and see each line item's product, quantity, unit, wholesale price and line total, plus any notes and the delivery route.
  3. Once an order has a Balance Due greater than zero, click the payment icon to open Record Payment, enter the Amount (capped at the balance due) and Payment Method, then submit — the order's paid amount and balance update immediately.
  4. While an order is Dispatched and the customer has a contact phone on file, a "Notify customer" share bar appears in the expanded row to send a pre-filled dispatch message.

4 Bill an order and print its invoice

  1. On an order without a linked sale yet, click the invoice icon to open Billing pre-loaded with that order's items, customer and a note referencing the order number and balance due.
  2. Once billed, the invoice icon is replaced by a print icon for reopening and printing that sale's invoice directly from this page.

5 Edit or delete orders and customers

  1. Click the pencil icon on an order or customer to edit it, or the trash icon to delete it after a confirmation prompt.
  2. From a customer card, click "New order" to jump straight to the Orders tab with the New Order form open.

Every Field & Button, Explained

Field / ButtonWhat it does
Orders / Customers tabsSwitches the whole page between the wholesale order ledger and the wholesale customer account list.
New Order / Add CustomerOpens the respective creation form depending on which tab is active.
Status filter chipsAll / Draft / Confirmed / Dispatched / Delivered / Cancelled — filters the Orders table.
Order # / Customer / Order Date / Delivery / Total / Balance / Status columnsOne row per wholesale order; click a row to expand its item-level detail.
Balance columnShows the remaining amount owed in red, or a green "Paid" tag once fully settled.
Status action buttonAdvances an order one step (Draft→Confirmed→Dispatched→Delivered); not shown once Delivered or Cancelled.
Record payment iconOpens the payment form for an order with a balance due greater than zero.
Bill via POS / Print Invoice iconsBill via POS shows before a sale exists for the order; Print Invoice replaces it afterward.
Notify customer (share bar)Appears on expanded Dispatched orders with a contact phone, offering a pre-filled delivery notification message.
Business/Org Name, Contact, Phone, Email, Address, Tax/GST NumberCore wholesale customer profile fields.
Discount %A standing discount percentage applied to this customer's pricing.
Payment TermsPrepaid, Net 7, Net 15, Net 30 or Net 60 — informational and used to set expectations on payment collection.
Credit LimitThe maximum outstanding balance BazaarPOS will let this customer carry before warning on new orders.
Retail Price / Wholesale Price (per line item)Two separate price fields per order line — Wholesale Price is what is actually billed, Retail Price is shown for comparison.
Min order qty (MOQ) warningAmber-highlighted quantity field and inline warning when an item's ordered quantity is below its configured minimum from the wholesale price list.

Tips & Best Practices

Troubleshooting & FAQ

I can't create an order — it says the customer is on credit hold.
That customer's account has Credit Hold set. New orders are blocked entirely until the hold is cleared on their customer record.
My order was blocked for being below the minimum order value.
The selected customer has a Minimum Order Value configured; add more items/quantity so the order subtotal meets or exceeds that threshold.
I got a confirmation asking if I want to exceed the credit limit — what happens if I click Cancel?
The order is not created. You can either reduce the order size, wait for existing balance to be paid down, or proceed anyway if you accept the customer going over their limit.
The quantity field turned amber with a "Min order qty" message.
That product has a minimum order quantity set in the wholesale price list, and the quantity you entered is below it — increase the quantity or confirm with the customer before proceeding.
The payment amount field won't accept the number I typed.
A recorded payment cannot exceed the order's current Balance Due, and must be a positive amount — check both limits if the form won't submit.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/fnb/WholesaleOrdersPage.jsx (exported as FnbWholesaleOrdersPage)
  • frontend-app/packages/pos-react-lib (DocumentShareBar, ItemSearch, GenericOrderModal, openInBilling, InvoicePrint — shared components)

Backend endpoints used:

  • GET /wholesale/customers
  • POST /wholesale/customers
  • PUT /wholesale/customers/:id
  • DELETE /wholesale/customers/:id
  • GET /wholesale/orders
  • POST /wholesale/orders
  • PUT /wholesale/orders/:id
  • PATCH /wholesale/orders/:id/status
  • POST /wholesale/orders/:id/payment
  • DELETE /wholesale/orders/:id
  • GET /wholesale/price-list
  • GET /settings
  • GET /sales/:id

Related tables (db-core repositories):

  • WholesaleCustomer
  • WholesaleOrder
  • WholesaleOrderItem
  • WholesalePriceList
  • Sale

Feature flag key: wholesale_orders (requires advanced plan tier or above)

The component lives under the shared pos-react-lib/src/pages/fnb/ folder (exported as FnbWholesaleOrdersPage), built to be reusable across F&B variants; the bakery variant mounts it at /bakery/wholesale-orders. Credit-hold, minimum-order-value and credit-limit checks all run client-side against the selected customer record at submit time, before the order POST is made. "Bill via POS" uses sourceOrder: { type: "WHOLESALE", id, returnPath: "/bakery/wholesale-orders" }.