Files
PowderCoatingLogix/src/PowderCoating.Core/Entities/PowderCatalogItem.cs
T

75 lines
3.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace PowderCoating.Core.Entities;
/// <summary>
/// Platform-level master list of powder coating products across all vendors.
/// Not tenant-scoped — no BaseEntity, no CompanyId, no soft delete.
/// Used as a lookup table to auto-fill inventory records without an API call.
/// </summary>
public class PowderCatalogItem
{
public int Id { get; set; }
/// <summary>Vendor name — e.g. "Prismatic Powders", "Columbia Coatings". Unique index with Sku.</summary>
public string VendorName { get; set; } = string.Empty;
/// <summary>Vendor's product SKU. Unique per vendor.</summary>
public string Sku { get; set; } = string.Empty;
public string ColorName { get; set; } = string.Empty;
/// <summary>Cleaned short description — boilerplate stripped at import time.</summary>
public string? Description { get; set; }
/// <summary>Base unit price (lowest quantity tier).</summary>
public decimal UnitPrice { get; set; }
/// <summary>Full price tier JSON for future quantity-break pricing support.</summary>
public string? PriceTiersJson { get; set; }
public string? ImageUrl { get; set; }
public string? SdsUrl { get; set; }
public string? TdsUrl { get; set; }
public string? ApplicationGuideUrl { get; set; }
public string? ProductUrl { get; set; }
// ── Coating specification fields ──────────────────────────────────────
/// <summary>Cure temperature in degrees Fahrenheit.</summary>
public decimal? CureTemperatureF { get; set; }
/// <summary>Cure hold time at cure temperature, in minutes.</summary>
public int? CureTimeMinutes { get; set; }
/// <summary>Finish type — e.g. Gloss, Matte, Satin, Metallic, Texture.</summary>
public string? Finish { get; set; }
/// <summary>Comma-separated color family tags — e.g. "Blue,Purple".</summary>
public string? ColorFamilies { get; set; }
/// <summary>Whether this product requires a clear coat to activate its effect.</summary>
public bool? RequiresClearCoat { get; set; }
/// <summary>Theoretical coverage in sq ft per pound. Typical 80120.</summary>
public decimal? CoverageSqFtPerLb { get; set; }
/// <summary>Specific gravity from the TDS. Used to derive theoretical coverage when needed.</summary>
public decimal? SpecificGravity { get; set; }
/// <summary>Powder transfer efficiency percentage. Typical 6075%.</summary>
public decimal? TransferEfficiency { get; set; }
// ── Catalog management ────────────────────────────────────────────────
/// <summary>True when the vendor has discontinued this product. Kept for historical lookups.</summary>
public bool IsDiscontinued { get; set; } = false;
/// <summary>True when this record was contributed by a tenant label scan rather than a curated import.</summary>
public bool IsUserContributed { get; set; } = false;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime? UpdatedAt { get; set; }
/// <summary>Timestamp of the last successful sync run for this record.</summary>
public DateTime? LastSyncedAt { get; set; }
}