Files
lux/EgwCoreLib.Lux.Data/DbModel/Job/JobStepModel.cs
T
2026-03-25 07:24:21 +01:00

125 lines
3.7 KiB
C#

// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace EgwCoreLib.Lux.Data.DbModel.Job
{
/// <summary>
/// Routing dei cicli di lavoro, con riferimento a risorse e fasi
/// </summary>
[Table("task_job_step")]
public class JobStepModel
{
/// <summary>
/// ID del record
/// </summary>
[Key]
public int JobStepID { get; set; }
/// <summary>
/// Ciclo di appartenenza
/// </summary>
public int JobID { get; set; }
/// <summary>
/// Indice della fase all'interno del Job
/// </summary>
public int Index { get; set; } = 0;
/// <summary>
/// ID della fase realizzata
/// </summary>
public int PhaseID { get; set; }
/// <summary>
/// ID della risorsa impiegata
/// </summary>
public int ResourceID { get; set; }
/// <summary>
/// Descrizione della fase del Job
/// </summary>
public string Description { get; set; } = "";
/// <summary>
/// Rapporto produttività Risorsa
/// es: se in più fasi sono previste perdite (sovrametalli, scarti) di processo sarà < 100%
/// </summary>
public decimal ProductivityRate { get; set; } = 1;
/// <summary>
/// Costo RockBottom Fase (step) di produzione
/// sulla base del costo della risorsa, della produttività e della quantità impiegata
/// </summary>
/// <param name="quantity">Quantità risorsa impiegata</param>
/// <returns></returns>
public decimal RockBottomCost(decimal quantity)
{
decimal stepCost = 0;
var unitRequired = quantity / ProductivityRate;
if (ResourceNav != null)
{
stepCost = ResourceNav.BaseRockBottomCost * quantity;
}
return stepCost;
}
/// <summary>
/// Prezzo calcolato per Fase (step) di produzione
/// sulla base del costo RockBottom + marginalità standard
/// </summary>
/// <param name="quantity">Quantità risorsa impiegata</param>
/// <returns></returns>
public decimal RockBottomPrice(decimal quantity)
{
decimal stepCost = 0;
var unitRequired = quantity / ProductivityRate;
if (ResourceNav != null)
{
stepCost = ResourceNav.BasePrice * quantity;
}
return stepCost;
}
/// <summary>
/// Navigazione Job/Cicli
/// </summary>
[ForeignKey("JobID")]
public virtual JobTaskModel JobNav { get; set; } = null!;
/// <summary>
/// Navigazione Fasi
/// </summary>
[ForeignKey("PhaseID")]
public virtual PhaseModel PhaseNav { get; set; } = null!;
/// <summary>
/// Navigazione Risorse
/// </summary>
[ForeignKey("ResourceID")]
public virtual ResourceModel ResourceNav { get; set; } = null!;
/// <summary>
/// Many-to-many with Tags
/// </summary>
public virtual ICollection<JobStepTagModel> TagNav { get; set; } = new List<JobStepTagModel>();
/// <summary>
/// Numero Tags compresi
/// </summary>
[NotMapped]
public int NumTags
{
get => TagNav?.Count ?? 0;
}
/// <summary>
/// Elenco Tags come stringa comma delimited
/// </summary>
[NotMapped]
public List<string> TagList
{
get => TagNav.Select(x => x.CodTag).ToList() ?? new List<string>();
}
}
}