Files
lux/EgwCoreLib.Lux.Data/DbModel/Cost/ResourceModel.cs
T

126 lines
4.2 KiB
C#

// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace EgwCoreLib.Lux.Data.DbModel.Cost
{
/// <summary>
/// Risorsa / Centro di Costo, con costi / Hourly
/// </summary>
[Table("cost_resource")]
public class ResourceModel
{
/// <summary>
/// ID del record
/// </summary>
[Key]
public int ResourceID { get; set; }
/// <summary>
/// Condice Risorsa x Raggruppamento / Ordinamento
/// </summary>
public string CodResource { get; set; } = "000";
/// <summary>
/// Nome/Descrizione
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// ID del driver di costo impiegato, tipicamente 1 = WorkHour
/// </summary>
public int CostDriverID { get; set; }
/// <summary>
/// Valore di riferimento del CostDriver per il calcolo dell'importo unitario della risorsa
/// Se è basato su WorkHour diventa il budget annuale della risorsa disponibile
/// Tipicamente le Ore di impiego a buget risorsa, es 220gg x 8h
/// </summary>
public decimal CostDriverBudget { get; set; } = 1;
/// <summary>
/// Costo totale (rif al CostDriverBudget) componente FIXED (macchinari) della risorsa (ove applicabile), comprendendo
/// - ammortamenti
/// - costi di manutenzione ordinaria
/// - costi di manutenzione straordinaria (se stimabili, in periodo post ammortamento)
/// </summary>
public decimal FixedCost { get; set; } = 0;
/// <summary>
/// Costo totale (rif al CostDriverBudget) componente variabile (tipicamente Energia)
/// nb: stima basata sul (costo medio energia aziendale) * consumo effettivo (se disponibile), altrimenti (stima potenza media impiegata) * (ore di impiego stimate)
/// </summary>
public decimal VariableCost { get; set; } = 0;
/// <summary>
/// Costo della componente HR sulla gestione impianto (rif al CostDriverBudget)
/// </summary>
public decimal LaborCost { get; set; } = 0;
/// <summary>
/// Costi di OverHead (rif al CostDriverBudget) da ribaltare su risorsa (tipicamente struttura)
/// </summary>
public decimal OverHeadCost { get; set; } = 0;
/// <summary>
/// Costo di overhead (come % on top del resto)
/// </summary>
public decimal OverHeadPerc { get; set; } = 0.15M;
/// <summary>
/// EBT ovvero marginalità minima garantita on top del resto dei costi e OH
/// </summary>
public decimal EBTPerc { get; set; } = 0.1M;
/// <summary>
/// Margine sul prezzo ovvero valore da potersi eventualmente scontare
/// </summary>
public decimal PriceMargin { get; set; } = 0.2M;
/// <summary>
/// Costo Netto la risorsa su base CostDriver
/// </summary>
[NotMapped]
private decimal BaseNetCost
{
get => CostDriverBudget == 0 ? 0 : (FixedCost + LaborCost + VariableCost + OverHeadCost) / CostDriverBudget;
}
/// <summary>
/// Costo RockBottom Risorsa su base CostDriver
/// </summary>
[NotMapped]
public decimal BaseRockBottomCost
{
get => BaseNetCost * (1 + OverHeadPerc) * (1 + EBTPerc);
}
/// <summary>
/// Prezzo comprensivo di margine di ricarico massimo scontabile (sul RockBottom)
/// </summary>
[NotMapped]
public decimal BasePrice
{
get => BaseRockBottomCost * (1 + PriceMargin);
}
/// <summary>
/// Navigazione Driver costo
/// </summary>
[ForeignKey("CostDriverID")]
public virtual CostDriverModel DriverNav { get; set; } = null!;
/// <summary>
/// Navigazione agli step che lo impiegano
/// </summary>
public virtual ICollection<JobStepModel> JobStepNav { get; set; } = new List<JobStepModel>();
[NotMapped]
public bool IsUsed
{
get => JobStepNav != null && JobStepNav.Count > 0;
}
}
}