@{ ViewData["Title"] = "Quotes"; }

Overview

Quotes let you provide customers and prospects with a formal price estimate before work begins. The quoting engine calculates material costs, labor, equipment time, overhead, and profit margin automatically based on the surface area and complexity you enter — no spreadsheet required.

Quotes can be created for existing customers or for prospects — people or businesses who have not yet become customers. Prospect quotes let you capture all contact details and pricing in one place so nothing is lost while you are waiting for a decision. If the prospect accepts, you can convert them to a customer and the quote to a job in just a few clicks.

You can find Quotes under Operations › Quotes in the left sidebar. The list is searchable by quote number or customer name, and filterable by status.

Creating a Quote

Quick Quote vs Full Quote

The quote form offers two modes, selectable via the Quick Quote / Full Quote toggle at the top of the page. Your selection is remembered automatically for next time.

  • Quick Quote — shows only the essentials: customer picker (or walk-in info) and the item wizard. Dates, notes, tags, oven settings, discounts, and photos are hidden. Use this for fast phone or counter estimates where you just need a price.
  • Full Quote — shows the complete form with all fields. Use this for formal quotes where you want to capture notes, set an expiry date, apply a discount, or add photos.

To create a new quote:

  1. Go to Operations › Quotes and click New Quote.
  2. Choose whether this quote is for an existing Customer or a Prospect:
    • Customer — select from your existing customer list. The customer's pricing tier discount is applied automatically.
    • Prospect — enter their first name, last name, company name (optional), email, and phone. These details are stored on the quote and can be used to create a customer record later.
  3. Set the Quote Date (defaults to today) and the Expiry Date (defaults to the system's configured validity period).
  4. Add a Subject or description to identify the work being quoted.
  5. Add one or more Line Items — see the Quote Items section below for item types.
  6. Add any Notes for the customer (these appear on the printed quote).
  7. Add any internal Notes that are for your team only.
  8. Click Save Quote. The quote is saved as a Draft.

The system automatically generates a unique quote number in the format QT-YYMM-#### (for example, QT-2503-0015).

Quote Items

Each line item on a quote describes a distinct piece or group of parts to be coated. Items are added using the item wizard, which walks you through selecting the type, entering details, and choosing coatings and prep services. The total price updates in real time as you enter information.

Item Types

Calculated
Enter the surface area in square feet, quantity, and complexity. The system calculates material cost, labor, and equipment time automatically. Choose one or more coatings and optional prep services (sandblasting, masking, cleaning). Best for standard powder coating work where you know the dimensions.
Custom Work
Enter a free-text description and type a price manually. Use this for one-off work, repairs, or services that do not fit the standard surface-area calculation model. No automatic pricing calculation — you set the price directly.
AI Photo Quote
Upload photos of the parts and let the AI estimate the surface area and complexity. The AI analyses the images and returns a suggested surface area (sq ft), complexity rating, estimated minutes, and a confidence score. You can review and override any value before accepting the estimate. Up to two follow-up rounds of questions are supported.

Selecting a Product from Catalog

When you choose the Product from Catalog item type, the wizard shows a scrollable list of all your active catalog items with a search box at the top. Start typing any part of the item name, SKU, or category to filter the list instantly.

If an image has been uploaded for a catalog item, a small thumbnail appears to the left of its name in the list. Hover over the thumbnail to see a larger preview near your cursor — useful for quickly confirming you have the right part without opening the full item record.

Images are managed on the Catalog Items page — open any item, click Edit, and use the Item Image section to upload a photo (jpg, jpeg, png, gif, or webp; max 10 MB). A 200×200 thumbnail is generated automatically.

Coatings and Prep Services

For Calculated and AI Photo items, after entering the surface area you proceed to the coatings step. Select one or more powder coatings from your inventory. The wizard shows how much powder will be needed per coat based on the coverage rate and your surface area. You then choose any prep services — sandblasting, masking, and/or cleaning — that will be performed before coating.

Custom Powder Order

When a coat uses a custom powder (you enter a cost per lb manually without selecting an inventory item) or an incoming powder (a color you need to order that is not yet in stock), the powder material cost is not added to the individual item price. Instead, the system auto-generates a separate Custom Powder Order line item that collects all ordering costs in one place — so you can include shipping and freight before presenting the quote to the customer.

  • While building the quote, a dashed yellow Powder Order preview card appears below the item cards showing the calculated material cost. The price field is editable — type the total you want to charge (material + any shipping) before saving.
  • On the saved quote, the Custom Powder Order appears as its own line item with the color name(s) in the description (e.g. Custom Powder Order (Gloss Black, Satin Silver)).
  • A yellow banner on the Quote Details page reminds you when a Custom Powder Order is present so you don’t forget to confirm the shipping amount.
  • The Custom Powder Order is created once on first save. After that the price is yours — the system will not overwrite it on subsequent saves.

Save to Product Catalog

After completing the prep services step, Calculated and AI Photo items display one final step: Save to Product Catalog? This lets you add the item directly to your catalog so it can be reused on future quotes and jobs without re-entering all the details.

  • The item Name is pre-filled from your description (or the AI-generated description for AI Photo items).
  • The Default Price is pre-filled with the accepted price for AI Photo items. For Calculated items, enter a fixed catalog price (the system-calculated price varies by dimensions, so a flat catalog price is set by you).
  • Choose a Category from your existing catalog categories.
  • Optionally add or edit a Description and flag whether the item typically requires sandblasting or masking.
  • Click Save to Catalog & Add to save the item to the catalog and add it to the quote simultaneously.
  • Click Skip — Add to Quote Only to add the item to this quote without saving it to the catalog.

Inline Price Editing

On the Quote Details page you can edit any item’s unit price, quantity, or description directly in the table without opening the full Edit form.

  1. Click a unit price, quantity, or description cell in the Items table. The cell turns into an input field.
  2. Type the new value.
  3. Press Enter or click outside the field to save. Press Esc to cancel without saving.

The pricing summary (subtotal, discount, tax, and grand total) updates immediately — no page reload required.

Quote Statuses

Quotes move through a series of statuses that reflect where they are in the approval process. Each status is shown as a color-coded badge on the quote list and details page.

Status What it means
Draft The quote is being prepared. It has not been sent to the customer and can be edited freely.
Sent The quote has been delivered to the customer and is awaiting their response.
Approved The customer has accepted the quote and authorised the work. Ready to convert to a job.
Rejected The customer has declined the quote. Useful to track win/loss rates over time.
Expired The quote's validity period has passed without a customer decision. Pricing may need to be revised before resubmitting.
Converted The quote was approved and converted into a job. The quote is now linked to the resulting job record.

Sending a Quote

Once a quote is saved as a Draft and you are happy with the pricing and details, you can send it to the customer via email or SMS, or both.

Send via Email

  1. Open the quote from the Quotes list and go to its Details page.
  2. Click Send Quote via Email. The status changes from Draft to Sent and a PDF is emailed to the customer with an approval link.
  3. If email notifications are configured for your company, the customer will automatically receive an email with the quote details.

Send via SMS

Click Send Quote via SMS on the Details page to text the customer a short message containing their quote total and a link to the self-service approval portal. The customer can open the link on their phone and approve or decline without logging in.

  • The customer must have SMS Opt-In enabled and a Mobile Phone number on their record.
  • If you already sent the quote via email, the same approval link is reused — both the email link and SMS link remain valid simultaneously.
  • For prospect quotes, the SMS goes to the Prospect Phone field on the quote.

You can also manually mark a quote as Approved or Rejected when you hear back from the customer verbally or by phone, without going through a formal email or SMS send. Use the status buttons on the quote Details page to do this.

Converting to a Job

When a quote is in the Approved status, you can convert it to a job in one click.

  1. Open the approved quote and go to its Details page.
  2. Click Convert to Job.
  3. A new job is created automatically, pre-filled with:
    • All line items from the quote (surface areas, quantities, coatings, prep services)
    • The final pricing calculated on the quote
    • The customer the quote was linked to
  4. Set the job's scheduled date, priority, and assigned worker, then save.

The quote status changes to Converted and a link to the new job appears on the quote Details page. The job record also shows which quote it originated from.

Converting a Prospect to a Customer

If a quote was created for a prospect (not yet in your customer list) and they decide to go ahead, you can convert the prospect to a full customer record before converting the quote to a job.

  1. Open the approved prospect quote.
  2. Click Convert Prospect to Customer.
  3. The system opens a pre-filled customer creation form using the prospect's details from the quote (name, company, email, phone). Review and complete any missing fields such as address, customer type, or pricing tier.
  4. Save the new customer record.
  5. The quote is now linked to the new customer. You can then click Convert to Job as normal.

Customer Approval Portal

When you send a quote by email, the customer receives a link to a self-service approval portal at /QuoteApproval. No login is required — the link is unique to that quote.

From the approval portal the customer can:

  • View the full quote with pricing breakdown.
  • Click Approve to accept the quote (status changes to Approved automatically).
  • Click Reject with an optional reason.
  • Pay a deposit online (if Stripe Connect is configured).

When a customer approves or rejects via the portal, you receive a notification and the quote status updates in real time. You can then convert an approved quote to a job without needing to contact the customer.

Approval links expire after the number of days configured in Settings › App Settings › Quote Approval Token Days (default: 30 days).

Deposits on Quotes

You can record a deposit against an approved quote from the Quote Details page using the Record Deposit button in the Deposits card. This is useful when a customer pays a deposit before you start work and before a job or invoice has been created.

Deposits recorded on a quote carry over to the linked job automatically when you convert the quote. They are then applied as payments when an invoice is created from that job.

AI Quick Quote

The AI Quick Quote widget lets you get an instant rough estimate from a verbal description — perfect for phone calls and walk-in customers when you don't have time to open the full quoting wizard. Look for the dark-blue floating button in the bottom-right corner of any page, just above the AI Help button.

How to use it

  1. Click the AI Quick Quote floating button (bottom-right, dark blue with a lightning bolt icon).
  2. Type a description of the work — for example:
    "4 motorcycle wheels in Alien Silver with a black base coat, need sandblasting"
  3. Set the Quantity and Number of Coats.
  4. Click Get Estimate. The AI analyses your description and returns a price estimate, estimated minutes, surface area, complexity rating, and a confidence score in just a few seconds.
  5. The panel also shows powder stock status for any color names detected in your description — a green check means you have it in stock, red means you don't, and a grey question mark means the system couldn't match it.
  6. If the estimate looks right, enter an optional Customer Reference (e.g., the caller's name) and click Save as Draft Quote. You land directly on the new quote's Details page where you can adjust anything and assign the real customer.

Changing the Customer

The customer on a quote can be changed at any time from the Quote Details page — no need to delete and re-create the quote. This is particularly useful when:

  • A quote was saved under the Walk-In / Phone placeholder and the real customer record is created later.
  • A quote was accidentally assigned to the wrong customer.
  • A prospect quote needs to be reassigned after the prospect becomes a customer.

How to change the customer

  1. Open the quote from Operations › Quotes and go to its Details page.
  2. Find the Customer field in the quote header — it appears as a dropdown showing the current customer.
  3. Select a different customer from the dropdown.
  4. A confirmation banner appears: "Change customer to [Name]?" — click Save to confirm or Cancel to revert to the original.

Understanding the Pricing Breakdown

On the Quote Details page, a full pricing breakdown section shows exactly how the grand total was calculated. This transparency is useful when explaining pricing to customers and when reviewing whether your rates are covering costs. The breakdown includes:

  • Material Costs — powder and consumables cost based on surface area and the configured cost-per-sq-ft rate.
  • Shop Supplies — a small percentage of material and labor costs covering miscellaneous shop consumables (tape, abrasives, etc.).
  • Labor Costs — base labor calculated from estimated job minutes. Sandblasting prep is charged at 1.5× the standard labor rate; masking at 0.5×. Additional coats beyond the first are charged at the configured additional coat labor percentage.
  • Equipment Costs — hourly rates for the curing oven, sandblaster, and coating booth, applied for the estimated time each piece of equipment is in use.
  • Complexity Adjustment — a percentage added based on the item's complexity rating (Simple, Moderate, Complex, or Extreme). Simple items have no adjustment; Extreme items can add 25% or more.
  • General Markup — your configured profit percentage applied to the cost subtotal. The exact formula depends on the Pricing Mode set in Company Settings: Markup on Materials adds the percentage on top of costs; Target Margin on Total Cost back-calculates price from a gross-margin target.
  • Rush Charge — applied automatically to jobs with Rush or Urgent priority, either as a percentage or a fixed amount depending on your settings.
  • Pricing Tier Discount — if the customer has a pricing tier assigned (e.g., Preferred Shop — 10% off), the discount is shown as a line item reduction. See Hide Discount from Customer below to control whether this line appears on the customer-facing PDF.
  • Tax — the configured tax rate applied to the final subtotal. Zero for tax-exempt customers.
  • Grand Total — the amount the customer will be invoiced.

Per-Item Cost Breakdown

Each line item on the Quote Details page can be expanded to show a cost breakdown for that individual item — click the row to open it. The per-item breakdown shows how material, labor, equipment, complexity, and markup were calculated for that specific piece. This is useful for spotting underpriced items or understanding where costs are concentrated across a multi-item quote.

Hide Discount from Customer

When creating or editing a quote, you can check Hide Discount from Customer. When this option is enabled:

  • The pricing tier discount line is not shown on the customer-facing quote PDF or on the online approval portal.
  • The discount is still applied to the total — the customer pays the discounted price, they just don’t see the discount as a separate line item.
  • The full breakdown (including the discount) remains visible to your staff on the internal Quote Details page.

Use this when you want to honor a negotiated rate or volume discount without advertising your tier structure to the customer.

Revision History

Every change made to a quote after it is created is recorded in a Revision History timeline at the bottom of the Quote Details page. The timeline groups changes from the same save into a single entry so you can scan what changed in each revision at a glance.

What is tracked

  • Total price changes — whenever a save changes the grand total, the old and new amounts appear as a badge on the revision entry.
  • Status changes — every status transition (Draft → Sent, Sent → Approved, etc.) is recorded with the old and new status names.
  • Sent events — each time a quote email is sent or resent to a customer, a “Sent to customer” entry is added showing the recipient email address.
  • Approval — when a quote is approved (by staff or by the customer via the approval portal), the approver’s name is recorded.
  • Line item changes — items added, removed, or modified (description, quantity, unit price, surface area) are each logged.
  • Field edits — changes to quote date, expiration date, terms, notes, tax percent, and discount are tracked individually.

Reading the timeline

Each timeline entry shows an icon indicating the type of event:

  • Blue envelope — quote was emailed to the customer.
  • Green check — quote was approved.
  • Red X — quote was rejected or declined.
  • Purple arrow — quote was converted to a job.
  • Grey pencil — general edit (field or line item changes).

If the total price changed in a revision, a badge showing old → new appears inline in the revision header so pricing history is visible without expanding the detail lines.

@{ await Html.RenderPartialAsync("_HelpNav"); }