Files
lux/EgwCoreLib.Lux.Data/DbModel/Catalog/TemplateRowModel.cs
T
2026-04-02 15:48:02 +02:00

310 lines
9.1 KiB
C#

// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace EgwCoreLib.Lux.Data.DbModel.Catalog
{
[Table("sales_template_row")]
public class TemplateRowModel
{
/// <summary>
/// ID del record
/// </summary>
[Key]
public int TemplateRowID { get; set; }
/// <summary>
/// Riferimento univoco Template
/// </summary>
public int TemplateID { get; set; }
/// <summary>
/// Riga Template (per ordinamento)
/// </summary>
public int RowNum { get; set; } = 0;
/// <summary>
/// Environment della richiesta
/// </summary>
public EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS Envir { get; set; } = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
/// <summary>
/// Denominazione prodotto
/// </summary>
public string Name { get; set; } = "";
/// <summary>
/// Campo salvato dell'UID da codice DataMatrix calcolato
/// inizia per TLR = TemplateListRow (es TLR.26.00000001)
/// </summary>
public string TemplateRowUID { get; set; } = "";
/// <summary>
/// Codice calcolato Template ANNO.ID_RIGA_Template in HEX (0xFFFFFFFF)
/// </summary>
[NotMapped]
public string TemplateRowDtx
{
get => CodeUid(TemplateRowID);
}
/// <summary>
/// Restituisce URL da impiegare x immagine
/// </summary>
[NotMapped]
public string ImgUrl
{
get
{
string answ = "";
switch (ImgType)
{
case ImageType.Calculated:
answ = CodeUid(TemplateRowID);
break;
case ImageType.Fixed:
answ = FileName;
break;
case ImageType.ND:
default:
if (SellingItemNav != null)
{
answ = SellingItemNav.ImgUID;
}
else
{
answ = CodeUid(TemplateRowID);
}
answ = $"static/{answ}";
break;
}
return answ;
}
}
/// <summary>
/// URL Immagine calcolato
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static string CodeUid(int id)
{
return $"TLR.{id:X12}";
}
/// <summary>
/// Tipo immagine da visualizzare
/// </summary>
public ImageType ImgType { get; set; } = ImageType.ND;
/// <summary>
/// ID dell'articolo di vendita di riferimento
/// </summary>
public int SellingItemID { get; set; }
/// <summary>
/// Quantità della risorsa (default 1, aperto a KIT)
/// </summary>
public double Qty { get; set; } = 1;
/// <summary>
/// Costo dei componeti BOM (RockBottom)
/// </summary>
public double BomCost { get; set; } = 0;
/// <summary>
/// Prezzo dei componeti BOM (scontabile)
/// </summary>
public double BomPrice { get; set; } = 0;
/// <summary>
/// Costo produzione Fase/Step (RockBottom): somma dei WorkCost da ItemSteps
/// </summary>
public double StepCost { get; set; } = 0;
/// <summary>
/// Prezzo produzione Fase/Step (scontabile): somma dei WorkPrice da ItemSteps
/// </summary>
public double StepPrice { get; set; } = 0;
/// <summary>
/// LeadTime puro (tempo di lavorazione): somma dei LeadTime da ItemSteps
/// </summary>
public double StepLeadTime { get; set; } = 0;
/// <summary>
/// FlowTime totale (tempo di attraversamento): somma dei FlowTime da ItemSteps
/// </summary>
public double StepFlowTime { get; set; } = 0;
/// <summary>
/// Costo Totale Risorsa (BOM + Fase)
/// </summary>
[NotMapped]
public double UnitCost
{
get => BomCost + StepCost;
}
/// <summary>
/// Costo Totale Risorsa (BOM + Fase)
/// </summary>
[NotMapped]
public double UnitPrice
{
get => BomPrice + StepPrice;
}
/// <summary>
/// Sconto massimo applicabile
/// </summary>
[NotMapped]
public double MaxDiscount
{
get => (UnitCost > 0 && UnitPrice > UnitCost) ? (UnitPrice - UnitCost) / UnitPrice : 0;
}
/// <summary>
/// Costo Totale risorsa
/// </summary>
[NotMapped]
public double TotalCost
{
get => UnitCost * Qty;
}
/// <summary>
/// Costo Totale risorsa
/// </summary>
[NotMapped]
public double TotalPrice
{
get => UnitPrice * Qty;
}
/// <summary>
/// Valore serializzato della composizione articolo (in formato JWD x finestra)
/// Default è ""
/// </summary>
public string SerStruct { get; set; } = "";
/// <summary>
/// Nomi risorsa file associato alla riga Template (es per BTL)
/// URI come risorsa dentro folder Template/riga-Template/guid
/// </summary>
public string FileResource { get; set; } = "";
/// <summary>
/// Nomi file originale associato alla riga Template (es per BTL)
/// </summary>
public string FileName { get; set; } = "";
/// <summary>
/// Dimensione del file (per visualizzazione rapida)
/// </summary>
public long FileSize { get; set; } = 0;
/// <summary>
/// Definisce se sia calcolabile, dato il tipo SellingItem
/// </summary>
[NotMapped]
public bool CalcEnabled
{
get => ImgType == ImageType.Calculated;
}
/// <summary>
/// Definisce presenza file
/// </summary>
[NotMapped]
public bool HasFile
{
get => !string.IsNullOrEmpty(FileName) && FileSize > 0 || (CalcEnabled && Envir != Constants.EXECENVIRONMENTS.WINDOW);
}
/// <summary>
/// BOM serializzata per la produzione dell'item
/// </summary>
public string ItemBOM { get; set; } = "";
/// <summary>
/// Lista dei Job Cost Drivers necessari x calcolo Steps come Lista(JcdDTO)
/// - idealmente calcolati dall'engine
/// - in alternativa quelli di default
/// </summary>
public string ItemJCD { get; set; } = "";
/// <summary>
/// Lista dei TAGS associati all'item (es selezione ciclo)
/// </summary>
public string ItemTags { get; set; } = "";
/// <summary>
/// Quantità degli item da produrre per PEZZO (es parti del serramento, singole parti BTL...)
/// </summary>
public int ProdItemQty { get; set; } = 0;
/// <summary>
/// Quantità degli item da produrre per PEZZO (es parti del serramento, singole parti BTL...)
/// </summary>
public double ProdItemQtyTot
{
get => Qty * ProdItemQty;
}
/// <summary>
/// Riferimento JobID Ciclo corrente (tra quelli ammissibili dato ItemJCD)
/// </summary>
public int JobID { get; set; }
/// <summary>
/// Elenco StepDTO del JobTask, valorizzati (Fasi Costificate, sommabili) per la stima tempi / costi
/// </summary>
public string ItemSteps { get; set; } = "";
/// <summary>
/// Validazione dati BOM (Inteso come gruppi tutti trovati/esistenti)
/// </summary>
public bool BomOk { get; set; } = false;
/// <summary>
/// Validazione livello item per Costo e range dimensione
/// </summary>
public bool ItemOk { get; set; } = false;
/// <summary>
/// Note libere
/// </summary>
public string Note { get; set; } = "";
/// <summary>
/// Indica che è in attesa aggiornamento BOM
/// </summary>
public bool AwaitBom { get; set; } = false;
/// <summary>
/// Indica che è in attesa aggiornamento Price
/// </summary>
public bool AwaitPrice { get; set; } = false;
/// <summary>
/// DataOra inserimento
/// </summary>
public DateTime Inserted { get; set; } = DateTime.Now;
/// <summary>
/// Navigazione Template
/// </summary>
[ForeignKey("TemplateID")]
public virtual TemplateModel TemplateNav { get; set; } = null!;
/// <summary>
/// Navigazione Item
/// </summary>
[ForeignKey("SellingItemID")]
public virtual SellingItemModel? SellingItemNav { get; set; }
}
}