@model PowderCoating.Application.DTOs.Job.JobDto @{ ViewData["Title"] = $"Job {Model.JobNumber}"; ViewData["PageIcon"] = "bi-briefcase"; var guidedActivationCallout = ViewBag.GuidedActivationCallout as PowderCoating.Web.ViewModels.GuidedActivation.GuidedActivationCalloutViewModel; bool quoteUpdated = ViewBag.QuoteUpdatedAfterConversion == true; }
@Model.JobNumber
@Model.PriorityDisplayName
@(Model.CustomerPO ?? "Not provided")
@Model.Description
| Product | Qty | Unit Price | Total | |
|---|---|---|---|---|
|
@item.Description
@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)) { @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
@if (item.RequiresSandblasting || item.RequiresMasking)
{
@if (item.RequiresSandblasting) { Sandblast } @if (item.RequiresMasking) { Mask } } @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)) { @item.Notes } |
@item.Quantity |
@if (item.SurfaceAreaSqFt > 0)
{
per item } else { — } |
@if (item.EstimatedMinutes > 0)
{
per item } else { — } |
@if (totalPowderNeeded > 0)
{
@totalPowderNeeded.ToString("F2") lbs
total batch } else { — } |
@item.UnitPrice.ToString("C") | @item.TotalPrice.ToString("C") |
|
| Description | Qty | Est. Time | Unit Price | Total | |
|---|---|---|---|---|---|
|
@item.Description
@if (!string.IsNullOrEmpty(item.Notes))
{
@item.Notes } |
@item.Quantity |
@if (item.EstimatedMinutes > 0)
{
|
@item.UnitPrice.ToString("C") | @item.TotalPrice.ToString("C") |
|
No items on this job yet.
| Worker | Date | Hours | Stage | Notes | ||
|---|---|---|---|---|---|---|
| Total | — | |||||
@Model.IntakeConditionNotes
Parts not yet checked in. @if (!Model.StatusIsTerminal) { Record intake }
}@Model.SpecialInstructions
@Model.InternalNotes
No photos uploaded yet
Click "Upload Photo" to add photosNo deposits recorded
Click "Record Deposit" to add a customer deposit| Item | Qty Used | Reason | Date | Notes |
|---|---|---|---|---|
| @(mat.InventoryItem?.Name ?? "Unknown Item") | @(Math.Abs(mat.Quantity).ToString("N2")) @mat.InventoryItem?.UnitOfMeasure | @{ var reasonBadge = mat.TransactionType switch { PowderCoating.Core.Enums.InventoryTransactionType.JobUsage => ("bg-primary", "Job Usage"), PowderCoating.Core.Enums.InventoryTransactionType.Waste => ("bg-warning text-dark", "Waste / Spillage"), PowderCoating.Core.Enums.InventoryTransactionType.Adjustment => ("bg-secondary", "Correction"), PowderCoating.Core.Enums.InventoryTransactionType.Transfer => ("bg-info text-dark", "Transfer Out"), _ => ("bg-secondary", mat.TransactionType.ToString()) }; } @reasonBadge.Item2 | @mat.TransactionDate.Tz(ViewBag.CompanyTimeZone as string).ToString("MMM d, yyyy h:mm tt") | @mat.Notes |
| Total | @materialsUsed.Sum(m => Math.Abs(m.Quantity)).ToString("N2") units | |||
@Model.CompletedDate.Value.ToString("MMM dd, yyyy h:mm tt")
@Model.ActualTimeSpentHours.Value.ToString("0.##") hours
| Item | Coat | Color | Estimated (lbs) | Actual (lbs) | Variance |
|---|---|---|---|---|---|
| @item.Description | @coat.CoatName | @if (!string.IsNullOrEmpty(coat.ColorName)) { @coat.ColorName @if (!string.IsNullOrEmpty(coat.ColorCode)) { (@coat.ColorCode) } } | @((coat.PowderToOrder ?? 0).ToString("0.##")) | @coat.ActualPowderUsedLbs.Value.ToString("0.##") | @(variance > 0 ? "+" : "")@variance.ToString("0.##") |
@Model.QuotedPrice.ToString("C")
@Model.CreatedAt.ToString("MMMM dd, yyyy")
@if (Model.IsCustomerApproved) { Approved } else { Pending }
| Date & Time | Changed By | Field | Old Value | New Value |
|---|---|---|---|---|
|
@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 } |