Pay a supplier balance
The Record Payment dialog is how every cash movement on a supplier’s account gets logged: settling a PO you already received, paying down an opening balance, accruing a charge that arrived without a PO, or correcting an over-payment. Each entry is a row in supplier_payments with a type of paid or owed, and each one posts a journal entry to AP (2010) on the spot.
Reaching the dialog
Three entry points, all opening the same dialog:
- Suppliers list — overflow menu on any row → Record Payment.
- Supplier detail page — Overview tab, Record Payment button (or Record Owed for the reverse direction).
- PO receive flow — when you flip a PO to
receivedand pick Paid in full or Partial, the dialog runs inline. See Receive a PO.
Permission-gated on suppliers:manage_payments — cashiers won’t see the menu items by default; managers will.
The two transaction types
The dialog has one Type picker with two options. The choice changes which direction the balance moves and which journal entry posts:
paid— you handed cash (or its equivalent) to the supplier. The balance you owe goes down. JE: DR 2010 AP / CR 1010-xxx (active shift cash sub-account).owed— you accrued a charge from the supplier without paying yet. The balance you owe goes up. JE: DR 1200 Inventory / CR 2010 AP (or DR 5xxx expense / CR 2010 if the charge isn’t inventory — e.g. a freight invoice that arrived after the goods).
paid is the everyday button. owed is for corrections and out-of-band charges — the supplier emailed an invoice for last month’s freight, or you’re back-loading a manual opening balance, or a credit note from a previous over-payment needs to be reversed.
The payment flow
Pick the type
Default is paid. Switch to owed only if you’re recording an accrual you haven’t paid yet.
Enter the amount
In the store’s primary currency. Validated against the current balance for paid entries — the dialog warns (but does not block) if the amount exceeds what’s owed, since over-payment is sometimes deliberate. For owed entries no upper bound applies.
Pick a payment method
Cash, card, bank transfer, mobile wallet — whatever is configured under Settings → Sales → Payment Methods. The choice routes the cash leg of the JE to the right sub-account (cash to 1010-001, bank to 1010-010, etc., per your chart-of-accounts wiring).
Add notes (optional but advised)
Free-text. Use this for cheque numbers, transfer references, the supplier’s invoice number, or any context the next person opening the supplier history will want — “settled May invoice #4711”, “advance against July order”.
Confirm — two-step
Press Record Payment. A confirmation modal recaps the amount, type, supplier, and method. Confirm again. The transaction posts; the balance pill on the supplier list updates immediately.
What posts to the books
Every paid entry is a DR 2010 / CR 1010-xxx block. Every owed entry is a DR <expense or 1200> / CR 2010. Both are written inside a single database transaction along with the supplier_payments row insert and the recomputed balance — if any step fails, none of it lands. There’s no half-state where the balance moved but the JE didn’t, or vice versa.
The active shift’s cash sub-account is whatever the user is signed into right now (e.g. 1010-006 for AboYahya’s drawer, 1010-002 for Osama’s). Moving money between sub-accounts is a separate Cash Transfer flow on the cash drawer, not a supplier payment.
Tying a payment to a restock
If the payment is settling a specific restock — an ad-hoc one or a PO — the dialog has a Link to product / variant picker that scopes the payment to the relevant inventory line. The link doesn’t change the JE; it just shows up on the supplier history row and on the product’s history timeline so future audits can connect “this restock” to “this payment.”
The per-supplier ledger
Every payment, owed entry, and PO-driven posting lives on the supplier’s Payment History tab in reverse chronological order. Columns: date, type (paid / owed), amount, payment method, optional product/variant link, notes. Above the table sits a running balance card that recomputes at every page load.
Mistakes happen. To correct one, post a reversing entry of the opposite type for the same amount. Don’t edit or delete the original — the audit trail is the point.