Add Custom Powder Order line item and fix CSV import FinalPrice crash

Custom powder/incoming powder material cost now flows into a separate
auto-generated 'Custom Powder Order' line item instead of rolling into
individual item prices, so users can add shipping charges before the
customer sees the total. A dashed yellow preview card in the wizard
shows the material cost and lets users edit the total (including shipping)
before saving. After first save the price is user-owned.

Also fixes a fatal CSV import crash when FinalPrice contains a non-numeric
value (e.g. 'false' from a spreadsheet formula): the job CSV importer now
streams rows one at a time with a lenient decimal converter, treating bad
values as $0 with a per-row warning instead of aborting the entire import.

Updated HelpKnowledgeBase.cs and Help articles (Jobs, Quotes) with
Custom Powder Order behavior and a new Data Import / Export section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 23:37:46 -04:00
parent e476b4744d
commit a7ad0e1de8
19 changed files with 721 additions and 78 deletions
@@ -273,6 +273,29 @@
appear as sub-lines under the item on the job details page.
</p>
<h3 class="h6 fw-semibold mt-4 mb-2"><i class="bi bi-truck me-1 text-warning"></i>Custom Powder Order</h3>
<p>
When a coat uses a <strong>custom powder</strong> (manually entered cost per lb, no inventory item
selected) or an <strong>incoming powder</strong> (a color being ordered that is not yet in stock),
the material cost is separated from the item price and collected into a single
<strong>Custom Powder Order</strong> line item. This keeps per-item pricing clean and lets you
add shipping or freight before the customer sees the total.
</p>
<ul class="mb-3">
<li class="mb-2">
While building the job, a dashed yellow <strong>Powder Order</strong> preview card appears
below the item cards. Edit the price to include any shipping before saving.
</li>
<li class="mb-2">
On the saved job, the Custom Powder Order appears as its own line item with the ordered
color name(s) in its description.
</li>
<li>
The Custom Powder Order is created once on first save. The price is user-owned after that
and will not be overwritten by the system on subsequent saves.
</li>
</ul>
<h3 class="h6 fw-semibold mt-4 mb-2">Save to Product Catalog</h3>
<p>
After completing the coatings and prep services steps, <strong>Calculated</strong> and