Skip to content

Sales Quotation (Internal)

Record a priced offer to a customer before anything is committed. Finalising a quotation assigns its document number and locks the header’s branch, date, currency and credit fields, but it moves no stock, posts no journal and creates no receivable; the order, invoice or jobsheet raised from it does that. One tab to treat with care: Convert turns the quotation’s deposit lines into a Receipt Voucher and deletes the quotation.

Overview

The Sales Quotation (Internal) applet records a priced offer to a customer before any commitment exists. It is opened by sales staff who prepare quotes and by administrators who configure the quote screens. A quotation is a zero-signum document: finalising it assigns document numbers and locks the header’s branch, date, currency and credit fields, but it moves no stock and posts no journal. Upstream it can be built by knocking off a Jobsheet or an earlier quotation; downstream it is the source that a Sales Order, Invoice or Jobsheet knocks off, and its Collection (deposit) lines can be converted into a Receipt Voucher from inside the applet.

Server document type INTERNAL_SALES_QUOTATION, short code SLSQUO. Amount signum 0, quantity signum 0: FINAL has no stock, GL, receivable or e-Invoice effect. The backend fills the line signums; the header’s it only checks — a quotation created through the API without a header amount signum of 0 is refused as an invalid signum. The document numbers you see on the listing are only assigned at FINAL.

Where it fits

DirectionDocument / appletHow it connects
UpstreamSales Inquiry (Internal)The informal enquiry that precedes a priced quote
Upstream (KO For)Jobsheet (Internal), another Sales QuotationThe KO For tab offers Sales Quotation and Job Sheet as sources; the Sales Order source tab is present in the code but commented out
Upstream (master data)Customer, Pricebook, Tax Configuration, Organisation, Inventory Item MaintenanceEntities, prices, tax codes, branches/locations and items the quote reads
DownstreamSales Order (Internal), Sales Invoice (Internal), Jobsheet (Internal), Car WorkshopThose applets knock off a FINAL quotation in their own KO For tab; the quotation’s reference columns (Quotation / Order / Delivery Order / Invoice / Others) show the chain
DownstreamReceipt Voucher (Internal)The Convert tab creates a receipt voucher from the quotation’s Collection lines and deletes the quotation
SiblingPurchase Quotation (Internal)The buying-side equivalent (INTERNAL_PURCHASE_QUOTATION), same zero-signum behaviour

Screens and menus

Menu itemRouteWhat it shows
Sales Quotationsinternal-sales-quotationListing with advanced search, FINAL / VOID / DISCARD bulk buttons, create and edit
Line Itemsline-itemsOne row per quotation line, for line-level search and export
File Importfile-importBulk-create quotations from a delimited file, processed as a background job; imported rows are created ACTIVE
File Exportfile-exportGenerate a CSV of quotations for a transaction-date range; the job history shows status and errors
Settingssettings/…Administrator configuration (see below)
Personalizationpersonalization/…Per-user Default Selection and sidebar
Sales Quotation Listing
Sales Quotations listing: FINAL, VOID and DISCARD act on the selected rows; the column set follows the HIDE_* settings and SHOW_* permissions.
Sales Quotation File Export Listing
File Export: choose a transaction-date range and generate a CSV; each run is listed with its status.

The create / edit form

Pressing + creates a working document with status TEMP (the panel title reads Create); the first successful Save turns it ACTIVE (Edit). The create form has the tabs Main Details, Account, Line Items, Delivery Details, Collection, Department Hdr and KO For. The edit form (opened from the listing) shows Main, Account, Line Items, Delivery Details, Settlement, Department Hdr, Contra, Doc Link, Attachments, Export and Convert. Tab order is configurable (Settings → Default Selection → Details Tab Ordering); most tabs can be hidden with the HIDE_*_TAB settings under Configuration.

Create Internal Sales Quotation - Main tab
Main Details: branch and location are required (the red prompts), then delivery branch/location, transaction date, credit limit and terms, currency and rate, member card.

Line-item dialog tabs: Main Details, Grouped Item, Child Items, Multi Discount, Serial Number, Batch Number, Bin Number, Delivery Instructions, Department, Doc Link, Delivery Details, Sales History (the sales-history grid includes a company-name column). The header sales agent can be pushed to every line with the Apply to Lines button on Main Details.

Settings menu

