Sweep all .cshtml files for encoding corruption; add pre-commit guard
Replace all corruption variants with HTML entities across 226 view files: - 3-char UTF-8-as-Win1252 sequences (ae-corruption) - Standalone smart/curly quotes that break C# Razor expressions - Partially re-corrupted variants where the 3rd byte was normalised to ASCII tools/Fix-Encoding.ps1: re-runnable sweep; uses [char] code points so the script itself never contains a literal non-ASCII character; supports -DryRun .githooks/pre-commit: blocks commits containing the ae-corruption byte signature (xc3xa2xe2x82xac); git core.hooksPath = .githooks so the hook is repo-committed and active for all future work on this machine. Build clean; 225 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,7 @@
|
||||
<p>
|
||||
When you make a payment to a vendor, you record it against the bill and the balance reduces.
|
||||
This gives you a clear, real-time picture of your upcoming financial obligations and helps you
|
||||
avoid late payments — and the late fees or strained vendor relationships that come with them.
|
||||
avoid late payments — and the late fees or strained vendor relationships that come with them.
|
||||
</p>
|
||||
<p>
|
||||
Bills can be created manually or generated automatically from a received Purchase Order.
|
||||
@@ -46,14 +46,14 @@
|
||||
<p>
|
||||
The fastest and most accurate way to create a bill is from a received Purchase Order. Open the
|
||||
received PO and click <strong>Create Bill</strong>. The system generates a bill pre-filled with
|
||||
all line items, quantities, and prices from the PO — linked to the vendor and expense accounts
|
||||
all line items, quantities, and prices from the PO — linked to the vendor and expense accounts
|
||||
automatically. See the <a asp-controller="Help" asp-action="PurchaseOrders">Purchase Orders help page</a>
|
||||
for step-by-step instructions.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Manually</h3>
|
||||
<p>
|
||||
To create a bill that is not linked to a PO — for example, a utility bill, a service invoice,
|
||||
To create a bill that is not linked to a PO — for example, a utility bill, a service invoice,
|
||||
or a vendor charge that arrived without a matching order:
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
@@ -64,8 +64,8 @@
|
||||
<li class="mb-2">
|
||||
Add one or more <strong>line items</strong>:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Expense Account</strong> — the accounting category this cost belongs to (e.g., Cost of Goods Sold, Shop Supplies, Equipment Maintenance).</li>
|
||||
<li><strong>Description</strong> — a brief note about what this line covers.</li>
|
||||
<li><strong>Expense Account</strong> — the accounting category this cost belongs to (e.g., Cost of Goods Sold, Shop Supplies, Equipment Maintenance).</li>
|
||||
<li><strong>Description</strong> — a brief note about what this line covers.</li>
|
||||
<li><strong>Quantity</strong> and <strong>Unit Price</strong>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -129,8 +129,8 @@
|
||||
<i class="bi bi-check-circle text-primary me-2"></i>Marking a Bill as Open
|
||||
</h2>
|
||||
<p>
|
||||
When you have verified that a bill is accurate — it matches the goods you received and the
|
||||
prices you agreed on — you mark it as Open to post it to your AP ledger.
|
||||
When you have verified that a bill is accurate — it matches the goods you received and the
|
||||
prices you agreed on — you mark it as Open to post it to your AP ledger.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Open the Draft bill from <strong>Accounting › Bills</strong>.</li>
|
||||
@@ -160,7 +160,7 @@
|
||||
<i class="bi bi-cash-coin text-primary me-2"></i>Recording a Payment
|
||||
</h2>
|
||||
<p>
|
||||
When you pay a vendor — whether in full or as a partial payment — you record the payment against
|
||||
When you pay a vendor — whether in full or as a partial payment — you record the payment against
|
||||
the open bill. The system supports multiple partial payments on a single bill.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
@@ -169,11 +169,11 @@
|
||||
<li class="mb-2">
|
||||
Enter the payment details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Amount</strong> — how much you are paying now. Can be less than the full balance for partial payments.</li>
|
||||
<li><strong>Payment Method</strong> — Check, ACH / Bank Transfer, Credit Card, Cash, or Wire Transfer.</li>
|
||||
<li><strong>Payment Date</strong> — the date the payment was made or will be made.</li>
|
||||
<li><strong>Reference Number</strong> — check number, wire confirmation, or ACH batch ID. Always fill this in for non-cash payments to simplify reconciliation.</li>
|
||||
<li><strong>Notes</strong> — any additional information about this payment.</li>
|
||||
<li><strong>Amount</strong> — how much you are paying now. Can be less than the full balance for partial payments.</li>
|
||||
<li><strong>Payment Method</strong> — Check, ACH / Bank Transfer, Credit Card, Cash, or Wire Transfer.</li>
|
||||
<li><strong>Payment Date</strong> — the date the payment was made or will be made.</li>
|
||||
<li><strong>Reference Number</strong> — check number, wire confirmation, or ACH batch ID. Always fill this in for non-cash payments to simplify reconciliation.</li>
|
||||
<li><strong>Notes</strong> — any additional information about this payment.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Click <strong>Save Payment</strong>.</li>
|
||||
@@ -197,7 +197,7 @@
|
||||
<li class="mb-2">Go to <strong>Accounting › Bills</strong> and click <strong>Scan Receipt</strong>.</li>
|
||||
<li class="mb-2">Upload a photo (JPG/PNG) or a PDF of the vendor's invoice.</li>
|
||||
<li class="mb-2">The AI reads the document and pre-fills the vendor, bill date, line items, and amounts into a new draft bill.</li>
|
||||
<li class="mb-2">Review the extracted data — correct any fields that were misread — and save the bill.</li>
|
||||
<li class="mb-2">Review the extracted data — correct any fields that were misread — and save the bill.</li>
|
||||
</ol>
|
||||
<p>
|
||||
The uploaded file is automatically attached to the bill so you always have the original
|
||||
@@ -245,13 +245,13 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Vendor name</strong> and detected frequency (monthly, quarterly, biannual, annual).</li>
|
||||
<li class="mb-1"><strong>Typical amount</strong> — the usual charge from that vendor.</li>
|
||||
<li class="mb-1"><strong>Next expected date</strong> — Claude's estimate of when the next bill is likely to arrive.</li>
|
||||
<li class="mb-1"><strong>Confidence badge</strong> — High (4+ consistent occurrences), Medium (2–3 occurrences or variable timing), Low (weak pattern, worth monitoring).</li>
|
||||
<li class="mb-1"><strong>Suggested action</strong> — for example, "Set a monthly reminder for this bill."</li>
|
||||
<li class="mb-1"><strong>Typical amount</strong> — the usual charge from that vendor.</li>
|
||||
<li class="mb-1"><strong>Next expected date</strong> — Claude's estimate of when the next bill is likely to arrive.</li>
|
||||
<li class="mb-1"><strong>Confidence badge</strong> — High (4+ consistent occurrences), Medium (2–3 occurrences or variable timing), Low (weak pattern, worth monitoring).</li>
|
||||
<li class="mb-1"><strong>Suggested action</strong> — for example, "Set a monthly reminder for this bill."</li>
|
||||
</ul>
|
||||
<p>
|
||||
This is useful for cash flow planning — knowing that a $1,200 electricity bill arrives on the
|
||||
This is useful for cash flow planning — knowing that a $1,200 electricity bill arrives on the
|
||||
15th every month, or that your insurance renews every January, lets you reserve funds in advance
|
||||
and avoid surprises. High-confidence patterns are reliable enough to act on; Low-confidence
|
||||
patterns are worth keeping an eye on but should not be treated as certain.
|
||||
@@ -261,7 +261,7 @@
|
||||
<div>
|
||||
Recurring bill detection requires at least 2 occurrences of a vendor bill at a similar
|
||||
interval to detect a pattern. Shops with less than 2 months of history will see few or no
|
||||
results. The scan covers bills only — direct expenses are not included.
|
||||
results. The scan covers bills only — direct expenses are not included.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -271,17 +271,17 @@
|
||||
<i class="bi bi-folder2-open text-primary me-2"></i>Expense Accounts
|
||||
</h2>
|
||||
<p>
|
||||
Each line item on a bill must be assigned to an <strong>expense account</strong> — an accounting
|
||||
Each line item on a bill must be assigned to an <strong>expense account</strong> — an accounting
|
||||
category that determines where the cost appears in your financial reports. Common expense accounts
|
||||
used in a powder coating shop include:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Cost of Goods Sold (COGS)</strong> — raw materials, powder coatings, and consumables that go directly into jobs.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — items used in the shop that are not directly tied to a specific job (masking tape, gloves, cleaning solvents).</li>
|
||||
<li class="mb-1"><strong>Equipment Maintenance</strong> — service, repairs, and parts for your oven, sandblaster, and coating booths.</li>
|
||||
<li class="mb-1"><strong>Utilities</strong> — gas, electricity, and water bills that power the shop.</li>
|
||||
<li class="mb-1"><strong>Rent / Occupancy</strong> — monthly rent or lease payments for your shop premises.</li>
|
||||
<li class="mb-1"><strong>Operating Expenses</strong> — general overhead that does not fit another specific category.</li>
|
||||
<li class="mb-1"><strong>Cost of Goods Sold (COGS)</strong> — raw materials, powder coatings, and consumables that go directly into jobs.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — items used in the shop that are not directly tied to a specific job (masking tape, gloves, cleaning solvents).</li>
|
||||
<li class="mb-1"><strong>Equipment Maintenance</strong> — service, repairs, and parts for your oven, sandblaster, and coating booths.</li>
|
||||
<li class="mb-1"><strong>Utilities</strong> — gas, electricity, and water bills that power the shop.</li>
|
||||
<li class="mb-1"><strong>Rent / Occupancy</strong> — monthly rent or lease payments for your shop premises.</li>
|
||||
<li class="mb-1"><strong>Operating Expenses</strong> — general overhead that does not fit another specific category.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The <strong>vendor's default expense account</strong> is set on the vendor record and pre-fills
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The Customer Intake Kiosk lets walk-in customers fill out their own intake form on a front-desk tablet
|
||||
— no staff assistance required. When they're done, a <strong>customer record</strong> is automatically
|
||||
— no staff assistance required. When they're done, a <strong>customer record</strong> is automatically
|
||||
created (or matched to an existing one), a <strong>Draft Quote or Pending Job</strong> is created
|
||||
depending on your setting, and your team receives an in-app notification.
|
||||
</p>
|
||||
@@ -45,7 +45,7 @@
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
On the tablet, open a browser and navigate to <code>/Kiosk/Welcome</code>. You'll see your
|
||||
company logo and a "Ready" indicator — the tablet is now in kiosk mode.
|
||||
company logo and a "Ready" indicator — the tablet is now in kiosk mode.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Add to Home Screen</strong> on iOS/Android for a full-screen, app-like experience that
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">In-Person (tablet at front desk)</h3>
|
||||
<ol>
|
||||
<li class="mb-1">The tablet sits on the Welcome screen — the customer sees your logo and a "Ready" status dot.</li>
|
||||
<li class="mb-1">The tablet sits on the Welcome screen — the customer sees your logo and a "Ready" status dot.</li>
|
||||
<li class="mb-1">A staff member clicks <strong>Start Intake</strong> on the Dashboard (in the Kiosk card).</li>
|
||||
<li class="mb-1">The tablet detects the new session within 3 seconds and automatically navigates to the intake form.</li>
|
||||
<li class="mb-1">The customer fills out <strong>3 steps</strong>: Contact info → Job description → Terms & signature.</li>
|
||||
@@ -85,7 +85,7 @@
|
||||
<li class="mb-1">Or use the <strong>Send Intake Link</strong> button on the Dashboard Kiosk card.</li>
|
||||
<li class="mb-1">Enter the customer's email address and send.</li>
|
||||
<li class="mb-1">The customer receives an email with a secure link and completes the same 3-step form on their own device.</li>
|
||||
<li class="mb-1">Remote sessions don't require a drawn signature — a checkbox agreement is used instead.</li>
|
||||
<li class="mb-1">Remote sessions don't require a drawn signature — a checkbox agreement is used instead.</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
@@ -99,12 +99,12 @@
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Create a Quote</strong> (default) — a Draft quote is created for staff to review and price
|
||||
<strong>Create a Quote</strong> (default) — a Draft quote is created for staff to review and price
|
||||
before work begins. The terms shown to the customer will say "subject to a formal quote." Use this
|
||||
if you price after seeing the parts.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Create a Job</strong> — a Pending job is created immediately. The terms will say "a team
|
||||
<strong>Create a Job</strong> — a Pending job is created immediately. The terms will say "a team
|
||||
member will reach out about pricing." Use this if you price on the spot and want the work order
|
||||
ready right away.
|
||||
</li>
|
||||
@@ -117,16 +117,16 @@
|
||||
</h2>
|
||||
<p>When a customer submits their intake form, the system automatically:</p>
|
||||
<ul>
|
||||
<li><strong>Matches or creates a Customer</strong> — searches by email first, then phone. If no match, a new non-commercial customer record is created.</li>
|
||||
<li><strong>Matches or creates a Customer</strong> — searches by email first, then phone. If no match, a new non-commercial customer record is created.</li>
|
||||
<li>
|
||||
<strong>Creates a Draft Quote or Pending Job</strong> — depending on your
|
||||
<strong>Creates a Draft Quote or Pending Job</strong> — depending on your
|
||||
<a href="/CompanySettings?tab=kiosk">Kiosk Output Setting</a>. Quote mode creates a Draft quote
|
||||
(Normal priority); Job mode creates a Pending job with the customer's description and intake source
|
||||
in Special Instructions.
|
||||
</li>
|
||||
<li><strong>Applies SMS consent</strong> — if the customer opted in, their customer record is updated with <code>NotifyBySms = true</code> and the consent timestamp (TCPA-compliant).</li>
|
||||
<li><strong>Applies SMS consent</strong> — if the customer opted in, their customer record is updated with <code>NotifyBySms = true</code> and the consent timestamp (TCPA-compliant).</li>
|
||||
<li>
|
||||
<strong>Fires an in-app notification</strong> — your team's notification bell shows
|
||||
<strong>Fires an in-app notification</strong> — your team's notification bell shows
|
||||
"Walk-in Intake Submitted" (or "Remote Intake Submitted" for remote sessions) with a link to
|
||||
the Intakes page.
|
||||
</li>
|
||||
@@ -147,9 +147,9 @@
|
||||
<li>Job description snippet</li>
|
||||
<li>Session type (In-Person or Remote) and status badge</li>
|
||||
<li>SMS opt-in indicator</li>
|
||||
<li><strong>View Quote</strong> button — appears when the kiosk is set to Quote mode; opens the auto-created draft quote</li>
|
||||
<li><strong>View Job</strong> button — appears when the kiosk is set to Job mode; opens the auto-created job</li>
|
||||
<li><strong>Customer</strong> button — opens the matched or created customer record</li>
|
||||
<li><strong>View Quote</strong> button — appears when the kiosk is set to Quote mode; opens the auto-created draft quote</li>
|
||||
<li><strong>View Job</strong> button — appears when the kiosk is set to Job mode; opens the auto-created job</li>
|
||||
<li><strong>Customer</strong> button — opens the matched or created customer record</li>
|
||||
</ul>
|
||||
<div class="alert alert-info alert-permanent">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
@@ -164,23 +164,23 @@
|
||||
<i class="bi bi-exclamation-triangle text-primary me-2"></i>Troubleshooting
|
||||
</h2>
|
||||
<dl>
|
||||
<dt>Kiosk Welcome screen shows "Connection issue — retrying…"</dt>
|
||||
<dd class="mb-3">The tablet can't reach the server. Check the tablet's Wi-Fi connection. Once connectivity is restored the status dot automatically turns green — no refresh needed.</dd>
|
||||
<dt>Kiosk Welcome screen shows "Connection issue — retrying…"</dt>
|
||||
<dd class="mb-3">The tablet can't reach the server. Check the tablet's Wi-Fi connection. Once connectivity is restored the status dot automatically turns green — no refresh needed.</dd>
|
||||
|
||||
<dt>Kiosk doesn't respond when staff clicks Start Intake</dt>
|
||||
<dd class="mb-3">The tablet polls every 3 seconds. Wait up to 3 seconds after clicking Start Intake. If it still doesn't respond, reload the Welcome page on the tablet. Make sure the tablet is on the same domain as the server (use HTTPS).</dd>
|
||||
|
||||
<dt>The tablet shows the wrong company logo or no logo</dt>
|
||||
<dd class="mb-3">Upload your company logo at Settings → Company Settings → Logo. The kiosk reads your logo directly — no separate kiosk logo setting is needed.</dd>
|
||||
<dd class="mb-3">Upload your company logo at Settings → Company Settings → Logo. The kiosk reads your logo directly — no separate kiosk logo setting is needed.</dd>
|
||||
|
||||
<dt>Signature pad doesn't work on the tablet</dt>
|
||||
<dd class="mb-3">Use a capacitive stylus or fingertip — the signature pad requires touch input. Make sure the browser isn't in desktop mode (check "Request Desktop Site" is off). The signature is only required for In-Person sessions.</dd>
|
||||
<dd class="mb-3">Use a capacitive stylus or fingertip — the signature pad requires touch input. Make sure the browser isn't in desktop mode (check "Request Desktop Site" is off). The signature is only required for In-Person sessions.</dd>
|
||||
|
||||
<dt>Submission fails — no job or customer created</dt>
|
||||
<dt>Submission fails — no job or customer created</dt>
|
||||
<dd class="mb-3">This usually means Seed Data hasn't been run for your company. Ask your administrator to go to Platform Management → Seed Data and run the seed. This creates the required job status and priority lookup rows.</dd>
|
||||
|
||||
<dt>AI quote on the quote wizard times out on mobile</dt>
|
||||
<dd class="mb-3">Photos are automatically compressed before upload. If it still times out, your connection may be slow — the spinner will say "Still analyzing…" if it's taking longer than 30 seconds. Try again on a stronger connection.</dd>
|
||||
<dd class="mb-3">Photos are automatically compressed before upload. If it still times out, your connection may be slow — the spinner will say "Still analyzing…" if it's taking longer than 30 seconds. Try again on a stronger connection.</dd>
|
||||
</dl>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<p>
|
||||
The Customers section is the starting point for all work in the shop. Every quote, job, and invoice
|
||||
belongs to a customer record. Keeping your customer list accurate and up to date ensures you can
|
||||
quickly pull up a customer's full history — all their past jobs, outstanding quotes, and unpaid
|
||||
quickly pull up a customer's full history — all their past jobs, outstanding quotes, and unpaid
|
||||
invoices in one place.
|
||||
</p>
|
||||
<p>
|
||||
@@ -49,7 +49,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text small mb-0">
|
||||
Use this for businesses — auto body shops, fabricators, manufacturers, or any company
|
||||
Use this for businesses — auto body shops, fabricators, manufacturers, or any company
|
||||
that sends you work regularly. Commercial customers can have a <strong>pricing tier</strong>
|
||||
applied (e.g., volume discounts) and a <strong>credit limit</strong> set. They typically
|
||||
have a company name in addition to a contact person.
|
||||
@@ -64,7 +64,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text small mb-0">
|
||||
Use this for individuals — homeowners who bring in patio furniture, hobbyists with
|
||||
Use this for individuals — homeowners who bring in patio furniture, hobbyists with
|
||||
motorcycle parts, or anyone who is not representing a business. Non-commercial customers
|
||||
typically do not have a company name and are priced at standard retail rates.
|
||||
</p>
|
||||
@@ -81,17 +81,17 @@
|
||||
<p>Follow these steps to add a new customer:</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Go to <strong>Operations › Customers</strong> and click the <strong>New Customer</strong> button in the top-right corner.</li>
|
||||
<li class="mb-2">Choose the <strong>Customer Type</strong> — Commercial or Non-Commercial.</li>
|
||||
<li class="mb-2">Choose the <strong>Customer Type</strong> — Commercial or Non-Commercial.</li>
|
||||
<li class="mb-2">
|
||||
Fill in the customer details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Company Name</strong> — required for Commercial customers.</li>
|
||||
<li><strong>Contact Name</strong> — the person you deal with day to day.</li>
|
||||
<li><strong>Email</strong> — used for quote and invoice notifications.</li>
|
||||
<li><strong>Phone</strong> — primary contact number.</li>
|
||||
<li><strong>Mobile Phone</strong> — used for SMS notifications. Required if you want to text this customer.</li>
|
||||
<li><strong>SMS Opt-In</strong> — check this only after you have obtained the customer's consent to receive text messages. Visible only when SMS is enabled for your company.</li>
|
||||
<li><strong>Address</strong> — billing and shipping address fields.</li>
|
||||
<li><strong>Company Name</strong> — required for Commercial customers.</li>
|
||||
<li><strong>Contact Name</strong> — the person you deal with day to day.</li>
|
||||
<li><strong>Email</strong> — used for quote and invoice notifications.</li>
|
||||
<li><strong>Phone</strong> — primary contact number.</li>
|
||||
<li><strong>Mobile Phone</strong> — used for SMS notifications. Required if you want to text this customer.</li>
|
||||
<li><strong>SMS Opt-In</strong> — check this only after you have obtained the customer's consent to receive text messages. Visible only when SMS is enabled for your company.</li>
|
||||
<li><strong>Address</strong> — billing and shipping address fields.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">For Commercial customers, optionally set a <strong>Pricing Tier</strong> and <strong>Credit Limit</strong>.</li>
|
||||
@@ -136,24 +136,24 @@
|
||||
</p>
|
||||
<p>The details page shows:</p>
|
||||
<ul>
|
||||
<li><strong>Contact information</strong> — name, email, phone, and address.</li>
|
||||
<li><strong>Account summary</strong> — current balance, credit limit, and pricing tier.</li>
|
||||
<li><strong>Contact information</strong> — name, email, phone, and address.</li>
|
||||
<li><strong>Account summary</strong> — current balance, credit limit, and pricing tier.</li>
|
||||
<li>
|
||||
<strong>Jobs tab</strong> — every job created for this customer, with status and date. Click
|
||||
<strong>Jobs tab</strong> — every job created for this customer, with status and date. Click
|
||||
a job number to open it.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Quotes tab</strong> — all quotes sent to this customer, including pending and
|
||||
<strong>Quotes tab</strong> — all quotes sent to this customer, including pending and
|
||||
historical quotes. Click a quote number to open it.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Invoices tab</strong> — all invoices with payment status. Quickly see who owes money
|
||||
<strong>Invoices tab</strong> — all invoices with payment status. Quickly see who owes money
|
||||
and how much.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Deposits tab</strong> — all deposits recorded for this customer across any job or quote.
|
||||
<strong>Deposits tab</strong> — all deposits recorded for this customer across any job or quote.
|
||||
</li>
|
||||
<li><strong>Notes</strong> — any notes saved against the customer record.</li>
|
||||
<li><strong>Notes</strong> — any notes saved against the customer record.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
<p>
|
||||
When a customer's outstanding balance approaches or exceeds their credit limit, the system displays
|
||||
a warning flag on their record and on any new jobs or invoices you try to create for them. This is
|
||||
a visual warning only — the system does not automatically block new work — but it gives your team
|
||||
a visual warning only — the system does not automatically block new work — but it gives your team
|
||||
a clear signal to follow up on payment before starting more jobs.
|
||||
</p>
|
||||
<p>
|
||||
@@ -189,7 +189,7 @@
|
||||
</p>
|
||||
<p>
|
||||
When a tax-exempt customer is selected on a new quote or invoice, the tax rate automatically
|
||||
defaults to <strong>0%</strong> — no manual adjustment needed. Tax-exempt customers are marked
|
||||
defaults to <strong>0%</strong> — no manual adjustment needed. Tax-exempt customers are marked
|
||||
with a ★ in the customer dropdown when creating quotes and invoices so your team can spot them
|
||||
at a glance.
|
||||
</p>
|
||||
|
||||
@@ -20,14 +20,14 @@
|
||||
<i class="bi bi-info-circle text-primary me-2"></i>Overview
|
||||
</h2>
|
||||
<p>
|
||||
The Equipment module lets you keep a full register of every piece of machinery in your shop —
|
||||
The Equipment module lets you keep a full register of every piece of machinery in your shop —
|
||||
curing ovens, sandblasters, coating booths, compressors, conveyors, and anything else you
|
||||
rely on to do the work. Each equipment record includes its current operating status and a
|
||||
complete maintenance log.
|
||||
</p>
|
||||
<p>
|
||||
Keeping this information up to date pays off in two ways. First, your team always knows
|
||||
which machines are available and which are down for service — preventing jobs from being
|
||||
which machines are available and which are down for service — preventing jobs from being
|
||||
scheduled on equipment that is not ready. Second, the maintenance history gives you a
|
||||
paper trail for warranty claims, insurance, and resale.
|
||||
</p>
|
||||
@@ -46,14 +46,14 @@
|
||||
<li class="mb-2">
|
||||
Fill in the equipment details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Name</strong> — a short, descriptive name (e.g., "Main Curing Oven" or "Blast Cabinet #2").</li>
|
||||
<li><strong>Model / Serial Number</strong> — from the manufacturer's plate on the machine. Useful for warranty and service calls.</li>
|
||||
<li><strong>Manufacturer</strong> — who made the equipment.</li>
|
||||
<li><strong>Purchase Date</strong> — when your shop acquired it.</li>
|
||||
<li><strong>Last Service Date</strong> — the date it was last professionally serviced or inspected.</li>
|
||||
<li><strong>Next Service Due</strong> — when the next scheduled service is due. This triggers alerts on the Dashboard.</li>
|
||||
<li><strong>Location</strong> — where in the shop the equipment is located (e.g., "Bay 1", "Back Room").</li>
|
||||
<li><strong>Notes</strong> — any important operational notes, quirks, or warnings for the team.</li>
|
||||
<li><strong>Name</strong> — a short, descriptive name (e.g., "Main Curing Oven" or "Blast Cabinet #2").</li>
|
||||
<li><strong>Model / Serial Number</strong> — from the manufacturer's plate on the machine. Useful for warranty and service calls.</li>
|
||||
<li><strong>Manufacturer</strong> — who made the equipment.</li>
|
||||
<li><strong>Purchase Date</strong> — when your shop acquired it.</li>
|
||||
<li><strong>Last Service Date</strong> — the date it was last professionally serviced or inspected.</li>
|
||||
<li><strong>Next Service Due</strong> — when the next scheduled service is due. This triggers alerts on the Dashboard.</li>
|
||||
<li><strong>Location</strong> — where in the shop the equipment is located (e.g., "Bay 1", "Back Room").</li>
|
||||
<li><strong>Notes</strong> — any important operational notes, quirks, or warnings for the team.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Set the initial <strong>Status</strong> (see below).</li>
|
||||
@@ -67,7 +67,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
Every piece of equipment has a status that reflects its current condition. Update the status
|
||||
whenever the equipment's situation changes — this keeps the Dashboard accurate and lets
|
||||
whenever the equipment's situation changes — this keeps the Dashboard accurate and lets
|
||||
supervisors quickly see what is available.
|
||||
</p>
|
||||
|
||||
@@ -146,14 +146,14 @@
|
||||
<li class="mb-2">
|
||||
Fill in the details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Task Description</strong> — what was done or needs to be done (e.g., "Replace heating element", "Annual burner service", "Belt tension check").</li>
|
||||
<li><strong>Type</strong> — choose <strong>Scheduled</strong> for planned preventive maintenance, or <strong>Corrective</strong> for repairs to fix a problem.</li>
|
||||
<li><strong>Scheduled Date</strong> — when the task is planned for (or when it was done).</li>
|
||||
<li><strong>Completion Date</strong> — leave blank if the task has not been done yet.</li>
|
||||
<li><strong>Cost</strong> — what the service cost (parts, labor, contractor fees).</li>
|
||||
<li><strong>Priority</strong> — how urgent this task is (see below).</li>
|
||||
<li><strong>Assigned To</strong> — the shop worker responsible for this task.</li>
|
||||
<li><strong>Notes</strong> — parts used, observations, instructions for next time.</li>
|
||||
<li><strong>Task Description</strong> — what was done or needs to be done (e.g., "Replace heating element", "Annual burner service", "Belt tension check").</li>
|
||||
<li><strong>Type</strong> — choose <strong>Scheduled</strong> for planned preventive maintenance, or <strong>Corrective</strong> for repairs to fix a problem.</li>
|
||||
<li><strong>Scheduled Date</strong> — when the task is planned for (or when it was done).</li>
|
||||
<li><strong>Completion Date</strong> — leave blank if the task has not been done yet.</li>
|
||||
<li><strong>Cost</strong> — what the service cost (parts, labor, contractor fees).</li>
|
||||
<li><strong>Priority</strong> — how urgent this task is (see below).</li>
|
||||
<li><strong>Assigned To</strong> — the shop worker responsible for this task.</li>
|
||||
<li><strong>Notes</strong> — parts used, observations, instructions for next time.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Click <strong>Save</strong>.</li>
|
||||
@@ -167,7 +167,7 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Recurring Maintenance</h3>
|
||||
<p>
|
||||
For maintenance that happens on a regular schedule (e.g., monthly filter cleaning, quarterly
|
||||
burner service), set the <strong>Recurrence</strong> field when creating the record — choose
|
||||
burner service), set the <strong>Recurrence</strong> field when creating the record — choose
|
||||
from Daily, Weekly, Monthly, Quarterly, or Annually. When you complete the record, the system
|
||||
automatically creates the next maintenance record at the appropriate interval. This ensures
|
||||
preventive maintenance tasks never fall through the cracks.
|
||||
@@ -248,7 +248,7 @@
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Go to the Oven Scheduler from the sidebar.</li>
|
||||
<li class="mb-2">Select the oven you are loading.</li>
|
||||
<li class="mb-2">Add jobs to the batch — the remaining capacity updates as you add items.</li>
|
||||
<li class="mb-2">Add jobs to the batch — the remaining capacity updates as you add items.</li>
|
||||
<li class="mb-2">Progress batches through Loading → In Progress → Completed as work is done.</li>
|
||||
</ol>
|
||||
<p>
|
||||
@@ -262,7 +262,7 @@
|
||||
<i class="bi bi-person-gear text-primary me-2"></i>Assigning Maintenance Tasks
|
||||
</h2>
|
||||
<p>
|
||||
Each maintenance record can be assigned to one shop worker — typically someone in the
|
||||
Each maintenance record can be assigned to one shop worker — typically someone in the
|
||||
<strong>Maintenance</strong> role, or a <strong>Supervisor</strong> who will coordinate
|
||||
with an outside service technician.
|
||||
</p>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
This system is purpose-built to run a powder coating shop from end to end. At its core it helps you
|
||||
track every job that comes through the door — from the first quote all the way through coating,
|
||||
track every job that comes through the door — from the first quote all the way through coating,
|
||||
curing, quality check, and final delivery. Along the way it manages your customers, vendors,
|
||||
inventory of powders and supplies, shop equipment, and the workers on your floor.
|
||||
</p>
|
||||
@@ -54,7 +54,7 @@
|
||||
<li class="mb-1">Click <strong>Sign In</strong>. You will land on the Dashboard.</li>
|
||||
</ol>
|
||||
|
||||
<h5 class="fw-semibold">First login — set your permanent password</h5>
|
||||
<h5 class="fw-semibold">First login — set your permanent password</h5>
|
||||
<p>
|
||||
When a new company account is created, the system generates a secure temporary password and emails
|
||||
it to the address used during signup. The first time you log in with that temporary password, you
|
||||
@@ -73,7 +73,7 @@
|
||||
<i class="bi bi-envelope-check-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
<strong>Didn't receive the welcome email?</strong> Check your spam or junk folder first.
|
||||
If it's still not there, contact your company administrator — they can reset your password
|
||||
If it's still not there, contact your company administrator — they can reset your password
|
||||
from the User Management section.
|
||||
</div>
|
||||
</div>
|
||||
@@ -85,7 +85,7 @@
|
||||
instructions in the email. Reset links expire after a short time, so use them promptly.
|
||||
</p>
|
||||
<p>
|
||||
If you do not receive an email or cannot log in, contact your company administrator — they can reset
|
||||
If you do not receive an email or cannot log in, contact your company administrator — they can reset
|
||||
your password from the User Management section.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-0" role="alert">
|
||||
@@ -103,7 +103,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The left sidebar is your main navigation. It is divided into sections so related features are grouped
|
||||
together. Click any item to go to that section. On smaller screens the sidebar collapses — tap the
|
||||
together. Click any item to go to that section. On smaller screens the sidebar collapses — tap the
|
||||
menu icon at the top to open it.
|
||||
</p>
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="bi bi-briefcase me-1 text-primary"></i><strong>Operations</strong></td>
|
||||
<td>Customers, Quotes, Jobs, Invoices, Appointments/Calendar, Job Priority Board, Gift Certificates, and Shop Workers — the day-to-day work of the shop.</td>
|
||||
<td>Customers, Quotes, Jobs, Invoices, Appointments/Calendar, Job Priority Board, Gift Certificates, and Shop Workers — the day-to-day work of the shop.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="bi bi-box-seam me-1 text-primary"></i><strong>Inventory</strong></td>
|
||||
@@ -155,7 +155,7 @@
|
||||
</p>
|
||||
<p>
|
||||
The <strong>notification bell</strong> (<i class="bi bi-bell-fill"></i>) alerts you to customer
|
||||
actions in real time — a quote approved or declined online, an invoice or deposit paid online,
|
||||
actions in real time — a quote approved or declined online, an invoice or deposit paid online,
|
||||
and any platform announcements from the Powder Coating Logix team. A red badge shows the count of
|
||||
unread items. Click the bell to see recent notifications and navigate directly to the related record.
|
||||
Notifications are stored persistently so you will not miss one if you were not logged in when it
|
||||
@@ -170,7 +170,7 @@
|
||||
<p>
|
||||
Every user is assigned a role that controls what they can see and do. Your administrator assigns
|
||||
your role when they create your account. If you cannot access something you expect to, ask your
|
||||
administrator — they may need to update your role.
|
||||
administrator — they may need to update your role.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
@@ -197,7 +197,7 @@
|
||||
<span class="badge bg-warning text-dark">Manager</span>
|
||||
</td>
|
||||
<td>
|
||||
Can manage all operational data — customers, jobs, quotes, invoices, inventory,
|
||||
Can manage all operational data — customers, jobs, quotes, invoices, inventory,
|
||||
equipment, and workers. Can view reports and adjust settings, but cannot manage
|
||||
user accounts or change platform-level configuration.
|
||||
</td>
|
||||
@@ -248,13 +248,13 @@
|
||||
<div>
|
||||
<strong>New to the system?</strong> Use the <a href="/SetupWizard">Setup Wizard</a> to
|
||||
configure your company profile, operating costs, named ovens, and notifications in a guided
|
||||
5-step walkthrough — takes about 5–10 minutes. After the wizard, the Dashboard will show
|
||||
5-step walkthrough — takes about 5–10 minutes. After the wizard, the Dashboard will show
|
||||
a progress checklist to guide you through your first live workflow.
|
||||
</div>
|
||||
</div>
|
||||
<p>
|
||||
If you prefer to configure things manually, or if you are returning to complete partial setup,
|
||||
work through these steps in order. Each step builds on the last — for example, inventory items
|
||||
work through these steps in order. Each step builds on the last — for example, inventory items
|
||||
need vendors before you can record purchases, and jobs need customers before you can create them.
|
||||
</p>
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
<section id="after-the-wizard" class="mb-5">
|
||||
<h2 class="h4 fw-bold border-bottom pb-2 mb-3">
|
||||
<i class="bi bi-rocket-takeoff text-primary me-2"></i>After the Wizard — Your First Workflow
|
||||
<i class="bi bi-rocket-takeoff text-primary me-2"></i>After the Wizard — Your First Workflow
|
||||
</h2>
|
||||
<p>
|
||||
Once the Setup Wizard is complete, two things appear on your Dashboard to guide you through your
|
||||
@@ -339,13 +339,13 @@
|
||||
|
||||
<h5 class="fw-semibold">Guided Activation</h5>
|
||||
<p>
|
||||
A banner prompts you to run a short first-workflow walkthrough. Choose a starting path — either
|
||||
A banner prompts you to run a short first-workflow walkthrough. Choose a starting path — either
|
||||
<strong>Quote First</strong> (create a quote, get it approved, convert it to a job) or
|
||||
<strong>Job First</strong> (create a job directly). The system creates a sample customer
|
||||
record for you to use during the walkthrough.
|
||||
</p>
|
||||
<p>
|
||||
After the job is created you are taken to the <strong>Daily Board</strong> — your shop in real
|
||||
After the job is created you are taken to the <strong>Daily Board</strong> — your shop in real
|
||||
time. Every active job appears on the board by stage. The new job is highlighted so you can
|
||||
find it easily. Drag it to its next stage to see how your workflow updates live. Once you have
|
||||
moved the job, the board prompts you to create the invoice when the work is done.
|
||||
@@ -367,7 +367,7 @@
|
||||
<p>
|
||||
Each incomplete step shows a description and a button that takes you directly to the right place.
|
||||
The next recommended step is highlighted. The widget disappears once all six steps are done.
|
||||
You can collapse it using the chevron button — the collapsed state is saved in your browser.
|
||||
You can collapse it using the chevron button — the collapsed state is saved in your browser.
|
||||
</p>
|
||||
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -388,21 +388,21 @@
|
||||
gives your shop floor workers a much better experience:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">Opens full-screen with no browser chrome — feels like a native app.</li>
|
||||
<li class="mb-1">Opens full-screen with no browser chrome — feels like a native app.</li>
|
||||
<li class="mb-1">The camera (used by the inventory label scanner) only asks for permission <strong>once</strong> after installation, instead of every browser session.</li>
|
||||
<li class="mb-1">Faster to launch — one tap from the home screen.</li>
|
||||
<li class="mb-1">Faster to launch — one tap from the home screen.</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-4" role="alert">
|
||||
<i class="bi bi-apple flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
<strong>iPhone / iPad users must use Safari.</strong> Adding to the home screen from Chrome,
|
||||
Firefox, or other iOS browsers creates a regular bookmark that opens in that browser — not
|
||||
Firefox, or other iOS browsers creates a regular bookmark that opens in that browser — not
|
||||
a standalone app. Only Safari on iOS supports the full home screen install.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-apple me-1"></i>iOS (iPhone / iPad) — Safari only</h3>
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-apple me-1"></i>iOS (iPhone / iPad) — Safari only</h3>
|
||||
<ol class="mb-4">
|
||||
<li class="mb-1">Open the app in <strong>Safari</strong>.</li>
|
||||
<li class="mb-1">Tap the <strong>Share</strong> button <i class="bi bi-box-arrow-up"></i> at the bottom of the screen.</li>
|
||||
@@ -411,10 +411,10 @@
|
||||
<li class="mb-1">The app icon appears on your home screen. Tap it to open in full-screen mode.</li>
|
||||
</ol>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-android2 me-1"></i>Android — Chrome</h3>
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-android2 me-1"></i>Android — Chrome</h3>
|
||||
<ol class="mb-4">
|
||||
<li class="mb-1">Open the app in <strong>Chrome</strong>.</li>
|
||||
<li class="mb-1">Chrome may show an <strong>Install App</strong> banner at the bottom automatically — tap it to install.</li>
|
||||
<li class="mb-1">Chrome may show an <strong>Install App</strong> banner at the bottom automatically — tap it to install.</li>
|
||||
<li class="mb-1">If no banner appears, tap the <strong>menu (⋮)</strong> in the top-right corner and choose <strong>Add to Home Screen</strong> or <strong>Install App</strong>.</li>
|
||||
<li class="mb-1">Confirm and the icon is added to your home screen.</li>
|
||||
</ol>
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="card-title mb-1">Reports</h5>
|
||||
<p class="card-text text-muted small mb-2">Financial summaries, AR aging, job throughput, inventory levels, and equipment status — all in one place.</p>
|
||||
<p class="card-text text-muted small mb-2">Financial summaries, AR aging, job throughput, inventory levels, and equipment status — all in one place.</p>
|
||||
<a asp-controller="Help" asp-action="Reports" class="btn btn-sm btn-outline-primary">Read more <i class="bi bi-arrow-right ms-1"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</p>
|
||||
<p>
|
||||
Keeping inventory accurate matters for two reasons. First, your job and quote pricing is only
|
||||
as accurate as the unit costs stored in inventory — outdated costs lead to under-pricing.
|
||||
as accurate as the unit costs stored in inventory — outdated costs lead to under-pricing.
|
||||
Second, knowing how much powder you have on hand before a job starts prevents the frustrating
|
||||
situation of running out of material mid-job.
|
||||
</p>
|
||||
@@ -45,19 +45,19 @@
|
||||
<li class="mb-2">
|
||||
Fill in the item details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Item Name</strong> — a clear, descriptive name (e.g., "Gloss Black Powder — Tiger Drylac 49/90005").</li>
|
||||
<li><strong>SKU / Part Number</strong> — the manufacturer's part number or your internal SKU.</li>
|
||||
<li><strong>Category</strong> — Powder, Primer, Consumable, Shop Supply, or other category as appropriate.</li>
|
||||
<li><strong>Unit of Measure</strong> — lbs, kg, each, litre, etc.</li>
|
||||
<li><strong>Unit Cost</strong> — your purchase cost per unit. Used in quote and job pricing calculations.</li>
|
||||
<li><strong>Current Quantity on Hand</strong> — the number of units you have right now. This becomes the opening stock level.</li>
|
||||
<li><strong>Reorder Point</strong> — the quantity at which you want to be alerted to reorder. See the Reorder Points section below.</li>
|
||||
<li><strong>Vendor / Supplier</strong> — the vendor you purchase this item from. Linking a vendor lets you quickly see who to call when stock runs low.</li>
|
||||
<li><strong>Item Name</strong> — a clear, descriptive name (e.g., "Gloss Black Powder — Tiger Drylac 49/90005").</li>
|
||||
<li><strong>SKU / Part Number</strong> — the manufacturer's part number or your internal SKU.</li>
|
||||
<li><strong>Category</strong> — Powder, Primer, Consumable, Shop Supply, or other category as appropriate.</li>
|
||||
<li><strong>Unit of Measure</strong> — lbs, kg, each, litre, etc.</li>
|
||||
<li><strong>Unit Cost</strong> — your purchase cost per unit. Used in quote and job pricing calculations.</li>
|
||||
<li><strong>Current Quantity on Hand</strong> — the number of units you have right now. This becomes the opening stock level.</li>
|
||||
<li><strong>Reorder Point</strong> — the quantity at which you want to be alerted to reorder. See the Reorder Points section below.</li>
|
||||
<li><strong>Vendor / Supplier</strong> — the vendor you purchase this item from. Linking a vendor lets you quickly see who to call when stock runs low.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
For powder coatings, the <strong>Coverage Rate</strong> (sq ft per lb) and <strong>Transfer Efficiency %</strong>
|
||||
default to <strong>30 sq ft/lb</strong> and <strong>65%</strong> respectively — typical starting values for most powder
|
||||
default to <strong>30 sq ft/lb</strong> and <strong>65%</strong> respectively — typical starting values for most powder
|
||||
and application setups. Adjust these to match your specific powder and equipment. Both values are used when
|
||||
calculating powder needed on quotes and jobs.
|
||||
</li>
|
||||
@@ -86,12 +86,12 @@
|
||||
<p>
|
||||
Click the <strong>Lookup</strong> button next to the SKU/Part Number field. Type a color name,
|
||||
SKU, or part number and the system searches a built-in catalog of thousands of Prismatic Powders
|
||||
and other manufacturer SKUs. Select a match and the form fills in automatically — item name,
|
||||
and other manufacturer SKUs. Select a match and the form fills in automatically — item name,
|
||||
manufacturer, color code, finish, coverage rate, SDS/TDS links, and cure specifications.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">The catalog only shows products <strong>not already in your inventory</strong>, preventing duplicates. When editing an existing item, its own catalog entry is always shown.</li>
|
||||
<li class="mb-1">If no catalog match is found, the lookup falls back to <strong>AI Lookup</strong> — Claude searches the web for product specs and fills in whatever it can find.</li>
|
||||
<li class="mb-1">If no catalog match is found, the lookup falls back to <strong>AI Lookup</strong> — Claude searches the web for product specs and fills in whatever it can find.</li>
|
||||
<li class="mb-1">If a vendor name is selected in the Vendor field before searching, results are scoped to that vendor first, then broadened automatically if nothing matches.</li>
|
||||
</ul>
|
||||
|
||||
@@ -102,11 +102,11 @@
|
||||
The scanner reads the code and attempts to identify the product:
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-1">If the QR code matches a product in the platform catalog, the form fills in automatically — same as a manual catalog lookup.</li>
|
||||
<li class="mb-1">If the QR code matches a product in the platform catalog, the form fills in automatically — same as a manual catalog lookup.</li>
|
||||
<li class="mb-1">If no catalog match is found, the AI analyzes the label image and fills in whatever details it can extract (color name, SKU, manufacturer, finish).</li>
|
||||
<li class="mb-1">
|
||||
If the scanned product is <strong>already in your inventory</strong>, a prompt appears to
|
||||
<strong>Add Stock</strong> to the existing item instead — enter the quantity received and an
|
||||
<strong>Add Stock</strong> to the existing item instead — enter the quantity received and an
|
||||
optional updated unit cost, then save. No duplicate item is created.
|
||||
</li>
|
||||
</ol>
|
||||
@@ -127,7 +127,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The <strong>quantity on hand</strong> for each item is updated automatically whenever a transaction
|
||||
is recorded — a purchase receipt increases stock, a job consumption decreases it, and a manual
|
||||
is recorded — a purchase receipt increases stock, a job consumption decreases it, and a manual
|
||||
adjustment sets it to the corrected count.
|
||||
</p>
|
||||
<p>
|
||||
@@ -142,8 +142,8 @@
|
||||
A good reorder point accounts for two factors:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Lead time</strong> — how many days it typically takes for your vendor to deliver after you place an order. If lead time is 5 days, your reorder point should cover at least 5 days of usage.</li>
|
||||
<li class="mb-1"><strong>Daily usage rate</strong> — how much of the item you typically consume per day based on your job volume.</li>
|
||||
<li class="mb-1"><strong>Lead time</strong> — how many days it typically takes for your vendor to deliver after you place an order. If lead time is 5 days, your reorder point should cover at least 5 days of usage.</li>
|
||||
<li class="mb-1"><strong>Daily usage rate</strong> — how much of the item you typically consume per day based on your job volume.</li>
|
||||
</ul>
|
||||
<p>
|
||||
For example, if you use 3 lbs of a powder per day and your vendor takes 5 days to deliver, a
|
||||
@@ -163,9 +163,9 @@
|
||||
</p>
|
||||
<p>Click <strong>Stock Adjustment</strong> in the Actions panel and choose one of three modes:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2"><strong>Add Stock</strong> — increases the current quantity by the amount you enter. Use for received goods, returns, or found stock.</li>
|
||||
<li class="mb-2"><strong>Remove Stock</strong> — decreases the current quantity by the amount you enter. Use for waste, spillage, or damage write-offs.</li>
|
||||
<li class="mb-2"><strong>Set Exact</strong> — sets the quantity on hand to the exact number you enter, regardless of the current value. Use after a physical inventory count to correct the balance.</li>
|
||||
<li class="mb-2"><strong>Add Stock</strong> — increases the current quantity by the amount you enter. Use for received goods, returns, or found stock.</li>
|
||||
<li class="mb-2"><strong>Remove Stock</strong> — decreases the current quantity by the amount you enter. Use for waste, spillage, or damage write-offs.</li>
|
||||
<li class="mb-2"><strong>Set Exact</strong> — sets the quantity on hand to the exact number you enter, regardless of the current value. Use after a physical inventory count to correct the balance.</li>
|
||||
</ul>
|
||||
<p>
|
||||
A <strong>reason</strong> is required for every adjustment. Common reasons are listed in the dropdown
|
||||
@@ -230,7 +230,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Job Usage</strong></td>
|
||||
<td>Powder consumed during a job — recorded automatically when actual usage is entered on a job coat.</td>
|
||||
<td>Powder consumed during a job — recorded automatically when actual usage is entered on a job coat.</td>
|
||||
<td class="text-danger fw-semibold">− Decreases</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -268,12 +268,12 @@
|
||||
<p>It has two tabs:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Stock Transactions</strong> — every transaction recorded against your inventory items,
|
||||
<strong>Stock Transactions</strong> — every transaction recorded against your inventory items,
|
||||
showing date, type, quantity (green for additions, red for deductions), unit cost, total cost,
|
||||
running balance after the transaction, and a link to the source Purchase Order if applicable.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Powder Usage by Job</strong> — every instance of powder being consumed on a job coat,
|
||||
<strong>Powder Usage by Job</strong> — every instance of powder being consumed on a job coat,
|
||||
showing the job number (linked to the job), customer, color applied, estimated vs actual pounds
|
||||
used, and the variance. A totals row at the bottom summarises the full filtered selection.
|
||||
</li>
|
||||
@@ -287,7 +287,7 @@
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
To see the history for a single powder, open its Details page and click
|
||||
<strong>View Activity History</strong> — the Inventory Activity page will open pre-filtered
|
||||
<strong>View Activity History</strong> — the Inventory Activity page will open pre-filtered
|
||||
to that item.
|
||||
</div>
|
||||
</div>
|
||||
@@ -299,14 +299,14 @@
|
||||
</h2>
|
||||
<p>
|
||||
Every inventory item has a printable <strong>QR code label</strong>. Stick it on the bag, bin,
|
||||
or shelf and shop floor workers can scan it with their phone to log how much they used —
|
||||
or shelf and shop floor workers can scan it with their phone to log how much they used —
|
||||
without ever touching a desktop.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-4 mb-2">Printing a label</h3>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-1">Open the inventory item's Details page.</li>
|
||||
<li class="mb-1">Click <strong>Print QR Label</strong> in the Actions panel — the label opens in a new tab.</li>
|
||||
<li class="mb-1">Click <strong>Print QR Label</strong> in the Actions panel — the label opens in a new tab.</li>
|
||||
<li class="mb-1">Click <strong>Print Label</strong> and send it to your printer. The label is sized for a standard 3.5″ label and includes the item name, SKU, colour, finish, and manufacturer.</li>
|
||||
</ol>
|
||||
|
||||
@@ -316,9 +316,9 @@
|
||||
<li class="mb-1">
|
||||
<strong>Select a job</strong> (optional but recommended):
|
||||
<ul class="mt-1">
|
||||
<li><em>My Jobs</em> — active jobs assigned to your account appear first.</li>
|
||||
<li><em>Other Jobs</em> — any other open job in the system.</li>
|
||||
<li><em>No Job</em> — log usage without a job reference (e.g. a waste event).</li>
|
||||
<li><em>My Jobs</em> — active jobs assigned to your account appear first.</li>
|
||||
<li><em>Other Jobs</em> — any other open job in the system.</li>
|
||||
<li><em>No Job</em> — log usage without a job reference (e.g. a waste event).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-1">Enter the <strong>quantity</strong> used. A live preview shows what the new stock balance will be.</li>
|
||||
@@ -331,8 +331,8 @@
|
||||
The success screen gives you two options:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Log Another Item for This Job</strong> — returns to the scan page with the same job pre-selected, so you can quickly log the next powder without re-picking the job.</li>
|
||||
<li class="mb-1"><strong>Back to Inventory</strong> or <strong>View Item Details</strong> — returns to a neutral state.</li>
|
||||
<li class="mb-1"><strong>Log Another Item for This Job</strong> — returns to the scan page with the same job pre-selected, so you can quickly log the next powder without re-picking the job.</li>
|
||||
<li class="mb-1"><strong>Back to Inventory</strong> or <strong>View Item Details</strong> — returns to a neutral state.</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -341,7 +341,7 @@
|
||||
Every scan-based usage log is recorded as a <strong>JobUsage</strong> or <strong>Adjustment</strong>
|
||||
transaction and immediately reduces the item's quantity on hand. You can review it on the
|
||||
<a href="/Inventory/Ledger" class="alert-link">Inventory Activity</a> page.
|
||||
The first time a worker scans on a new device they will be asked to log in — after that the
|
||||
The first time a worker scans on a new device they will be asked to log in — after that the
|
||||
browser keeps them signed in.
|
||||
</div>
|
||||
</div>
|
||||
@@ -374,7 +374,7 @@
|
||||
<div>
|
||||
An item continues to show as Low Stock or Out of Stock even after you have placed a Purchase
|
||||
Order, until the goods are physically received and the PO is marked as Received in the system.
|
||||
This is intentional — it reminds you that stock has not yet arrived.
|
||||
This is intentional — it reminds you that stock has not yet arrived.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -428,12 +428,12 @@
|
||||
<li class="mb-2">Go to <strong><a asp-controller="CompanySettings" asp-action="Index">Company Settings</a> › Data Lookups › Inventory Categories</strong>.</li>
|
||||
<li class="mb-2">Find the category that contains your powder coating colors (e.g. "Powder Coatings").</li>
|
||||
<li class="mb-2">Click the edit icon and check the <strong>Is Coating</strong> checkbox.</li>
|
||||
<li class="mb-2">Save. Items in that category will immediately appear in the powder color dropdown on all quotes and jobs — no restart required.</li>
|
||||
<li class="mb-2">Save. Items in that category will immediately appear in the powder color dropdown on all quotes and jobs — no restart required.</li>
|
||||
</ol>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Which categories should have "Is Coating" enabled?</h3>
|
||||
<p>
|
||||
Only categories that contain actual powder coating colors — the materials that go into the oven
|
||||
Only categories that contain actual powder coating colors — the materials that go into the oven
|
||||
and bond to the part. Do <strong>not</strong> enable this on categories for primers, masking
|
||||
supplies, consumables, or equipment. Enabling it on non-coating categories will pollute the
|
||||
color dropdown with irrelevant items and make it harder to find the right powder.
|
||||
@@ -443,7 +443,7 @@
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The "Is Coating" flag also controls where the <strong>sample panel toggle</strong> appears
|
||||
on an item's Details page. The toggle — "I have a swatch/sample of this color" — only
|
||||
on an item's Details page. The toggle — "I have a swatch/sample of this color" — only
|
||||
shows up for items in a coating category, and those items are the ones tracked on the
|
||||
<strong>Sample Panels</strong> page.
|
||||
</div>
|
||||
@@ -459,9 +459,9 @@
|
||||
will be needed before the job begins. This estimate is based on three values:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Surface area</strong> — the total square footage to be coated (entered per item in the job or quote wizard).</li>
|
||||
<li class="mb-1"><strong>Coverage rate</strong> — how many square feet one pound of the selected powder covers (set on the inventory item).</li>
|
||||
<li class="mb-1"><strong>Number of coats</strong> — selected when you add the coating to the item.</li>
|
||||
<li class="mb-1"><strong>Surface area</strong> — the total square footage to be coated (entered per item in the job or quote wizard).</li>
|
||||
<li class="mb-1"><strong>Coverage rate</strong> — how many square feet one pound of the selected powder covers (set on the inventory item).</li>
|
||||
<li class="mb-1"><strong>Number of coats</strong> — selected when you add the coating to the item.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The <strong>Powder Needed</strong> figure appears in the item wizard as you build the quote or job,
|
||||
@@ -486,30 +486,30 @@
|
||||
The AI Price Check reviews every active, priced item in your
|
||||
<a asp-controller="CatalogItems" asp-action="Index">Catalog Items</a> list against your
|
||||
shop's actual operating costs. It estimates a realistic surface area and processing time
|
||||
for each item, calculates a cost floor, and compares that to your current price — flagging
|
||||
for each item, calculates a cost floor, and compares that to your current price — flagging
|
||||
anything that may be losing money, leaving margin on the table, or priced above market rates.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Verdicts</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2"><strong>Below Cost</strong> — price is at or below the estimated cost floor. The shop loses money on every sale of this item.</li>
|
||||
<li class="mb-2"><strong>Thin Margin</strong> — price covers costs but falls below your target margin percentage.</li>
|
||||
<li class="mb-2"><strong>High</strong> — price appears significantly above typical market rates, which may cost you work.</li>
|
||||
<li class="mb-2"><strong>OK</strong> — price is within a reasonable range given your costs and market context.</li>
|
||||
<li class="mb-2"><strong>Below Cost</strong> — price is at or below the estimated cost floor. The shop loses money on every sale of this item.</li>
|
||||
<li class="mb-2"><strong>Thin Margin</strong> — price covers costs but falls below your target margin percentage.</li>
|
||||
<li class="mb-2"><strong>High</strong> — price appears significantly above typical market rates, which may cost you work.</li>
|
||||
<li class="mb-2"><strong>OK</strong> — price is within a reasonable range given your costs and market context.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">How to run it</h3>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Make sure your <a asp-controller="CompanySettings" asp-action="Index">operating costs</a> are up to date — stale rates produce inaccurate verdicts.</li>
|
||||
<li class="mb-2">Make sure your <a asp-controller="CompanySettings" asp-action="Index">operating costs</a> are up to date — stale rates produce inaccurate verdicts.</li>
|
||||
<li class="mb-2">Go to <a asp-controller="CatalogItems" asp-action="Index">Catalog Items</a> and click <strong>AI Price Check</strong> in the top-right.</li>
|
||||
<li class="mb-2">Click <strong>Analyze Catalog with AI</strong>. A progress overlay appears while the analysis runs (allow 7–10 minutes for large catalogs).</li>
|
||||
<li class="mb-2">Review results sorted by severity — Below Cost items appear first. Click <strong>Edit Price</strong> on any item to update it directly from the results page.</li>
|
||||
<li class="mb-2">Click <strong>Analyze Catalog with AI</strong>. A progress overlay appears while the analysis runs (allow 7–10 minutes for large catalogs).</li>
|
||||
<li class="mb-2">Review results sorted by severity — Below Cost items appear first. Click <strong>Edit Price</strong> on any item to update it directly from the results page.</li>
|
||||
</ol>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Things to know</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2"><strong>Run limit:</strong> Analysis can be run once per quarter (90 days). The button shows the next available date when a recent run exists.</li>
|
||||
<li class="mb-2"><strong>Confidence levels:</strong> Each result shows High, Medium, or Low confidence. Vague item names like "Custom Part" will be Low — verify those manually.</li>
|
||||
<li class="mb-2"><strong>Confidence levels:</strong> Each result shows High, Medium, or Low confidence. Vague item names like "Custom Part" will be Low — verify those manually.</li>
|
||||
<li class="mb-2"><strong>Category paths matter:</strong> The AI uses the full category path (e.g. "Cerakote › Firearms") to determine the coating type. Make sure specialty items are in the correct category.</li>
|
||||
<li class="mb-2"><strong>$0 items skipped:</strong> Placeholder items and category headers with no price are automatically excluded from analysis.</li>
|
||||
</ul>
|
||||
@@ -518,7 +518,7 @@
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Results are estimates based on industry knowledge and your shop's rates. Always apply
|
||||
your own judgment before changing prices — especially for items flagged as Low confidence.
|
||||
your own judgment before changing prices — especially for items flagged as Low confidence.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
</h2>
|
||||
<p>
|
||||
Invoices are the formal request for payment you send to customers after their work is complete.
|
||||
Each job can have one invoice. The system tracks payment status in real time — you can see at a
|
||||
Each job can have one invoice. The system tracks payment status in real time — you can see at a
|
||||
glance which customers owe money, how much, and how long the balance has been outstanding.
|
||||
</p>
|
||||
<p>
|
||||
Invoices can be emailed to customers directly from the system (when email is configured) and
|
||||
downloaded as PDFs to print or send manually. Payments — whether in full or in partial
|
||||
installments — are logged against the invoice, and the customer's outstanding balance on their
|
||||
downloaded as PDFs to print or send manually. Payments — whether in full or in partial
|
||||
installments — are logged against the invoice, and the customer's outstanding balance on their
|
||||
account is updated automatically with every transaction.
|
||||
</p>
|
||||
<p>
|
||||
@@ -64,14 +64,14 @@
|
||||
|
||||
<p>
|
||||
Invoice numbers are generated in the format <code>INV-YYMM-####</code>
|
||||
(for example, <code>INV-2503-0007</code>). Each job can only have one invoice — if an invoice
|
||||
(for example, <code>INV-2503-0007</code>). Each job can only have one invoice — if an invoice
|
||||
already exists for a job, the Create Invoice button on the Job Details page is replaced with a
|
||||
link to the existing invoice.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
You can create an invoice for a job at any time — you do not need to wait until the job
|
||||
You can create an invoice for a job at any time — you do not need to wait until the job
|
||||
reaches a Completed or Delivered status. Some shops invoice on deposit when a job is
|
||||
approved; others invoice on pickup. The system is flexible.
|
||||
</div>
|
||||
@@ -161,7 +161,7 @@
|
||||
<i class="bi bi-cash-coin text-primary me-2"></i>Recording a Payment
|
||||
</h2>
|
||||
<p>
|
||||
When a customer pays — whether in full or as a partial payment — you record it against the invoice.
|
||||
When a customer pays — whether in full or as a partial payment — you record it against the invoice.
|
||||
The system supports multiple partial payments on a single invoice.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
@@ -169,17 +169,17 @@
|
||||
<li class="mb-2">
|
||||
Fill in the payment details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Amount</strong> — how much was received this time. Can be less than the full balance for partial payments.</li>
|
||||
<li><strong>Payment Method</strong> — Cash, Check, Credit/Debit Card, Bank Transfer / ACH, or Digital Payment.</li>
|
||||
<li><strong>Payment Date</strong> — defaults to today.</li>
|
||||
<li><strong>Reference Number</strong> — optional. Use for check numbers, transaction IDs, or wire reference numbers.</li>
|
||||
<li><strong>Notes</strong> — any additional notes about this payment.</li>
|
||||
<li><strong>Amount</strong> — how much was received this time. Can be less than the full balance for partial payments.</li>
|
||||
<li><strong>Payment Method</strong> — Cash, Check, Credit/Debit Card, Bank Transfer / ACH, or Digital Payment.</li>
|
||||
<li><strong>Payment Date</strong> — defaults to today.</li>
|
||||
<li><strong>Reference Number</strong> — optional. Use for check numbers, transaction IDs, or wire reference numbers.</li>
|
||||
<li><strong>Notes</strong> — any additional notes about this payment.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Click <strong>Save Payment</strong>.</li>
|
||||
</ol>
|
||||
<p>
|
||||
The invoice status updates automatically — to <strong>Partially Paid</strong> if there is still
|
||||
The invoice status updates automatically — to <strong>Partially Paid</strong> if there is still
|
||||
a remaining balance, or <strong>Paid</strong> if the full amount has been received. The customer's
|
||||
outstanding balance on their account is reduced by the payment amount. All payments are shown in
|
||||
a payment log on the invoice Details page.
|
||||
@@ -199,8 +199,8 @@
|
||||
<i class="bi bi-x-circle text-primary me-2"></i>Voiding an Invoice
|
||||
</h2>
|
||||
<p>
|
||||
If an invoice was created in error — for example, against the wrong job or with incorrect line
|
||||
items that cannot be corrected — you can void it to remove it from the customer's outstanding
|
||||
If an invoice was created in error — for example, against the wrong job or with incorrect line
|
||||
items that cannot be corrected — you can void it to remove it from the customer's outstanding
|
||||
balance.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
@@ -215,7 +215,7 @@
|
||||
<strong>Restrictions:</strong> Only invoices in <strong>Draft</strong> or <strong>Sent</strong>
|
||||
status can be voided. If an invoice has payments recorded against it, you must delete those
|
||||
payments first before you can void the invoice. Invoices that are Partially Paid or Paid
|
||||
cannot be voided directly — consider writing off the remaining balance instead if needed.
|
||||
cannot be voided directly — consider writing off the remaining balance instead if needed.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -238,7 +238,7 @@
|
||||
<p>
|
||||
If a customer's outstanding balance is approaching or has exceeded their credit limit, a warning
|
||||
flag is shown on their customer record, on new jobs you try to create for them, and on new invoices.
|
||||
This is a visual warning only — the system does not automatically block new work — but it provides
|
||||
This is a visual warning only — the system does not automatically block new work — but it provides
|
||||
a clear signal to follow up on payment.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -263,7 +263,7 @@
|
||||
<p>
|
||||
When you create an invoice from a job, <strong>all unapplied deposits are automatically applied
|
||||
as payments</strong> on the new invoice. The invoice's Amount Paid and status update accordingly
|
||||
— you may find the invoice is already partially or fully paid at creation time.
|
||||
— you may find the invoice is already partially or fully paid at creation time.
|
||||
</p>
|
||||
<p>
|
||||
Each deposit generates a receipt (receipt number format: <code>DEP-YYMM-####</code>) that can
|
||||
@@ -281,7 +281,7 @@
|
||||
</p>
|
||||
<p>
|
||||
To apply a gift certificate to an invoice, open the Invoice Details page and click
|
||||
<strong>Apply Gift Certificate</strong>. Enter the certificate code — the system looks up
|
||||
<strong>Apply Gift Certificate</strong>. Enter the certificate code — the system looks up
|
||||
the remaining balance and applies it as a payment up to the invoice amount.
|
||||
</p>
|
||||
</section>
|
||||
@@ -307,7 +307,7 @@
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Go to <strong>Settings › Billing</strong> (<a href="/Billing">/Billing</a>).</li>
|
||||
<li class="mb-2">Click <strong>Connect with Stripe</strong> (or <em>Set Up Online Payments</em>).</li>
|
||||
<li class="mb-2">You are redirected to Stripe — create a new Stripe account or connect an existing one.</li>
|
||||
<li class="mb-2">You are redirected to Stripe — create a new Stripe account or connect an existing one.</li>
|
||||
<li class="mb-2">Complete Stripe’s onboarding: enter your business details, add a bank account for payouts, and verify your identity as required by Stripe.</li>
|
||||
<li class="mb-2">Once Stripe approves the account, you are returned to the app and Stripe Connect status shows <strong>Active</strong>.</li>
|
||||
<li class="mb-2">Payment links now appear on Invoice Details and on the Online Payments page.</li>
|
||||
@@ -326,8 +326,8 @@
|
||||
Once Stripe Connect is active, open any Invoice Details page and use one of these options:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Copy Payment Link</strong> — copies the URL to your clipboard so you can paste it into an email, text, or any other message.</li>
|
||||
<li class="mb-1"><strong>Send Payment Link</strong> — emails the payment link directly to the customer’s email address on file, with a brief message and the invoice amount.</li>
|
||||
<li class="mb-1"><strong>Copy Payment Link</strong> — copies the URL to your clipboard so you can paste it into an email, text, or any other message.</li>
|
||||
<li class="mb-1"><strong>Send Payment Link</strong> — emails the payment link directly to the customer’s email address on file, with a brief message and the invoice amount.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The link is unique to each invoice and does not expire as long as the invoice remains unpaid.
|
||||
@@ -340,17 +340,17 @@
|
||||
<i class="bi bi-bell text-primary me-2"></i>Automated Payment Reminders
|
||||
</h2>
|
||||
<p>
|
||||
The system can automatically email customers when their invoices become overdue — without you
|
||||
The system can automatically email customers when their invoices become overdue — without you
|
||||
having to remember to follow up manually. This feature is controlled from
|
||||
<strong>Settings › Notifications › Automated Payment Reminders</strong>.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Enable Payment Reminders</strong> — turn the feature on or off for your company at any time.
|
||||
<strong>Enable Payment Reminders</strong> — turn the feature on or off for your company at any time.
|
||||
When off, no automated emails are sent.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Reminder Days</strong> — a comma-separated list of day milestones past the due date at which
|
||||
<strong>Reminder Days</strong> — a comma-separated list of day milestones past the due date at which
|
||||
reminders are sent. The default is <code>7,14,30</code> (one reminder at 7 days overdue, another at
|
||||
14, and a final one at 30).
|
||||
</li>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The fastest way to create a job is to start with a quote. Build and approve the quote, then
|
||||
click <strong>Convert to Job</strong> — all items, coatings, and pricing carry over automatically.
|
||||
click <strong>Convert to Job</strong> — all items, coatings, and pricing carry over automatically.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -50,10 +50,10 @@
|
||||
<p>To create a job manually:</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Go to <strong>Operations › Jobs</strong> and click the <strong>New Job</strong> button in the top-right corner.</li>
|
||||
<li class="mb-2">Select the <strong>Customer</strong> — this field is required. Type to search by name or company.</li>
|
||||
<li class="mb-2">Enter a <strong>Job Description</strong> summarising the work (e.g., "Powder coat motorcycle frame — gloss black").</li>
|
||||
<li class="mb-2">Select the <strong>Customer</strong> — this field is required. Type to search by name or company.</li>
|
||||
<li class="mb-2">Enter a <strong>Job Description</strong> summarising the work (e.g., "Powder coat motorcycle frame — gloss black").</li>
|
||||
<li class="mb-2">Set the <strong>Scheduled Date</strong> (when work is expected to begin) and the <strong>Due Date</strong> (when the customer expects pickup or delivery).</li>
|
||||
<li class="mb-2">Choose a <strong>Priority</strong> — Normal is the default; see the Job Priority section below for all levels.</li>
|
||||
<li class="mb-2">Choose a <strong>Priority</strong> — Normal is the default; see the Job Priority section below for all levels.</li>
|
||||
<li class="mb-2">Optionally assign a <strong>Worker</strong> from your shop workers list.</li>
|
||||
<li class="mb-2">Enter the customer's <strong>PO Number</strong> if they require one for their own records.</li>
|
||||
<li class="mb-2">Add any <strong>Special Instructions</strong> your team needs to know before starting work.</li>
|
||||
@@ -81,7 +81,7 @@
|
||||
at any time by opening the job and editing it.
|
||||
</p>
|
||||
<p>
|
||||
The two special statuses — <strong>On Hold</strong> and <strong>Cancelled</strong> — can be applied
|
||||
The two special statuses — <strong>On Hold</strong> and <strong>Cancelled</strong> — can be applied
|
||||
at any point in the workflow regardless of the current status. Use On Hold to pause a job temporarily
|
||||
(waiting for customer approval, missing materials, etc.) and Cancelled to formally close a job that
|
||||
will not be completed.
|
||||
@@ -89,7 +89,7 @@
|
||||
<p>
|
||||
On the Jobs list, click any status badge to open a quick-change modal. The modal includes a
|
||||
<strong>Notify customer via email</strong> toggle. If the customer has email notifications turned off,
|
||||
that toggle is automatically disabled and a warning note is shown — no email will be sent regardless.
|
||||
that toggle is automatically disabled and a warning note is shown — no email will be sent regardless.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
@@ -176,7 +176,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
Every job has a priority level that tells your team how urgently a job needs to move through the shop.
|
||||
Priorities are color-coded throughout the system — in the job list, on the job details page, and on
|
||||
Priorities are color-coded throughout the system — in the job list, on the job details page, and on
|
||||
any dashboards. Set or change the priority in the Create or Edit form.
|
||||
</p>
|
||||
|
||||
@@ -234,21 +234,21 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Item Types</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Calculated Item</strong> — enter surface area, quantity, and complexity. The system
|
||||
<strong>Calculated Item</strong> — enter surface area, quantity, and complexity. The system
|
||||
calculates material, labor, and equipment costs automatically. Select one or more powder
|
||||
coatings and optional prep services (sandblasting, masking, cleaning).
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Custom Work Item</strong> — enter a free-text description and a manual price. Use this for
|
||||
<strong>Custom Work Item</strong> — enter a free-text description and a manual price. Use this for
|
||||
one-off work that does not fit the standard calculation model.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>AI Photo Quote Item</strong> — upload photos of the parts and let our AI agent estimate
|
||||
<strong>AI Photo Quote Item</strong> — upload photos of the parts and let our AI agent estimate
|
||||
the surface area, complexity, and labor time. Review and override any value before accepting.
|
||||
Up to two follow-up rounds of questions are supported.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Labor Item</strong> — a line item representing time and labor charges only, without
|
||||
<strong>Labor Item</strong> — a line item representing time and labor charges only, without
|
||||
material costs.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -268,8 +268,8 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Prep Services</h3>
|
||||
<p>
|
||||
Each item can also include optional <strong>prep services</strong> — sandblasting, masking, or
|
||||
chemical cleaning — that will be carried out before coating. These are selected in the wizard and
|
||||
Each item can also include optional <strong>prep services</strong> — sandblasting, masking, or
|
||||
chemical cleaning — that will be carried out before coating. These are selected in the wizard and
|
||||
appear as sub-lines under the item on the job details page.
|
||||
</p>
|
||||
|
||||
@@ -278,32 +278,32 @@
|
||||
After completing the coatings and prep services steps, <strong>Calculated</strong> and
|
||||
<strong>AI Photo Quote</strong> items include one final optional step: <strong>Save to Product Catalog</strong>.
|
||||
This lets you turn the item you just configured into a reusable catalog entry so it can be selected
|
||||
instantly on future quotes or jobs — without re-entering dimensions, coatings, or prep services.
|
||||
instantly on future quotes or jobs — without re-entering dimensions, coatings, or prep services.
|
||||
</p>
|
||||
<p>The wizard pre-fills the catalog form with:</p>
|
||||
<ul class="mb-3">
|
||||
<li><strong>Name</strong> — taken from the item description (or AI-generated description); you can edit it</li>
|
||||
<li><strong>Default Price</strong> — copied from the item's calculated or manually adjusted unit price</li>
|
||||
<li><strong>Description</strong> — the item description</li>
|
||||
<li><strong>Sandblasting / Masking</strong> — automatically checked if those prep services were selected</li>
|
||||
<li><strong>Category</strong> — choose from your active catalog categories</li>
|
||||
<li><strong>Name</strong> — taken from the item description (or AI-generated description); you can edit it</li>
|
||||
<li><strong>Default Price</strong> — copied from the item's calculated or manually adjusted unit price</li>
|
||||
<li><strong>Description</strong> — the item description</li>
|
||||
<li><strong>Sandblasting / Masking</strong> — automatically checked if those prep services were selected</li>
|
||||
<li><strong>Category</strong> — choose from your active catalog categories</li>
|
||||
</ul>
|
||||
<p>At the bottom of the step you have two options:</p>
|
||||
<ul class="mb-3">
|
||||
<li><strong>Save to Catalog & Add</strong> — saves the catalog item immediately and then adds the line item to the job.</li>
|
||||
<li><strong>Skip — Add to Job Only</strong> — skips the save and adds the item to the job without creating a catalog entry.</li>
|
||||
<li><strong>Save to Catalog & Add</strong> — saves the catalog item immediately and then adds the line item to the job.</li>
|
||||
<li><strong>Skip — Add to Job Only</strong> — skips the save and adds the item to the job without creating a catalog entry.</li>
|
||||
</ul>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-info-circle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The catalog save happens immediately when you click <strong>Save to Catalog & Add</strong> — before the job form is submitted. The catalog item is preserved even if you later discard the job. You can view and manage all saved items at <a asp-controller="CatalogItems" asp-action="Index">Catalog Items</a>.
|
||||
The catalog save happens immediately when you click <strong>Save to Catalog & Add</strong> — before the job form is submitted. The catalog item is preserved even if you later discard the job. You can view and manage all saved items at <a asp-controller="CatalogItems" asp-action="Index">Catalog Items</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Items on the job details page are grouped by type — Catalog Items, Custom Work, and Labor — to
|
||||
Items on the job details page are grouped by type — Catalog Items, Custom Work, and Labor — to
|
||||
make it easy to see exactly what work is being performed and which materials are required.
|
||||
</div>
|
||||
</div>
|
||||
@@ -350,7 +350,7 @@
|
||||
<i class="bi bi-receipt text-primary me-2"></i>Creating an Invoice from a Job
|
||||
</h2>
|
||||
<p>
|
||||
Once a job is complete — or at any time when you are ready to bill the customer — you can create an
|
||||
Once a job is complete — or at any time when you are ready to bill the customer — you can create an
|
||||
invoice directly from the job's Details page. There is no need to manually re-enter pricing.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
@@ -428,7 +428,7 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Job Notes</h3>
|
||||
<p>
|
||||
Add internal notes to a job from the Details page. Notes are private — they are not visible
|
||||
Add internal notes to a job from the Details page. Notes are private — they are not visible
|
||||
to the customer. Use them for team communication, special handling instructions, or to log
|
||||
anything notable that happened during production.
|
||||
</p>
|
||||
@@ -460,7 +460,7 @@
|
||||
<i class="bi bi-clipboard2-check text-primary me-2"></i>Job Templates
|
||||
</h2>
|
||||
<p>
|
||||
If you do the same type of work repeatedly — for example, a standard wheel refinish package —
|
||||
If you do the same type of work repeatedly — for example, a standard wheel refinish package —
|
||||
you can save a job's line items as a template and reuse it for future jobs.
|
||||
</p>
|
||||
<p>Templates are managed at <strong>/JobTemplates</strong>. To use a template:</p>
|
||||
@@ -500,7 +500,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The <strong>Part Intake</strong> workflow lets you formally check in a customer's parts at
|
||||
drop-off — before any work begins. This creates a timestamped record of how many pieces
|
||||
drop-off — before any work begins. This creates a timestamped record of how many pieces
|
||||
arrived, their condition, and who received them, which protects the shop if a customer later
|
||||
disputes pre-existing damage or a missing piece.
|
||||
</p>
|
||||
@@ -513,10 +513,10 @@
|
||||
On the intake form you will see:
|
||||
<ul class="mt-1">
|
||||
<li>A <strong>Job Summary</strong> card showing expected part count (from line items), due date, and any special instructions.</li>
|
||||
<li><strong>Actual Part Count</strong> — enter the number of pieces physically received. If this differs from the expected count, a warning appears prompting you to note the discrepancy.</li>
|
||||
<li><strong>Condition Notes</strong> — describe the condition of the parts (existing scratches, rust, missing hardware, special handling requirements, etc.).</li>
|
||||
<li><strong>Advance to In Preparation</strong> — toggle on to automatically move the job status to <em>In Preparation</em> at the same time. Leave off if the customer is dropping parts off early and work hasn't started yet.</li>
|
||||
<li><strong>Before Photos</strong> — upload photos documenting the condition at drop-off. Photos are saved as "Before" type on the job and appear in the Photos section of Job Details.</li>
|
||||
<li><strong>Actual Part Count</strong> — enter the number of pieces physically received. If this differs from the expected count, a warning appears prompting you to note the discrepancy.</li>
|
||||
<li><strong>Condition Notes</strong> — describe the condition of the parts (existing scratches, rust, missing hardware, special handling requirements, etc.).</li>
|
||||
<li><strong>Advance to In Preparation</strong> — toggle on to automatically move the job status to <em>In Preparation</em> at the same time. Leave off if the customer is dropping parts off early and work hasn't started yet.</li>
|
||||
<li><strong>Before Photos</strong> — upload photos documenting the condition at drop-off. Photos are saved as "Before" type on the job and appear in the Photos section of Job Details.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Click <strong>Complete Intake</strong>.</li>
|
||||
@@ -533,7 +533,7 @@
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The intake form is optimised for use on a tablet at the front desk — the layout is
|
||||
The intake form is optimised for use on a tablet at the front desk — the layout is
|
||||
touch-friendly and the photo upload works directly from a tablet camera.
|
||||
</div>
|
||||
</div>
|
||||
@@ -547,7 +547,7 @@
|
||||
<strong>Shop Mobile</strong> (<a href="/Jobs/ShopMobile">/Jobs/ShopMobile</a>) is a
|
||||
phone and tablet-optimised view of all active jobs, designed for workers on the shop floor.
|
||||
Unlike the Shop Display (which is a passive TV view) and the full desktop UI, Shop Mobile is
|
||||
built for one-handed use — large touch targets, no sidebar, and instant status advancement
|
||||
built for one-handed use — large touch targets, no sidebar, and instant status advancement
|
||||
with a single tap.
|
||||
</p>
|
||||
|
||||
@@ -559,8 +559,8 @@
|
||||
<li>Assigned worker, sandblasting/masking flags, and due date</li>
|
||||
<li>Line items (up to 3 shown; tap the details button for the full list)</li>
|
||||
<li>Powder colours</li>
|
||||
<li>Special instructions (amber callout — hard to miss)</li>
|
||||
<li>An <strong>intake indicator</strong> — a green box icon means parts were checked in; an amber box icon means intake is still pending (tap it to go directly to the intake form)</li>
|
||||
<li>Special instructions (amber callout — hard to miss)</li>
|
||||
<li>An <strong>intake indicator</strong> — a green box icon means parts were checked in; an amber box icon means intake is still pending (tap it to go directly to the intake form)</li>
|
||||
<li>An <strong>overdue badge</strong> when the due date has passed</li>
|
||||
</ul>
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
<i class="bi bi-person-gear text-primary me-2"></i>Changing the Customer
|
||||
</h2>
|
||||
<p>
|
||||
The customer on a job can be changed at any time from the Job Details page — no need to
|
||||
The customer on a job can be changed at any time from the Job Details page — no need to
|
||||
delete and re-create the job. This is useful when:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
@@ -610,16 +610,16 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">How to change the customer</h3>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Open the job from <strong>Operations › Jobs</strong> and go to its Details page.</li>
|
||||
<li class="mb-2">Find the <strong>Customer</strong> field in the job header — it appears as a dropdown showing the current customer.</li>
|
||||
<li class="mb-2">Find the <strong>Customer</strong> field in the job header — it appears as a dropdown showing the current customer.</li>
|
||||
<li class="mb-2">Select a different customer from the dropdown.</li>
|
||||
<li class="mb-2">A confirmation banner appears: <em>"Change customer to [Name]?"</em> — click <strong>Save</strong> to confirm or <strong>Cancel</strong> to revert.</li>
|
||||
<li class="mb-2">A confirmation banner appears: <em>"Change customer to [Name]?"</em> — click <strong>Save</strong> to confirm or <strong>Cancel</strong> to revert.</li>
|
||||
</ol>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-info-circle flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The customer can also be changed on the <strong>Edit Job</strong> page using the Customer
|
||||
dropdown there. Any invoices or deposits already linked to the job are not automatically
|
||||
moved — update those separately if needed.
|
||||
moved — update those separately if needed.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -629,24 +629,24 @@
|
||||
<i class="bi bi-qr-code text-primary me-2"></i>Work Order QR Codes
|
||||
</h2>
|
||||
<p>
|
||||
Every printed job work order includes two tiers of QR codes — one for <strong>viewing</strong>
|
||||
Every printed job work order includes two tiers of QR codes — one for <strong>viewing</strong>
|
||||
the job and a separate set for <strong>acting</strong> on it. This gives shop workers everything
|
||||
they need from a printed sheet without touching the desktop app.
|
||||
All QR codes require a logged-in account.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-eye me-1"></i>Top QR — View Job</h3>
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-eye me-1"></i>Top QR — View Job</h3>
|
||||
<p>
|
||||
Located in the work order header, next to the job number. Scan it with your phone to open the
|
||||
full <strong>Job Details</strong> page — items, catalog product images, powder specs, coatings,
|
||||
full <strong>Job Details</strong> page — items, catalog product images, powder specs, coatings,
|
||||
prep services, and special instructions. Use it to verify you're working the right job or to
|
||||
see catalog item images on your phone without hunting through the app.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-arrow-right-circle me-1"></i>Bottom QR — Update Status</h3>
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2"><i class="bi bi-arrow-right-circle me-1"></i>Bottom QR — Update Status</h3>
|
||||
<p>
|
||||
Scan to open a mobile-friendly status bump page for this job. Tap the button to advance to the
|
||||
next stage (or put the job on hold). The status change is recorded in history with your name —
|
||||
next stage (or put the job on hold). The status change is recorded in history with your name —
|
||||
no anonymous bumps.
|
||||
</p>
|
||||
|
||||
@@ -686,7 +686,7 @@
|
||||
<h2 class="h5 fw-semibold mb-3">Blank Work Order</h2>
|
||||
<p>
|
||||
The Blank Work Order feature lets you instantly print a pre-formatted paper work order to hand to a
|
||||
customer at drop-off — before a digital job record has been created. It uses your company logo,
|
||||
customer at drop-off — before a digital job record has been created. It uses your company logo,
|
||||
address, and customizable terms so it looks professional right out of the box.
|
||||
</p>
|
||||
|
||||
@@ -694,7 +694,7 @@
|
||||
<ol>
|
||||
<li>Go to <strong>Jobs</strong> in the sidebar.</li>
|
||||
<li>Click the <strong><i class="bi bi-printer"></i> Blank Work Order</strong> button in the top-right toolbar (next to the Jobs Board button).</li>
|
||||
<li>A PDF opens in a new browser tab — print it or save it to PDF.</li>
|
||||
<li>A PDF opens in a new browser tab — print it or save it to PDF.</li>
|
||||
</ol>
|
||||
<p>You can also navigate directly to <a href="/WorkOrder/Blank">/WorkOrder/Blank</a> to open the PDF at any time.</p>
|
||||
|
||||
@@ -714,8 +714,8 @@
|
||||
Go to <strong>Company Settings → PDF Templates → Work Order</strong> to customize:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Accent Color</strong> — the color used for table headers, the title bar, and section labels. Defaults to dark gray.</li>
|
||||
<li><strong>Terms & Conditions</strong> — up to 2,000 characters of text printed in italic below the notes box. Use this for your shop's standard policies, liability disclaimer, or payment terms.</li>
|
||||
<li><strong>Accent Color</strong> — the color used for table headers, the title bar, and section labels. Defaults to dark gray.</li>
|
||||
<li><strong>Terms & Conditions</strong> — up to 2,000 characters of text printed in italic below the notes box. Use this for your shop's standard policies, liability disclaimer, or payment terms.</li>
|
||||
</ul>
|
||||
<p>Click <strong>Save</strong> to apply changes, or <strong>Preview</strong> to open the PDF instantly without saving.</p>
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<p>
|
||||
The PO workflow is designed to eliminate double data entry. When you receive a PO, stock levels
|
||||
update automatically for any linked inventory items. When you are ready to pay, you can convert
|
||||
the received PO directly into a vendor bill in Accounts Payable — all the line items, quantities,
|
||||
the received PO directly into a vendor bill in Accounts Payable — all the line items, quantities,
|
||||
and prices carry over without retyping.
|
||||
</p>
|
||||
<p>
|
||||
@@ -46,7 +46,7 @@
|
||||
<li class="mb-2">Select the <strong>Vendor</strong> you are ordering from. The vendor's contact information and default payment terms are pulled in automatically.</li>
|
||||
<li class="mb-2">Set the <strong>Order Date</strong> (defaults to today) and an optional <strong>Expected Delivery Date</strong>.</li>
|
||||
<li class="mb-2">
|
||||
Add line items — click <strong>Add Line</strong> for each product you are ordering:
|
||||
Add line items — click <strong>Add Line</strong> for each product you are ordering:
|
||||
<ul class="mt-1">
|
||||
<li>Start typing an item name in the search field to look up items from your inventory. If the item exists, select it to link the PO line directly to your stock record.</li>
|
||||
<li>If the item is not in your inventory yet (a new product), enter a description manually. You can create the inventory item later after receiving the goods.</li>
|
||||
@@ -54,7 +54,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Enter a <strong>Shipping Cost</strong> if the vendor charges for delivery. This is added to the PO total.</li>
|
||||
<li class="mb-2">Add any <strong>Notes for the Vendor</strong> — these appear on the printed PO document.</li>
|
||||
<li class="mb-2">Add any <strong>Notes for the Vendor</strong> — these appear on the printed PO document.</li>
|
||||
<li class="mb-2">Add any internal <strong>Notes</strong> for your own team (not shown to the vendor).</li>
|
||||
<li class="mb-2">Click <strong>Save PO</strong>. The PO is saved as a Draft.</li>
|
||||
</ol>
|
||||
@@ -126,7 +126,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
After a PO has been received, you can convert it into a vendor bill in Accounts Payable with
|
||||
one click — no need to re-enter any of the line item details.
|
||||
one click — no need to re-enter any of the line item details.
|
||||
</p>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Open the received PO and click <strong>Create Bill</strong>.</li>
|
||||
@@ -138,7 +138,7 @@
|
||||
<li>The vendor's payment terms and a calculated due date</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Review the bill — confirm the due date, check that expense accounts are correct, and add any notes.</li>
|
||||
<li class="mb-2">Review the bill — confirm the due date, check that expense accounts are correct, and add any notes.</li>
|
||||
<li class="mb-2">Click <strong>Save Bill</strong>. The bill is saved as a Draft in Accounts Payable.</li>
|
||||
<li class="mb-2">When you have verified the bill against the vendor's paper invoice, click <strong>Mark as Open</strong> to post it to your AP ledger. See the <a asp-controller="Help" asp-action="AccountsPayable">Accounts Payable help page</a> for details.</li>
|
||||
</ol>
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
<p>
|
||||
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.
|
||||
automatically based on the surface area and complexity you enter — no spreadsheet required.
|
||||
</p>
|
||||
<p>
|
||||
Quotes can be created for existing customers or for <strong>prospects</strong> — people or
|
||||
Quotes can be created for existing customers or for <strong>prospects</strong> — 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.
|
||||
@@ -47,16 +47,16 @@
|
||||
top of the page. Your selection is remembered automatically for next time.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Quick Quote</strong> — shows only the essentials: customer picker (or walk-in info) and
|
||||
<li class="mb-1"><strong>Quick Quote</strong> — 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.</li>
|
||||
<li class="mb-1"><strong>Full Quote</strong> — shows the complete form with all fields. Use this for formal
|
||||
<li class="mb-1"><strong>Full Quote</strong> — 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.</li>
|
||||
</ul>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Switching to Quick Quote does not change how the quote saves — all pricing calculations and the item
|
||||
Switching to Quick Quote does not change how the quote saves — all pricing calculations and the item
|
||||
wizard work exactly the same. Hidden fields use their default values (no rush fee, no discount, company
|
||||
default tax rate).
|
||||
</div>
|
||||
@@ -68,13 +68,13 @@
|
||||
<li class="mb-2">
|
||||
Choose whether this quote is for an existing <strong>Customer</strong> or a <strong>Prospect</strong>:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Customer</strong> — select from your existing customer list. The customer's pricing tier discount is applied automatically.</li>
|
||||
<li><strong>Prospect</strong> — 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.</li>
|
||||
<li><strong>Customer</strong> — select from your existing customer list. The customer's pricing tier discount is applied automatically.</li>
|
||||
<li><strong>Prospect</strong> — 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.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Set the <strong>Quote Date</strong> (defaults to today) and the <strong>Expiry Date</strong> (defaults to the system's configured validity period).</li>
|
||||
<li class="mb-2">Add a <strong>Subject</strong> or description to identify the work being quoted.</li>
|
||||
<li class="mb-2">Add one or more <strong>Line Items</strong> — see the Quote Items section below for item types.</li>
|
||||
<li class="mb-2">Add one or more <strong>Line Items</strong> — see the Quote Items section below for item types.</li>
|
||||
<li class="mb-2">Add any <strong>Notes</strong> for the customer (these appear on the printed quote).</li>
|
||||
<li class="mb-2">Add any internal <strong>Notes</strong> that are for your team only.</li>
|
||||
<li class="mb-2">Click <strong>Save Quote</strong>. The quote is saved as a Draft.</li>
|
||||
@@ -125,7 +125,7 @@
|
||||
<div class="card-body small">
|
||||
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.
|
||||
No automatic pricing calculation — you set the price directly.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -154,10 +154,10 @@
|
||||
<p>
|
||||
If an image has been uploaded for a catalog item, a small thumbnail appears to the left of its
|
||||
name in the list. <strong>Hover over the thumbnail</strong> to see a larger preview near your
|
||||
cursor — useful for quickly confirming you have the right part without opening the full item record.
|
||||
cursor — useful for quickly confirming you have the right part without opening the full item record.
|
||||
</p>
|
||||
<p>
|
||||
Images are managed on the <a href="/CatalogItems">Catalog Items</a> page — open any item, click
|
||||
Images are managed on the <a href="/CatalogItems">Catalog Items</a> page — open any item, click
|
||||
<strong>Edit</strong>, and use the <strong>Item Image</strong> section to upload a photo
|
||||
(jpg, jpeg, png, gif, or webp; max 10 MB). A 200×200 thumbnail is generated automatically.
|
||||
</p>
|
||||
@@ -167,7 +167,7 @@
|
||||
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.
|
||||
prep services — sandblasting, masking, and/or cleaning — that will be performed before coating.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Save to Product Catalog</h3>
|
||||
@@ -182,13 +182,13 @@
|
||||
<li>Choose a <strong>Category</strong> from your existing catalog categories.</li>
|
||||
<li>Optionally add or edit a <strong>Description</strong> and flag whether the item typically requires sandblasting or masking.</li>
|
||||
<li>Click <strong>Save to Catalog & Add</strong> to save the item to the catalog and add it to the quote simultaneously.</li>
|
||||
<li>Click <strong>Skip — Add to Quote Only</strong> to add the item to this quote without saving it to the catalog.</li>
|
||||
<li>Click <strong>Skip — Add to Quote Only</strong> to add the item to this quote without saving it to the catalog.</li>
|
||||
</ul>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
<strong>Catalog item prices are final.</strong> When a catalog item is added to a quote or job,
|
||||
the price you entered is used exactly as-is — no markup, no prep service charges, and no
|
||||
the price you entered is used exactly as-is — no markup, no prep service charges, and no
|
||||
complexity adjustments are added on top. Make sure the price you save already includes your
|
||||
labor, materials, and margin.
|
||||
</div>
|
||||
@@ -196,7 +196,7 @@
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-bookmark-star-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The catalog save happens <strong>immediately</strong> — the item is added to your catalog even
|
||||
The catalog save happens <strong>immediately</strong> — the item is added to your catalog even
|
||||
if you later abandon the quote. This is intentional: once you take the time to describe and
|
||||
price a part, it's worth keeping for next time. Manage saved items at
|
||||
<a href="/CatalogItems">Catalog Items</a>.
|
||||
@@ -208,7 +208,7 @@
|
||||
<div>
|
||||
The live pricing calculator at the bottom of the quote form updates the subtotal, discounts,
|
||||
tax, and grand total every time you add or change a line item. There is no need to manually
|
||||
recalculate — the total shown when you save is the total the customer will see.
|
||||
recalculate — the total shown when you save is the total the customer will see.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -292,7 +292,7 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">The customer must have <strong>SMS Opt-In</strong> enabled and a <strong>Mobile Phone</strong> number on their record.</li>
|
||||
<li class="mb-1">If you already sent the quote via email, the same approval link is reused — both the email link and SMS link remain valid simultaneously.</li>
|
||||
<li class="mb-1">If you already sent the quote via email, the same approval link is reused — both the email link and SMS link remain valid simultaneously.</li>
|
||||
<li class="mb-1">For prospect quotes, the SMS goes to the <strong>Prospect Phone</strong> field on the quote.</li>
|
||||
</ul>
|
||||
<p>
|
||||
@@ -369,7 +369,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
When you send a quote by email, the customer receives a link to a self-service approval portal
|
||||
at <strong>/QuoteApproval</strong>. No login is required — the link is unique to that quote.
|
||||
at <strong>/QuoteApproval</strong>. No login is required — the link is unique to that quote.
|
||||
</p>
|
||||
<p>From the approval portal the customer can:</p>
|
||||
<ul class="mb-3">
|
||||
@@ -410,7 +410,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The <strong>AI Quick Quote</strong> 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
|
||||
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.
|
||||
</p>
|
||||
@@ -419,13 +419,13 @@
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Click the <strong>AI Quick Quote</strong> floating button (bottom-right, dark blue with a lightning bolt icon).</li>
|
||||
<li class="mb-2">
|
||||
Type a description of the work — for example:<br>
|
||||
Type a description of the work — for example:<br>
|
||||
<em>"4 motorcycle wheels in Alien Silver with a black base coat, need sandblasting"</em>
|
||||
</li>
|
||||
<li class="mb-2">Set the <strong>Quantity</strong> and <strong>Number of Coats</strong>.</li>
|
||||
<li class="mb-2">Click <strong>Get Estimate</strong>. 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.</li>
|
||||
<li class="mb-2">
|
||||
The panel also shows <strong>powder stock status</strong> 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.
|
||||
The panel also shows <strong>powder stock status</strong> 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.
|
||||
</li>
|
||||
<li class="mb-2">If the estimate looks right, enter an optional <strong>Customer Reference</strong> (e.g., the caller's name) and click <strong>Save as Draft Quote</strong>. You land directly on the new quote's Details page where you can adjust anything and assign the real customer.</li>
|
||||
</ol>
|
||||
@@ -433,13 +433,13 @@
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Quick quotes are saved under a <strong>"Walk-In / Phone"</strong> customer so nothing blocks you from saving immediately. Once you have the customer's information, reassign the quote using the Customer dropdown on the Quote Details page — see <em>Changing the Customer</em> below.
|
||||
Quick quotes are saved under a <strong>"Walk-In / Phone"</strong> customer so nothing blocks you from saving immediately. Once you have the customer's information, reassign the quote using the Customer dropdown on the Quote Details page — see <em>Changing the Customer</em> below.
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
The Quick Quote gives a rough estimate only — it uses your shop's operating costs and the AI's
|
||||
The Quick Quote gives a rough estimate only — it uses your shop's operating costs and the AI's
|
||||
interpretation of your description. For formal quotes that will be sent to a customer, always
|
||||
open the quote and verify the details using the full item wizard before sending.
|
||||
</div>
|
||||
@@ -451,7 +451,7 @@
|
||||
<i class="bi bi-person-gear text-primary me-2"></i>Changing the Customer
|
||||
</h2>
|
||||
<p>
|
||||
The customer on a quote can be changed at any time from the Quote Details page — no need to
|
||||
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:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
@@ -463,9 +463,9 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">How to change the customer</h3>
|
||||
<ol class="mb-3">
|
||||
<li class="mb-2">Open the quote from <strong>Operations › Quotes</strong> and go to its Details page.</li>
|
||||
<li class="mb-2">Find the <strong>Customer</strong> field in the quote header — it appears as a dropdown showing the current customer.</li>
|
||||
<li class="mb-2">Find the <strong>Customer</strong> field in the quote header — it appears as a dropdown showing the current customer.</li>
|
||||
<li class="mb-2">Select a different customer from the dropdown.</li>
|
||||
<li class="mb-2">A confirmation banner appears: <em>"Change customer to [Name]?"</em> — click <strong>Save</strong> to confirm or <strong>Cancel</strong> to revert to the original.</li>
|
||||
<li class="mb-2">A confirmation banner appears: <em>"Change customer to [Name]?"</em> — click <strong>Save</strong> to confirm or <strong>Cancel</strong> to revert to the original.</li>
|
||||
</ol>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-info-circle flex-shrink-0 mt-1"></i>
|
||||
@@ -487,22 +487,22 @@
|
||||
whether your rates are covering costs. The breakdown includes:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Material Costs</strong> — powder and consumables cost based on surface area and the configured cost-per-sq-ft rate.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — a small percentage of material and labor costs covering miscellaneous shop consumables (tape, abrasives, etc.).</li>
|
||||
<li class="mb-1"><strong>Labor Costs</strong> — 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.</li>
|
||||
<li class="mb-1"><strong>Equipment Costs</strong> — hourly rates for the curing oven, sandblaster, and coating booth, applied for the estimated time each piece of equipment is in use.</li>
|
||||
<li class="mb-1"><strong>Complexity Adjustment</strong> — 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.</li>
|
||||
<li class="mb-1"><strong>General Markup</strong> — your configured profit percentage applied to the cost subtotal. The exact formula depends on the <em>Pricing Mode</em> set in Company Settings: <em>Markup on Materials</em> adds the percentage on top of costs; <em>Target Margin on Total Cost</em> back-calculates price from a gross-margin target.</li>
|
||||
<li class="mb-1"><strong>Rush Charge</strong> — applied automatically to jobs with Rush or Urgent priority, either as a percentage or a fixed amount depending on your settings.</li>
|
||||
<li class="mb-1"><strong>Pricing Tier Discount</strong> — if the customer has a pricing tier assigned (e.g., Preferred Shop — 10% off), the discount is shown as a line item reduction. See <em>Hide Discount from Customer</em> below to control whether this line appears on the customer-facing PDF.</li>
|
||||
<li class="mb-1"><strong>Tax</strong> — the configured tax rate applied to the final subtotal. Zero for tax-exempt customers.</li>
|
||||
<li class="mb-1"><strong>Grand Total</strong> — the amount the customer will be invoiced.</li>
|
||||
<li class="mb-1"><strong>Material Costs</strong> — powder and consumables cost based on surface area and the configured cost-per-sq-ft rate.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — a small percentage of material and labor costs covering miscellaneous shop consumables (tape, abrasives, etc.).</li>
|
||||
<li class="mb-1"><strong>Labor Costs</strong> — 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.</li>
|
||||
<li class="mb-1"><strong>Equipment Costs</strong> — hourly rates for the curing oven, sandblaster, and coating booth, applied for the estimated time each piece of equipment is in use.</li>
|
||||
<li class="mb-1"><strong>Complexity Adjustment</strong> — 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.</li>
|
||||
<li class="mb-1"><strong>General Markup</strong> — your configured profit percentage applied to the cost subtotal. The exact formula depends on the <em>Pricing Mode</em> set in Company Settings: <em>Markup on Materials</em> adds the percentage on top of costs; <em>Target Margin on Total Cost</em> back-calculates price from a gross-margin target.</li>
|
||||
<li class="mb-1"><strong>Rush Charge</strong> — applied automatically to jobs with Rush or Urgent priority, either as a percentage or a fixed amount depending on your settings.</li>
|
||||
<li class="mb-1"><strong>Pricing Tier Discount</strong> — if the customer has a pricing tier assigned (e.g., Preferred Shop — 10% off), the discount is shown as a line item reduction. See <em>Hide Discount from Customer</em> below to control whether this line appears on the customer-facing PDF.</li>
|
||||
<li class="mb-1"><strong>Tax</strong> — the configured tax rate applied to the final subtotal. Zero for tax-exempt customers.</li>
|
||||
<li class="mb-1"><strong>Grand Total</strong> — the amount the customer will be invoiced.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-4 mb-2">Per-Item Cost Breakdown</h3>
|
||||
<p>
|
||||
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,
|
||||
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.
|
||||
</p>
|
||||
@@ -514,7 +514,7 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">The pricing tier discount line is <strong>not shown</strong> on the customer-facing quote PDF or on the online approval portal.</li>
|
||||
<li class="mb-1">The discount is <strong>still applied</strong> to the total — the customer pays the discounted price, they just don’t see the discount as a separate line item.</li>
|
||||
<li class="mb-1">The discount is <strong>still applied</strong> to the total — the customer pays the discounted price, they just don’t see the discount as a separate line item.</li>
|
||||
<li class="mb-1">The full breakdown (including the discount) remains visible to your staff on the internal Quote Details page.</li>
|
||||
</ul>
|
||||
<p>
|
||||
@@ -525,8 +525,8 @@
|
||||
<div class="alert alert-permanent alert-secondary d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-info-circle flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
All rates used in the breakdown — labor, equipment, markup, shop supplies, complexity multipliers,
|
||||
rush charge, and tax — are configured in <strong>Settings › Company Settings › Operating Costs</strong>.
|
||||
All rates used in the breakdown — labor, equipment, markup, shop supplies, complexity multipliers,
|
||||
rush charge, and tax — are configured in <strong>Settings › Company Settings › Operating Costs</strong>.
|
||||
See the <a asp-controller="Help" asp-action="Settings">Settings help page</a> for details on Pricing Mode and all rate settings.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The Reports section gives you financial summaries, operational insights, and AI-powered analysis
|
||||
of your business. Reports are organized on the landing page by category — Financial, Operations,
|
||||
of your business. Reports are organized on the landing page by category — Financial, Operations,
|
||||
and AI-Powered. Most reports are read-only views of live data and support PDF export.
|
||||
</p>
|
||||
<p>
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">KPI Dashboard</h3>
|
||||
<p>
|
||||
A high-level scorecard showing your most important metrics at a glance — open jobs, pending
|
||||
A high-level scorecard showing your most important metrics at a glance — open jobs, pending
|
||||
quotes, outstanding invoices, and recent revenue. Good for a quick daily check-in.
|
||||
</p>
|
||||
|
||||
@@ -53,15 +53,15 @@
|
||||
Detailed charts and KPI cards for the selected date range:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Total Invoiced</strong> — total value of all invoices created in the period.</li>
|
||||
<li class="mb-1"><strong>Total Collected</strong> — total payments actually received.</li>
|
||||
<li class="mb-1"><strong>Outstanding AR</strong> — current total of all unpaid invoices (always reflects today's balance, not filtered by date).</li>
|
||||
<li class="mb-1"><strong>Overdue Balance</strong> — portion of AR where the due date has passed.</li>
|
||||
<li class="mb-1"><strong>Monthly Invoiced vs. Collected chart</strong> — side-by-side bar chart by month; shows if collections are lagging behind invoicing.</li>
|
||||
<li class="mb-1"><strong>Total Invoiced</strong> — total value of all invoices created in the period.</li>
|
||||
<li class="mb-1"><strong>Total Collected</strong> — total payments actually received.</li>
|
||||
<li class="mb-1"><strong>Outstanding AR</strong> — current total of all unpaid invoices (always reflects today's balance, not filtered by date).</li>
|
||||
<li class="mb-1"><strong>Overdue Balance</strong> — portion of AR where the due date has passed.</li>
|
||||
<li class="mb-1"><strong>Monthly Invoiced vs. Collected chart</strong> — side-by-side bar chart by month; shows if collections are lagging behind invoicing.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The <strong>AI Financial Summary</strong> button in this view generates a plain-English narrative
|
||||
of your financial performance using AI — useful for a quick briefing before a meeting. See the
|
||||
of your financial performance using AI — useful for a quick briefing before a meeting. See the
|
||||
<a href="#ai-reports">AI-Powered Reports</a> section below.
|
||||
</p>
|
||||
|
||||
@@ -80,13 +80,13 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">AR Aging</h3>
|
||||
<p>
|
||||
Breaks down all outstanding invoices by how long they have been overdue:
|
||||
<strong>Current</strong> (not yet due), <strong>1–30 days</strong>,
|
||||
<strong>31–60 days</strong>, <strong>61–90 days</strong>, and <strong>90+ days</strong>.
|
||||
Focus collection efforts on the 61–90 and 90+ columns first.
|
||||
<strong>Current</strong> (not yet due), <strong>1–30 days</strong>,
|
||||
<strong>31–60 days</strong>, <strong>61–90 days</strong>, and <strong>90+ days</strong>.
|
||||
Focus collection efforts on the 61–90 and 90+ columns first.
|
||||
</p>
|
||||
<p>
|
||||
The AR Aging page also has an <strong>AI AR Follow-Up</strong> button that drafts a
|
||||
collection email for any overdue invoice — the tone automatically scales with how overdue
|
||||
collection email for any overdue invoice — the tone automatically scales with how overdue
|
||||
the invoice is (gentle reminder at 7 days, firmer at 30+).
|
||||
</p>
|
||||
|
||||
@@ -98,21 +98,21 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Sales Tax Report</h3>
|
||||
<p>
|
||||
An invoice-basis Sales Tax Liability report — shows what you collected in tax during the
|
||||
An invoice-basis Sales Tax Liability report — shows what you collected in tax during the
|
||||
period and breaks it down so you can file accurately. Key figures:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Total Tax Billed</strong> — sum of all tax charged on invoices in the period.</li>
|
||||
<li class="mb-1"><strong>Taxable Sales</strong> — subtotals of invoices where tax was charged.</li>
|
||||
<li class="mb-1"><strong>Non-Taxable Sales</strong> — subtotals of tax-exempt invoices (e.g. tax-exempt customers).</li>
|
||||
<li class="mb-1"><strong>Effective Tax Rate</strong> — overall average rate across all taxable invoices.</li>
|
||||
<li class="mb-1"><strong>By Tax Account</strong> — breakdown by GL account (useful if you have multiple tax jurisdictions or rates).</li>
|
||||
<li class="mb-1"><strong>By Month</strong> — month-by-month chart and table of taxable sales and tax billed.</li>
|
||||
<li class="mb-1"><strong>Invoice Detail</strong> — every invoice in the period with its tax %, tax amount, and tax account. Non-taxable invoices appear shaded grey so they are easy to distinguish.</li>
|
||||
<li class="mb-1"><strong>Total Tax Billed</strong> — sum of all tax charged on invoices in the period.</li>
|
||||
<li class="mb-1"><strong>Taxable Sales</strong> — subtotals of invoices where tax was charged.</li>
|
||||
<li class="mb-1"><strong>Non-Taxable Sales</strong> — subtotals of tax-exempt invoices (e.g. tax-exempt customers).</li>
|
||||
<li class="mb-1"><strong>Effective Tax Rate</strong> — overall average rate across all taxable invoices.</li>
|
||||
<li class="mb-1"><strong>By Tax Account</strong> — breakdown by GL account (useful if you have multiple tax jurisdictions or rates).</li>
|
||||
<li class="mb-1"><strong>By Month</strong> — month-by-month chart and table of taxable sales and tax billed.</li>
|
||||
<li class="mb-1"><strong>Invoice Detail</strong> — every invoice in the period with its tax %, tax amount, and tax account. Non-taxable invoices appear shaded grey so they are easy to distinguish.</li>
|
||||
</ul>
|
||||
<p>
|
||||
This report supports both <strong>PDF export</strong> and <strong>CSV export</strong>.
|
||||
The CSV is formatted for handing to your accountant or importing into tax-filing software —
|
||||
The CSV is formatted for handing to your accountant or importing into tax-filing software —
|
||||
one row per invoice with all relevant columns. Use the quick preset buttons (This Month,
|
||||
Last Month, YTD, Last Year) to jump to common filing periods without manually entering dates.
|
||||
</p>
|
||||
@@ -149,10 +149,10 @@
|
||||
period. Key metrics include:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Job counts by status</strong> — how many jobs are in each stage. A high count in one status can indicate a bottleneck.</li>
|
||||
<li class="mb-1"><strong>Open, Completed, On Hold, and Overdue counts</strong> — KPI cards for the overall health of your job queue.</li>
|
||||
<li class="mb-1"><strong>Job counts by priority</strong> — how many jobs are at each level (Low/Normal/High/Urgent/Rush).</li>
|
||||
<li class="mb-1"><strong>Average completion time</strong> — average days from job creation to Completed status. Use as a baseline for quoting lead times.</li>
|
||||
<li class="mb-1"><strong>Job counts by status</strong> — how many jobs are in each stage. A high count in one status can indicate a bottleneck.</li>
|
||||
<li class="mb-1"><strong>Open, Completed, On Hold, and Overdue counts</strong> — KPI cards for the overall health of your job queue.</li>
|
||||
<li class="mb-1"><strong>Job counts by priority</strong> — how many jobs are at each level (Low/Normal/High/Urgent/Rush).</li>
|
||||
<li class="mb-1"><strong>Average completion time</strong> — average days from job creation to Completed status. Use as a baseline for quoting lead times.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Customer Overview</h3>
|
||||
@@ -164,7 +164,7 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Job Cycle Time Report</h3>
|
||||
<p>
|
||||
Shows how long jobs spend in each status on average. Use this to identify where jobs tend
|
||||
to slow down — for example, if jobs spend an unusually long time in Sandblasting, that
|
||||
to slow down — for example, if jobs spend an unusually long time in Sandblasting, that
|
||||
stage may need more capacity.
|
||||
</p>
|
||||
|
||||
@@ -177,17 +177,17 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Inventory Snapshot</h3>
|
||||
<p>Key inventory metrics including:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Total inventory value</strong> — on-hand quantity × unit cost for all items.</li>
|
||||
<li class="mb-1"><strong>Items below reorder point</strong> — items currently flagged as low stock.</li>
|
||||
<li class="mb-1"><strong>Recent transaction summary</strong> — log of recent stock movements.</li>
|
||||
<li class="mb-1"><strong>Total inventory value</strong> — on-hand quantity × unit cost for all items.</li>
|
||||
<li class="mb-1"><strong>Items below reorder point</strong> — items currently flagged as low stock.</li>
|
||||
<li class="mb-1"><strong>Recent transaction summary</strong> — log of recent stock movements.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Equipment & Maintenance Report</h3>
|
||||
<p>Equipment health overview for maintenance supervisors:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Equipment status distribution</strong> — how many machines are Operational, Needs Maintenance, Under Maintenance, etc.</li>
|
||||
<li class="mb-1"><strong>Upcoming maintenance tasks</strong> — scheduled tasks due soon.</li>
|
||||
<li class="mb-1"><strong>Overdue maintenance tasks</strong> — tasks past their scheduled date that are not yet complete.</li>
|
||||
<li class="mb-1"><strong>Equipment status distribution</strong> — how many machines are Operational, Needs Maintenance, Under Maintenance, etc.</li>
|
||||
<li class="mb-1"><strong>Upcoming maintenance tasks</strong> — scheduled tasks due soon.</li>
|
||||
<li class="mb-1"><strong>Overdue maintenance tasks</strong> — tasks past their scheduled date that are not yet complete.</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -211,7 +211,7 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">AI Financial Summary</h3>
|
||||
<p>
|
||||
Generates a plain-English narrative of your financial performance — revenue trends, collection
|
||||
Generates a plain-English narrative of your financial performance — revenue trends, collection
|
||||
rate, outstanding AR, and notable patterns. Accessible from the <strong>Full Analytics</strong>
|
||||
view via the "Generate AI Summary" button. Useful for summarizing performance before a meeting
|
||||
or for stakeholders who prefer prose over tables.
|
||||
@@ -227,8 +227,8 @@
|
||||
<li class="mb-1">Active job pipeline (potential future revenue)</li>
|
||||
</ul>
|
||||
<p>
|
||||
The forecast includes an <strong>outlook badge</strong> — Strong, Moderate, Tight, or
|
||||
Concerning — based on the projected net cash position at each interval.
|
||||
The forecast includes an <strong>outlook badge</strong> — Strong, Moderate, Tight, or
|
||||
Concerning — based on the projected net cash position at each interval.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Anomaly Detection</h3>
|
||||
@@ -236,10 +236,10 @@
|
||||
Scans the last 90 days of bills for unusual patterns and flags them for review:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Duplicate bills</strong> — same vendor, similar amount, close dates.</li>
|
||||
<li class="mb-1"><strong>Amount spikes</strong> — a vendor bill significantly higher than their usual amounts.</li>
|
||||
<li class="mb-1"><strong>Unusual vendors</strong> — vendors you have not used before or rarely use.</li>
|
||||
<li class="mb-1"><strong>Account overruns</strong> — expense accounts with spending well above their typical level.</li>
|
||||
<li class="mb-1"><strong>Duplicate bills</strong> — same vendor, similar amount, close dates.</li>
|
||||
<li class="mb-1"><strong>Amount spikes</strong> — a vendor bill significantly higher than their usual amounts.</li>
|
||||
<li class="mb-1"><strong>Unusual vendors</strong> — vendors you have not used before or rarely use.</li>
|
||||
<li class="mb-1"><strong>Account overruns</strong> — expense accounts with spending well above their typical level.</li>
|
||||
</ul>
|
||||
<p>Flags are sorted by severity. Review and dismiss any that are expected or already explained.</p>
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
<p>
|
||||
Drafts a collection email for overdue invoices directly from the <strong>AR Aging</strong> report.
|
||||
Click the envelope icon next to any overdue invoice to generate a draft. The tone scales with
|
||||
how many days overdue the invoice is — a gentle nudge at 7 days, a firmer reminder at 30+.
|
||||
how many days overdue the invoice is — a gentle nudge at 7 days, a firmer reminder at 30+.
|
||||
You can edit the draft before sending.
|
||||
</p>
|
||||
|
||||
@@ -258,13 +258,13 @@
|
||||
each open AR customer and assign a risk level:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>High</strong> — customer has a history of late payment and is already overdue; prioritize a phone call today.</li>
|
||||
<li class="mb-1"><strong>Medium</strong> — overdue but reasonable history, or current but spotty past performance.</li>
|
||||
<li class="mb-1"><strong>Low</strong> — typically pays on time; no immediate follow-up needed.</li>
|
||||
<li class="mb-1"><strong>High</strong> — customer has a history of late payment and is already overdue; prioritize a phone call today.</li>
|
||||
<li class="mb-1"><strong>Medium</strong> — overdue but reasonable history, or current but spotty past performance.</li>
|
||||
<li class="mb-1"><strong>Low</strong> — typically pays on time; no immediate follow-up needed.</li>
|
||||
</ul>
|
||||
<p>
|
||||
Each prediction includes an estimated number of additional days to collection and a one-sentence
|
||||
explanation of the scoring. Use this to triage your collection calls — start with High-risk
|
||||
explanation of the scoring. Use this to triage your collection calls — start with High-risk
|
||||
customers first.
|
||||
</p>
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
<p>
|
||||
Each answer includes <strong>supporting facts</strong> pulled directly from your data so you can
|
||||
verify the figures, and a <strong>follow-up suggestion</strong> for what to ask next. Claude
|
||||
will not invent numbers — if the data is not available in the snapshot, it says so. The page
|
||||
will not invent numbers — if the data is not available in the snapshot, it says so. The page
|
||||
also shows clickable example chips and remembers your last 5 questions during the session.
|
||||
</p>
|
||||
|
||||
@@ -292,13 +292,13 @@
|
||||
Inside <strong>Bank Reconciliation</strong> (<a asp-controller="BankReconciliations" asp-action="Index">/BankReconciliations</a>),
|
||||
the <strong>Reconcile</strong> working view includes an <strong>AI Auto-Match</strong> panel.
|
||||
Click <strong>"Suggest Matches"</strong> and Claude analyzes all uncleared transactions against
|
||||
your statement ending balance, then suggests which items to mark as cleared — sorted by
|
||||
your statement ending balance, then suggests which items to mark as cleared — sorted by
|
||||
confidence score with a one-sentence reason for each.
|
||||
</p>
|
||||
<p>
|
||||
Click <strong>"Apply All Suggestions"</strong> to accept them in bulk; the checkboxes are marked
|
||||
and persisted automatically. Review the highlighted rows (shown in blue) before applying if you
|
||||
want to verify each one individually. Auto-match does not complete the reconciliation — you
|
||||
want to verify each one individually. Auto-match does not complete the reconciliation — you
|
||||
still click "Complete Reconciliation" yourself once the difference reaches $0.00.
|
||||
</p>
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
Total, Amount Paid, Balance Due, Tax Account.
|
||||
</p>
|
||||
<p>
|
||||
All PDF and CSV exports respect the same date range you have selected in the report — what
|
||||
All PDF and CSV exports respect the same date range you have selected in the report — what
|
||||
you see on screen is exactly what gets exported.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Take care when changing pricing rates (labor, equipment, overhead, margins) in Settings.
|
||||
Existing quotes and invoices are not retroactively recalculated — only new quotes created
|
||||
Existing quotes and invoices are not retroactively recalculated — only new quotes created
|
||||
after the change will use the updated rates. If you need to reprice an existing quote,
|
||||
open it and recalculate manually.
|
||||
</div>
|
||||
@@ -50,15 +50,15 @@
|
||||
</h2>
|
||||
<p>
|
||||
Set your company's basic contact information. This data appears on all customer-facing documents
|
||||
— quotes, invoices, and PDFs — so it is important to keep it accurate and professional.
|
||||
— quotes, invoices, and PDFs — so it is important to keep it accurate and professional.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Company Name</strong> — appears in the page header and on all printed documents.</li>
|
||||
<li class="mb-1"><strong>Address</strong> — your shop's street address, city, state, and ZIP code. Printed on quotes and invoices.</li>
|
||||
<li class="mb-1"><strong>Phone</strong> — your main business phone number.</li>
|
||||
<li class="mb-1"><strong>Email</strong> — your business email address. Used as the reply-to address for notifications sent to customers.</li>
|
||||
<li class="mb-1"><strong>Website</strong> — optional. Shown on printed documents if entered.</li>
|
||||
<li class="mb-1"><strong>Company Logo</strong> — upload a logo image (PNG or JPG recommended). The logo appears in the top-left corner of the sidebar and at the top of all printed quotes, invoices, and PDFs.</li>
|
||||
<li class="mb-1"><strong>Company Name</strong> — appears in the page header and on all printed documents.</li>
|
||||
<li class="mb-1"><strong>Address</strong> — your shop's street address, city, state, and ZIP code. Printed on quotes and invoices.</li>
|
||||
<li class="mb-1"><strong>Phone</strong> — your main business phone number.</li>
|
||||
<li class="mb-1"><strong>Email</strong> — your business email address. Used as the reply-to address for notifications sent to customers.</li>
|
||||
<li class="mb-1"><strong>Website</strong> — optional. Shown on printed documents if entered.</li>
|
||||
<li class="mb-1"><strong>Company Logo</strong> — upload a logo image (PNG or JPG recommended). The logo appears in the top-left corner of the sidebar and at the top of all printed quotes, invoices, and PDFs.</li>
|
||||
</ul>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
@@ -77,28 +77,28 @@
|
||||
<p>
|
||||
Pricing Configuration defines the rates used by the quoting engine to automatically calculate
|
||||
the cost of every quote. You can find these settings under <strong>Settings › Company Settings › Operating Costs</strong>.
|
||||
These are your shop's default rates — individual quotes reflect these settings at the time they are created.
|
||||
These are your shop's default rates — individual quotes reflect these settings at the time they are created.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Labor</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Standard Labor Rate ($/hr)</strong> — the hourly labor cost applied to all coating work. Sandblasting prep is calculated at 1.5× this rate; masking at 0.5× — these multipliers are built into the pricing engine and are not separately configurable.</li>
|
||||
<li class="mb-1"><strong>Additional Coat Labor (%)</strong> — the percentage of the base labor cost charged for each coat beyond the first. For example, at 30%, a two-coat job charges 100% labor for the first coat and 30% for the second.</li>
|
||||
<li class="mb-1"><strong>Per-Role Labor Rates</strong> — you can optionally set a different hourly rate for each shop worker role (Coater, Sandblaster, Masker, etc.). When set, the role-specific rate overrides the standard rate for that type of work. If no role rate is configured, the standard rate is used as the fallback.</li>
|
||||
<li class="mb-1"><strong>Standard Labor Rate ($/hr)</strong> — the hourly labor cost applied to all coating work. Sandblasting prep is calculated at 1.5× this rate; masking at 0.5× — these multipliers are built into the pricing engine and are not separately configurable.</li>
|
||||
<li class="mb-1"><strong>Additional Coat Labor (%)</strong> — the percentage of the base labor cost charged for each coat beyond the first. For example, at 30%, a two-coat job charges 100% labor for the first coat and 30% for the second.</li>
|
||||
<li class="mb-1"><strong>Per-Role Labor Rates</strong> — you can optionally set a different hourly rate for each shop worker role (Coater, Sandblaster, Masker, etc.). When set, the role-specific rate overrides the standard rate for that type of work. If no role rate is configured, the standard rate is used as the fallback.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Equipment Hourly Rates</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Default Oven Rate ($/hr)</strong> — the cost of running your curing oven per hour. Used when no specific named oven is selected on a quote.</li>
|
||||
<li class="mb-1"><strong>Sandblaster Rate ($/hr)</strong> — the cost of running the sandblasting equipment per hour.</li>
|
||||
<li class="mb-1"><strong>Coating Booth Rate ($/hr)</strong> — the cost of running the spray booth per hour.</li>
|
||||
<li class="mb-1"><strong>Named Ovens</strong> — if your shop has multiple ovens with different capacities or costs, you can add them individually (e.g., "Large Oven — $18/hr, 200 sq ft"). When a named oven is selected on a quote the correct rate is applied automatically.</li>
|
||||
<li class="mb-1"><strong>Default Oven Rate ($/hr)</strong> — the cost of running your curing oven per hour. Used when no specific named oven is selected on a quote.</li>
|
||||
<li class="mb-1"><strong>Sandblaster Rate ($/hr)</strong> — the cost of running the sandblasting equipment per hour.</li>
|
||||
<li class="mb-1"><strong>Coating Booth Rate ($/hr)</strong> — the cost of running the spray booth per hour.</li>
|
||||
<li class="mb-1"><strong>Named Ovens</strong> — if your shop has multiple ovens with different capacities or costs, you can add them individually (e.g., "Large Oven — $18/hr, 200 sq ft"). When a named oven is selected on a quote the correct rate is applied automatically.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Material & Shop Supplies</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Powder Coating Cost per Sq Ft ($/sq ft)</strong> — the baseline material cost per square foot of surface area, representing your average powder and consumables cost.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies Rate (%)</strong> — a percentage applied to material and labor costs to cover miscellaneous shop supplies (abrasives, tape, fasteners, etc.) that are not tracked per-job.</li>
|
||||
<li class="mb-1"><strong>Powder Coating Cost per Sq Ft ($/sq ft)</strong> — the baseline material cost per square foot of surface area, representing your average powder and consumables cost.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies Rate (%)</strong> — a percentage applied to material and labor costs to cover miscellaneous shop supplies (abrasives, tape, fasteners, etc.) that are not tracked per-job.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2" id="facility-overhead">Facility Overhead (Rent & Utilities)</h3>
|
||||
@@ -108,9 +108,9 @@
|
||||
transparent in the pricing breakdown and ensures accurate job costing.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Monthly Rent ($)</strong> — your monthly shop lease or mortgage payment for the production facility.</li>
|
||||
<li class="mb-1"><strong>Monthly Utilities ($)</strong> — monthly gas, electricity, and water costs for the shop. Do not include costs already captured in your oven/equipment hourly rates.</li>
|
||||
<li class="mb-1"><strong>Monthly Billable Hours</strong> — the number of productive labor hours your shop operates per month (default: 160 — roughly one full-time worker for a month). This is used to convert the combined rent + utilities into a per-hour overhead rate.</li>
|
||||
<li class="mb-1"><strong>Monthly Rent ($)</strong> — your monthly shop lease or mortgage payment for the production facility.</li>
|
||||
<li class="mb-1"><strong>Monthly Utilities ($)</strong> — monthly gas, electricity, and water costs for the shop. Do not include costs already captured in your oven/equipment hourly rates.</li>
|
||||
<li class="mb-1"><strong>Monthly Billable Hours</strong> — the number of productive labor hours your shop operates per month (default: 160 — roughly one full-time worker for a month). This is used to convert the combined rent + utilities into a per-hour overhead rate.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>How it is applied:</strong> The system calculates a per-hour overhead rate as
|
||||
@@ -131,15 +131,15 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Pricing Mode, Markup, Minimums & Rush Charges</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">
|
||||
<strong>Pricing Mode</strong> — controls how the General Markup % is applied:
|
||||
<strong>Pricing Mode</strong> — controls how the General Markup % is applied:
|
||||
<ul class="mt-1">
|
||||
<li><em>Markup on Materials</em> (default) — markup is added on top of costs: <code>price = cost × (1 + markup%)</code>. A 25% markup on $100 = $125.</li>
|
||||
<li><em>Target Margin on Total Cost</em> — markup % is treated as a gross-margin target: <code>price = cost ÷ (1 − margin%)</code>. A 25% margin on $100 = $133.33. Use this mode if you think in terms of gross margin rather than markup.</li>
|
||||
<li><em>Markup on Materials</em> (default) — markup is added on top of costs: <code>price = cost × (1 + markup%)</code>. A 25% markup on $100 = $125.</li>
|
||||
<li><em>Target Margin on Total Cost</em> — markup % is treated as a gross-margin target: <code>price = cost ÷ (1 − margin%)</code>. A 25% margin on $100 = $133.33. Use this mode if you think in terms of gross margin rather than markup.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-1"><strong>General Markup (%)</strong> — your profit percentage. Its exact effect depends on the Pricing Mode selected above.</li>
|
||||
<li class="mb-1"><strong>Shop Minimum Charge ($)</strong> — a floor price for any job. If the calculated total falls below this amount the minimum charge is used instead. Set to 0 to disable.</li>
|
||||
<li class="mb-1"><strong>Rush Charge</strong> — an automatic surcharge applied to jobs with Rush or Urgent priority. Choose between a percentage of the quote total or a fixed dollar amount.</li>
|
||||
<li class="mb-1"><strong>General Markup (%)</strong> — your profit percentage. Its exact effect depends on the Pricing Mode selected above.</li>
|
||||
<li class="mb-1"><strong>Shop Minimum Charge ($)</strong> — a floor price for any job. If the calculated total falls below this amount the minimum charge is used instead. Set to 0 to disable.</li>
|
||||
<li class="mb-1"><strong>Rush Charge</strong> — an automatic surcharge applied to jobs with Rush or Urgent priority. Choose between a percentage of the quote total or a fixed dollar amount.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Part Complexity Multipliers</h3>
|
||||
@@ -149,16 +149,16 @@
|
||||
and prep time involved with intricate parts.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Simple (%)</strong> — flat panels, basic shapes. Default: 0% (no adjustment).</li>
|
||||
<li class="mb-1"><strong>Moderate (%)</strong> — standard brackets, moderate curves. Default: 5%.</li>
|
||||
<li class="mb-1"><strong>Complex (%)</strong> — intricate assemblies, deep recesses. Default: 15%.</li>
|
||||
<li class="mb-1"><strong>Extreme (%)</strong> — highly ornate, heavy prep required. Default: 25%.</li>
|
||||
<li class="mb-1"><strong>Simple (%)</strong> — flat panels, basic shapes. Default: 0% (no adjustment).</li>
|
||||
<li class="mb-1"><strong>Moderate (%)</strong> — standard brackets, moderate curves. Default: 5%.</li>
|
||||
<li class="mb-1"><strong>Complex (%)</strong> — intricate assemblies, deep recesses. Default: 15%.</li>
|
||||
<li class="mb-1"><strong>Extreme (%)</strong> — highly ornate, heavy prep required. Default: 25%.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Tax & Oven Defaults</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Default Tax Rate (%)</strong> — the sales tax percentage applied to quote and invoice totals. Set to 0 if you do not charge tax or handle it separately. Individual customers marked as Tax Exempt will always default to 0% regardless of this setting.</li>
|
||||
<li class="mb-1"><strong>Default Oven Cycle (minutes)</strong> — the default cure time used when scheduling oven batches. Individual named ovens can have their own default cycle time.</li>
|
||||
<li class="mb-1"><strong>Default Tax Rate (%)</strong> — the sales tax percentage applied to quote and invoice totals. Set to 0 if you do not charge tax or handle it separately. Individual customers marked as Tax Exempt will always default to 0% regardless of this setting.</li>
|
||||
<li class="mb-1"><strong>Default Oven Cycle (minutes)</strong> — the default cure time used when scheduling oven batches. Individual named ovens can have their own default cycle time.</li>
|
||||
</ul>
|
||||
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-0" role="alert">
|
||||
@@ -179,7 +179,7 @@
|
||||
Pricing Tiers let you offer volume discounts to commercial customers who send you regular work.
|
||||
You define each tier once in Settings, then assign a tier to each qualifying customer on their
|
||||
customer record. The quoting engine applies the discount automatically when generating a quote
|
||||
for that customer — no manual adjustment needed.
|
||||
for that customer — no manual adjustment needed.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Creating a Pricing Tier</h3>
|
||||
@@ -223,15 +223,15 @@
|
||||
Typical accounts for a powder coating shop include:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Accounts Receivable</strong> — money customers owe you (created automatically from invoices).</li>
|
||||
<li class="mb-1"><strong>Accounts Payable</strong> — money you owe vendors (created automatically from bills).</li>
|
||||
<li class="mb-1"><strong>Cost of Goods Sold</strong> — direct material costs: powder, primer, consumables used in jobs.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — indirect shop materials not tied to a specific job.</li>
|
||||
<li class="mb-1"><strong>Equipment Maintenance</strong> — service and repair costs for shop machinery.</li>
|
||||
<li class="mb-1"><strong>Utilities</strong> — gas, electricity, and water.</li>
|
||||
<li class="mb-1"><strong>Rent / Occupancy</strong> — monthly rent or lease payments for the shop premises.</li>
|
||||
<li class="mb-1"><strong>Operating Expenses</strong> — general overhead not covered by other categories.</li>
|
||||
<li class="mb-1"><strong>Revenue / Sales Income</strong> — income from completed jobs (created automatically from paid invoices).</li>
|
||||
<li class="mb-1"><strong>Accounts Receivable</strong> — money customers owe you (created automatically from invoices).</li>
|
||||
<li class="mb-1"><strong>Accounts Payable</strong> — money you owe vendors (created automatically from bills).</li>
|
||||
<li class="mb-1"><strong>Cost of Goods Sold</strong> — direct material costs: powder, primer, consumables used in jobs.</li>
|
||||
<li class="mb-1"><strong>Shop Supplies</strong> — indirect shop materials not tied to a specific job.</li>
|
||||
<li class="mb-1"><strong>Equipment Maintenance</strong> — service and repair costs for shop machinery.</li>
|
||||
<li class="mb-1"><strong>Utilities</strong> — gas, electricity, and water.</li>
|
||||
<li class="mb-1"><strong>Rent / Occupancy</strong> — monthly rent or lease payments for the shop premises.</li>
|
||||
<li class="mb-1"><strong>Operating Expenses</strong> — general overhead not covered by other categories.</li>
|
||||
<li class="mb-1"><strong>Revenue / Sales Income</strong> — income from completed jobs (created automatically from paid invoices).</li>
|
||||
</ul>
|
||||
<p>
|
||||
The chart of accounts is typically configured once during initial setup. You can add new accounts
|
||||
@@ -262,7 +262,7 @@
|
||||
<p>
|
||||
The bell icon (<i class="bi bi-bell-fill"></i>) in the top-right header appears for all logged-in
|
||||
users. A badge shows the count of unread notifications. Click it to open the dropdown showing your
|
||||
20 most recent notifications — both read and unread.
|
||||
20 most recent notifications — both read and unread.
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Unread</strong> notifications have a purple left border, a light indigo background, and a blue dot.</li>
|
||||
@@ -282,7 +282,7 @@
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Staff-recorded payments and deposits do <strong>not</strong> trigger bell notifications — those
|
||||
Staff-recorded payments and deposits do <strong>not</strong> trigger bell notifications — those
|
||||
are internal actions the staff member is already performing and does not need to be notified about.
|
||||
</div>
|
||||
</div>
|
||||
@@ -298,7 +298,7 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Platform Announcements</h3>
|
||||
<p>
|
||||
The Powder Coating Logix platform team can send announcements to your company. These are delivered
|
||||
directly to your notification bell — not as page banners. Announcements may cover scheduled
|
||||
directly to your notification bell — not as page banners. Announcements may cover scheduled
|
||||
maintenance, new features, or policy updates. They appear as <strong>Announcement</strong> type
|
||||
items in your bell dropdown and can be cleared with "Mark all read."
|
||||
</p>
|
||||
@@ -316,11 +316,11 @@
|
||||
Each toggle controls whether that event type sends a customer-facing or internal notification email:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>New Job</strong> — emails your team when a new job is created.</li>
|
||||
<li class="mb-1"><strong>New Quote</strong> — emails your team when a new quote is created.</li>
|
||||
<li class="mb-1"><strong>Job Status Change</strong> — notifies the customer when a job's status changes.</li>
|
||||
<li class="mb-1"><strong>Quote Approval</strong> — notifies the customer when a quote is approved.</li>
|
||||
<li class="mb-1"><strong>Payment Received</strong> — sends the customer a payment confirmation email when a payment is recorded against their invoice.</li>
|
||||
<li class="mb-1"><strong>New Job</strong> — emails your team when a new job is created.</li>
|
||||
<li class="mb-1"><strong>New Quote</strong> — emails your team when a new quote is created.</li>
|
||||
<li class="mb-1"><strong>Job Status Change</strong> — notifies the customer when a job's status changes.</li>
|
||||
<li class="mb-1"><strong>Quote Approval</strong> — notifies the customer when a quote is approved.</li>
|
||||
<li class="mb-1"><strong>Payment Received</strong> — sends the customer a payment confirmation email when a payment is recorded against their invoice.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Alert Thresholds</h3>
|
||||
@@ -329,9 +329,9 @@
|
||||
in the UI (for example, flagging a quote as expiring soon in the quotes list).
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Quote Expiry Warning (days before)</strong> — quotes expiring within this many days are flagged in the quotes list.</li>
|
||||
<li class="mb-1"><strong>Due Date Warning (days before)</strong> — invoices coming due within this many days are highlighted.</li>
|
||||
<li class="mb-1"><strong>Maintenance Alert (days ahead)</strong> — upcoming maintenance tasks scheduled within this many days are highlighted.</li>
|
||||
<li class="mb-1"><strong>Quote Expiry Warning (days before)</strong> — quotes expiring within this many days are flagged in the quotes list.</li>
|
||||
<li class="mb-1"><strong>Due Date Warning (days before)</strong> — invoices coming due within this many days are highlighted.</li>
|
||||
<li class="mb-1"><strong>Maintenance Alert (days ahead)</strong> — upcoming maintenance tasks scheduled within this many days are highlighted.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Automated Payment Reminders</h3>
|
||||
@@ -341,11 +341,11 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Enable Payment Reminders</strong> — master on/off toggle. When off, no automated
|
||||
<strong>Enable Payment Reminders</strong> — master on/off toggle. When off, no automated
|
||||
reminder emails are sent regardless of the day settings below.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Reminder Days</strong> — a comma-separated list of day milestones (days past the invoice due date)
|
||||
<strong>Reminder Days</strong> — a comma-separated list of day milestones (days past the invoice due date)
|
||||
at which a reminder email is sent. For example, <code>7,14,30</code> sends one reminder at
|
||||
7 days overdue, another at 14 days, and a final one at 30 days. You can use any positive
|
||||
whole numbers (e.g., <code>3,10,21,45</code>).
|
||||
@@ -364,7 +364,7 @@
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Payment reminders are sent once per threshold per invoice — if you have <code>7,14,30</code>
|
||||
Payment reminders are sent once per threshold per invoice — if you have <code>7,14,30</code>
|
||||
configured, a single invoice will receive at most three reminder emails over the course of its
|
||||
collection cycle, one at each milestone. An invoice that gets paid between milestones will not
|
||||
receive any further reminders (its status changes to Paid and it is excluded from future checks).
|
||||
@@ -378,13 +378,13 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Enable SMS Notifications</strong> — master company toggle. The first time you enable it
|
||||
<strong>Enable SMS Notifications</strong> — master company toggle. The first time you enable it
|
||||
you must agree to the SMS terms of service, which covers your obligation to obtain prior written
|
||||
customer consent before texting them (required by FCC/TCPA regulations). Once agreed, you can
|
||||
toggle SMS on and off freely without re-agreeing unless the terms are updated.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Per-customer opt-in</strong> — even with SMS enabled here, a customer will only receive
|
||||
<strong>Per-customer opt-in</strong> — even with SMS enabled here, a customer will only receive
|
||||
texts if their record has a <strong>Mobile Phone</strong> number and the <strong>SMS Opt-In</strong>
|
||||
box checked. You are responsible for obtaining each customer's consent before enabling this on
|
||||
their record.
|
||||
@@ -393,12 +393,12 @@
|
||||
<h4 class="h6 fw-semibold mt-3 mb-2" style="font-size:.85rem;">What events send an SMS</h4>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">
|
||||
<strong>Quote Sent</strong> — sends the customer a link to review and approve or decline their
|
||||
<strong>Quote Sent</strong> — sends the customer a link to review and approve or decline their
|
||||
quote directly from their phone. Click <strong>Send Quote via SMS</strong> on any quote's Details
|
||||
page. If an email was already sent for the same quote, the existing approval link is reused so both
|
||||
delivery methods work simultaneously.
|
||||
</li>
|
||||
<li class="mb-1"><strong>Job Completed</strong> — notifies the customer their job is done and ready for pickup.</li>
|
||||
<li class="mb-1"><strong>Job Completed</strong> — notifies the customer their job is done and ready for pickup.</li>
|
||||
</ul>
|
||||
<p class="small text-muted mb-3">
|
||||
Both SMS message templates can be customised at
|
||||
@@ -413,7 +413,7 @@
|
||||
</p>
|
||||
<p>
|
||||
When a <strong>Shop Floor</strong> worker marks a job complete the SMS is sent automatically using
|
||||
the template — no compose step.
|
||||
the template — no compose step.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
@@ -421,7 +421,7 @@
|
||||
Every outbound SMS automatically includes opt-out instructions ("Reply STOP to opt out"). If a
|
||||
customer replies STOP, they are immediately opted out and will receive no further messages.
|
||||
If they change their mind, they can reply <strong>START</strong>, <strong>YES</strong>, or <strong>UNSTOP</strong>
|
||||
to re-subscribe automatically — no action needed from your staff. You can also manually re-enable
|
||||
to re-subscribe automatically — no action needed from your staff. You can also manually re-enable
|
||||
SMS on their customer record.
|
||||
</div>
|
||||
</div>
|
||||
@@ -438,10 +438,10 @@
|
||||
</p>
|
||||
<p>For each named oven you can set:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Oven Name</strong> — e.g., "Main Oven", "Small Parts Oven".</li>
|
||||
<li class="mb-1"><strong>Operating Cost ($/hr)</strong> — the hourly cost to run this specific oven.</li>
|
||||
<li class="mb-1"><strong>Max Load Capacity (sq ft)</strong> — the maximum total surface area that fits in one batch. The Oven Scheduler uses this to show remaining capacity as you add jobs.</li>
|
||||
<li class="mb-1"><strong>Default Cycle Time (minutes)</strong> — the default cure duration for this oven, used when scheduling batches.</li>
|
||||
<li class="mb-1"><strong>Oven Name</strong> — e.g., "Main Oven", "Small Parts Oven".</li>
|
||||
<li class="mb-1"><strong>Operating Cost ($/hr)</strong> — the hourly cost to run this specific oven.</li>
|
||||
<li class="mb-1"><strong>Max Load Capacity (sq ft)</strong> — the maximum total surface area that fits in one batch. The Oven Scheduler uses this to show remaining capacity as you add jobs.</li>
|
||||
<li class="mb-1"><strong>Default Cycle Time (minutes)</strong> — the default cure duration for this oven, used when scheduling batches.</li>
|
||||
</ul>
|
||||
<p>
|
||||
When a named oven is selected on a quote or job, its specific cost rate is used instead of
|
||||
@@ -456,14 +456,14 @@
|
||||
</h2>
|
||||
<p>
|
||||
The <strong>Data Lookups</strong> tab in Company Settings lets you customize the dropdown
|
||||
options that appear throughout the application — job statuses, job priorities, quote statuses,
|
||||
options that appear throughout the application — job statuses, job priorities, quote statuses,
|
||||
appointment types, and inventory categories. You can rename labels, change colours, reorder
|
||||
items, and add new ones to match your shop's terminology.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
<strong>Status codes drive workflow logic</strong> — the underlying code value (e.g.
|
||||
<strong>Status codes drive workflow logic</strong> — the underlying code value (e.g.
|
||||
<code>IN_PROGRESS</code>, <code>COMPLETED</code>) is what the system uses internally.
|
||||
You can safely rename the display label, but do not change the code of a built-in
|
||||
status unless you understand the impact on automation and reporting.
|
||||
@@ -475,7 +475,7 @@
|
||||
<li class="mb-2">Go to <strong>Settings › Company Settings › Data Lookups</strong>.</li>
|
||||
<li class="mb-2">Select the sub-tab for the lookup type (e.g., Job Statuses, Job Priorities).</li>
|
||||
<li class="mb-2">Click <strong>Add</strong> to open the form.</li>
|
||||
<li class="mb-2">Type a <strong>Display Name</strong> — the Code field auto-fills as you type
|
||||
<li class="mb-2">Type a <strong>Display Name</strong> — the Code field auto-fills as you type
|
||||
(e.g., "In Progress" → <code>IN_PROGRESS</code>). You can override it if needed.</li>
|
||||
<li class="mb-2">Choose a color and fill in any additional fields.</li>
|
||||
<li class="mb-2">Click <strong>Save</strong>.</li>
|
||||
@@ -483,16 +483,16 @@
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">About the Code Field</h3>
|
||||
<p>
|
||||
Each lookup item has a <strong>Code</strong> — a short uppercase identifier used internally
|
||||
Each lookup item has a <strong>Code</strong> — a short uppercase identifier used internally
|
||||
(e.g., <code>QUALITY_CHECK</code>, <code>URGENT</code>). When adding a new item:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">The Code auto-derives from the Display Name as you type — spaces become underscores, everything is uppercased.</li>
|
||||
<li class="mb-1">The Code auto-derives from the Display Name as you type — spaces become underscores, everything is uppercased.</li>
|
||||
<li class="mb-1">You can edit the Code directly; it will stay uppercase and only allow letters, numbers, and underscores.</li>
|
||||
<li class="mb-1">Once saved, the Code cannot be changed — it is locked to prevent breaking existing records that reference it.</li>
|
||||
<li class="mb-1">Once saved, the Code cannot be changed — it is locked to prevent breaking existing records that reference it.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Inventory Categories — Is Coating Flag</h3>
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Inventory Categories — Is Coating Flag</h3>
|
||||
<p>
|
||||
The <strong>Inventory Categories</strong> sub-tab includes an important flag: <strong>Is Coating</strong>.
|
||||
Only inventory items whose category has this flag enabled will appear in the powder color dropdown
|
||||
@@ -509,14 +509,14 @@
|
||||
<p>
|
||||
The <strong>AI Profile</strong> tab in Company Settings lets you describe your shop's
|
||||
specialties, typical work, and pricing preferences in plain text. This context is automatically
|
||||
included in the system prompt sent to AI for photo quoting — resulting in more accurate and
|
||||
included in the system prompt sent to AI for photo quoting — resulting in more accurate and
|
||||
relevant estimates.
|
||||
</p>
|
||||
<p>Examples of useful AI Profile content:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1">"We specialize in automotive parts and wheels. Most items are steel or aluminum."</li>
|
||||
<li class="mb-1">"Our minimum charge is $75. We charge a 20% premium for intricate wrought iron."</li>
|
||||
<li class="mb-1">"We rarely do sandblasting in-house — assume parts arrive pre-blasted."</li>
|
||||
<li class="mb-1">"We rarely do sandblasting in-house — assume parts arrive pre-blasted."</li>
|
||||
</ul>
|
||||
<p>
|
||||
The AI Profile is optional but recommended. The more specific you are, the better the AI
|
||||
@@ -549,7 +549,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td><span class="badge bg-danger">Company Admin</span></td><td>Full company access including settings, users, and billing. All permissions granted automatically.</td></tr>
|
||||
<tr><td><span class="badge bg-warning text-dark">Manager</span></td><td>Jobs, quotes, invoices, customers, inventory, vendors, reports — no settings or user management.</td></tr>
|
||||
<tr><td><span class="badge bg-warning text-dark">Manager</span></td><td>Jobs, quotes, invoices, customers, inventory, vendors, reports — no settings or user management.</td></tr>
|
||||
<tr><td><span class="badge bg-success">Accountant</span></td><td>Financial focus: bills & AP, invoices, bank reconciliations, chart of accounts, vendors, purchase orders, and reports. No job management or settings access.</td></tr>
|
||||
<tr><td><span class="badge bg-primary">Worker</span></td><td>Create and edit jobs and quotes; no settings, billing, or user management.</td></tr>
|
||||
<tr><td><span class="badge bg-secondary">Viewer</span></td><td>Read-only access to most data.</td></tr>
|
||||
@@ -565,7 +565,7 @@
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Fine-Grained Permissions</h3>
|
||||
<p>
|
||||
Below the role dropdown, each user has individual permission checkboxes. These let you grant
|
||||
specific capabilities independently of the role — for example, giving a Worker access to view
|
||||
specific capabilities independently of the role — for example, giving a Worker access to view
|
||||
reports without making them a Manager. Company Admins always have all permissions and the
|
||||
checkboxes are locked.
|
||||
</p>
|
||||
@@ -616,32 +616,32 @@
|
||||
Company Administrators can export a complete copy of their company's data at any time from
|
||||
<a href="/AccountDataExport">Settings › Download Your Data</a> (or navigate directly to
|
||||
<code>/AccountDataExport</code>). This feature is available even when a subscription has
|
||||
expired — your data is never locked away.
|
||||
expired — your data is never locked away.
|
||||
</p>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">What Can Be Exported</h3>
|
||||
<p>Choose any combination of the following data types:</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Customers</strong> — all customer records including contact info, type, and credit settings.</li>
|
||||
<li class="mb-1"><strong>Jobs</strong> — all job records with status, priority, assigned worker, and dates.</li>
|
||||
<li class="mb-1"><strong>Quotes</strong> — all quote records with status and pricing.</li>
|
||||
<li class="mb-1"><strong>Invoices</strong> — all invoice records with amounts paid and status.</li>
|
||||
<li class="mb-1"><strong>Inventory</strong> — all inventory items with quantities and costs.</li>
|
||||
<li class="mb-1"><strong>Equipment</strong> — all equipment records and statuses.</li>
|
||||
<li class="mb-1"><strong>Vendors</strong> — all vendor/supplier records.</li>
|
||||
<li class="mb-1"><strong>Shop Workers</strong> — all shop worker records.</li>
|
||||
<li class="mb-1"><strong>Users / Logins</strong> — all user accounts and their roles.</li>
|
||||
<li class="mb-1"><strong>Customers</strong> — all customer records including contact info, type, and credit settings.</li>
|
||||
<li class="mb-1"><strong>Jobs</strong> — all job records with status, priority, assigned worker, and dates.</li>
|
||||
<li class="mb-1"><strong>Quotes</strong> — all quote records with status and pricing.</li>
|
||||
<li class="mb-1"><strong>Invoices</strong> — all invoice records with amounts paid and status.</li>
|
||||
<li class="mb-1"><strong>Inventory</strong> — all inventory items with quantities and costs.</li>
|
||||
<li class="mb-1"><strong>Equipment</strong> — all equipment records and statuses.</li>
|
||||
<li class="mb-1"><strong>Vendors</strong> — all vendor/supplier records.</li>
|
||||
<li class="mb-1"><strong>Shop Workers</strong> — all shop worker records.</li>
|
||||
<li class="mb-1"><strong>Users / Logins</strong> — all user accounts and their roles.</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="h6 fw-semibold mt-3 mb-2">Export Formats</h3>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-1"><strong>Excel (.xlsx)</strong> — all selected data types in a single workbook, one tab per data type. Best for viewing in Excel or Google Sheets.</li>
|
||||
<li class="mb-1"><strong>CSV (.zip)</strong> — one CSV file per selected data type, bundled into a single ZIP archive. Best for importing into other software.</li>
|
||||
<li class="mb-1"><strong>Excel (.xlsx)</strong> — all selected data types in a single workbook, one tab per data type. Best for viewing in Excel or Google Sheets.</li>
|
||||
<li class="mb-1"><strong>CSV (.zip)</strong> — one CSV file per selected data type, bundled into a single ZIP archive. Best for importing into other software.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
The export is generated on-demand and delivered directly to your browser. Nothing is stored
|
||||
on the server — each export is a fresh snapshot of your current data.
|
||||
on the server — each export is a fresh snapshot of your current data.
|
||||
</p>
|
||||
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -665,20 +665,20 @@
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li class="mb-2">
|
||||
<strong>Default Quote Validity Period (days)</strong> — the number of days after creation before
|
||||
<strong>Default Quote Validity Period (days)</strong> — the number of days after creation before
|
||||
a quote expires. For example, a value of 30 means all new quotes expire 30 days after their
|
||||
quote date. Expired quotes are flagged in the quote list and customers cannot act on them without
|
||||
you creating a revised quote. Adjust this based on how stable your pricing is — shops with
|
||||
you creating a revised quote. Adjust this based on how stable your pricing is — shops with
|
||||
volatile powder costs may want a shorter validity period (e.g., 14 days).
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Default Payment Terms</strong> — the payment terms applied to new customer records
|
||||
<strong>Default Payment Terms</strong> — the payment terms applied to new customer records
|
||||
and new invoices (e.g., "Net 30", "Net 15", "Due on Receipt"). This determines when invoices
|
||||
become due and affects the AR Aging report. The default can be overridden on each customer
|
||||
record and on individual invoices.
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<strong>Currency</strong> — the currency symbol and formatting used throughout the system for
|
||||
<strong>Currency</strong> — the currency symbol and formatting used throughout the system for
|
||||
all monetary values (e.g., USD, CAD, AUD, GBP). This is a display setting only and does not
|
||||
perform any currency conversion. Set this once during initial setup to match your local currency.
|
||||
</li>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<i class="bi bi-info-circle text-primary me-2"></i>Overview
|
||||
</h2>
|
||||
<p>
|
||||
Your profile page is where you manage your personal account settings — the information that
|
||||
Your profile page is where you manage your personal account settings — the information that
|
||||
identifies you in the system, your login credentials, your profile photo, and how the
|
||||
application looks on your screen.
|
||||
</p>
|
||||
@@ -51,10 +51,10 @@
|
||||
<li class="mb-1">
|
||||
Update any of the following fields:
|
||||
<ul class="mt-1">
|
||||
<li><strong>First Name</strong> and <strong>Last Name</strong> — your display name across the system.</li>
|
||||
<li><strong>Email Address</strong> — used for login and system notifications. Must be a valid email format and unique in the system.</li>
|
||||
<li><strong>Phone Number</strong> — optional; your direct contact number.</li>
|
||||
<li><strong>Job Title</strong> — optional; displayed on your profile card.</li>
|
||||
<li><strong>First Name</strong> and <strong>Last Name</strong> — your display name across the system.</li>
|
||||
<li><strong>Email Address</strong> — used for login and system notifications. Must be a valid email format and unique in the system.</li>
|
||||
<li><strong>Phone Number</strong> — optional; your direct contact number.</li>
|
||||
<li><strong>Job Title</strong> — optional; displayed on your profile card.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-1">Click <strong>Save Changes</strong>.</li>
|
||||
@@ -89,12 +89,12 @@
|
||||
<p>Your new password must meet all of the following requirements:</p>
|
||||
<ul class="list-unstyled mb-3">
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least <strong>8 characters</strong> long</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>uppercase letter</strong> (A–Z)</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>lowercase letter</strong> (a–z)</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>digit</strong> (0–9)</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>uppercase letter</strong> (A–Z)</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>lowercase letter</strong> (a–z)</li>
|
||||
<li class="mb-1"><i class="bi bi-check-circle-fill text-success me-2"></i>At least one <strong>digit</strong> (0–9)</li>
|
||||
</ul>
|
||||
<p>
|
||||
Example of a strong password: <code>ShopFloor2025!</code> — long, mixed case, has a number,
|
||||
Example of a strong password: <code>ShopFloor2025!</code> — long, mixed case, has a number,
|
||||
and easy for you to remember but hard to guess.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
@@ -158,7 +158,7 @@
|
||||
<li class="mb-1">Install an authenticator app on your phone if you do not have one already.</li>
|
||||
<li class="mb-1">Scan the QR code shown on the setup page with your authenticator app.</li>
|
||||
<li class="mb-1">Enter the 6-digit code from the app to confirm setup.</li>
|
||||
<li class="mb-1">Save your <strong>recovery codes</strong> in a safe place — you will need them if you lose access to your phone.</li>
|
||||
<li class="mb-1">Save your <strong>recovery codes</strong> in a safe place — you will need them if you lose access to your phone.</li>
|
||||
</ol>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
@@ -174,8 +174,8 @@
|
||||
<i class="bi bi-fingerprint text-primary me-2"></i>Passkeys & Biometric Login
|
||||
</h2>
|
||||
<p>
|
||||
Passkeys let you sign in using your device's built-in biometrics — Face ID or Touch ID on iPhone and Mac,
|
||||
fingerprint or face unlock on Android, or Windows Hello on a PC — without ever typing your password.
|
||||
Passkeys let you sign in using your device's built-in biometrics — Face ID or Touch ID on iPhone and Mac,
|
||||
fingerprint or face unlock on Android, or Windows Hello on a PC — without ever typing your password.
|
||||
This is especially useful for shop floor workers who may have dirty or gloved hands.
|
||||
</p>
|
||||
|
||||
@@ -197,10 +197,10 @@
|
||||
<ol class="mb-3">
|
||||
<li class="mb-1">Open the login page.</li>
|
||||
<li class="mb-1">
|
||||
Click the <strong>Use Face ID / Biometric</strong> button (the label matches your device —
|
||||
Click the <strong>Use Face ID / Biometric</strong> button (the label matches your device —
|
||||
"Use Windows Hello", "Use Touch ID", etc.).
|
||||
</li>
|
||||
<li class="mb-1">Follow the device prompt. You are signed in immediately — no password required.</li>
|
||||
<li class="mb-1">Follow the device prompt. You are signed in immediately — no password required.</li>
|
||||
</ol>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-3" role="alert">
|
||||
<i class="bi bi-lightbulb-fill flex-shrink-0 mt-1"></i>
|
||||
@@ -215,13 +215,13 @@
|
||||
<p>
|
||||
Go to <a href="/Passkey/Manage">Passkeys & Biometrics</a> (user menu → Passkeys & Biometrics)
|
||||
to see all devices you have enrolled. Each entry shows the device name, the date it was added,
|
||||
and when it was last used. Click <strong>Remove</strong> to revoke a passkey from a specific device —
|
||||
and when it was last used. Click <strong>Remove</strong> to revoke a passkey from a specific device —
|
||||
useful if you lose a phone or change devices.
|
||||
</p>
|
||||
<div class="alert alert-permanent alert-warning d-flex gap-2 mb-0" role="alert">
|
||||
<i class="bi bi-exclamation-triangle-fill flex-shrink-0 mt-1"></i>
|
||||
<div>
|
||||
Removing a passkey does not log you out — it just means that device will require a password
|
||||
Removing a passkey does not log you out — it just means that device will require a password
|
||||
on the next login. If you lose a device, remove its passkey here as soon as possible.
|
||||
</div>
|
||||
</div>
|
||||
@@ -236,14 +236,14 @@
|
||||
Your choices are saved to your account and follow you across devices when you log in.
|
||||
</p>
|
||||
|
||||
<h5 class="fw-semibold mt-3 mb-2">Theme — Light or Dark Mode</h5>
|
||||
<h5 class="fw-semibold mt-3 mb-2">Theme — Light or Dark Mode</h5>
|
||||
<p>
|
||||
Choose between <strong>Light</strong> mode (white backgrounds, dark text) and
|
||||
<strong>Dark</strong> mode (dark backgrounds, light text).
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li><strong>Light</strong> — easier to read in bright environments like a well-lit office.</li>
|
||||
<li><strong>Dark</strong> — easier on the eyes in low-light conditions, such as a dimly lit shop floor or late-night work.</li>
|
||||
<li><strong>Light</strong> — easier to read in bright environments like a well-lit office.</li>
|
||||
<li><strong>Dark</strong> — easier on the eyes in low-light conditions, such as a dimly lit shop floor or late-night work.</li>
|
||||
</ul>
|
||||
<p>
|
||||
To change the theme, open the Appearance tab, select your preferred option, and click
|
||||
@@ -253,7 +253,7 @@
|
||||
<h5 class="fw-semibold mt-3 mb-2">Sidebar Color</h5>
|
||||
<p>
|
||||
You can also choose the color scheme for the left navigation sidebar. A range of color
|
||||
options is available — from a clean white sidebar to darker branded colors. Pick whichever
|
||||
options is available — from a clean white sidebar to darker branded colors. Pick whichever
|
||||
suits your taste or matches your shop's brand.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<i class="bi bi-info-circle text-primary me-2"></i>Overview
|
||||
</h2>
|
||||
<p>
|
||||
Vendors are the companies you buy from — powder suppliers, primer manufacturers, consumables
|
||||
Vendors are the companies you buy from — powder suppliers, primer manufacturers, consumables
|
||||
distributors, equipment service providers, and anyone else who sends you a bill. Maintaining
|
||||
accurate vendor records lets you track what you owe, reorder stock quickly, and keep purchase
|
||||
history organized.
|
||||
@@ -42,12 +42,12 @@
|
||||
<li class="mb-2">
|
||||
Fill in the vendor details:
|
||||
<ul class="mt-1">
|
||||
<li><strong>Vendor Name</strong> — the company name as it appears on their invoices.</li>
|
||||
<li><strong>Contact Name</strong> — your sales rep or accounts contact.</li>
|
||||
<li><strong>Email & Phone</strong> — for placing orders and following up on deliveries.</li>
|
||||
<li><strong>Address</strong> — the vendor's billing address.</li>
|
||||
<li><strong>Website</strong> — optional, handy for quick product lookups.</li>
|
||||
<li><strong>Account Number</strong> — your account number with this vendor, if applicable.</li>
|
||||
<li><strong>Vendor Name</strong> — the company name as it appears on their invoices.</li>
|
||||
<li><strong>Contact Name</strong> — your sales rep or accounts contact.</li>
|
||||
<li><strong>Email & Phone</strong> — for placing orders and following up on deliveries.</li>
|
||||
<li><strong>Address</strong> — the vendor's billing address.</li>
|
||||
<li><strong>Website</strong> — optional, handy for quick product lookups.</li>
|
||||
<li><strong>Account Number</strong> — your account number with this vendor, if applicable.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-2">Set the <strong>Payment Terms</strong> (see below).</li>
|
||||
@@ -64,7 +64,7 @@
|
||||
</h2>
|
||||
<p>
|
||||
The <strong>Default Expense Account</strong> field records which accounting category purchases from
|
||||
this vendor typically fall under — for example, <em>Cost of Goods Sold</em>, <em>Shop Supplies</em>,
|
||||
this vendor typically fall under — for example, <em>Cost of Goods Sold</em>, <em>Shop Supplies</em>,
|
||||
or <em>Equipment Maintenance</em>.
|
||||
</p>
|
||||
<p>
|
||||
@@ -87,11 +87,11 @@
|
||||
examples include:
|
||||
</p>
|
||||
<ul class="mb-3">
|
||||
<li><strong>Net 15</strong> — payment due within 15 days of the invoice date.</li>
|
||||
<li><strong>Net 30</strong> — payment due within 30 days (the most common).</li>
|
||||
<li><strong>Net 60</strong> — payment due within 60 days.</li>
|
||||
<li><strong>Due on Receipt</strong> — pay immediately on delivery.</li>
|
||||
<li><strong>2/10 Net 30</strong> — 2% discount if paid within 10 days, otherwise full amount due in 30.</li>
|
||||
<li><strong>Net 15</strong> — payment due within 15 days of the invoice date.</li>
|
||||
<li><strong>Net 30</strong> — payment due within 30 days (the most common).</li>
|
||||
<li><strong>Net 60</strong> — payment due within 60 days.</li>
|
||||
<li><strong>Due on Receipt</strong> — pay immediately on delivery.</li>
|
||||
<li><strong>2/10 Net 30</strong> — 2% discount if paid within 10 days, otherwise full amount due in 30.</li>
|
||||
</ul>
|
||||
<p>
|
||||
When you enter terms here, they are automatically used as the default on any bills generated from
|
||||
@@ -114,7 +114,7 @@
|
||||
restocking an inventory item.
|
||||
</p>
|
||||
<p>
|
||||
You can mark more than one vendor as preferred — it is a flag, not an exclusive designation. Use
|
||||
You can mark more than one vendor as preferred — it is a flag, not an exclusive designation. Use
|
||||
it however makes sense for your workflow.
|
||||
</p>
|
||||
</section>
|
||||
@@ -127,17 +127,17 @@
|
||||
Open a vendor's Details page by clicking their name in the vendor list. Here you will find:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Contact information</strong> — all the details you entered, in one place.</li>
|
||||
<li><strong>Contact information</strong> — all the details you entered, in one place.</li>
|
||||
<li>
|
||||
<strong>Inventory Items tab</strong> — a list of every inventory item linked to this vendor.
|
||||
<strong>Inventory Items tab</strong> — a list of every inventory item linked to this vendor.
|
||||
This tells you at a glance what you buy from them. Click any item to open it.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Purchase History tab</strong> — a log of all purchase orders and transactions recorded
|
||||
<strong>Purchase History tab</strong> — a log of all purchase orders and transactions recorded
|
||||
against this vendor, with dates and amounts.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Notes</strong> — any notes you or your colleagues have saved.
|
||||
<strong>Notes</strong> — any notes you or your colleagues have saved.
|
||||
</li>
|
||||
</ul>
|
||||
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">
|
||||
|
||||
Reference in New Issue
Block a user