Initial commit

This commit is contained in:
2026-04-23 21:38:24 -04:00
commit 63e12a9636
1762 changed files with 1672620 additions and 0 deletions
@@ -0,0 +1,76 @@
namespace PowderCoating.Core.Entities;
public class InventoryItem : BaseEntity
{
public string SKU { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
// Category (lookup-based)
public int? InventoryCategoryId { get; set; } // Nullable during migration
public virtual InventoryCategoryLookup? InventoryCategory { get; set; }
// Legacy field for seed data (will be removed after migration)
public string Category { get; set; } = string.Empty;
// Powder-specific fields
public string? ColorName { get; set; }
public string? ColorCode { get; set; }
public string? Finish { get; set; }
public string? Manufacturer { get; set; }
public string? ManufacturerPartNumber { get; set; }
public decimal? CoverageSqFtPerLb { get; set; } // Square feet coverage per pound (default 30)
public decimal? TransferEfficiency { get; set; } // Percentage of powder that sticks (default 65%)
public decimal? CureTemperatureF { get; set; } // Required cure temperature in °F (recommended for oven scheduling)
public int? CureTimeMinutes { get; set; } // Required hold time at cure temperature
public string? ColorFamilies { get; set; } // Comma-separated primary color families e.g. "Green,Blue"
public bool RequiresClearCoat { get; set; } // True if this powder requires a clear coat topcoat
public string? SpecPageUrl { get; set; } // Link to manufacturer's product/spec page
// Sample Panel Tracking (coating category items only)
public bool HasSamplePanel { get; set; } = false;
// Inventory Management
public decimal QuantityOnHand { get; set; }
public string UnitOfMeasure { get; set; } = "lbs"; // lbs, kg, gallons, units, etc.
public decimal ReorderPoint { get; set; }
public decimal ReorderQuantity { get; set; }
public decimal MinimumStock { get; set; }
public decimal MaximumStock { get; set; }
// Pricing
public decimal UnitCost { get; set; }
public decimal AverageCost { get; set; }
public decimal LastPurchasePrice { get; set; }
public DateTime? LastPurchaseDate { get; set; }
// Vendor Information
public int? PrimaryVendorId { get; set; }
public string? VendorPartNumber { get; set; }
// Additional fields
public string? Location { get; set; }
public string? Notes { get; set; }
public bool IsActive { get; set; } = true;
public DateTime? DiscontinuedDate { get; set; }
// ── Financial Account Mapping ──────────────────────────────────────────
/// <summary>
/// Asset account where inventory value is tracked on the balance sheet (e.g., 1200 Inventory - Powder).
/// When null, falls back to the default inventory asset account.
/// </summary>
public int? InventoryAccountId { get; set; }
/// <summary>
/// COGS account debited when this material is consumed on a job (e.g., 5100 Powder & Materials).
/// When null, falls back to the default COGS account.
/// </summary>
public int? CogsAccountId { get; set; }
// Relationships
public virtual Vendor? PrimaryVendor { get; set; }
public virtual Account? InventoryAccount { get; set; }
public virtual Account? CogsAccount { get; set; }
public virtual ICollection<InventoryTransaction> Transactions { get; set; } = new List<InventoryTransaction>();
}