Overview

Sales Order document templates in Luminous use Mustache-style placeholders ({{variableName}}) inside four HTML sections: Header, Items Header, Item Row, and Footer. The Item Row section wraps each line in a {{#orderLines}}…{{/orderLines}} loop. The default template does not include a price column, but you can add one in a few steps.


How to open and edit a Sales Order template

  1. Go to Manage → Templates.
  2. Locate your Sales Order template, or create a new one.
  3. Click the ⋮ menu on the template's row and choose Edit to open the HTML editor (Configuration Mode: Use Custom HTML).
  4. Make changes to the Items Header and Item Row sections, then click Save.

Adding a Unit Price column — step by step

Step 1 — Add the column header

In the Items Header section, add a <th> cell where you want the price to appear. For example, after the Qty Ordered header:

<th scope="col" style="text-align: right;">Unit Price</th>

Step 2 — Add the data cell inside the line loop

In the Item Row section, inside the {{#orderLines}}…{{/orderLines}} block, add a matching <td> cell:

<td valign="top" style="text-align: right;">{{unitPrice}}</td>

{{unitPrice}} renders as a formatted dollar amount (e.g. $12.50). If you need the raw number without the $ symbol or comma formatting — for example to use in a calculation or custom script — use {{unitPrice.raw}} instead.

You may also add the line subtotal, discount, and total columns the same way:

PlaceholderWhat it shows
{{unitPrice}}Unit price, formatted as $X,XXX.XX
{{lineSubtotal}}Quantity × unit price, formatted as $X,XXX.XX
{{lineDiscount}}Discount applied to this line, formatted as $X,XXX.XX
{{lineTotal}}Line subtotal minus discount, formatted as $X,XXX.XX

Append .raw to any of these (e.g. {{lineTotal.raw}}) to get the plain numeric value.


Full placeholder reference

PlaceholderDescription
{{orderNumber}}Sales order number
{{orderDate}}Order creation date (formatted) — also {{orderDate.short}}, {{orderDate.long}}, etc.
{{estimatedShipDate}}Estimated ship date — also .short, .long
{{status}}Current order status
{{notes}}Customer-facing notes
{{internalNotes}}Internal/private notes
{{shippingNotes}}Shipping instructions from the ship-to address
{{{shippingNotesFormatted}}}Shipping notes with line breaks preserved (use triple braces)
{{shippingMethod}}Requested shipping service
{{customerPoNumber}}Customer PO number

Company (your business)

PlaceholderDescription
{{company.name}}Your company name
{{company.logoUrl}}Your company logo URL
{{company.email}}Your company email
{{company.website}}Your company website
{{company.phone}}Your company phone
{{company.address}}Ship-from / invoice address (plain text)

Customer

PlaceholderDescription
{{customer.name}}Customer / account name
{{customer.email}}Customer email
{{customer.phone}}Customer phone

Addresses

PlaceholderDescription
{{shipTo.name}}, {{shipTo.company}}, {{shipTo.street1}}, {{shipTo.city}}, {{shipTo.state}}, {{shipTo.postalCode}}, {{shipTo.country}}, {{shipTo.phone}}, {{shipTo.email}}Ship-to contact fields
{{{shipTo.fullAddressBlock}}}Ship-to address as a preformatted HTML block (use triple braces)
{{billTo.*}}Same fields as shipTo but for the billing address

Document totals

PlaceholderDescription
{{orderSubtotal}}Sum of all line subtotals
{{orderDiscount}}Total discount across all lines
{{orderTax}}Tax amount
{{orderShipping}}Shipping amount
{{orderGrandTotal}}Subtotal − discount + tax + shipping
{{salesOrderSubtotal}}, {{salesOrderGrandTotal}}, etc.Same values always pulled from the parent Sales Order (useful on Fulfillment Order exports)

Append .raw to any currency placeholder for the unformatted number.

Invoice details (first associated invoice)

PlaceholderDescription
{{invoiceNumber}}First invoice ID
{{grandTotal}}First invoice grand total
{{subTotal}}, {{taxTotal}}, {{shippingTotal}}First invoice sub-components

Totals & unit counts

PlaceholderDescription
{{totalUnitsOrderLines}}Sum of all top-level line quantities
{{totalUnitsCombined}}Non-kit line quantities + kit component quantities

Inside the {{#orderLines}} loop (Item Row section)

Identity & description

PlaceholderDescription
{{lineNumber}}Sequential line number (1, 2, 3…)
{{sku}}SKU as received from the sales channel
{{productName}}Product name as received from the sales channel
{{internalSku}}Internal (Luminous-managed) SKU
{{internalProductName}}Internal product name
{{channelSku}}Channel-mapped SKU (if configured)
{{channelProductName}}Channel-mapped product name
{{description}}Line item description from the order source
{{uom}}Unit of measure (e.g. EA)
{{imageUrl}}Product thumbnail URL

Quantities

PlaceholderDescription
{{quantity}}Quantity ordered
{{fulfilledQuantity}}Quantity assigned to fulfillment orders
{{inFulfillmentQuantity}}Assigned to FOs but not yet shipped
{{shippedQuantity}}Quantity already shipped
{{backorderedQuantity}}Quantity not yet assigned or shipped

Append .raw for the plain number (e.g. {{quantity.raw}}).

Pricing

PlaceholderDescription
{{unitPrice}}Unit price as $X,XXX.XX
{{lineSubtotal}}quantity × unitPrice as $X,XXX.XX
{{lineDiscount}}Line discount amount as $X,XXX.XX
{{lineTotal}}lineSubtotal − lineDiscount as $X,XXX.XX

Append .raw for unformatted values; append .decimals4 (or any digit 0–6) for custom decimal precision.

Status

PlaceholderDescription
{{fulfillmentStatus}}Shipped / Partially Shipped / In Fulfillment / Partially In Fulfillment / Backordered
{{customerStatus}}Customer-facing version of status (future-dated lines show Backordered)

Dates

PlaceholderDescription
{{estimatedShipDate}}Estimated ship date for this line — also .short, .long
{{estimatedShipDateIsInherited}}true if the date was inherited from the order level

Location (for warehouse-picked orders)

PlaceholderDescription
{{warehouse}}Warehouse name from the pick location
{{location}}Bin / shelf name within the warehouse
{{externalLocation}}Location code from external systems (e.g. ShipStation)

Custom fields (inside {{#orderLines}})

Placeholder patternDescription
{{lineCustomFields.YourFieldName}}A line-item custom field by name
{{skuCustomFields.YourFieldName}}A SKU-level custom field by name
{{#lineCustomFields.list}}…{{/lineCustomFields.list}}Loop over all line custom fields

Kits & lots

  • Use {{#isKitParent}}…{{/isKitParent}} to show kit-specific content on parent rows.
  • Kit component rows are available in a nested {{#components}}…{{/components}} loop, with {{sku}}, {{productName}}, {{quantity}}, {{uom}}, {{warehouse}}, and {{location}}.
  • Lot details (when lot tracking is enabled) are in a {{#lot}}…{{/lot}} block: {{number}}, {{expiryDate.short}}, {{manufacturerCode}}.

Conditional sections

Use Mustache block tags to show content only when a value is present, or based on document type:

{{#unitPrice}}Unit Price: {{unitPrice}}{{/unitPrice}}
{{#isSalesOrder}}Sales Order: {{orderNumber}}{{/isSalesOrder}}
{{#isFulfillmentOrder}}Fulfillment Order{{/isFulfillmentOrder}}

Tip: browse placeholders in the template editor

The template editor in Manage → Templates includes a built-in placeholder reference panel. Use it to browse all available variables and copy them directly into your HTML without switching screens.