diff --git a/src/PowderCoating.Web/Views/Bills/Edit.cshtml b/src/PowderCoating.Web/Views/Bills/Edit.cshtml
index 69b4eff..af3317b 100644
--- a/src/PowderCoating.Web/Views/Bills/Edit.cshtml
+++ b/src/PowderCoating.Web/Views/Bills/Edit.cshtml
@@ -4,7 +4,7 @@
ViewData["Title"] = "Edit Bill";
ViewData["PageIcon"] = "bi-pencil-square";
ViewData["PageHelpTitle"] = "Edit Bill";
- ViewData["PageHelpContent"] = "Bills can only be edited while in Draft status. Once marked Open, they are locked — Void the bill and recreate it if corrections are needed after confirmation.";
+ ViewData["PageHelpContent"] = "Bills can only be edited while in Draft status. Once marked Open, they are locked — Void the bill and recreate it if corrections are needed after confirmation.";
}
@@ -87,7 +87,7 @@
}
-
JPG, PNG, GIF, WebP, or PDF — up to 10 MB.
+
JPG, PNG, GIF, WebP, or PDF — up to 10 MB.
@@ -100,7 +100,7 @@
- — Account —
+ — Account —
@foreach (var item in (IEnumerable)ViewBag.ExpenseAccounts)
{
@item.Text
@@ -181,7 +181,7 @@
- —
+ —
@foreach (var item in (IEnumerable)ViewBag.Jobs)
{
@item.Text
diff --git a/src/PowderCoating.Web/Views/Invoices/Edit.cshtml b/src/PowderCoating.Web/Views/Invoices/Edit.cshtml
index c7b9b41..2b21404 100644
--- a/src/PowderCoating.Web/Views/Invoices/Edit.cshtml
+++ b/src/PowderCoating.Web/Views/Invoices/Edit.cshtml
@@ -38,7 +38,7 @@
+ data-bs-content="Invoice Date is the date of issue and the reference for payment terms. Due Date drives overdue status and A/R aging. Payment Terms prints on the invoice — changing it here only affects this invoice. Draft, Sent, and Overdue invoices can be edited; Paid and Partially Paid invoices are locked.">
@@ -79,7 +79,7 @@
+ data-bs-content="Each row is a billable line on the invoice. Qty × Unit Price = Total per line; you can also override Total directly. Color is optional and appears under the description when printed. Add manual lines for charges not in the original job (e.g., rush fee, pickup charge).">
@@ -163,7 +163,7 @@
+ data-bs-content="Customer Notes appear on the printed and emailed invoice — use these for payment instructions, thank-you messages, or job-specific reminders. Internal Notes are only visible to staff in the app and are never sent to the customer.">
diff --git a/src/PowderCoating.Web/Views/Jobs/Create.cshtml b/src/PowderCoating.Web/Views/Jobs/Create.cshtml
index 5426ad7..2998654 100644
--- a/src/PowderCoating.Web/Views/Jobs/Create.cshtml
+++ b/src/PowderCoating.Web/Views/Jobs/Create.cshtml
@@ -19,7 +19,7 @@
Pre-filled from template @ViewBag.TemplateName .
- Items and coatings have been loaded — review and adjust before saving.
+ Items and coatings have been loaded — review and adjust before saving.
@@ -50,7 +50,7 @@
+ data-bs-content="Core job information. Priority and due date are visible on the shop floor board and affect how work is sorted. Customer PO is the customer's own reference number for their purchase order — include it so it appears on invoices. Special Instructions go directly to the shop floor worker.">
@@ -70,7 +70,7 @@
+ data-bs-content="Controls sort order on the shop floor board and job list. Rush and Urgent jobs are highlighted in red/orange. Normal is the default. Raise priority only when the customer has an actual deadline constraint — overuse of Rush dilutes its meaning for the shop floor team.">
@@ -100,7 +100,7 @@
+ data-bs-content="The customer's deadline — when the work must be ready for pickup or delivery. Overdue jobs (past due date and not yet completed) are highlighted in red on the job list.">
@@ -130,7 +130,7 @@
+ data-bs-content="Free-text notes visible to the shop floor worker on the work order. Use this for masking requirements, handling notes, customer preferences, or anything that doesn't fit in the item-level notes — e.g., 'Keep brackets separated, customer allergic to zinc primer'.">
@@ -201,7 +201,7 @@
+ data-bs-content="Each item represents a physical piece being coated. Use the wizard to pick from the catalog, enter custom dimensions, or upload a photo for AI analysis. Each item gets its own coating specification — color, powder, finish, and cure details. You can add multiple coating passes per item for multi-color or primer+topcoat work.">
@@ -276,7 +276,7 @@
Pricing will update automatically as you add items.
Items Subtotal: $0.00
- Oven (1 batch × 45 min):
+ Oven (1 batch × 45 min):
$0.00
diff --git a/src/PowderCoating.Web/Views/Jobs/Edit.cshtml b/src/PowderCoating.Web/Views/Jobs/Edit.cshtml
index 517baf3..9a9fdab 100644
--- a/src/PowderCoating.Web/Views/Jobs/Edit.cshtml
+++ b/src/PowderCoating.Web/Views/Jobs/Edit.cshtml
@@ -26,7 +26,7 @@
+ data-bs-content="Core job information. Priority and due date are visible on the shop floor board and job list. Customer PO is the customer's own reference number — it appears on invoices. Special Instructions go directly to the shop floor worker on the work order.">
@@ -57,7 +57,7 @@
+ data-bs-content="Controls sort order on the shop floor board and job list. Rush and Urgent jobs are highlighted in red/orange. Normal is the default. Raise priority only when the customer has an actual deadline constraint — overuse of Rush dilutes its meaning for the shop floor team.">
@@ -85,7 +85,7 @@
+ data-bs-content="The customer's deadline — when the work must be ready for pickup or delivery. Overdue jobs (past due date and not yet completed) are highlighted in red on the job list.">
@@ -170,7 +170,7 @@
+ data-bs-content="Each item represents a physical piece being coated. Use the wizard to pick from the catalog, enter custom dimensions, or upload a photo for AI analysis. Each item gets its own coating specification — color, powder, finish, and cure details. You can add multiple coating passes per item for multi-color or primer+topcoat work.">
@@ -245,7 +245,7 @@
Pricing will update automatically as you add items.
Items Subtotal: $0.00
- Oven (1 batch × 45 min):
+ Oven (1 batch × 45 min):
$0.00
diff --git a/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml b/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml
index d0d98d6..239fda6 100644
--- a/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml
+++ b/src/PowderCoating.Web/Views/Jobs/EditItems.cshtml
@@ -2,7 +2,7 @@
@using PowderCoating.Core.Entities
@{
- ViewData["Title"] = $"Edit Items — {Model.JobNumber}";
+ ViewData["Title"] = $"Edit Items — {Model.JobNumber}";
ViewData["PageIcon"] = "bi-list-check";
}
@@ -67,7 +67,7 @@
Pricing will update automatically as you add items.
Items Subtotal: $0.00
- Oven (1 batch × 45 min):
+ Oven (1 batch × 45 min):
$0.00
diff --git a/src/PowderCoating.Web/Views/Profile/Index.cshtml b/src/PowderCoating.Web/Views/Profile/Index.cshtml
index 4bbd352..a57ecb8 100644
--- a/src/PowderCoating.Web/Views/Profile/Index.cshtml
+++ b/src/PowderCoating.Web/Views/Profile/Index.cshtml
@@ -85,7 +85,7 @@
+ data-bs-content="First Name, Last Name, and Phone are editable and saved when you click Save Profile. Email is shown here for reference â€" change it on the Security tab. Department, Position, Role, and Employee Number are set by an administrator and cannot be changed here.">
@@ -290,7 +290,7 @@
+ data-bs-content="Theme switches the app between Light and Dark mode. Sidebar Color changes the navigation panel background â€" click a swatch to preview it instantly. Date Format controls how dates display throughout the app. Timezone is used to localize timestamps. Click Save Appearance to persist your choices.">
@@ -364,39 +364,39 @@
Timezone
- Eastern (ET) — New York
- Central (CT) — Chicago
- Mountain (MT) — Denver
- Mountain no-DST — Phoenix
- Pacific (PT) — Los Angeles
- Alaska (AKT) — Anchorage
- Hawaii (HT) — Honolulu
+ Eastern (ET) — New York
+ Central (CT) — Chicago
+ Mountain (MT) — Denver
+ Mountain no-DST — Phoenix
+ Pacific (PT) — Los Angeles
+ Alaska (AKT) — Anchorage
+ Hawaii (HT) — Honolulu
- Atlantic (AT) — Halifax
- Eastern — Toronto
- Central — Winnipeg
- Mountain — Edmonton
- Pacific — Vancouver
+ Atlantic (AT) — Halifax
+ Eastern — Toronto
+ Central — Winnipeg
+ Mountain — Edmonton
+ Pacific — Vancouver
- GMT/BST — London
- CET — Paris / Berlin
- EET — Helsinki
- MSK — Moscow
+ GMT/BST — London
+ CET — Paris / Berlin
+ EET — Helsinki
+ MSK — Moscow
- GST — Dubai
- IST — India
- ICT — Bangkok
- CST — Beijing / Shanghai
- JST — Tokyo
- AEST — Sydney
- NZST — Auckland
+ GST — Dubai
+ IST — India
+ ICT — Bangkok
+ CST — Beijing / Shanghai
+ JST — Tokyo
+ AEST — Sydney
+ NZST — Auckland
- BRT — São Paulo
- ART — Buenos Aires
+ BRT — São Paulo
+ ART — Buenos Aires
UTC
@@ -538,7 +538,7 @@
});
});
- // Theme radio — map light/dark → paper/ink surface system
+ // Theme radio â€" map light/dark → paper/ink surface system
document.querySelectorAll('input[name="theme"]').forEach(radio => {
radio.addEventListener('change', function () {
var surface = this.value === 'dark' ? 'ink' : 'paper';
diff --git a/src/PowderCoating.Web/Views/Quotes/Create.cshtml b/src/PowderCoating.Web/Views/Quotes/Create.cshtml
index 95db190..011e52c 100644
--- a/src/PowderCoating.Web/Views/Quotes/Create.cshtml
+++ b/src/PowderCoating.Web/Views/Quotes/Create.cshtml
@@ -51,7 +51,7 @@
+ data-bs-content="Choose <strong>Existing Customer</strong> if this person is already in your system. Choose <strong>New Prospect/Walk-In</strong> if they haven't committed yet — their details stay on the quote. When they approve, you can convert them to a full customer record with one click.<br><br><a href='/Help/Quotes#prospect-conversion' target='_blank'>Learn more →</a>">
@@ -146,7 +146,7 @@
+ data-bs-content="Set the quote date, expiration, and any internal notes. The <strong>Expiration Date</strong> is shown to the customer — once it passes the quote is flagged Expired and can no longer be approved without editing. The <strong>Customer PO</strong> field is optional — use it if the customer provides their own purchase order number.<br><br><a href='/Help/Quotes#quote-statuses' target='_blank'>Learn more →</a>">
@@ -210,7 +210,7 @@
+ data-bs-content="The oven cost is charged once per batch at the quote level, not per item. Estimate how many oven loads the full job will fill — for example, if you have 20 small parts and your oven fits 10, that's 2 batches. Cycle time is how long each batch runs. The cost is calculated from your oven's hourly rate in Settings.">
@@ -253,7 +253,7 @@
+ data-bs-content="<strong>Calculated</strong> — you enter surface area (sq ft) and the system prices it using your rates for materials, labour, and overhead.<br><strong>Custom Work</strong> — you enter a description and a manual price. Use this for flat-rate jobs or work that doesn't fit the formula.<br><strong>AI Photo</strong> — upload photos and let the AI estimate surface area and complexity for you.<br><br><a href='/Help/Quotes#quote-items' target='_blank'>Learn more →</a>">
@@ -314,7 +314,7 @@
- Hide discount from customer — PDFs and approval portal show final price only
+ Hide discount from customer — PDFs and approval portal show final price only
@@ -329,7 +329,7 @@
+ data-bs-content="The total is built up from materials, labour, equipment time, overhead, and profit margin — all based on the rates in Settings. A <strong>Tier Discount</strong> appears automatically if the customer has a pricing tier assigned. A <strong>Rush Fee</strong> is added when Rush Job is checked.<br><br><a href='/Help/Quotes#pricing-breakdown' target='_blank'>Learn more →</a>">
@@ -340,7 +340,7 @@
Pricing will update automatically as you add items.
Items Subtotal: $0.00
- Oven (1 batch × 45 min):
+ Oven (1 batch × 45 min):
$0.00
@@ -379,7 +379,7 @@
-
Uploading…
+
Uploading…
@@ -560,7 +560,7 @@
function applyMode(mode) {
if (mode === 'simple') {
form.classList.add('quote-simple-mode');
- hint.textContent = 'Advanced fields are hidden — switch to Full Quote to see them.';
+ hint.textContent = 'Advanced fields are hidden — switch to Full Quote to see them.';
} else {
form.classList.remove('quote-simple-mode');
hint.textContent = '';
@@ -628,8 +628,8 @@
smsNote.style.display = 'inline';
smsNote.className = hasSms ? 'badge bg-info text-white' : 'badge bg-warning text-dark';
smsNote.innerHTML = hasSms
- ? ' No email — send via SMS from quote details'
- : ' No email — SMS consent required';
+ ? ' No email — send via SMS from quote details'
+ : ' No email — SMS consent required';
} else {
smsNote.style.display = 'none';
}
diff --git a/src/PowderCoating.Web/Views/Quotes/Edit.cshtml b/src/PowderCoating.Web/Views/Quotes/Edit.cshtml
index 56b211e..4e49336 100644
--- a/src/PowderCoating.Web/Views/Quotes/Edit.cshtml
+++ b/src/PowderCoating.Web/Views/Quotes/Edit.cshtml
@@ -109,7 +109,7 @@
+ data-bs-content="Set the quote date, expiration, and any internal notes. The <strong>Expiration Date</strong> is shown to the customer — once it passes the quote is flagged Expired and can no longer be approved without editing. The <strong>Customer PO</strong> field is optional — use it if the customer provides their own purchase order number.<br><br><a href='/Help/Quotes#quote-statuses' target='_blank'>Learn more →</a>">
@@ -173,7 +173,7 @@
+ data-bs-content="The oven cost is charged once per batch at the quote level, not per item. Estimate how many oven loads the full job will fill — for example, if you have 20 small parts and your oven fits 10, that's 2 batches. Cycle time is how long each batch runs. The cost is calculated from your oven's hourly rate in Settings.">
@@ -216,7 +216,7 @@
+ data-bs-content="<strong>Calculated</strong> — you enter surface area (sq ft) and the system prices it using your rates for materials, labour, and overhead.<br><strong>Custom Work</strong> — you enter a description and a manual price. Use this for flat-rate jobs or work that doesn't fit the formula.<br><strong>AI Photo</strong> — upload photos and let the AI estimate surface area and complexity for you.<br><br><a href='/Help/Quotes#quote-items' target='_blank'>Learn more →</a>">
@@ -277,7 +277,7 @@
- Hide discount from customer — PDFs and approval portal show final price only
+ Hide discount from customer — PDFs and approval portal show final price only
@@ -292,7 +292,7 @@
+ data-bs-content="The total is built up from materials, labour, equipment time, overhead, and profit margin — all based on the rates in Settings. A <strong>Tier Discount</strong> appears automatically if the customer has a pricing tier assigned. A <strong>Rush Fee</strong> is added when Rush Job is checked.<br><br><a href='/Help/Quotes#pricing-breakdown' target='_blank'>Learn more →</a>">
@@ -303,7 +303,7 @@
Pricing will update automatically as you add items.
Items Subtotal: $0.00
- Oven (1 batch × 45 min):
+ Oven (1 batch × 45 min):
$0.00
@@ -407,7 +407,7 @@
-
Uploading…
+
Uploading…
@@ -435,11 +435,11 @@
@if (editHasSms)
{
- No email — send via SMS from quote details
+ No email — send via SMS from quote details
}
else
{
- No email — SMS consent required
+ No email — SMS consent required
}
}
@@ -488,7 +488,7 @@
@Html.Raw(Json.Serialize(ViewBag.BlastSetups ?? new List()))
-
+