Who can use this: Owner, Manager, Accountant. URL / Route:
/finance/ar/sales-orders(finance.ar.sales-orders.index). Detail:finance.ar.sales-orders.show,edit,update,create,store. Action endpoints:finance.ar.sales-orders.approve,cancel,convert(to invoice),send-email,
feature:sales.use_sales_orders— turns on the Sales Order workflow for the organization (default: off).feature:tracker.sales_orders— entitlement on the plan (default: off on Free).If either flag is off, this section is hidden and the routes return 404. By default, this build does ship the routes, so the page is "present in this build" but feature-gated. Permissions:
sales_orders.view,sales_orders.create,sales_orders.edit,sales_orders.send,sales_orders.approve,sales_orders.convert,sales_orders.cancel. Each is locked behind the two feature flags via the permission map.
Purpose
A Sales Order is the step between an accepted Quote and a posted Invoice. Use it when you need to confirm an order, lock the prices, optionally route the order through approval, and only invoice once the goods or services are delivered. If your business invoices straight from a quote (or has no quotes at all), you can leave Sales Orders disabled.
Step by step
Browse sales orders
- Open
/finance/ar/sales-orders. Each row shows the order number, customer, order date, expected delivery, total, and status (Draft / Pending Approval / Approved / Cancelled / Converted). - Filter by status or customer.
Create a sales order
Route: finance.ar.sales-orders.create / store. Permission: sales_orders.create.
- Click New sales order.
- Pick Customer.
- Enter the Order number (or accept the suggested next from the sequence) and dates.
- Add line items the same way as a quote or invoice.
- Save as Draft or Submit for approval (if approvals are configured).
A faster path: open an Accepted quote and click Convert to sales order — the new order is pre-filled.
Edit a sales order
Route: finance.ar.sales-orders.edit / update. Permission: sales_orders.edit.
You can edit any order in Draft status. Once approved, edit is locked.
Approve a sales order
Route: finance.ar.sales-orders.approve. Permission: sales_orders.approve.
If approval workflow is configured, only approvers can move an order out of Pending Approval. Without a workflow rule, the Approve button is still available to anyone with the permission and effectively just locks the lines.
Manager role: the Manager role-permission set explicitly denies
sales_orders.approveandsales_orders.cancel. Use the Owner role or grant a role override in Settings if a Manager needs these.
Send by email
Route: finance.ar.sales-orders.send-email. Permission: sales_orders.send.
Sends a PDF of the sales order to the customer.
Convert to invoice
Route: finance.ar.sales-orders.convert. Permission: sales_orders.convert.
Opens the New Invoice screen pre-filled from the sales order. Save the invoice to post it. The sales order moves to Converted.
Cancel
Route: finance.ar.sales-orders.cancel. Permission: sales_orders.cancel.
Cancelled orders are read-only and cannot be converted.
Print a PDF
Route: finance.ar.sales-orders.pdf.
Common mistakes
- "Page returns 404." Sales Orders need both
feature:sales.use_sales_ordersANDfeature:tracker.sales_ordersto be on. Check at/finance/settings/plan-status. If you don't actually need a pre-invoice gating step, go Quote → Invoice directly. - Manager can't approve / cancel. The Manager role denies
sales_orders.approveandsales_orders.cancelby default. Use the Owner role or grant a role override in Settings. - "I created one SO but I need to bill it in two invoices." Not currently supported — Convert creates one invoice for the full order. Either split the SO before converting or void the convert and create two SOs.
What posts to the GL
A sales order is an internal commitment, not an accounting document. Like a quote, it never writes a journal:
| Stage | Journal? |
|---|---|
| Draft / Pending Approval / Approved | No journal |
| Convert to invoice | A draft invoice is created — still no journal |
| Post that invoice | Journal posted (see Invoices — How the journal looks) |
This is why Sales Orders never appear on the P&L or AR aging — they are operational, not financial. The financial impact only lands when the resulting invoice is posted, which is also when the customer's AR balance starts ageing.
Lifecycle
Draft ──Submit──▶ Pending Approval ──Approve──▶ Approved ──Convert──▶ Converted (Invoice)
└──Cancel──▶ Cancelled
If the workflow is not configured, the Pending Approval state is skipped and a saved order is Approved straight away.
Behaviour and rules
- A sales order does not post journal entries; only the resulting invoice does.
- The order number is taken from the Sales Orders sequence in Settings → Document Sequences.
- Currency, tax behaviour, and price list resolution work exactly like an invoice.
- Once converted, the order is read-only; the linked invoice carries the live posting.
- Multiple invoices from one sales order are not currently supported in this build (the Convert action creates one invoice for the full order).
Permissions / restrictions
- View:
sales_orders.view. - Create / edit:
sales_orders.create,sales_orders.edit. - Send:
sales_orders.send. - Approve:
sales_orders.approve(Manager denied by default). - Convert:
sales_orders.convert. - Cancel:
sales_orders.cancel(Manager denied by default). - All actions require both
feature:sales.use_sales_ordersandfeature:tracker.sales_ordersto be on for the org.
Related
- Quotes — the typical upstream document.
- Invoices — the conversion target.
- Customers — counterparty on every order.
- Customer portal — share the order with the customer.
- Inventory — stocked-item availability shown on the SO.
- Workflow & approvals — optional pending-approval gate.
- PDF templates — design the printed SO.
- Settings — workflow rules, approval steps, sequences.