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,46 @@
using System.ComponentModel.DataAnnotations;
using PowderCoating.Core.Enums;
namespace PowderCoating.Core.Entities;
/// <summary>
/// A named blast setup for a company (e.g. "Siphon Cabinet", "Pressure Pot #1", "Blast Room").
/// Companies can have multiple setups; one is flagged as the default used for AI quoting when
/// the user doesn't pick a specific one.
/// </summary>
public class CompanyBlastSetup : BaseEntity
{
/// <summary>Friendly name shown in dropdowns, e.g. "Main Cabinet" or "Outdoor Blast Pot".</summary>
[Required]
[StringLength(100)]
public string Name { get; set; } = string.Empty;
public BlastSetupType SetupType { get; set; } = BlastSetupType.PressurePot;
/// <summary>Compressor CFM available at the blast nozzle.</summary>
[Range(0, 9999)]
public decimal CompressorCfm { get; set; }
/// <summary>Nozzle orifice number (28).</summary>
[Range(2, 8)]
public int BlastNozzleSize { get; set; } = 5;
public BlastSubstrateType PrimarySubstrate { get; set; } = BlastSubstrateType.Mixed;
/// <summary>
/// When set, bypasses the derived formula and uses this exact rate (sqft/hr).
/// Useful for shops that have measured their own throughput.
/// </summary>
[Range(0, 99999)]
public decimal? BlastRateSqFtPerHourOverride { get; set; }
/// <summary>Used as the default rate when no setup is explicitly selected in the wizard.</summary>
public bool IsDefault { get; set; }
public bool IsActive { get; set; } = true;
public int DisplayOrder { get; set; }
// Navigation
public virtual Company Company { get; set; } = null!;
}