@model PowderCoating.Application.DTOs.Quote.QuoteDto @{ ViewData["Title"] = $"Quote {Model.QuoteNumber}"; ViewData["PageIcon"] = "bi-file-text"; var guidedActivationCallout = ViewBag.GuidedActivationCallout as PowderCoating.Web.ViewModels.GuidedActivation.GuidedActivationCalloutViewModel; var guidedActivationMode = ViewBag.GuidedActivationMode as string; }
Company Name: @(Model.ProspectCompanyName ?? "-")
Contact Name: @(Model.ProspectContactName ?? "-")
Email: @(Model.ProspectEmail ?? "-")
Phone: @(Model.ProspectPhone ?? "-")
Address: @(Model.ProspectAddress ?? "-")
City: @(Model.ProspectCity ?? "-")
State: @(Model.ProspectState ?? "-")
Zip Code: @(Model.ProspectZipCode ?? "-")
Quote Date: @Model.QuoteDate.ToString("MM/dd/yyyy")
Expiration Date: @(Model.ExpirationDate?.ToString("MM/dd/yyyy") ?? "-")
Prepared By:
@if (!string.IsNullOrEmpty(Model.PreparedById))
{
}
@(Model.PreparedByName ?? "-")
Type: @(Model.IsCommercial ? "Commercial" : "Non-Commercial")
Sent Date: @Model.SentDate.Value.ToString("MM/dd/yyyy")
} @if (Model.ApprovedDate.HasValue) {Approved Date: @Model.ApprovedDate.Value.ToString("MM/dd/yyyy")
} @if (Model.ApprovalTokenUsedAt.HasValue && Model.StatusCode == "REJECTED") {Declined On: @Model.ApprovalTokenUsedAt.Value.Tz(ViewBag.CompanyTimeZone as string).ToString("MM/dd/yyyy h:mm tt")
} @if (!string.IsNullOrEmpty(Model.CustomerPO)) {Customer PO: @Model.CustomerPO
}Description:
@Model.Description
} @if (!string.IsNullOrEmpty(Model.Terms)) {Terms & Conditions:
@Model.Terms
} @if (!string.IsNullOrEmpty(Model.Notes)) {Internal Notes:
@Model.Notes
} @if (!string.IsNullOrWhiteSpace(Model.Tags)) {@Model.DeclineReason
Preparation Services:
| Product | Qty | Unit Price | Total |
|---|---|---|---|
|
@{
var displayDescription = item.Description == "Product Item" || string.IsNullOrWhiteSpace(item.Description)
? (item.CatalogItemName ?? "Catalog Item")
: item.Description;
}
@displayDescription
@if (item.CatalogItemId.HasValue &&
item.Description != "Product Item" &&
!string.IsNullOrWhiteSpace(item.Description))
{
@item.CatalogItemName } @* Display coating layers *@ @if (item.Coats != null && item.Coats.Any()) { Coating Layers: @foreach (var coat in item.Coats.OrderBy(c => c.Sequence)) { • @coat.CoatName @if (!string.IsNullOrEmpty(coat.ColorName)) { @coat.Notes } } } @if (!string.IsNullOrEmpty(item.Notes)) { Notes: @item.Notes } |
@item.Quantity | @item.UnitPrice.ToString("C") | @item.TotalPrice.ToString("C") |
| Description | Qty | Surface Area | Est. Minutes | Coating Needed | Unit Price | Total |
|---|---|---|---|---|---|---|
|
@item.Description
@* Display coating layers *@
@if (item.Coats != null && item.Coats.Any())
{
Coating Layers: @foreach (var coat in item.Coats.OrderBy(c => c.Sequence)) { • @coat.CoatName @if (!string.IsNullOrEmpty(coat.ColorName)) { @coat.Notes } } } @if (item.PrepServices != null && item.PrepServices.Any()) { Prep Services: @foreach (var ps in item.PrepServices) { • @(ps.PrepServiceName ?? $"Service #{ps.PrepServiceId}") — @ps.EstimatedMinutes min } } @if (!string.IsNullOrEmpty(item.Notes)) { Notes: @item.Notes } |
@item.Quantity |
@item.SurfaceAreaSqFt.ToString("F2") @ViewBag.AreaUnit
per item |
@item.EstimatedMinutes min
per item |
@totalPowderNeeded.ToString("F2") lbs
total batch |
@item.UnitPrice.ToString("C") | @item.TotalPrice.ToString("C") |
No items in this quote.
No photos uploaded yet.
}| Labor rate | @dbgCosts.StandardLaborRate.ToString("C2")/hr @if (dbgCosts.StandardLaborRate == 0) { Not Set } |
| Coating booth | @dbgCosts.CoatingBoothCostPerHour.ToString("C2")/hr |
| Default powder cost | @dbgCosts.PowderCoatingCostPerSqFt.ToString("C4")/sqft @if (dbgCosts.PowderCoatingCostPerSqFt == 0) { Not Set } |
| Markup | @dbgCosts.GeneralMarkupPercentage.ToString("F1")% — applied to material costs |
| Additional coat charge | @dbgCosts.AdditionalCoatLaborPercent.ToString("F0")% of first coat price per extra coat |
| Consumables surcharge | 5% of raw powder cost |
| Description | Qty | Coats | Total |
|---|---|---|---|
|
@description
@if (!string.IsNullOrEmpty(item.Notes))
{
@item.Notes } |
@item.Quantity |
@if (item.Coats != null && item.Coats.Any())
{
@foreach (var coat in item.Coats.OrderBy(c => c.Sequence))
{
@coat.CoatName
@if (!string.IsNullOrEmpty(coat.ColorName))
{
}
}
else
{
@if (coat.InventoryItemId.HasValue) { Need: @coat.PowderToOrder lbs } else { Order: @coat.PowderToOrder lbs } } |
@item.TotalPrice.ToString("C") |
No items in this quote.
No deposits recorded
Click "Record Deposit" to add a customer deposit| Date & Time | Changed By | Field | Old Value | New Value | Description |
|---|---|---|---|---|---|
|
@change.ChangedAt.ToString("MM/dd/yyyy")
@change.ChangedAt.ToString("h:mm tt")
|
@change.ChangedByName | @change.FieldName | @if (!string.IsNullOrEmpty(change.OldValue)) { @change.OldValue } else { None } | @if (!string.IsNullOrEmpty(change.NewValue)) { @change.NewValue } else { None } | @if (!string.IsNullOrEmpty(change.ChangeDescription)) { @change.ChangeDescription } |