Files
PowderCoatingLogix/src/PowderCoating.Core/Entities/JobTemplateItem.cs
T
spouliot edd7389d7d Refactor: extract shared helpers, fix field drift, add assembly services
- IJobItemAssemblyService / IQuotePricingAssemblyService: centralize job item
  and quote pricing construction that was duplicated across create, rework copy,
  and quote-to-job conversion paths
- BlobFileHelper: single ValidateUpload/GetContentType/SanitizeFileName used by
  6 blob services (JobPhoto, QuotePhoto, ProfilePhoto, CompanyLogo, Equipment,
  Catalog) and BillsController + ExpensesController, removing 8 private copies
- PagedResult<T>.From(): static factory eliminates 6-line boilerplate in 11
  controllers (Appointments, Customers, Equipment, Inventory, Invoices, Jobs,
  Maintenance, CompanyUsers, PlatformUsers, Quotes, Vendors)
- AccountingDropdownHelper: single LoadAsync() call replaces duplicate
  vendor/account/job queries in BillsController and ExpensesController
- JobTemplateItem: add IsSalesItem + Sku fields with migration; propagate
  through JobTemplatesController snapshot copy and GetTemplatesJson projection,
  and JobsController template-application path
- Test assertions updated for standardized BlobFileHelper error messages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 22:12:33 -04:00

29 lines
1.2 KiB
C#

namespace PowderCoating.Core.Entities;
public class JobTemplateItem : BaseEntity
{
public int JobTemplateId { get; set; }
public string Description { get; set; } = string.Empty;
public decimal Quantity { get; set; } = 1;
public decimal SurfaceAreaSqFt { get; set; }
public int? CatalogItemId { get; set; }
public bool IsGenericItem { get; set; }
public bool IsLaborItem { get; set; }
public bool IsSalesItem { get; set; }
public string? Sku { get; set; }
public decimal? ManualUnitPrice { get; set; }
public bool RequiresSandblasting { get; set; }
public bool RequiresMasking { get; set; }
public bool IncludePrepCost { get; set; }
public int EstimatedMinutes { get; set; }
public string? Complexity { get; set; }
public string? Notes { get; set; }
public int DisplayOrder { get; set; }
// Navigation properties
public virtual JobTemplate JobTemplate { get; set; } = null!;
public virtual CatalogItem? CatalogItem { get; set; }
public virtual ICollection<JobTemplateItemCoat> Coats { get; set; } = new List<JobTemplateItemCoat>();
public virtual ICollection<JobTemplateItemPrepService> PrepServices { get; set; } = new List<JobTemplateItemPrepService>();
}