Who can use this: Owner, Manager, Accountant. URL / Route:
/finance/ar/quotes(finance.ar.quotes.index). Detail:finance.ar.quotes.show,edit,update,create,store. Action endpoints:finance.ar.quotes.send,send-email,approve,cancel,convert,convert-to-sales-order,revision,feature:tracker.quotes_estimates(default: enabled). Conversion to sales order also requiresfeature:sales.use_sales_orders. Permissions:quotes.view,quotes.create,quotes.edit,quotes.send,quotes.approve,quotes.convert,quotes.cancel. Quote-to-sales-order conversion also needssales_orders.create.
Purpose
A Quote (also called an Estimate) is a non-binding offer to a customer. It carries the same lines, prices, and tax treatment that a future invoice would, but it does not post to the ledger. When the customer accepts, you can convert the quote into either an invoice or a sales order with one click.
Step by step
Browse quotes
- Open
/finance/ar/quotes. Each row shows quote number, customer, date, expiry, total, and status (Draft / Sent / Accepted / Rejected / Cancelled / Expired / Converted). - Filter by customer, status, or date range.
Create a quote
Route: finance.ar.quotes.create / finance.ar.quotes.store.
- Click New quote.
- Pick a Customer (or click "+ New customer" — see Customers).
- The Quote number is suggested by the active sequence (configured in Settings → Document Sequences). You can override it.
- Set Quote date and Expiry date.
- Add line items. Each line takes a Product/Service (see Products & Services), Quantity, Unit price, Tax, and optional Description, Dimension tags, and discount.
- Optionally pick a PDF template (if
pdf_templates_enabledis on) and add a Customer message that will appear on the PDF. - Save as Draft or Save and send.
Edit a quote
Route: finance.ar.quotes.edit / update. Permission: quotes.edit.
You can edit any quote that is not Cancelled, Converted, or fully Approved through workflow. Edits do not bump the revision number.
Send a quote by email
Route: finance.ar.quotes.send-email (POST). Permission: quotes.send.
Opens a "Send" dialog with the customer email pre-filled, a default subject and body (templated), and an attached PDF. The customer receives a secure portal link where they can accept or decline online.
Approve a quote (workflow)
Route: finance.ar.quotes.approve. Permission: quotes.approve. Active when feature:workflow_enabled and feature:tracker.sales_approval_workflow are on and a workflow rule is configured for quotes.
Convert a quote to an invoice
Route: finance.ar.quotes.convert. Permission: quotes.convert.
Opens the New Invoice screen with all lines pre-filled. Save the invoice to post it. The quote moves to Converted and links to the new invoice on its detail page.
Convert a quote to a sales order
Route: finance.ar.quotes.convert-to-sales-order. Permissions: quotes.convert + sales_orders.create. Requires feature:sales.use_sales_orders.
Opens the New Sales Order screen pre-filled. The quote moves to Converted.
Make a revision
Route: finance.ar.quotes.revision. Permission: quotes.create.
Creates a copy of the quote with the next revision number (e.g. Q-1001 → Q-1001-R2). The original quote stays as a historical record; the revision becomes the live document.
Cancel a quote
Route: finance.ar.quotes.cancel. Permission: quotes.cancel.
A cancelled quote remains visible but cannot be sent or converted.
Print a PDF
Route: finance.ar.quotes.pdf. Permission: quotes.view.
Customer-facing actions
When a customer follows the email link, they land on the secure portal at /i/{token} (secure document portal). They can accept (portal.quotes.accept) or decline (portal.quotes.decline). Accepting moves the quote to status Accepted and notifies the org. There is also a stand-alone short URL /q/{token} for legacy share links (PublicQuoteController).
When to use which sales-pipeline document
| Stage of the deal | Use this |
|---|---|
| Pre-sale proposal you might revise / negotiate | Quote (this page) |
| Customer has accepted; you want internal approval before invoicing | Sales order |
| You're ready to bill (post AR + age) | Invoice |
| Customer is paying on the spot, no AR | Sales receipt |
If you don't use approvals or pre-invoice gating, going Quote → Invoice directly is fine — sales orders are optional.
Common mistakes
- "My customer accepted but the quote still says Sent." Either accept it manually from the quote, or have the customer click Accept on the secure portal link. Accepting on the customer's side flips status automatically.
- "Prices changed after I sent the quote." A quote captures prices at line-entry time. Later price-list changes don't re-cost an existing quote. Use Make revision to create a new revision with current prices.
- "Converted quote still editable" surprise. Once converted, the quote is read-only — fix on the invoice / sales order instead.
- Workflow approval blocking send. If workflow approval is on, a quote needs to be Approved before it can be sent. Submit it for approval first.
What posts to the GL
A quote is a proposal, not an accounting document. It does not touch the ledger at any stage:
- Draft / Sent / Accepted / Rejected / Cancelled / Expired → no GL impact.
- Only when the quote is Converted does a posted invoice (or sales order → invoice) write the journal.
A JOD 117 quote (JOD 100 + 17% VAT) that the customer accepts and you convert:
| Stage | Journal? |
|---|---|
| Quote is Sent | No journal |
| Customer accepts | No journal |
| You click Convert to invoice | Draft invoice created with the same lines — still no journal |
| You post the new invoice | Journal posted (see Invoices — How the journal looks) |
This is why a quote does not need a period to be open and does not surface on financial reports — it only ever signals intent.
Lifecycle
Draft ──Send──▶ Sent ──customer accepts──▶ Accepted ──Convert──▶ Converted (Invoice or Sales Order)
└──customer declines──▶ Rejected
└──Cancel──▶ Cancelled
└──Expiry passes──▶ Expired
A quote that has been Converted cannot be edited, sent, or revised — start a new quote.
Behaviour and rules
- A quote does not post journal entries; only the converted invoice/sales order does.
- The number sequence is shared with sales orders / invoices in some settings; check Settings → Document Sequences.
- A quote on a customer with a price list uses that price list at line entry; later edits do not re-resolve prices.
- The expiry date is informational; it does not auto-cancel the quote, but Sent quotes whose expiry has passed switch to Expired on display.
- The Accountant role (
member) can do every quote action except those denied by the role's deny-list (cancel and approve are not on the deny list, so Accountants can do them too).
Permissions / restrictions
- View:
quotes.view. - Create / edit:
quotes.create,quotes.edit. - Send:
quotes.send. - Approve:
quotes.approve. - Convert:
quotes.convert(+sales_orders.createif converting to a sales order). - Cancel:
quotes.cancel.
Related
- Customers — the counterparty on every quote.
- Products & Services — what the line items reference.
- Pricing & price lists — how line prices are resolved.
- Sales orders, Invoices — the conversion targets.
- Customer portal — where the customer accepts or declines.
- PDF templates — design the quote document.
- Workflow & approvals — optional approval gate before sending.
- Settings — sequences, PDF templates, workflow rules.