Skip to content

Pay Later & Cash on Delivery

Two flows, both shaped like “money comes later.” Pay Later puts the unpaid amount on the customer’s tab as debt — they walk out with the goods now and settle next visit. Cash on Delivery (COD) is for shipments where the courier collects from the buyer and remits to you afterwards. The invoice issues immediately in both cases; what differs is which account the receivable lives on until cash lands.

Updated 4 May 2026·For v1.6.100·4 min read #29 v1.6.100

Pay Later — customer debt

The customer takes the goods home today; the unpaid balance sits on their tab. Use this when the customer is known to you (regular, account holder, family) and you trust them to settle later.

1

Ring the sale

Add products to the cart the same as any other sale — scan, tap, search. Attach a customer (search by phone or name, or Create on the fly). A customer is required for pay-later; without one, there’s nowhere to file the debt.

2

Open Checkout

Click the green Checkout button. The checkout dialog opens with the total at the top.

3

Choose Partial, enter 0

Pick payment type Partial and enter 0 as the paid amount. The full total goes on the customer’s tab. If the customer pays a deposit, enter that amount instead — the remainder still goes on the tab.

checkout · partial type · paid amount 0 · full balance to debt
4

Confirm

Click Complete Sale. The invoice issues immediately, the receipt prints, and the customer’s balance increases by the unpaid amount. The cart resets.

Cash on Delivery — courier collects

COD is for shipped orders where you don’t see the customer at the register. The courier hands them the goods, takes the cash, and remits it to you on the next reconciliation.

1

Ring the sale and assign to a shipment

Build the cart as usual, then send the order to Shipping instead of completing payment at the register. Pick the carrier (shipping company) and select COD as the settlement type.

2

Issue the invoice

The invoice issues with no register payment captured. amount_paid stays at 0, paymentMethodName stays empty, and the Pending COD status badge appears on the invoice list and detail dialog.

shipping · shipment detail · COD pending · awaiting courier remit
3

Courier delivers and collects

The carrier delivers the goods, takes cash from the buyer, and updates the shipment status. Each status change records a displayAt timestamp in the shipment’s history log.

4

Reconcile when the courier remits

Open the shipment, mark it Settled, and select the cash sub-account that received the remit. The invoice flips to Paid, the customer’s account stays at zero, and a journal entry posts the cash arrival.

Bug #29 fix in v1.6.100

Before v1.6.100, COD shipping invoices that didn’t have a payment method explicitly stamped on them rendered with a blank Payment Method column and a generic “Partially Paid” label — confusing on the list view and worse on printed receipts. v1.6.100 added an implicit-COD fallback in invoiceDisplayService.isCodPending: when an invoice has a shippingCompanyId set, no register payment captured, and isn’t explicitly prepaid or postpaid, it now renders Cash on Delivery — <carrier> with a Pending COD status badge. The persisted status column is unchanged (still 'partial' so AR aging keeps counting correctly) — only the displayed label is corrected.