Confirm an order and handle credit holds
Turn a quotation into a sales order, and understand what to do when the system refuses it.
Before you begin
- The quotation is a saved draft with at least one line and a total above zero.
- Any price exception has been approved (see Price approvals and discount control).
- You hold document.confirm. Your own order limit may also apply: a manager limited to AED 5,000.00 can confirm a quotation of 3,000.00 but not one of 8,000.00.
Steps
- Open the quotation from Sales > Orders > Quotations.
- Check Valid until, Customer PO, Incoterm and any required fields.
- Check the Prices & margin tab for warnings.
- Press Confirm order.
What happens next
- The record becomes a sales order: state Confirmed, title "Sales order", moved to Sales > Orders > Sales orders. The number stays the same.
- The stage bar moves to Confirmed.
- The customer's credit exposure is reserved for the order's value.
- A draft delivery order is raised in Inventory from the order's Ship from warehouse, or from the company default warehouse. The Deliveries smart button opens it.
- The invoicing policy is frozen on each line. Services always bill on ordered quantities.
- History shows 'sale.confirm'.
- Stock is reserved at confirmation or only when asked, depending on Reserve stock in the settings.
Why confirmation is refused
| Message | What to do |
|---|---|
| 'Add at least one line before confirming.' | Add a line. |
| 'This quotation expired on <date>. Extend its validity to confirm it.' | Change Valid until on the Commercial tab. |
| 'This company needs the customer's PO number before an order is confirmed.' | Enter the Customer PO. |
| 'Customer PO <number> is already on SO-...' | The settings block repeated POs. Use the correct PO or ask the administrator. |
| 'EXW needs its named place.' / 'An export order to <country> needs its Incoterm and named place.' | Fill Incoterm and Incoterm place on the Commercial tab. |
| '<label> is required by this company before this step.' | Fill the field your company made required (Delivery date, Sales team). |
| 'Choose a branch: this company requires one on every sales order.' | Choose a Branch. |
| 'Customer transaction hold: Sales orders. <reason>' or '<name> is blocked: <reason>.' | The customer is on hold or blocked. Ask Finance to release it. |
| 'This quotation needs price approval before it is confirmed: ...' | Request approval. |
Credit holds
The credit check runs at confirmation. If the customer's policy is Hard block and the order would take exposure over the limit, the order is refused:
'Credit check: This takes exposure to ..., ... over the limit of 1,000.00. Ask for a credit override (Finance > Credit control)...'
The quotation stays a draft and is listed in Sales > Orders > Credit holds with the reason in the Why column.
To clear a hold:
- A Finance credit controller creates a credit override for the customer in Finance > Credit control, with an expiry date. A different person from the requester approves it.
- Once the override is approved, press Confirm order again. The reservation records the override and the quotation leaves Credit holds.
If your company ticks Check credit again before dispatch or Check credit again before invoicing in the settings, the check also runs when the warehouse validates the delivery and when you post the invoice. If the customer is then over the limit, or the override has expired, that step is refused with a 'Credit check: ...' message and the order goes back on credit hold.
Good to know
- Sales managers cannot bypass a credit hold. Only an approved, unexpired override clears it.
- Reset to draft returns a confirmed order to draft if nothing has been validated. If a draft delivery is waiting you must cancel it first: 'Cancel delivery <WH/OUT/..> before returning this document to draft.'
- Cancel needs document.cancel. It releases the credit reservation and cancels linked drop-ship purchase orders. A posted invoice is not touched: 'Posted documents require a reversal.'
- Confirming the same order twice through an integration with the same request key returns the same order; a different body with that key is refused.