Settings entryRoutePurpose
Application Settingssettings/field-settingsHide/show, listing-default and behaviour toggles (shared Field Configuration screen)
Default Selectionsettings/default-selectionDefault branch, location, company, pricebook, currency, pricing scheme, unit-price decimal precision, tab order
Printable Format Settingssettings/printable-format-settingsRegister printable formats for this document type and pick the default
Branch Settingssettings/branch-settingsPer-branch header/footer text, default printable format, default settlement method per payment type, pricing scheme, sales agent, rounding and group-discount items, item-category filter, menu list
Workflow Settingssettings/workflow-settingsOne workflow process per company for quotations: SAVE on a company creates its link or replaces the one it has. The link does one thing — a new quotation that opens on its Default Branch takes the process and its starting status (see Workflow Status under Fields). Nothing checks that status: it does not hold back FINAL, VOID or a knock-off
Webhooksettings/webhookSubscribe endpoints to INTERNAL_SALES_QUOTATION_CREATED / …_DELETED events. The Settings menu has no link to it (the link is commented out in the shared menu); open the address directly
Feature Visibilitysettings/feature-visibilityThe page Settings opens on, with no menu link of its own. It is a placeholder: the Teams panel offers the fixed entries Team 1, Team 2 and Team 3, and neither its SAVE nor its + button stores anything, so it grants and hides nothing. Give access with the permission screens in the next row
Permission Wizard, Permission Set, User Permission, Role Permission; Team Permission, Client-Side Permission, Role Pricing Scheme Linksettings/*-listingThe first four are the menu’s Server Side Permissions group. The last three have routes but no menu link, so reach them by address (for example settings/client-side-permission-listing)
Release Notes, Applet Logsettings/release-notes, settings/applet-logRelease Notes (menu group Developer Tools) is fixed text whose last entry is version 1.01 of 2024-12-08. It lists none of the fixes under Troubleshooting, so it cannot tell you whether your build has one; repeat the symptom on a test quotation instead. Applet Log has no menu link and shows only the heading Audit Trail, with no entries. The record that does hold a quotation’s history is elsewhere: the server writes every save made from this applet with its before and after values, and the Audit Trail entry in the sidebar lists them for this applet, with a detail view of what changed. That entry shows to OWNER and ADMIN users unless HIDE_AUDIT_TRAIL_MENU is on, and to anyone holding a permission whose code ends in SHOW_AUDIT_TRAIL_REPORT. Modified by and Modified date on Main Details show only the latest change. So when a customer disputes a price that was changed after sending, open Audit Trail, search by the document number, and read the change
Applet Settings - Application Settings
Application Settings is the shared Field Configuration screen; its tabs (Sidebar Menu, Advanced Search Filter, Gen Doc Listing, Main Details …) hold the toggles listed under Configuration.
Feature Visibility - Teams
Feature Visibility: a placeholder Teams panel that saves nothing.

Configuration

Before you can use it

PrerequisiteWhereWhy the quotation needs it
Company, branch and locationOrganisationMain Details requires all three; picking a branch pre-fills its MAIN_LOCATION
Customer entitiesCustomerThe Account tab requires an entity; credit terms, credit limit, currency and addresses are copied in. Blacklist status is not checked for quotations (that check applies only to cash bills, invoices, orders and outbound delivery orders)
Sales agent (employee)OrganisationSales Agent is required on Main Details
Items and, optionally, a pricing scheme / pricebookInventory Item Maintenance, PricebookLines take standard prices from the pricing scheme and pricebook chosen in Default Selection; stock is displayed (SHOW_ITEM_STOCK_BALANCE) but never deducted
Tax codesTax ConfigurationEach line carries a tax code; SST is populated from it
Settlement methods (only if you take deposits on the Collection tab)CashbookCollection lines are settlement-method lines; Branch Settings can pre-select a default method per payment type
Document numberingTenant running-number setupTenant / company / branch numbers are generated at FINAL; a tenant number is also assigned on creation when the quotation is created through the API
API permissions TNT_API_DOC_INTERNAL_SALES_QUOTATION_{CREATE,READ,UPDATE,DELETE}_TGT_GUIDSettings → Permission Set / User / Team / RoleDELETE is needed for the Convert action (it deletes the quotation)
Workflow process (optional)Workflow Design then Settings → Workflow SettingsFills the Workflow Status / Resolution fields on Main Details; the fields are shown whether or not a process is linked

Applet settings

Where the settings live. Four settings surfaces: the applet’s own Default Selection (with a personal copy under Personalization), the shared Application Settings screen used across applets (showing the sections that apply to this applet), the applet’s own Branch Settings form and Workflow Settings. Every key in the tables below is read by the applet, and nearly all are also declared in its model and rendered and persisted by the shared screen for this applet code. Six listing keys — DISABLE_GEN_DOC_LISTING, DEFAULT_POSTING_STATUS, DEFAULT_STATUS, SORT_ORDER, FUZZY_SEARCH_COLUMNS and DISABLE_ITEM_LISTING — and ENABLE_DRAFT_LOCK_SERIAL_NUMBER_CHECKING are read without being declared, and whether the shared screen shows their controls for this applet code was not re-confirmed; if a toggle you expect is missing there, the API or the settings record sets it. Keys that are declared but read by nothing are listed separately at the end of this section.

Who can change them: any user who can open Settings (there is no finer per-setting authority). Personalization → Default Selection lets an individual override branch, location and company for themselves only (DEFAULT_BRANCH, DEFAULT_LOCATION, DEFAULT_COMPANY, DEFAULT_TOGGLE_COLUMN).

Default Selection (applet-local)

SettingKeyWhat it controlsDefaultEffect when changed
Default BranchDEFAULT_BRANCH (+ DEFAULT_COMPANY)Pre-fills company and branch on a new quotation; picking a branch copies its MAIN_LOCATION into Default LocationnoneNew quotations open on the new branch
Default LocationDEFAULT_LOCATIONPre-fills the locationnoneNew quotations only
Default PricebookDEFAULT_PRICEBOOKPricebook consulted when items are addednonePricebook prices on new lines
Default CurrencyDEFAULT_CURRENCYDocument currency pre-selected on a new quotationnoneNew quotations only
Default Pricing SchemeDEFAULT_PRICING_SCHEMEPricing scheme used for standard pricesnoneStandard prices on new lines
Unit Price Decimal PrecisionDEFAULT_DECIMAL_PRECISION / DEFAULT_DECIMAL_STEPDecimal places on unit prices, validated 2–42Rounding of prices entered afterwards
Details Tab OrderingSALES_QUOTATION_DETAILS_TAB_ORDERDrag-and-drop order of the form tabs (Main, Account, Line Items, Delivery Details, Settlement, Department Hdr, Contra, Doc Link, Attachments, Export, Convert); tabs added by an upgrade are appendedthe order listedTab order for all users

There is no Transaction Date Logic control in this applet’s Default Selection (unlike the invoice); the backend keeps the date typed on the form.

Application Settings (shared Field Configuration screen)

A toggle that has never been saved is off, with one exception: the detailed pricing columns and the department fields, which the screen initialises to hidden for this applet. The applet itself treats an unsaved (null) key as shown; those columns become hidden the first time an administrator saves this screen without switching the toggles off.

Behaviour and listing-default toggles

SectionSettingWhat it controlsDefaultEffect when changed
Gen Doc ListingDISABLE_GEN_DOC_LISTINGListing does not load rows until a search is runoffFaster first paint on large tenants
Gen Doc ListingDEFAULT_TRANSACTION_DATEListing and Line Items open pre-filtered to a date rangenoneApplied at next open
Gen Doc ListingDEFAULT_POSTING_STATUSListing opens filtered to one posting status; ALL or empty means no filternone → no filterApplied at next open
Gen Doc ListingDEFAULT_STATUSListing opens filtered to a record status; ALL or true means no filterACTIVE when unsetApplied at next open
Gen Doc ListingSORT_ORDERListing sort columnUpdated Date, descending, when unsetApplied at next open
Gen Doc ListingFUZZY_SEARCH_COLUMNSComma-separated columns the search box matchesserver_doc_1,client_doc_1…client_doc_5,doc_reference when unsetSearch scope
Gen Doc ListingENABLE_SERIAL_NUMBER_VALIDATION_FINAL (label ENABLE_SERIAL_BATCH_NUMBER_VALIDATION_FINAL)Asks the backend, at FINAL, to check that quoted serial numbers exist at the location even though the quotation moves no stockoffOnly the listing’s bulk FINAL sends the request. The FINAL button inside a quotation builds it and then drops it, so from inside the document the check never runs whatever this says (a known issue, reported to engineering). FINAL from the listing is rejected when a quoted serial is not in stock at the location
Gen Doc ListingSHOW_DRAFT_BUTTONShows a DRAFT button on the listing and in the edit panel (bulk set back to DRAFT)off; overridden per user by the SHOW_DRAFT_BUTTON client-side permissionButton visible
Gen Doc ListingHIDE_GENDOC_FINAL_BUTTON, HIDE_GENDOC_VOID_BUTTON, HIDE_GENDOC_DISCARD_BUTTON, HIDE_GENDOC_SAVE_BUTTONHide FINAL / VOID / DISCARD / SAVE for everyone except users holding the matching SHOW_GENDOC_*_BUTTON permissionoffButton removed
Doc SettingsCANNOT_EDIT_CURRENCY_RATEExchange-rate field read-onlyoffRate always from the currency master
Doc SettingsSHOW_FOREX_DATA_SOURCEShows where the exchange rate came fromoffExtra label next to the rate
Doc SettingsENABLE_EMPLOYEE_LOGIN_AUTO_DETECTIONResolves the employee record behind the login on a new documentoffSales agent pre-filled from the login
Entity DetailsENABLE_BRANCH_FILTERCustomer search and Jobsheet KO limited to the quotation’s branchoffFewer entities / source documents offered
Entity DetailsENABLE_CUSTOMER_FILTER_FROM_ACCOUNT_TABCustomer picker honours the filters set on the Account taboffNarrower customer search
LinesSHOW_ITEM_STOCK_BALANCE (label Disallow negative stock for basic item (validate stock balance))Shows the stock-balance column in item search. Display only here: this applet never asks for a stock-balance check, and the backend stock check skips zero-signum lines anywayoffColumn shown
LinesDISABLE_ITEM_LISTINGItem search shows no rows until a keyword is typedoffFaster item dialog on large catalogues
LinesENABLE_DRAFT_LOCK_SERIAL_NUMBER_CHECKINGSerial-number validation on Save also checks draft locks, so a serial already held by another draft document is returned as invalid with the remark “Serial Number is already locked by …”offSerial conflicts caught at save time
LinesDISABLE_LINE_ITEM_NAME_EDITItem name locked to master dataoffName read-only
LinesENABLE_EDITING_UNIT_PRICE_STDStandard unit price editable in the lineoffStd price field unlocked
LinesENABLE_ITEM_NAME_MAX_LIMIT + ITEM_NAME_MAX_LIMITMaximum item-name lengthoff / noneValidator on the name field
Vertical UIVERTICAL_ORIENTATIONRenders tabs as a vertical stack; EXPAND_* keys open a section by defaultoffLayout change

Hide / show and expand toggles — cosmetic. Every key is off (shown / collapsed) by default unless the row says otherwise.

SectionKeysDefault
Gen Doc Listing columnsHIDE_SERIAL_NUMBER, HIDE_SERVER_DOC_1, HIDE_SERVER_DOC_2, HIDE_SERVER_DOC_3 (tenant / company / branch numbers), HIDE_TRANSACTION_DATE, HIDE_CLIENT_DOC_TYPE, HIDE_CLIENT_DOC_1 … HIDE_CLIENT_DOC_5, HIDE_ARAP_PNS, HIDE_ARAP_SETTLEMENT, HIDE_ARAP_DOC_OPEN, HIDE_ARAP_CONTRA, HIDE_ARAP_BAL, HIDE_AMOUNT_TXN_MAIN_LISTINGoff; each is paired with a SHOW_* permission in the listing column map
Vertical UIEXPAND_MAIN_DETAILS, EXPAND_ACCOUNT, EXPAND_LINE_ITEMS, EXPAND_KO_FOR, EXPAND_DELIVERY_DETAILS, EXPAND_DEPARTMENT_HDR, EXPAND_DOC_LINK, EXPAND_ATTACHMENT, EXPAND_EXPORT, EXPAND_MAIN_CONTRA, EXPAND_SETTLEMENToff (collapsed)
Doc Settings (Main Details)HIDE_TRACKING_ID, HIDE_PERMIT_NO, HIDE_CREATED_BY_DETAILS, HIDE_DELIVERY_BRANCH, HIDE_DELIVERY_LOCATION, HIDE_CRM_CONTACT, HIDE_REMARKS, HIDE_EXTERNAL_REMARKS, HIDE_MEMBER_CARD, HIDE_WORKFLOW_STATUS, HIDE_WORKFLOW_RESOLUTIONoff
Header tabsHIDE_DELIVERY_DETAILS_TAB, HIDE_COLLECTION_TAB, HIDE_DEPARTMENT_HDR_TAB, HIDE_KO_FOR_TAB, HIDE_SETTLEMENT_TAB, HIDE_MAIN_CONTRA_TAB, HIDE_DOC_LINK_TAB, HIDE_ATTACHMENT_TAB, HIDE_EXPORT_TAB, HIDE_CONVERT_TABoff, except HIDE_DEPARTMENT_HDR_TAB, which the screen initialises to hidden for this applet
Lines — columns and fieldsHIDE_SALES_AGENT, HIDE_UNIT_PRICE_STD_PRICING_SCHEME, HIDE_UNIT_PRICE_STD_INCL_TAX, HIDE_QTY_BASE, HIDE_UNIT_PRICE_TXN, HIDE_AMOUNT_TXN, HIDE_UNIT_DISCOUNT, HIDE_QTY_UOM, HIDE_UOM_TO_BASE_RATIOoff
Lines — detailed pricing columnsHIDE_UNIT_PRICE_STD_EXCL_TAX, HIDE_UNIT_PRICE_STD_UOM_INCL_TAX, HIDE_UNIT_PRICE_STD_UOM_EXCL_TAX, HIDE_UNIT_PRICE_NET_UOM_EXCL_TAX, HIDE_UNIT_PRICE_NET_EXCL_TAX, HIDE_UNIT_DISCOUNT_UOM_EXCL_TAX, HIDE_UNIT_PRICE_TXN_UOM_INCL_TAX, HIDE_AMOUNT_STD_EXCL_TAX, HIDE_DISCOUNT_AMOUNT_EXCL_TAX, HIDE_AMOUNT_NET_EXCL_TAX, HIDE_TAX_CONFIG_SELECTION, HIDE_WHT_CONFIG_SELECTIONhidden for this applet once the screen is saved; each has a SHOW_* permission counterpart read by the line grid
DepartmentHIDE_SEGMENT, HIDE_DIMENSION, HIDE_PROFIT_CENTER, HIDE_PROJECThidden for this applet once the screen is saved; the listing shows the department columns only when the paired SHOW_GL_DIMENSION / SHOW_SEGMENT / SHOW_PROFIT_CENTER / SHOW_PROJECT key is set
Line item main tabsHIDE_BIN_NUMBER, HIDE_BATCH_NUMBER, HIDE_COSTING_DETAILS, HIDE_PRICING_DETAILS, HIDE_ISSUE_LINKoff
Line item sub-tabsHIDE_DELIVERY_INSTRUCTION, HIDE_DOC_LINK, HIDE_RELATED_DOCUMENTS, HIDE_DELIVERY_DETAILSoff
Because the shared screen initialises the detailed pricing columns, the department fields and the Department Hdr tab to hidden for this applet, the first save of Application Settings hides them for everyone. If a column or tab disappeared after an administrator visited Settings, look here first.

Branch Settings (applet-local)

One record per branch: branch code, name and company; Header and Footer text for printouts; a default printable format; a default settlement method for each payment type (cash, cheque, credit card, debit card, bank transfer, e-wallet, voucher, membership-point currency, others); a branch pricing scheme and sales agent; five-cent rounding with a rounding item and a group-discount item; an item-category filter for the item search; and the sidebar menu list for that branch. All controls start empty.

Rendered on the screen but not read by this applet

These controls appear on Application Settings for this applet and are saved, but nothing in the applet reads them: the location, billing-contact and shipping-contact hides, the last-purchase-price, total-discount-amount and line GL-code hides, the Department line sub-tab hide, the Trace Document and Main Payment tab hides, Disable line item queue listing (honoured by the Purchase Requisition’s queue listing), and the vertical-UI expand toggles for the AR/AP, Posting, Trace Document and Delivery Trips panels (the quotation has none of those tabs). The AR/AP tab hide other document applets get is not shown for this applet at all. Switching any of them has no effect here; the total-discount and department hides are honoured by the Sales Invoice and Sales Order, which is where the expectation comes from.

Read at runtime without a control in this applet

DEFAULT_AR_AP and DEFAULT_CURRENCY are read when a customer is created from the quotation’s customer picker: the new customer’s receivable type is whatever DEFAULT_AR_AP says — AR_TRADE when it is unset — and its currency is DEFAULT_CURRENCY. Nothing on this applet’s screens sets DEFAULT_AR_AP, so a tenant whose quotations should raise non-trade customers sets it through the API; a wrong value here lands every such customer in the wrong receivable account from the first invoice. The advanced search also reads SHOW_GL_DIMENSION, SHOW_SEGMENT, SHOW_PROFIT_CENTER and SHOW_PROJECT to show the analysis fields.

The listing column map reads HIDE_QUOTATION, HIDE_ORDER, HIDE_DELIVERY_ORDER, HIDE_INVOICE, HIDE_OTHERS (the reference columns), HIDE_LISTING_BRANCH, SHOW_DESCRIPTION, SHOW_REMARKS_MAIN_LISTING, SHOW_REFERENCE_MAIN_LISTING and SHOW_SALES_AGENT as settings, and Main Details reads HIDE_CREDIT_TERMS / HIDE_CREDIT_LIMIT; the shared screen renders those controls only for other applet codes (the credit-terms toggles are gated to jobsheet / return / purchase applets and the sales order; the reference-column toggles to purchase applets). They can only be set through the paired client-side permission of the same name, or by an API write to the applet settings.

Fifty-one further keys are declared but have no control anywhere (ENABLE_CUSTOM_STATUS_*, LIST_/NAME_CUSTOM_STATUS_HDR_*, department ENABLE_* / INCLUDE_* / MANDATORY_*, the SST and WHT enable flags, the last-purchase-price enable, the filter-by-today’s-transactions switch, DEFAULT_ORIENTATION, PRINTABLE). They are not documented as settings.

Document behaviour settings

AreaHow it is configured
Status flowFixed: TEMP (unsaved working row) → ACTIVE; posting status DRAFT → FINAL → VOID, plus DISCARDED for drafts and DRAFT-again through the SHOW_DRAFT_BUTTON action. No custom statuses are exposed in this applet’s settings screens.
Posting at FINALNothing to configure: both signums are 0, so journal posting skips every line and no inventory transaction is written. Which follow-on posting steps still run is decided by the company’s posting configuration, not by an applet setting.
Backend FINAL validations the applet can switchOnly one, and only from the listing: ENABLE_SERIAL_NUMBER_VALIDATION_FINAL (quoted serial numbers must exist at the location). The FINAL button inside the quotation never sends it (a known issue, reported to engineering). The applet never asks for the stock-balance, sell-below-cost or redeemed-points checks.
WorkflowSettings → Workflow Settings links a company to a workflow process. No approval queue exists in this applet; the Pending Approvals and Team Reports screens described in older versions of this page do not exist in the code.
PrintablesSettings → Printable Format Settings registers formats for this document type; Branch Settings can pin a default format per branch.
ConvertThe Convert tab has one action, Convert to Internal Receipt Voucher. It posts a new INTERNAL_RECEIPT_VOUCHER (amount signum −1) whose header is copied from the quotation — customer, branch, currency and the current posting status included — with the quotation’s Collection lines, then deletes the quotation. Do this while the quotation is still a draft. The tab is offered on a FINAL quotation too, and because the posting status is copied the receipt voucher is then created already FINAL without ever running the FINAL step — a tenant number but no company or branch number, no posting job, no cashbook or journal line — and the quotation is gone (a known issue, reported to engineering). Hide the tab with HIDE_CONVERT_TAB if deposits are not collected on quotations.
WebhooksSettings → Webhook. Creating a quotation through the API emits INTERNAL_SALES_QUOTATION_CREATED; deleting one emits INTERNAL_SALES_QUOTATION_DELETED. FINAL itself emits no document-type webhook for this type (only the invoice type does).
e-Invoice, intercompany, emailNo controls in this applet; INTERNAL_SALES_QUOTATION is not an e-Invoice document type and has no intercompany mirror.

Feature visibility / permissions

API permissions (server-side, target = branch / company / customer): TNT_API_DOC_INTERNAL_SALES_QUOTATION_CREATE_TGT_GUID, …_READ_TGT_GUID, …_UPDATE_TGT_GUID, …_DELETE_TGT_GUID.

Client-side permissions are assigned to a role — not to a user or a team — on the Client-Side Permission Listing (settings/client-side-permission-listing; the Settings menu has no link to it). Only two definitions are seeded for this applet: HIDE_PRICE and SHOW_TRANSACTION_DATE. The applet’s code checks many more; those must exist in the tenant’s permission definitions before they can be granted.

GroupPermission codesGate
ButtonsSHOW_GENDOC_FINAL_BUTTON, SHOW_GENDOC_VOID_BUTTON, SHOW_GENDOC_DISCARD_BUTTON, SHOW_DRAFT_BUTTONRe-enable a button hidden by the matching HIDE_GENDOC_* setting, or show DRAFT
Listing columnsSHOW_DOC_NO_TENANT, SHOW_DOC_NO_COMPANY, SHOW_DOC_NO_BRANCH, SHOW_LISTING_BRANCH, SHOW_TRANSACTION_DATE (seeded), SHOW_CLIENT_DOC_TYPE, SHOW_CLIENT_DOC_1 … SHOW_CLIENT_DOC_5, SHOW_ARAP_PNS, SHOW_ARAP_SETTLEMENT, SHOW_ARAP_DOC_OPEN, SHOW_ARAP_CONTRA, SHOW_ARAP_BAL, SHOW_AMOUNT_TXN_MAIN_LISTING, SHOW_GL_DIMENSION, SHOW_SEGMENT, SHOW_PROFIT_CENTER, SHOW_PROJECT, SHOW_DESCRIPTION, SHOW_QUOTATION, SHOW_ORDER, SHOW_DELIVERY_ORDER, SHOW_INVOICE, SHOW_OTHERS, SHOW_REMARKS_MAIN_LISTING, SHOW_REFERENCE_MAIN_LISTINGColumn visibility per user
Pricing and cost columns on linesSHOW_UNIT_PRICE_STD_PRICING_SCHEME, SHOW_UNIT_PRICE_STD_INCL_TAX, SHOW_UNIT_PRICE_STD_EXCL_TAX, SHOW_UNIT_PRICE_STD_UOM_INCL_TAX, SHOW_UNIT_PRICE_STD_UOM_EXCL_TAX, SHOW_UNIT_PRICE_NET_EXCL_TAX, SHOW_UNIT_PRICE_NET_UOM_EXCL_TAX, SHOW_UNIT_PRICE_TXN, SHOW_UNIT_PRICE_TXN_UOM_INCL_TAX, SHOW_UNIT_DISCOUNT, SHOW_UNIT_DISCOUNT_UOM_EXCL_TAX, SHOW_AMOUNT_STD_EXCL_TAX, SHOW_AMOUNT_NET_EXCL_TAX, SHOW_AMOUNT_TXN, SHOW_DISCOUNT_AMOUNT_EXCL_TAX, SHOW_QTY_BASE, SHOW_QTY_UOM, SHOW_UOM_TO_BASE_RATIO, SHOW_TAX_CONFIG_SELECTION, SHOW_WHT_CONFIG_SELECTION, SHOW_COSTING_DETAILS, HIDE_PRICE (seeded)Reveal or hide price and cost data per role, overriding the HIDE_* column settings
Item searchEXCLUDE_ACCOUNT_CODE_ITEM_TYPE_AT_ITEM_SEARCHHides account-code items from the line item search

Settings → Feature Visibility is a placeholder that stores nothing (see the Settings menu table); it is not a way to restrict this applet.

Fields

Main Details

FieldMeaningRequiredNotes
Company, Branch, LocationQuoting company, branch and locationYesLocation follows the branch; it is recorded but no stock moves
Delivery Branch / LocationWhere goods would ship fromNoHide with HIDE_DELIVERY_BRANCH / HIDE_DELIVERY_LOCATION
Transaction DateDocument dateNo in the form; backend checks itMust not fall in a locked fiscal period; kept as typed at FINAL
Sales AgentEmployee credited with the quoteYesApply to Lines copies it to every line; auto-filled from the login with ENABLE_EMPLOYEE_LOGIN_AUTO_DETECTION
Currency, Currency Rate, Base CurrencyDocument currency and rate to baseCurrency yesSave is blocked in the form when the currencies differ and the rate is 0 or negative (“The currency rate cannot be ZERO or negative.”); the backend repeats the check at FINAL (FOREX_DOC_REQUIRES_NON_ZERO_XRATE)
Credit Terms, Credit LimitCopied from the customerNoInformational on a quotation
Reference, Remarks, External RemarksFree textNoReference is one of the columns the listing’s search box matches by default; the two remarks are not. On a FINAL quotation these boxes, with Sales Agent, Permit No, Tracking ID and Sales Lead, stay editable and SAVE keeps the change. Trap: emptying a box and saving does not clear it — the old text comes back. Overwrite it instead (read, not run). Convert to Internal Receipt Voucher leaves Reference and Remarks blank on the voucher and carries External Remarks across
Permit No, Tracking ID, Sales LeadFree text; Sales Lead is Corporate or Non-CorporateNoTrap: a change to any of the three is saved only while Credit Terms has a value. For a customer with no credit terms it is dropped on save without a message (read, not run); reopen the quotation to check. Sales Lead shows Corporate whenever nothing is stored, so a Corporate you did not pick tells you nothing. Hidden by HIDE_PERMIT_NO, HIDE_TRACKING_ID
CRM Contact, MemberCardContact and member linksNoMemberCard opens a member picker. CRM Contact is a plain text box, but the server stores it as a link to a contact record, not as text, so a typed name is expected to be refused when you save (read, not run: try it on one test quotation before you rely on the box). Put the person’s name in Remarks instead. Convert clears both on the voucher. Hidden by HIDE_CRM_CONTACT, HIDE_MEMBER_CARD
Doc Short Code (SLSQUO), Tenant / Company / Branch Doc NoNumberingGenerated at FINALShown read-only
Workflow Status / ResolutionWhere the quotation stands in its workflow processNoShown on every quotation opened for editing, but filled only on one that carries a process. A quotation takes the process, and the process’s starting status, when it opens on your Default Branch and that branch’s company is linked under Workflow Settings. As read, picking the branch by hand on a new quotation does not look the link up, so that quotation has no process and an empty list (read, not run: create one each way on a test company and compare). The list offers the current status and those the process allows next, by Code, once the quotation has been saved and reopened. Resolution is read-only and follows the status. Nothing else reads either field: FINAL, VOID and knock-offs are not held back, and the listing has no column or filter for them. If you use the status for approval, the check stays a person’s job — whoever clicks FINAL opens Main Details and confirms the approved status first. To find quotations waiting at a status, add a short tag to Reference as well, which the listing search does match. Hidden by HIDE_WORKFLOW_STATUS, HIDE_WORKFLOW_RESOLUTION
Created / Modified by and datesAuditRead-onlyHide with HIDE_CREATED_BY_DETAILS

Account

FieldMeaningRequiredNotes
Entity IDThe customerYesCopies entity name, type, credit terms and limit, currency, billing and shipping addresses; a new customer can be created from the picker
Bill To / Ship To addresses and contactsAddresses printed on the quoteNoSub-tabs; member selection available

Lines

FieldMeaningRequiredNotes
Item Code / NameInventory or service itemYesName editable unless DISABLE_LINE_ITEM_NAME_EDIT; grouped items expand into child lines
Quantity, UOM, UOM ratioQuantity quotedQuantity and the derived amounts are requiredBoth line signums are filled as 0 by the backend; the header’s amount signum must arrive as 0 — checked, not filled
Unit Price STD / Discount / Net / Transaction, amountsPricing chainDerivedMulti-level discounts on the Multi Discount tab; Pricing Details tab (sales / purchase min-max prices) has its own required validators
Tax Code, Tax Amount, WHTTax on the lineNoThe picker lists output tax codes (sales tax, service tax, GST), narrowed to the item’s output tax type, plus a blank; the rate and both amounts are read-only. When you add a line, picking a tax code keeps the tax-inclusive Txn Amount and backs the tax out of it (net = Txn Amount ÷ (1 + tax rate − WHT rate)), so the customer’s total stays put and the net falls. Editing Unit Discount or Amount Net afterwards puts the tax on top of the net instead. Check the Txn Amount after picking the code; if you meant tax on top of your price, re-enter the discount or the net (read, not run). Nothing posts from the quotation, but a Sales Order that knocks it off starts from a copy of each line, with the quotation’s tax code, rate and amounts; when part of the quotation was knocked off earlier, the tax on the remainder is recomputed at the copied rate. If the tax rate changed between quote and order, whoever raises the order re-picks the tax code on each line and checks that tax equals net × the current rate. Hidden for this applet once Application Settings is saved (HIDE_TAX_CONFIG_SELECTION, HIDE_WHT_CONFIG_SELECTION)
Serial Number, Batch Number, Bin Number tabsAllocations for tracked itemsBatch: batch number, quantity, issue date and expiry date required; Bin: bin code, container measure, container quantity and quantityChecked at FINAL only when ENABLE_SERIAL_NUMBER_VALIDATION_FINAL is on
Sales Agent, Department (Segment, Dimension, Profit Center, Project), Delivery Instructions, Delivery Details, Doc LinkOptional attributesNoDepartment fields hidden by default for this applet

Collection (create) / Settlement (edit) — one line per deposit: settlement method, date, amount and, per method type, cheque number, transaction number, voucher number, card details (card no, name, issuer, expiry month/year, CVV, cash-back), points and point currency. These lines are what the Convert action turns into a receipt voucher; on the quotation itself they post nothing.

Delivery Details, Department Hdr, Contra, Doc Link, Attachments, Export: optional header-level tabs; Export builds the line rows for the File Export CSV.

Lifecycle and effects

StatusMeaningAllowed next
TEMP (record status)Working row created by +, not yet savedACTIVE on first Save
DRAFTEditable; no numbers assignedFINAL, DISCARDED, delete
FINALNumbered; branch, location, date, currency, credit, member card and delivery fields locked (Reference, remarks, Sales Agent and workflow status stay editable); available as a KO source to orders, invoices and jobsheetsVOID; DRAFT (only through the SHOW_DRAFT_BUTTON action)
VOIDCancelled with a reasonnone

Backend checks at FINAL — the backend runs the same FINAL validation for every document type; for a quotation the effective checks are:

CheckError codeRuns when
Exchange rate present and non-zero when currencies differFOREX_DOC_REQUIRES_NON_ZERO_XRATEalways
Serial-number count equals line quantity; no duplicatesRefused: serial count does not match the quantity, or a serial is repeatedalways when a serial item has serials
Quoted serial numbers exist at the locationRefused: the serial is not at the locationonly when ENABLE_SERIAL_NUMBER_VALIDATION_FINAL is on
Bin and batch quantities validbin / batch error codesalways
Transaction date not in a locked fiscal periodRefused: the period is lockedalways when date and company are present

Not applied to quotations: the customer blacklist check (it covers cash bill, invoice, order and outbound DO only) and the stock-balance check (lines with quantity signum 0 are skipped unless the caller specifically asks for them to be checked, which only the back-office conversion path does).

What FINAL does once validation passes: generates tenant, company and branch running numbers; starts the primary posting run (which fans out to whatever the company’s posting configuration enables); queues the message-template (email) processor. No document-type webhook fires at FINAL for this type.

Posting proof block

ItemValue
Server document typeINTERNAL_SALES_QUOTATION (short code SLSQUO)
Amount signum0 (checked on create and update)
Quantity signum0 (filled on every line)
Dr/Cr equationNone. There is no dedicated journal handler for this type, so the generic sales handler is used, but every line is skipped for having a zero amount signum and the entity line is skipped because the total is 0 — an empty journal, i.e. nothing posts
GL precedenceNot applicable — no journal lines are built
Stock processorNo inventory transaction: quantity signum 0 gives a zero movement; the quotation is also not among the documents that reduce stock availability (only sales orders and invoices are)
What VOID reversesVOID sets the status and the void reason and starts the void posting run; with nothing posted, it finds nothing to reverse. A voided quotation can no longer be knocked off
Back to DRAFTOffered by the DRAFT button (SHOW_DRAFT_BUTTON), which uses the backend’s undo path
ConvertCreates an INTERNAL_RECEIPT_VOUCHER (amount signum −1) from the header and Collection lines, then deletes the quotation — which removes the document and emits the INTERNAL_SALES_QUOTATION_DELETED webhook event. From a FINAL quotation the receipt voucher is born FINAL and does not post on its own (a known issue, reported to engineering): its journal and cashbook line stay missing until somebody presses Resolve on Missing Journal and Missing Cashbook in Financial Report’s Trace Document, which accepts receipt vouchers

Related applets

Troubleshooting

SymptomCauseFix
Save or FINAL blocked after a group discount was applied to the linesBug in the customer-selection flow fixed on 2026-08-31Upgrade the applet; re-select the customer on older builds
The item lines’ net amounts changed after a group discount was appliedExpected: a group discount is its own GL-code line with a zero amount and the discount, and the backend apportions that discount across the item lines in proportion to their net amounts, so each line’s net falls by its shareCheck the lines after applying it; to discount one line only, use that line’s own discount
SAVE stays disabled on a new quotationBranch, Location, Sales Agent or Currency is empty on Main Details, or no entity on Account — all are requiredFill the red-prompted fields; check HIDE_* settings have not hidden a required field
“The currency rate cannot be ZERO or negative.”Document currency differs from the company currency and the rate is empty or 0Enter the rate (unlock it if CANNOT_EDIT_CURRENCY_RATE is on)
FINAL rejected with FOREX_DOC_REQUIRES_NON_ZERO_XRATESame condition caught by the backendAs above
“The selected date falls within a locked fiscal period.”Transaction date inside a period locked with LOCK_ALL or LOCK_TXNChange the date or reopen the period in Chart of Account
A quoted serial that is not in stock passed FINAL although ENABLE_SERIAL_NUMBER_VALIDATION_FINAL is onFINAL was pressed inside the quotation, which never sends the check; only the listing’s bulk FINAL does (a known issue, reported to engineering)Finalise from the listing when the check matters
FINAL rejected because a quoted serial is not at the locationENABLE_SERIAL_NUMBER_VALIDATION_FINAL is on and a quoted serial is not in stock at the header locationPick a serial that is in stock, or turn the setting off if quotes may name serials not yet received
Serial number flagged “already locked by …” on SaveENABLE_DRAFT_LOCK_SERIAL_NUMBER_CHECKING is on and another draft document holds the same serialUse another serial or release it from the other draft
Item search shows stock balance 0 for items that are in stockOlder builds queried the wrong location (fixed 2026-01-20)Upgrade the applet
Grid does not refresh after Save or FINALOlder builds (fixed 2026-05-26)Upgrade the applet
Deleting one line removed all linesOlder builds (fixed 2026-02-24)Upgrade the applet
Grouped item added several lines with wrong pricesOlder builds (fixed 2025-11-10)Upgrade the applet
SST amount not populated on linesOlder builds (fixed 2026-05-19)Upgrade the applet
Transaction date not saved as typedOlder builds (fixed 2025-12-30)Upgrade the applet
Pricing columns, Segment/Project fields or the Department Hdr tab vanished after Settings were savedThe shared screen initialises them to hidden for this appletApplication Settings → Lines / Department, switch the HIDE_* toggle off and save
A user cannot see FINAL / VOID / DISCARDHIDE_GENDOC_*_BUTTON on tenant-wideGrant the matching SHOW_GENDOC_*_BUTTON client-side permission — it must first exist in the tenant’s permission definitions (only HIDE_PRICE and SHOW_TRANSACTION_DATE are seeded)
Quotation disappeared after Convert to Internal Receipt VoucherExpected: the action creates the receipt voucher and deletes the quotationFind the receipt voucher in Receipt Voucher (Internal); hide the tab with HIDE_CONVERT_TAB if this is unwanted
Nothing appears in the ledger or stock after FINALExpected: both signums are 0Knock the quotation off into a Sales Order or Invoice
Available stock did not drop after FINALExpected: quotations are not in the stock-availability calculationUse a Sales Order to reserve stock

Related documentation

Last updated on