Skip to content

Wholesale orders

A wholesale order is a B2B sale to a retailer or business customer. It differs from a regular (retail) order in two key ways:

FeatureRetail orderWholesale order
PricingRetail price from catalogWholesale / trade price from price lists
PaymentCash, card, or debt (Khách nợ)Debt on account — paid later per credit policy
ChannelPOS, create-orderWholesale workspace only
Reportsretail order typewholesale order type

A wholesale order creates a receivable — the customer pays you later, not at checkout.

Open Sales activity → Orders then click the Wholesale tab (or go to /dashboard/orders/wholesale).

Wholesale orders list

The table shows:

  • Order id, customer, status, total, paid, balance / debt.
  • Filter by date range, status, customer.
  • Click a row to open the order detail — same detail view as retail orders.
  • Create wholesale → opens the wholesale create form.
  1. Orders → Wholesale tab → + New wholesale (or /dashboard/orders/create-wholesale).

Create wholesale form

  1. The create form looks like a retail order, but the price column shows wholesale prices from the customer’s price list.
  2. Pick a customer — the wholesale price list kicks in automatically.
  3. Add items by search or scan. Quantities are typically higher than retail.
  4. Fulfillment: pickup or delivery (same modal as retail).
  5. Payment: the only option is Khách nợ (debt) — wholesale orders are always on account. Cash/card is not available for wholesale.
  6. Checkout — submit → order is created with is_debt = true, a receivable row opens for the customer.

Wholesale credit policy — what controls the debt

Section titled “Wholesale credit policy — what controls the debt”

Before placing, the screen shows a credit status banner if the customer has a policy. Three things can control how much they can owe:

LayerWhat it sets
Customer overridePer-customer term, due day, max open rounds. Wins if set.
Customer categoryWholesale defaults for a whole segment (e.g. Retailer A).
Store defaultStore-wide policy.

If the customer has overdue debt or would exceed max open rounds, the banner shows a warning or blocks the order depending on the rule.

Three ways the due date is calculated:

Term modeHow it works
NoneNo automatic deadline. Follow up manually.
N days after invoiceDue date = invoice date + N days (e.g. +30).
Day of next monthDue date = the Nth day of the next calendar month (e.g. 15th).

The mode and value come from the customer, category, or store — whichever is set.

  • Finance → Receivables — every open balance across all customers. Filter to Wholesale if needed.
  • Customer → Debt tab — single-customer view, with order-level breakdown and payment history.
  • Collect payment — record a cash/card/bank payment from the receivable row. Overpayment becomes wallet credit.

Wholesale customer not showing wholesale prices. Check:

  • The customer has a customer category that sets wholesale defaults (or a per-customer override).
  • The store has wholesale price lists active for those products.
  • The customer is not in a category that overrides the wholesale list.

Order blocked with “max open rounds.” The customer has too many concurrent open wholesale orders. Collect payment on one of their open orders first, or raise the limit at Customers → pick → edit (per-customer override) or Customers → Categories → pick → edit (segment override).

Customer wants to pay now (cash/card). That’s a retail order, not wholesale. Use Orders → + New order (retail) instead. Wholesale orders always create a receivable.

Receipt on a wholesale order. Available from Orders → Wholesale → order detail → Receipt. The receipt shows the customer’s billing address and tax code if set.

  • Orders — retail order list, detail, and returns.
  • Customers — wholesale credit policy, customer overrides.
  • Finance — receivables, collection, and reports.
  • Price lists — setting wholesale prices per SKU.