@model PowderCoating.Application.DTOs.Quote.UpdateQuoteDto @using PowderCoating.Core.Entities @{ ViewData["Title"] = "Edit Quote"; ViewData["PageIcon"] = "bi-pencil-fill"; }
Help Back to Details
@Html.AntiForgeryToken()
Customer / Prospect/Walk-In
@if (Model.IsForProspect) {
Only check if the customer explicitly consented to receive text messages (TCPA compliance).
} else {
}
Quote Information

Tags are used to improve smart predictions and assistance over time. The more consistently you tag, the smarter the system gets.

Press Enter or , to add a tag. Click × to remove.
Oven & Batch Pricing

Estimate how many oven loads the complete job will require. The oven cycle cost is added once at the quote level, not per item.

@if (ViewBag.OvenCosts != null && ((List)ViewBag.OvenCosts).Count > 1) {
}
Quote Items
Discount (optional)
Pricing Summary

Pricing will update automatically as you add items.

Items Subtotal: $0.00

Oven (1 batch × 45 min): $0.00

Tier Discount (0%): -$0.00

Quote Discount (0%): -$0.00

Rush Fee: $0.00

Shop Supplies (0%): $0.00

Subtotal: $0.00

Tax (0%): $0.00


Total: $0.00
@{ var editAllPhotos = ViewBag.QuotePhotos as List ?? new List(); bool editCanUpload = ViewBag.CanUploadQuotePhoto is bool eb && eb; int editPhotoUsed = ViewBag.QuotePhotoUsed is int eu ? eu : 0; int editPhotoMax = ViewBag.QuotePhotoMax is int em ? em : -1; } @if (editPhotoMax != 0) {
Photos @editAllPhotos.Count
@if (editPhotoMax > 0) { @editPhotoUsed / @editPhotoMax } @if (editCanUpload) { } else if (editPhotoMax > 0 && editPhotoUsed >= editPhotoMax) { Limit reached }
@if (!editAllPhotos.Any()) {

No photos yet. Upload photos to attach them to this quote.

}
@foreach (var photo in editAllPhotos) {
@if (photo.IsAiAnalysisPhoto) { AI } else { } @photo.FileName

@photo.FileName

@photo.CreatedAt.ToString("MMM d, yyyy")

@if (!photo.IsAiAnalysisPhoto) {

@photo.Caption

}
}
Uploading…
}
@{ var editHasEmail = !string.IsNullOrWhiteSpace(ViewBag.CustomerEmail as string); var editHasSms = (bool)(ViewBag.CustomerNotifyBySms ?? false) && !string.IsNullOrWhiteSpace(ViewBag.CustomerMobilePhone as string); }
@if (!editHasEmail) { @if (editHasSms) { No email — send via SMS from quote details } else { No email — SMS consent required } } else { }
Cancel
@await Html.PartialAsync("_SqFtCalculatorModal") @await Html.PartialAsync("_ItemWizardModal") @if (ViewBag.InventoryCoatings != null) { } @if (ViewBag.CatalogItems != null) { } @section Styles { } @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} }