Solavel Solavel Docs

Sales Orders

docs/solavel-finance/sales-orders.md

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, pdf. Plan / feature gate: two flags must both be on:

  • 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

  1. 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).
  2. Filter by status or customer.

Create a sales order

Route: finance.ar.sales-orders.create / store. Permission: sales_orders.create.

  1. Click New sales order.
  2. Pick Customer.
  3. Enter the Order number (or accept the suggested next from the sequence) and dates.
  4. Add line items the same way as a quote or invoice.
  5. 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.approve and sales_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_orders AND feature:tracker.sales_orders to 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.approve and sales_orders.cancel by 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_orders and feature:tracker.sales_orders to be on for the org.

Related

Source: docs/solavel-finance/sales-orders.md ← All documentation