From 9a111d2b8a76bb4eff7bc9adedc728774cee46c6 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Apr 2026 11:24:01 +0200 Subject: [PATCH 1/5] Aggiunta area BuyOrder - spostato SUppliers - creato order/OrderRow x acquisti - migratoin + update DB --- EgwCoreLib.Lux.Core/Enums.cs | 36 + EgwCoreLib.Lux.Data/DataLayerContext.cs | 2 + .../DbModel/Sales/OrderRowModel.cs | 2 +- .../DbModel/Supplier/BuyOrderModel.cs | 92 + .../DbModel/Supplier/BuyOrderRowModel.cs | 98 + .../{Items => Supplier}/SupplierModel.cs | 18 +- EgwCoreLib.Lux.Data/GlobalUsings.cs | 1 + .../20260414092234_AddBuyOrder.Designer.cs | 4262 +++++++++++++++++ .../Migrations/20260414092234_AddBuyOrder.cs | 385 ++ .../DataLayerContextModelSnapshot.cs | 307 +- Lux.API/Lux.API.csproj | 2 +- Lux.UI/Lux.UI.csproj | 2 +- Resources/ChangeLog.html | 2 +- Resources/VersNum.txt | 2 +- Resources/manifest.xml | 2 +- 15 files changed, 5104 insertions(+), 109 deletions(-) create mode 100644 EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderModel.cs create mode 100644 EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs rename EgwCoreLib.Lux.Data/DbModel/{Items => Supplier}/SupplierModel.cs (65%) create mode 100644 EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.Designer.cs create mode 100644 EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.cs diff --git a/EgwCoreLib.Lux.Core/Enums.cs b/EgwCoreLib.Lux.Core/Enums.cs index 0aadd8f7..0b71fc40 100644 --- a/EgwCoreLib.Lux.Core/Enums.cs +++ b/EgwCoreLib.Lux.Core/Enums.cs @@ -162,6 +162,9 @@ Lost } + /// + /// Status ordini cliente + /// public enum OrderStates { /// @@ -210,6 +213,39 @@ Closed } + public enum BuyOrderStates + { + /// + /// Ordine acquisto creato da BOM di 1/+ ordini + /// + Created, + + /// + /// Richiesta quotazione fornitori + /// + Requested, + + /// + /// Assegnato a supplier (e inviato) + /// + Assigned, + + /// + /// Parzialmente ricevuto + /// + Partial, + + /// + /// Completato poiché ho ricevuto Merce (e DDT) + /// + Completed, + + /// + /// Ordine chiuso (con fatturazione) + /// + Closed + } + /// /// Enum risultati verifica lavorabilità part (e tempo) /// diff --git a/EgwCoreLib.Lux.Data/DataLayerContext.cs b/EgwCoreLib.Lux.Data/DataLayerContext.cs index 38cc0429..b59198e4 100644 --- a/EgwCoreLib.Lux.Data/DataLayerContext.cs +++ b/EgwCoreLib.Lux.Data/DataLayerContext.cs @@ -44,6 +44,8 @@ public virtual DbSet DbSetCustomer { get; set; } public virtual DbSet DbSetDealer { get; set; } public virtual DbSet DbSetSupplier { get; set; } + public virtual DbSet DbSetBuyOrder { get; set; } + public virtual DbSet DbSetBuyOrderRow { get; set; } public virtual DbSet DbSetOffer { get; set; } public virtual DbSet DbSetOfferRow { get; set; } public virtual DbSet DbSetOrder { get; set; } diff --git a/EgwCoreLib.Lux.Data/DbModel/Sales/OrderRowModel.cs b/EgwCoreLib.Lux.Data/DbModel/Sales/OrderRowModel.cs index b7423d41..1f07e2d8 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Sales/OrderRowModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Sales/OrderRowModel.cs @@ -54,7 +54,7 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales public int? SellingItemID { get; set; } /// - /// Riferimento (opzionale9 al template da cui è derivato + /// Riferimento (opzionale) al template da cui è derivato /// public int? TemplateRowID { get; set; } = null; diff --git a/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderModel.cs new file mode 100644 index 00000000..e9a11cd1 --- /dev/null +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderModel.cs @@ -0,0 +1,92 @@ +namespace EgwCoreLib.Lux.Data.DbModel.Supplier +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + + [Table("buy_order")] + public class BuyOrderModel + { + /// + /// ID del record + /// + [Key] + public int BuyOrderID { get; set; } + + /// + /// Anno rif Ordine Fornitore + /// + public int RefYear { get; set; } = DateTime.Today.Year; + + /// + /// Numero prog Ordine nell'anno (da calcolare) + /// + public int RefNum { get; set; } = 0; + + /// + /// Indice revisione + /// + public int RefRev { get; set; } = 1; + + /// + /// Codice calcolato Ordine ANNO.NUMERO.REV + /// + [NotMapped] + public string BuyOrderCode + { + get => $"BO.{RefYear:00}.{RefNum:00000}.{RefRev:00}"; + } + + /// + /// Descrizione generale + /// + public string Description { get; set; } = ""; + + /// + /// Fornitore (quandoa ssegnato, altrimenti è quotazione) + /// + public int? SupplierID { get; set; } = null; + + /// + /// Ordine assegnato se ho un supplier definito + /// + [NotMapped] + public bool Assigned => SupplierID != null; + + /// + /// DataOra inserimento + /// + public DateTime Inserted { get; set; } = DateTime.Now; + + /// + /// DataOra ultima modifica + /// + public DateTime Modified { get; set; } = DateTime.Now; + + /// + /// DataOra richiesta per il completamento dell'ordine di fornitura + /// + public DateTime DueDateReq { get; set; } = DateTime.Today.AddDays(30); + + /// + /// note di consegna (opzionali) + /// + public string ConsNote { get; set; } = ""; + + /// + /// Enum stato Ordine Acquisto + /// + public BuyOrderStates OrderState { get; set; } = BuyOrderStates.Created; + + /// + /// Navigazione Supplier + /// + [ForeignKey("SupplierID")] + public virtual SupplierModel? SupplierNav { get; set; } = null; + + /// + /// Navigazione alle righe Ordine Acquisto + /// + public virtual ICollection BuyOrderRowNav { get; set; } = new List(); + } +} diff --git a/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs new file mode 100644 index 00000000..29dffe7c --- /dev/null +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs @@ -0,0 +1,98 @@ +namespace EgwCoreLib.Lux.Data.DbModel.Supplier +{ + // + // This is here so CodeMaid doesn't reorganize this document + // + + [Table("buy_order_row")] + public class BuyOrderRowModel + { + /// + /// ID del record + /// + [Key] + public int BuyOrderRowID { get; set; } + + /// + /// ID Ordine di acquisto di riferimento + /// + public int BuyOrderID { get; set; } + + /// + /// ID Ordine cliente di riferimento + /// + public int OrderID { get; set; } + + /// + /// ID dell'item richiesto + /// + public int ItemID { get; set; } = 0; + + /// + /// Classificazione Item + /// + public string ClassCode { get; set; } = ""; + + /// + /// Descrizione Item + /// + public string DescriptionCode { get; set; } = ""; + + /// + /// Codice Item + /// + public string ItemCode { get; set; } = ""; + + /// + /// Quantità articolo TOTALE + /// + public double TotQty + { + get => DictOrderRowDetail.Sum(x => x.Value); + } + + /// + /// Dizionario serializzato di RigheOrdine + Qty + /// + public string OrderRowData { get; set; } = ""; + + /// + /// Dizionario escplicito degli OrderRow esplosi rispetto a ItemId delle BOM + /// + [NotMapped] + public Dictionary DictOrderRowDetail + { + get + { + Dictionary answ = new(); + if (!string.IsNullOrEmpty(OrderRowData) && OrderRowData.Count() > 2) + { + answ = JsonConvert.DeserializeObject>(OrderRowData) ?? new(); + } + return answ; + } + set + { + OrderRowData = JsonConvert.SerializeObject(value); + } + } + + /// + /// Navigazione Ordine Cliente + /// + [ForeignKey("OrderID")] + public virtual OrderModel? OrderNav { get; set; } = null; + + /// + /// Navigazione Ordine Acquisto + /// + [ForeignKey("BuyOrderID")] + public virtual BuyOrderModel? BuyOrderNav { get; set; } = null; + + /// + /// Navigazione Item + /// + [ForeignKey("ItemID")] + public virtual ItemModel? ItemNav { get; set; } = null; + } +} diff --git a/EgwCoreLib.Lux.Data/DbModel/Items/SupplierModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs similarity index 65% rename from EgwCoreLib.Lux.Data/DbModel/Items/SupplierModel.cs rename to EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs index 495cd84e..cb69dab4 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Items/SupplierModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs @@ -1,10 +1,10 @@ -namespace EgwCoreLib.Lux.Data.DbModel.Items +namespace EgwCoreLib.Lux.Data.DbModel.Supplier { // // This is here so CodeMaid doesn't reorganize this document // - [Table("item_supplier")] + [Table("buy_supplier")] public class SupplierModel { /// @@ -13,13 +13,6 @@ [Key] public int SupplierID { get; set; } -#if false - /// - /// Ruolo assocaito da anagrafica esterna - /// - public int RoleID { get; set; } -#endif - /// /// Denominazione se persona giuridica /// @@ -40,12 +33,5 @@ /// public string VAT { get; set; } = ""; -#if false - /// - /// Navigazione al ruolo - /// - [ForeignKey("RoleID")] - public virtual RoleModel RoleNav { get; set; } = null!; -#endif } } diff --git a/EgwCoreLib.Lux.Data/GlobalUsings.cs b/EgwCoreLib.Lux.Data/GlobalUsings.cs index 5a094ea5..985b3335 100644 --- a/EgwCoreLib.Lux.Data/GlobalUsings.cs +++ b/EgwCoreLib.Lux.Data/GlobalUsings.cs @@ -9,6 +9,7 @@ global using EgwCoreLib.Lux.Data.DbModel.Production; global using EgwCoreLib.Lux.Data.DbModel.Sales; global using EgwCoreLib.Lux.Data.DbModel.Stats; global using EgwCoreLib.Lux.Data.DbModel.Stock; +global using EgwCoreLib.Lux.Data.DbModel.Supplier; global using EgwCoreLib.Lux.Data.DbModel.Utils; global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Configuration; diff --git a/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.Designer.cs b/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.Designer.cs new file mode 100644 index 00000000..0d88324a --- /dev/null +++ b/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.Designer.cs @@ -0,0 +1,4262 @@ +// +using System; +using EgwCoreLib.Lux.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EgwCoreLib.Lux.Data.Migrations +{ + [DbContext(typeof(DataLayerContext))] + [Migration("20260414092234_AddBuyOrder")] + partial class AddBuyOrder + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.23") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", b => + { + b.Property("TemplateID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("TemplateID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SourceType") + .HasColumnType("int"); + + b.HasKey("TemplateID"); + + b.ToTable("sales_template"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", b => + { + b.Property("TemplateRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("TemplateRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateID") + .HasColumnType("int"); + + b.Property("TemplateRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("TemplateRowID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateID"); + + b.ToTable("sales_template_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.EnvirParamModel", b => + { + b.Property("EnvirID") + .HasColumnType("int"); + + b.Property("SerStrucKey") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("EnvirID"); + + b.ToTable("conf_envir"); + + b.HasData( + new + { + EnvirID = 1, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 2, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 4, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 3, + SerStrucKey = "SerializedData" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.GlassModel", b => + { + b.Property("GlassID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("GlassID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Thickness") + .HasColumnType("double"); + + b.HasKey("GlassID"); + + b.ToTable("conf_glass"); + + b.HasData( + new + { + GlassID = 1, + Code = "0001", + Description = "Vetro BE 2S 4/12/4", + Thickness = 20.0 + }, + new + { + GlassID = 2, + Code = "0002", + Description = "Vetro BE 2S 4/16/4", + Thickness = 24.0 + }, + new + { + GlassID = 3, + Code = "0003", + Description = "Vetro BE 3S 4/12/4/12/4", + Thickness = 36.0 + }, + new + { + GlassID = 4, + Code = "0004", + Description = "Vetro BE 3S 4/16/4/16/4", + Thickness = 44.0 + }, + new + { + GlassID = 5, + Code = "0005", + Description = "Vetro BE 2S 4T/12/4T", + Thickness = 20.0 + }, + new + { + GlassID = 6, + Code = "0006", + Description = "Vetro BE 2S 4T/16/4T", + Thickness = 24.0 + }, + new + { + GlassID = 7, + Code = "0007", + Description = "Vetro BE 3S 4T/12/4T/12/4T", + Thickness = 36.0 + }, + new + { + GlassID = 8, + Code = "0008", + Description = "Vetro BE 3S 4T/16/4T/16/4T", + Thickness = 44.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.ProfileModel", b => + { + b.Property("ProfileID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProfileID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("ProfDataRaw") + .HasColumnType("longtext"); + + b.Property("Thickness") + .HasColumnType("double"); + + b.Property("ThreshDataRaw") + .HasColumnType("longtext"); + + b.HasKey("ProfileID"); + + b.ToTable("conf_profile"); + + b.HasData( + new + { + ProfileID = 1, + Code = "0001", + Description = "Profilo60", + ProfDataRaw = "", + Thickness = 60.0, + ThreshDataRaw = "" + }, + new + { + ProfileID = 2, + Code = "0002", + Description = "Profilo78", + ProfDataRaw = "", + Thickness = 78.0, + ThreshDataRaw = "" + }, + new + { + ProfileID = 3, + Code = "0003", + Description = "Profilo90", + ProfDataRaw = "", + Thickness = 90.0, + ThreshDataRaw = "" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.WoodModel", b => + { + b.Property("WoodID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("WoodID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("WoodID"); + + b.ToTable("conf_wood"); + + b.HasData( + new + { + WoodID = 1, + Code = "0001", + Description = "Abete", + Type = 1 + }, + new + { + WoodID = 2, + Code = "0002", + Description = "Acero", + Type = 1 + }, + new + { + WoodID = 3, + Code = "0003", + Description = "Pino", + Type = 2 + }, + new + { + WoodID = 4, + Code = "0004", + Description = "Tek", + Type = 3 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", b => + { + b.Property("CostDriverID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CostDriverID")); + + b.Property("Descript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Unit") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CostDriverID"); + + b.ToTable("cost_driver"); + + b.HasData( + new + { + CostDriverID = 1, + Descript = "Ore lavorate", + Name = "WorkHour", + Unit = "h" + }, + new + { + CostDriverID = 2, + Descript = "Metri prodotto", + Name = "Meter", + Unit = "m" + }, + new + { + CostDriverID = 3, + Descript = "Unità prodotto", + Name = "Unit", + Unit = "#" + }, + new + { + CostDriverID = 4, + Descript = "Volume prodotto", + Name = "Volume", + Unit = "m3" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.Property("ResourceID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ResourceID")); + + b.Property("CodResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CostDriverBudget") + .HasColumnType("decimal(65,30)"); + + b.Property("CostDriverID") + .HasColumnType("int"); + + b.Property("EBTPerc") + .HasColumnType("decimal(65,30)"); + + b.Property("FixedCost") + .HasColumnType("decimal(65,30)"); + + b.Property("LaborCost") + .HasColumnType("decimal(65,30)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OverHeadCost") + .HasColumnType("decimal(65,30)"); + + b.Property("OverHeadPerc") + .HasColumnType("decimal(65,30)"); + + b.Property("PriceMargin") + .HasColumnType("decimal(65,30)"); + + b.Property("VariableCost") + .HasColumnType("decimal(65,30)"); + + b.HasKey("ResourceID"); + + b.HasIndex("CostDriverID"); + + b.ToTable("cost_resource"); + + b.HasData( + new + { + ResourceID = 1, + CodResource = "0000", + CostDriverBudget = 1m, + CostDriverID = 3, + EBTPerc = 0.15m, + FixedCost = 50m, + LaborCost = 100m, + Name = "Item Generico", + OverHeadCost = 100m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 50m + }, + new + { + ResourceID = 2, + CodResource = "0010", + CostDriverBudget = 2200m, + CostDriverID = 3, + EBTPerc = 0.15m, + FixedCost = 200000m, + LaborCost = 200000m, + Name = "Serramento (media annua globale)", + OverHeadCost = 100000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 200000m + }, + new + { + ResourceID = 3, + CodResource = "0110", + CostDriverBudget = 880m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 12000m, + LaborCost = 30m, + Name = "Sezionatrice", + OverHeadCost = 5000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 4, + CodResource = "0120.01", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 100000m, + LaborCost = 40m, + Name = "Linea SAOMAD WoodPecker Just 3500", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 30000m + }, + new + { + ResourceID = 5, + CodResource = "0120.02", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 24000m, + LaborCost = 35m, + Name = "Linea Pantografo", + OverHeadCost = 5000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 6, + CodResource = "0130.01", + CostDriverBudget = 880m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 24000m, + LaborCost = 30m, + Name = "Stazione Verniciatura", + OverHeadCost = 3000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 7, + CodResource = "0130.02", + CostDriverBudget = 220m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 6000m, + LaborCost = 30m, + Name = "Verniciatura Manuale", + OverHeadCost = 3000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 2000m + }, + new + { + ResourceID = 8, + CodResource = "0140", + CostDriverBudget = 3520m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 500m, + LaborCost = 30m, + Name = "Montaggio Manuale", + OverHeadCost = 500m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 500m + }, + new + { + ResourceID = 9, + CodResource = "0150", + CostDriverBudget = 3520m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 0m, + LaborCost = 40m, + Name = "Installatore", + OverHeadCost = 0m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 3000m + }, + new + { + ResourceID = 10, + CodResource = "0120.3", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 100000m, + LaborCost = 40m, + Name = "Linea Essetre FAST", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 30000m + }, + new + { + ResourceID = 11, + CodResource = "0120.0", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 0m, + LaborCost = 40m, + Name = "Lavorazione Manuale /Esterna", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 90000m + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", b => + { + b.Property("CodGroup") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CodGroup"); + + b.ToTable("item_group"); + + b.HasData( + new + { + CodGroup = "BeamTrunk", + Description = "Barre legno per lavorazione Travi" + }, + new + { + CodGroup = "WindowTrunk", + Description = "Barre legno per lavorazione Finestre" + }, + new + { + CodGroup = "WindowGlass", + Description = "Vetri serramento" + }, + new + { + CodGroup = "WindowVarnish", + Description = "Vernici per legno" + }, + new + { + CodGroup = "WindowHardware", + Description = "Ferramenta serramento" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", b => + { + b.Property("ItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ItemID")); + + b.Property("CodGroup") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Cost") + .HasColumnType("double"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("IsService") + .HasColumnType("tinyint(1)"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("ItemIDParent") + .HasColumnType("int"); + + b.Property("ItemType") + .HasColumnType("int"); + + b.Property("Margin") + .HasColumnType("double"); + + b.Property("QtyMax") + .HasColumnType("double"); + + b.Property("QtyMin") + .HasColumnType("double"); + + b.Property("SupplCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("UM") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ItemID"); + + b.HasIndex("CodGroup"); + + b.ToTable("item_item"); + + b.HasData( + new + { + ItemID = 1, + CodGroup = "WindowTrunk", + Cost = 20.0, + Description = "BARRA-60x80 generica", + ExtItemCode = "", + IsService = false, + ItemCode = 1001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.29999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "BARR.001", + UM = "#" + }, + new + { + ItemID = 2, + CodGroup = "WindowTrunk", + Cost = 16.5, + Description = "Barra 60x80, lunghezza 12m", + ExtItemCode = "BARRA-60x80x12000", + IsService = false, + ItemCode = 1002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.12000", + UM = "#" + }, + new + { + ItemID = 3, + CodGroup = "WindowTrunk", + Cost = 17.5, + Description = "Barra 60x80, lunghezza 8m", + ExtItemCode = "BARRA-60x80x8000", + IsService = false, + ItemCode = 1003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.22, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.8000", + UM = "#" + }, + new + { + ItemID = 4, + CodGroup = "WindowTrunk", + Cost = 15.5, + Description = "Barra 60x80, lunghezza 16m", + ExtItemCode = "BARRA-60x80x16000", + IsService = false, + ItemCode = 1004, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.16000", + UM = "#" + }, + new + { + ItemID = 5, + CodGroup = "WindowGlass", + Cost = 300.0, + Description = "Vetro triplo, basso indice termico, 800x1000", + ExtItemCode = "VETRO-3L-THERMO-800x1000", + IsService = false, + ItemCode = 2001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V3T.800.1000", + UM = "m2" + }, + new + { + ItemID = 6, + CodGroup = "WindowGlass", + Cost = 200.0, + Description = "Vetro doppio, 800x1000", + ExtItemCode = "VETRO-2L-800x1000", + IsService = false, + ItemCode = 2002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.14999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V2.800.1000", + UM = "m2" + }, + new + { + ItemID = 7, + CodGroup = "WindowGlass", + Cost = 250.0, + Description = "Vetro triplo, 800x1000", + ExtItemCode = "VETRO-3L-800x1000", + IsService = false, + ItemCode = 2003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.17999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V3.800.1000", + UM = "m2" + }, + new + { + ItemID = 8, + CodGroup = "WindowVarnish", + Cost = 20.0, + Description = "Vernice trasparente", + ExtItemCode = "VERN-TRASP", + IsService = false, + ItemCode = 3001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "VT.STD", + UM = "l" + }, + new + { + ItemID = 9, + CodGroup = "WindowHardware", + Cost = 65.0, + Description = "Kit standard completo AGB tipo 001", + ExtItemCode = "KIT-001", + IsService = false, + ItemCode = 5001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-KIT-001", + UM = "#" + }, + new + { + ItemID = 10, + CodGroup = "WindowHardware", + Cost = 10.0, + Description = "Cerniera AGB tipo 001", + ExtItemCode = "CERN-001", + IsService = false, + ItemCode = 5002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-CERN-001", + UM = "#" + }, + new + { + ItemID = 11, + CodGroup = "WindowHardware", + Cost = 15.0, + Description = "Serratura AGB tipo 001", + ExtItemCode = "SERR-001", + IsService = false, + ItemCode = 5003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-SERR-001", + UM = "#" + }, + new + { + ItemID = 12, + CodGroup = "WindowHardware", + Cost = 25.0, + Description = "Maniglia AGB tipo 001", + ExtItemCode = "MAN-001", + IsService = false, + ItemCode = 5004, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-MAN-001", + UM = "#" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", b => + { + b.Property("SellingItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SellingItemID")); + + b.Property("Cost") + .HasColumnType("double"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("IsService") + .HasColumnType("tinyint(1)"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Margin") + .HasColumnType("double"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SourceType") + .HasColumnType("int"); + + b.Property("SupplCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("UM") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("SellingItemID"); + + b.HasIndex("JobID"); + + b.ToTable("item_selling_item"); + + b.HasData( + new + { + SellingItemID = 1, + Cost = 500.0, + Description = "Finestra Anta Singola", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 2, + Margin = 0.20000000000000001, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 2, + Cost = 300.0, + Description = "Finestra Vetro Fisso ", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 2, + Margin = 0.20000000000000001, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 3, + Cost = 150.0, + Description = "Persiana anta singola", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 1, + Margin = 0.10000000000000001, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 4, + Cost = 200.0, + Description = "Installazione", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = true, + ItemCode = 0, + ItemSteps = "", + JobID = 1, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 5, + Cost = 1000.0, + Description = "Trave lamellare", + Envir = 2, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 3, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 6, + Cost = 500.0, + Description = "Cabinet", + Envir = 4, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 4, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 7, + Cost = 2000.0, + Description = "Parete", + Envir = 3, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 5, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverConfigModel", b => + { + b.Property("JobDriverConfID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobDriverConfID")); + + b.Property("CostDriverID") + .HasColumnType("int"); + + b.Property("DefaultVal") + .HasColumnType("double"); + + b.Property("Intercept") + .HasColumnType("double"); + + b.Property("JobDriverID") + .HasColumnType("int"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Regress") + .HasColumnType("double"); + + b.HasKey("JobDriverConfID"); + + b.HasIndex("CostDriverID"); + + b.HasIndex("JobDriverID"); + + b.HasIndex("JobID"); + + b.ToTable("task_job_driver_config"); + + b.HasData( + new + { + JobDriverConfID = 1, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 6, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 2, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 7, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 3, + CostDriverID = 1, + DefaultVal = 5.0, + Intercept = 0.0, + JobDriverID = 1, + JobID = 7, + Note = "Ore Equivalenti", + Regress = 0.016666666666666666 + }, + new + { + JobDriverConfID = 4, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 2, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 5, + CostDriverID = 1, + DefaultVal = 5.0, + Intercept = 0.0, + JobDriverID = 1, + JobID = 2, + Note = "Ore Equivalenti", + Regress = 0.016666666666666666 + }, + new + { + JobDriverConfID = 6, + CostDriverID = 1, + DefaultVal = 8.0, + Intercept = 0.0, + JobDriverID = 4, + JobID = 2, + Note = "Ore Extra per complex Articolo (1 min/pezzo)", + Regress = 0.016666666666666666 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverModel", b => + { + b.Property("JobDriverID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobDriverID")); + + b.Property("Descript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("JobDriverID"); + + b.ToTable("task_job_driver"); + + b.HasData( + new + { + JobDriverID = 1, + Descript = "Tempo netto di lavorazione, in minuti", + Name = "LeadTime" + }, + new + { + JobDriverID = 2, + Descript = "Tempo di attraversamento complessivo del processo, in giorni lavorativi", + Name = "FlowTime" + }, + new + { + JobDriverID = 3, + Descript = "Numero Articoli/Prodotti", + Name = "NumArticoli" + }, + new + { + JobDriverID = 4, + Descript = "Numero Items per Articolo", + Name = "NumItems" + }, + new + { + JobDriverID = 5, + Descript = "Indice complex lavorazioni", + Name = "WorkCompScore" + }, + new + { + JobDriverID = 6, + Descript = "Indice complex materiali", + Name = "MaterialCompScore" + }, + new + { + JobDriverID = 7, + Descript = "Indice complex generale", + Name = "GeneralScore" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepItemModel", b => + { + b.Property("JobStepItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobStepItemID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("JobStepID") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.HasKey("JobStepItemID"); + + b.HasIndex("ItemID"); + + b.HasIndex("JobStepID"); + + b.ToTable("task_job_step_item"); + + b.HasData( + new + { + JobStepItemID = 1, + Description = "Grezzo legno abete", + Index = 1, + ItemID = 1, + JobStepID = 1, + Qty = 1.0 + }, + new + { + JobStepItemID = 2, + Description = "Vernice trasparente standard 1L", + Index = 2, + ItemID = 8, + JobStepID = 3, + Qty = 0.10000000000000001 + }, + new + { + JobStepItemID = 3, + Description = "Ferramenta AGB - rif. AGFD.00000.00000", + Index = 3, + ItemID = 9, + JobStepID = 4, + Qty = 1.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.Property("JobStepID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobStepID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("PhaseID") + .HasColumnType("int"); + + b.Property("ProductivityRate") + .HasColumnType("decimal(65,30)"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.Property("TagsModelCodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobStepID"); + + b.HasIndex("JobID"); + + b.HasIndex("PhaseID"); + + b.HasIndex("ResourceID"); + + b.HasIndex("TagsModelCodTag"); + + b.ToTable("task_job_step"); + + b.HasData( + new + { + JobStepID = 1, + Description = "Preparazione Tronchetti", + Index = 1, + JobID = 2, + PhaseID = 1, + ProductivityRate = 1m, + ResourceID = 3 + }, + new + { + JobStepID = 2, + Description = "Taglio profilo", + Index = 2, + JobID = 2, + PhaseID = 2, + ProductivityRate = 1m, + ResourceID = 4 + }, + new + { + JobStepID = 3, + Description = "Verniciatura", + Index = 3, + JobID = 2, + PhaseID = 3, + ProductivityRate = 1m, + ResourceID = 6 + }, + new + { + JobStepID = 4, + Description = "Assemblaggio Serramento", + Index = 4, + JobID = 2, + PhaseID = 4, + ProductivityRate = 1m, + ResourceID = 8 + }, + new + { + JobStepID = 5, + Description = "Installazione cliente", + Index = 5, + JobID = 2, + PhaseID = 6, + ProductivityRate = 1m, + ResourceID = 9 + }, + new + { + JobStepID = 6, + Description = "Produzione Serramento (media annua)", + Index = 1, + JobID = 6, + PhaseID = 7, + ProductivityRate = 1m, + ResourceID = 2 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepTagModel", b => + { + b.Property("JobStepID") + .HasColumnType("int"); + + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobStepID", "CodTag"); + + b.HasIndex("CodTag"); + + b.ToTable("task_job_step_tag"); + + b.HasData( + new + { + JobStepID = 1, + CodTag = "Serramento" + }, + new + { + JobStepID = 2, + CodTag = "Serramento" + }, + new + { + JobStepID = 3, + CodTag = "Serramento" + }, + new + { + JobStepID = 4, + CodTag = "Serramento" + }, + new + { + JobStepID = 5, + CodTag = "Serramento" + }, + new + { + JobStepID = 6, + CodTag = "Serramento" + }, + new + { + JobStepID = 2, + CodTag = "LineaCNC" + }, + new + { + JobStepID = 4, + CodTag = "Montaggio" + }, + new + { + JobStepID = 5, + CodTag = "Servizi" + }, + new + { + JobStepID = 2, + CodTag = "LineaManuale" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.Property("JobID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("Lock") + .HasColumnType("tinyint(1)"); + + b.Property("TagsModelCodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobID"); + + b.HasIndex("TagsModelCodTag"); + + b.ToTable("task_job"); + + b.HasData( + new + { + JobID = 1, + Description = "Rivendita / servizi", + Enabled = true, + Index = 4, + Lock = true + }, + new + { + JobID = 2, + Description = "Serramento Legno - Ciclo Completo con installazione", + Enabled = true, + Index = 3, + Lock = true + }, + new + { + JobID = 3, + Description = "Realizzazione Trave", + Enabled = true, + Index = 5, + Lock = true + }, + new + { + JobID = 4, + Description = "Realizzazione Cabinet", + Enabled = true, + Index = 6, + Lock = true + }, + new + { + JobID = 5, + Description = "Realizzazione Parete", + Enabled = true, + Index = 7, + Lock = true + }, + new + { + JobID = 6, + Description = "Serramento - ciclo base", + Enabled = true, + Index = 1, + Lock = true + }, + new + { + JobID = 7, + Description = "Serramento - ciclo intermedio", + Enabled = true, + Index = 2, + Lock = true + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskTagModel", b => + { + b.Property("JobID") + .HasColumnType("int"); + + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobID", "CodTag"); + + b.HasIndex("CodTag"); + + b.ToTable("task_job_task_tag"); + + b.HasData( + new + { + JobID = 1, + CodTag = "Rivendita" + }, + new + { + JobID = 2, + CodTag = "Serramento" + }, + new + { + JobID = 3, + CodTag = "Trave" + }, + new + { + JobID = 4, + CodTag = "Cabinet" + }, + new + { + JobID = 5, + CodTag = "Parete" + }, + new + { + JobID = 6, + CodTag = "Serramento" + }, + new + { + JobID = 7, + CodTag = "Serramento" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.PhaseModel", b => + { + b.Property("PhaseID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("PhaseID")); + + b.Property("CodPhase") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("PhaseID"); + + b.ToTable("task_phase"); + + b.HasData( + new + { + PhaseID = 1, + CodPhase = "010", + Description = "Taglio tronchetti", + Name = "Taglio" + }, + new + { + PhaseID = 2, + CodPhase = "020", + Description = "Lavorazione pezzi serramento", + Name = "Lavorazione CNC" + }, + new + { + PhaseID = 3, + CodPhase = "030", + Description = "Verniciatura", + Name = "Verniciatura" + }, + new + { + PhaseID = 4, + CodPhase = "030.01", + Description = "Assemblaggio completo", + Name = "Montaggio" + }, + new + { + PhaseID = 5, + CodPhase = "030.02", + Description = "Assemblaggio Ferramenta", + Name = "Ferramenta" + }, + new + { + PhaseID = 6, + CodPhase = "040", + Description = "Installazione e posa in opera", + Name = "Installazione" + }, + new + { + PhaseID = 7, + CodPhase = "000", + Description = "Produzione Completa: Fase Unica complessiva", + Name = "Produzione Completa" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", b => + { + b.Property("ProdBatchID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdBatchID")); + + b.Property("BatchTag") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DateEnd") + .HasColumnType("datetime(6)"); + + b.Property("DateStart") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DueDate") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.HasKey("ProdBatchID"); + + b.ToTable("production_batch"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.Property("ProdGroupID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdGroupID")); + + b.Property("GrpIdx") + .HasColumnType("int"); + + b.Property("OrderRowID") + .HasColumnType("int"); + + b.Property("WorkGroupListRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ProdGroupID"); + + b.HasIndex("OrderRowID"); + + b.ToTable("production_group"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItem2ODLModel", b => + { + b.Property("ProdItemID") + .HasColumnType("int"); + + b.Property("ProdODLID") + .HasColumnType("int"); + + b.Property("DtAssign") + .HasColumnType("datetime(6)"); + + b.HasKey("ProdItemID", "ProdODLID"); + + b.HasIndex("ProdODLID"); + + b.ToTable("production_item2odl"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.Property("ProdItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdItemID")); + + b.Property("EstimTime") + .HasColumnType("double"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("OrderRowID") + .HasColumnType("int"); + + b.Property("ProdBatchID") + .HasColumnType("int"); + + b.Property("ProdGroupID") + .HasColumnType("int"); + + b.Property("ProdItemTag") + .HasColumnType("varchar(255)"); + + b.HasKey("ProdItemID"); + + b.HasIndex("OrderRowID"); + + b.HasIndex("ProdBatchID"); + + b.HasIndex("ProdGroupID"); + + b.HasIndex("ProdItemTag") + .IsUnique() + .HasDatabaseName("idx_prod_item_tag"); + + b.ToTable("production_item"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.Property("ProdODLID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdODLID")); + + b.Property("DateAssign") + .HasColumnType("datetime(6)"); + + b.Property("DateEnd") + .HasColumnType("datetime(6)"); + + b.Property("DateMaxCompl") + .HasColumnType("datetime(6)"); + + b.Property("DateStart") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("EstimTime") + .HasColumnType("decimal(65,30)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("OdlTag") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("PhaseID") + .HasColumnType("int"); + + b.Property("ProdBatchID") + .HasColumnType("int"); + + b.Property("ProdPlantCod") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RawBoM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RawItemRawList") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RawMaterials") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.Property("WorkTime") + .HasColumnType("decimal(65,30)"); + + b.HasKey("ProdODLID"); + + b.HasIndex("ProdBatchID"); + + b.ToTable("production_odl"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionPlantModel", b => + { + b.Property("ProdPlantCod") + .HasColumnType("varchar(255)"); + + b.Property("IsManual") + .HasColumnType("tinyint(1)"); + + b.Property("Outsource") + .HasColumnType("tinyint(1)"); + + b.Property("ProdPlantDescript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.HasKey("ProdPlantCod"); + + b.HasIndex("ResourceID"); + + b.ToTable("production_plant"); + + b.HasData( + new + { + ProdPlantCod = "EXT", + IsManual = true, + Outsource = true, + ProdPlantDescript = "External / Manuale" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", b => + { + b.Property("CustomerID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CustomerID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CustomerID"); + + b.ToTable("sales_customer"); + + b.HasData( + new + { + CustomerID = 1, + CompanyName = "", + FirstName = "Customer A", + LastName = "Egalware", + VAT = "1234567890123456" + }, + new + { + CustomerID = 2, + CompanyName = "", + FirstName = "Customer B", + LastName = "User", + VAT = "1234567890123456" + }, + new + { + CustomerID = 3, + CompanyName = "", + FirstName = "Customer C", + LastName = "User Test", + VAT = "1234567890123456" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", b => + { + b.Property("DealerID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("DealerID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("DealerID"); + + b.ToTable("sales_dealer"); + + b.HasData( + new + { + DealerID = 1, + CompanyName = "Company First", + FirstName = "Dealer A", + LastName = "Egalware", + VAT = "9587362514671527" + }, + new + { + DealerID = 2, + CompanyName = "Company First", + FirstName = "Dealer B", + LastName = "User", + VAT = "9587362514671527" + }, + new + { + DealerID = 3, + CompanyName = "Company Second", + FirstName = "Dealer C", + LastName = "User Test", + VAT = "9587362514671527" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.Property("OfferID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OfferID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CustomerID") + .HasColumnType("int"); + + b.Property("DealerID") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DictPresel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Discount") + .HasColumnType("double"); + + b.Property("DueDateProm") + .HasColumnType("datetime(6)"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OffertState") + .HasColumnType("int"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("ValidUntil") + .HasColumnType("datetime(6)"); + + b.HasKey("OfferID"); + + b.HasIndex("CustomerID"); + + b.HasIndex("DealerID"); + + b.ToTable("sales_offer"); + + b.HasData( + new + { + OfferID = 1, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta per tre serramenti", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 1, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 1, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5680) + }, + new + { + OfferID = 2, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta BEAM", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 2, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 2, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5692) + }, + new + { + OfferID = 3, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta Cabinet", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 4, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 3, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5699) + }, + new + { + OfferID = 4, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta Wall", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 3, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 4, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5705) + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferRowModel", b => + { + b.Property("OfferRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OfferRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("DictPendPresRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OfferID") + .HasColumnType("int"); + + b.Property("OfferRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateRowID") + .HasColumnType("int"); + + b.HasKey("OfferRowID"); + + b.HasIndex("OfferID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateRowID"); + + b.ToTable("sales_offer_row"); + + b.HasData( + new + { + OfferRowID = 2, + AwaitBom = false, + AwaitPrice = false, + BomCost = 900.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Finestra Anta Singola 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000002", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 1, + SellingItemID = 1, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 1, + AwaitBom = false, + AwaitPrice = false, + BomCost = 900.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Finestra Vetro Fisso 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000001", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 2, + SellingItemID = 2, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 3, + AwaitBom = false, + AwaitPrice = false, + BomCost = 160.0, + BomOk = true, + BomPrice = 200.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Persiana per Finestra anta singola 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000003", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 3, + SellingItemID = 3, + SerStruct = "{}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 4, + AwaitBom = false, + AwaitPrice = false, + BomCost = 200.0, + BomOk = true, + BomPrice = 250.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Installazione serramento", + OfferID = 1, + OfferRowUID = "SOR.26.00000004", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 4, + SellingItemID = 4, + SerStruct = "{}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 5, + AwaitBom = false, + AwaitPrice = false, + BomCost = 800.0, + BomOk = true, + BomPrice = 1150.0, + DictPendPresRaw = "", + Envir = 2, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 2, + OfferRowUID = "SOR.26.00000005", + ProdItemQty = 0, + Qty = 10.0, + RowNum = 1, + SellingItemID = 5, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 6, + AwaitBom = false, + AwaitPrice = false, + BomCost = 600.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 2, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 2, + OfferRowUID = "SOR.26.00000006", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 5, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 7, + AwaitBom = false, + AwaitPrice = false, + BomCost = 200.0, + BomOk = true, + BomPrice = 250.0, + DictPendPresRaw = "", + Envir = 3, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 3, + OfferRowUID = "SOR.26.00000007", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 6, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 8, + AwaitBom = false, + AwaitPrice = false, + BomCost = 50.0, + BomOk = true, + BomPrice = 80.0, + DictPendPresRaw = "", + Envir = 3, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 3, + OfferRowUID = "SOR.26.00000008", + ProdItemQty = 0, + Qty = 12.0, + RowNum = 1, + SellingItemID = 6, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 9, + AwaitBom = false, + AwaitPrice = false, + BomCost = 800.0, + BomOk = true, + BomPrice = 1150.0, + DictPendPresRaw = "", + Envir = 4, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 4, + OfferRowUID = "SOR.26.00000009", + ProdItemQty = 0, + Qty = 6.0, + RowNum = 1, + SellingItemID = 7, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 10, + AwaitBom = false, + AwaitPrice = false, + BomCost = 600.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 4, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 4, + OfferRowUID = "SOR.26.0000000A", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 7, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.Property("OrderID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OrderID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CustomerID") + .HasColumnType("int"); + + b.Property("DealerID") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DictPresel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Discount") + .HasColumnType("double"); + + b.Property("DueDateProm") + .HasColumnType("datetime(6)"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OfferID") + .HasColumnType("int"); + + b.Property("OrderState") + .HasColumnType("int"); + + b.Property("RawHistory") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("ValidUntil") + .HasColumnType("datetime(6)"); + + b.HasKey("OrderID"); + + b.HasIndex("CustomerID"); + + b.HasIndex("DealerID"); + + b.HasIndex("OfferID"); + + b.ToTable("sales_order"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.Property("OrderRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OrderRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("DictPendPresRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrderID") + .HasColumnType("int"); + + b.Property("OrderRowState") + .HasColumnType("int"); + + b.Property("OrderRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdEstimTime") + .HasColumnType("decimal(65,30)"); + + b.Property("ProdEstimate") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateRowID") + .HasColumnType("int"); + + b.HasKey("OrderRowID"); + + b.HasIndex("OrderID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateRowID"); + + b.ToTable("sales_order_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stats.StatsAggregatedModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AvgDuration") + .HasColumnType("double"); + + b.Property("Hour") + .HasColumnType("datetime(6)"); + + b.Property("MaxDuration") + .HasColumnType("double"); + + b.Property("NoReply") + .HasColumnType("bigint"); + + b.Property("RequestCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("Hour") + .IsUnique() + .HasDatabaseName("idx_statsaggr_hour"); + + b.ToTable("stats_aggr"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stats.StatsDetailModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AvgDuration") + .HasColumnType("double"); + + b.Property("Environment") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Hour") + .HasColumnType("datetime(6)"); + + b.Property("MaxDuration") + .HasColumnType("double"); + + b.Property("NoReply") + .HasColumnType("bigint"); + + b.Property("RequestCount") + .HasColumnType("bigint"); + + b.Property("Type") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hour", "Environment", "Type") + .IsUnique() + .HasDatabaseName("idx_statsdet_hour_env_type"); + + b.ToTable("stats_detail"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockMovModel", b => + { + b.Property("StockMovID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StockMovID")); + + b.Property("CodDoc") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DtCreate") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("DtMod") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("timestamp") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("DtMod")); + + b.Property("MovCod") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("QtyRec") + .HasColumnType("double"); + + b.Property("StockStatusId") + .HasColumnType("int"); + + b.Property("UnitVal") + .HasColumnType("double"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("StockMovID"); + + b.HasIndex("MovCod"); + + b.HasIndex("StockStatusId"); + + b.ToTable("stock_mov"); + + b.HasData( + new + { + StockMovID = 1, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 5.0, + StockStatusId = 1, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 2, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 8.0, + StockStatusId = 2, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 3, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 5.0, + StockStatusId = 3, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 4, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 4, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 5, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 10.0, + StockStatusId = 5, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 6, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 6, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 7, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 50.0, + StockStatusId = 7, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 8, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 8, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 9, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 9, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 10, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 10, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", b => + { + b.Property("StockStatusId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StockStatusId")); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("IsRemn") + .HasColumnType("tinyint(1)"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("Location") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("QtyAvail") + .HasColumnType("double"); + + b.HasKey("StockStatusId"); + + b.HasIndex("ItemID"); + + b.ToTable("stock_status"); + + b.HasData( + new + { + StockStatusId = 1, + IsDeleted = false, + IsRemn = false, + ItemID = 1, + Location = "B001-001-003", + QtyAvail = 5.0 + }, + new + { + StockStatusId = 2, + IsDeleted = false, + IsRemn = false, + ItemID = 2, + Location = "B001-001-002", + QtyAvail = 8.0 + }, + new + { + StockStatusId = 3, + IsDeleted = false, + IsRemn = false, + ItemID = 3, + Location = "B001-001-001", + QtyAvail = 5.0 + }, + new + { + StockStatusId = 4, + IsDeleted = false, + IsRemn = false, + ItemID = 4, + Location = "V002-001-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 5, + IsDeleted = false, + IsRemn = false, + ItemID = 5, + Location = "V001-001-002", + QtyAvail = 10.0 + }, + new + { + StockStatusId = 6, + IsDeleted = false, + IsRemn = false, + ItemID = 6, + Location = "V001-001-003", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 7, + IsDeleted = false, + IsRemn = false, + ItemID = 8, + Location = "V001-001-003", + QtyAvail = 50.0 + }, + new + { + StockStatusId = 8, + IsDeleted = false, + IsRemn = false, + ItemID = 11, + Location = "S001-002-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 9, + IsDeleted = false, + IsRemn = false, + ItemID = 9, + Location = "S001-002-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 10, + IsDeleted = false, + IsRemn = false, + ItemID = 10, + Location = "S001-001-001", + QtyAvail = 1.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Property("BuyOrderID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OrderState") + .HasColumnType("int"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("SupplierID") + .HasColumnType("int"); + + b.HasKey("BuyOrderID"); + + b.HasIndex("SupplierID"); + + b.ToTable("buy_order"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.Property("BuyOrderRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderRowID")); + + b.Property("BuyOrderID") + .HasColumnType("int"); + + b.Property("ClassCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DescriptionCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("OrderID") + .HasColumnType("int"); + + b.Property("OrderRowData") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("BuyOrderRowID"); + + b.HasIndex("BuyOrderID"); + + b.HasIndex("ItemID"); + + b.HasIndex("OrderID"); + + b.ToTable("buy_order_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", b => + { + b.Property("SupplierID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SupplierID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("SupplierID"); + + b.ToTable("buy_supplier"); + + b.HasData( + new + { + SupplierID = 1, + CompanyName = "Company One", + FirstName = "Supplier A", + LastName = "Egalware", + VAT = "7294857103879254" + }, + new + { + SupplierID = 2, + CompanyName = "Company Two", + FirstName = "Supplier B", + LastName = "User", + VAT = "7294857103879254" + }, + new + { + SupplierID = 3, + CompanyName = "Company Two", + FirstName = "Supplier C", + LastName = "User Test", + VAT = "7294857103879254" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.CounterModel", b => + { + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("CountName") + .HasColumnType("varchar(255)"); + + b.Property("Counter") + .HasColumnType("int"); + + b.HasKey("RefYear", "CountName"); + + b.ToTable("utils_counter"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => + { + b.Property("ClassCod") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ClassCod"); + + b.ToTable("utils_gen_class"); + + b.HasData( + new + { + ClassCod = "ShapeList", + Description = "Elenco Shape Gestite" + }, + new + { + ClassCod = "WoodCol", + Description = "Elenco Colori Legno" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => + { + b.Property("GenValID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("GenValID")); + + b.Property("ClassCod") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("ValString") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("GenValID"); + + b.HasIndex("ClassCod"); + + b.ToTable("utils_gen_value"); + + b.HasData( + new + { + GenValID = 1, + ClassCod = "WoodCol", + Index = 1, + ValString = "Blue" + }, + new + { + GenValID = 2, + ClassCod = "WoodCol", + Index = 2, + ValString = "White" + }, + new + { + GenValID = 3, + ClassCod = "WoodCol", + Index = 3, + ValString = "Red" + }, + new + { + GenValID = 4, + ClassCod = "WoodCol", + Index = 4, + ValString = "Black" + }, + new + { + GenValID = 5, + ClassCod = "ShapeList", + Index = 1, + ValString = "Rectangle" + }, + new + { + GenValID = 6, + ClassCod = "ShapeList", + Index = 2, + ValString = "Trapezoid" + }, + new + { + GenValID = 7, + ClassCod = "ShapeList", + Index = 3, + ValString = "Triangular" + }, + new + { + GenValID = 8, + ClassCod = "ShapeList", + Index = 4, + ValString = "Arc" + }, + new + { + GenValID = 9, + ClassCod = "ShapeList", + Index = 5, + ValString = "FullArc" + }, + new + { + GenValID = 10, + ClassCod = "ShapeList", + Index = 6, + ValString = "SemiFullArc" + }, + new + { + GenValID = 11, + ClassCod = "ShapeList", + Index = 7, + ValString = "SemiArc" + }, + new + { + GenValID = 12, + ClassCod = "ShapeList", + Index = 8, + ValString = "Circle" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.MovTypeModel", b => + { + b.Property("MovCod") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("MovCod"); + + b.ToTable("utils_mov_type"); + + b.HasData( + new + { + MovCod = "CAR", + Description = "Carico a magazzino" + }, + new + { + MovCod = "MOV", + Description = "Movimento interno (spostamento)" + }, + new + { + MovCod = "ND", + Description = "Non Definito" + }, + new + { + MovCod = "OFOR", + Description = "Ordine Fornitore" + }, + new + { + MovCod = "RETT", + Description = "Rettifica magazzino" + }, + new + { + MovCod = "SCAR", + Description = "Scarico da magazzino" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", b => + { + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("CodTag"); + + b.ToTable("utils_tags"); + + b.HasData( + new + { + CodTag = "Cabinet" + }, + new + { + CodTag = "LineaCNC" + }, + new + { + CodTag = "LineaManuale" + }, + new + { + CodTag = "Montaggio" + }, + new + { + CodTag = "Parete" + }, + new + { + CodTag = "Rivendita" + }, + new + { + CodTag = "Serramento" + }, + new + { + CodTag = "Servizi" + }, + new + { + CodTag = "Trave" + }, + new + { + CodTag = "Trave_200x200" + }, + new + { + CodTag = "Trave_400x400" + }, + new + { + CodTag = "Trave_800x600" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", "TemplateNav") + .WithMany("TemplateRowNav") + .HasForeignKey("TemplateID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", "DriverNav") + .WithMany() + .HasForeignKey("CostDriverID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("DriverNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", "ItemGroupNav") + .WithMany() + .HasForeignKey("CodGroup") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemGroupNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany() + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverConfigModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", "CostDriverNav") + .WithMany() + .HasForeignKey("CostDriverID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverModel", "JobDriverNav") + .WithMany() + .HasForeignKey("JobDriverID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany() + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CostDriverNav"); + + b.Navigation("JobDriverNav"); + + b.Navigation("JobNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", "JobStepNav") + .WithMany() + .HasForeignKey("JobStepID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemNav"); + + b.Navigation("JobStepNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany("JobStepNav") + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.PhaseModel", "PhaseNav") + .WithMany() + .HasForeignKey("PhaseID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", "ResourceNav") + .WithMany("JobStepNav") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", null) + .WithMany("JobSteps") + .HasForeignKey("TagsModelCodTag") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("JobNav"); + + b.Navigation("PhaseNav"); + + b.Navigation("ResourceNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepTagModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", "TagNav") + .WithMany() + .HasForeignKey("CodTag") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", "JobStepNav") + .WithMany("TagNav") + .HasForeignKey("JobStepID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobStepNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", null) + .WithMany("JobTasks") + .HasForeignKey("TagsModelCodTag") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskTagModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", "TagNav") + .WithMany() + .HasForeignKey("CodTag") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany("TagNav") + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", "OrderRowNav") + .WithMany() + .HasForeignKey("OrderRowID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("OrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItem2ODLModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", "ProductionItemNav") + .WithMany("Item2OdlNav") + .HasForeignKey("ProdItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", "ProductionODLNav") + .WithMany("Item2OdlNav") + .HasForeignKey("ProdODLID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ProductionItemNav"); + + b.Navigation("ProductionODLNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", "OrderRowNav") + .WithMany("ProdItemNav") + .HasForeignKey("OrderRowID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", "ProductionBatchNav") + .WithMany() + .HasForeignKey("ProdBatchID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", "ProductionGroupNav") + .WithMany("ItemsNav") + .HasForeignKey("ProdGroupID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OrderRowNav"); + + b.Navigation("ProductionBatchNav"); + + b.Navigation("ProductionGroupNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", "ProdBatchNav") + .WithMany() + .HasForeignKey("ProdBatchID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ProdBatchNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionPlantModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", "ResourceNav") + .WithMany() + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("ResourceNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", "CustomerNav") + .WithMany() + .HasForeignKey("CustomerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", "DealerNav") + .WithMany() + .HasForeignKey("DealerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomerNav"); + + b.Navigation("DealerNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", "OfferNav") + .WithMany("OfferRowNav") + .HasForeignKey("OfferID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", "TemplateRowNav") + .WithMany() + .HasForeignKey("TemplateRowID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OfferNav"); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", "CustomerNav") + .WithMany() + .HasForeignKey("CustomerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", "DealerNav") + .WithMany() + .HasForeignKey("DealerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", "OfferNav") + .WithMany() + .HasForeignKey("OfferID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomerNav"); + + b.Navigation("DealerNav"); + + b.Navigation("OfferNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", "OrderNav") + .WithMany("OrderRowNav") + .HasForeignKey("OrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", "TemplateRowNav") + .WithMany() + .HasForeignKey("TemplateRowID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OrderNav"); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockMovModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.MovTypeModel", "MovTypeNav") + .WithMany() + .HasForeignKey("MovCod") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", "StockStatusNav") + .WithMany() + .HasForeignKey("StockStatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("MovTypeNav"); + + b.Navigation("StockStatusNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", "SupplierNav") + .WithMany() + .HasForeignKey("SupplierID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("SupplierNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", "BuyOrderNav") + .WithMany("BuyOrderRowNav") + .HasForeignKey("BuyOrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", "OrderNav") + .WithMany() + .HasForeignKey("OrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BuyOrderNav"); + + b.Navigation("ItemNav"); + + b.Navigation("OrderNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", "GenClassNav") + .WithMany("GenValNav") + .HasForeignKey("ClassCod") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("GenClassNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", b => + { + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.Navigation("JobStepNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.Navigation("JobStepNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.Navigation("ItemsNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.Navigation("Item2OdlNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.Navigation("Item2OdlNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.Navigation("OfferRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.Navigation("OrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.Navigation("ProdItemNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Navigation("BuyOrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => + { + b.Navigation("GenValNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", b => + { + b.Navigation("JobSteps"); + + b.Navigation("JobTasks"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.cs b/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.cs new file mode 100644 index 00000000..f23aa904 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Migrations/20260414092234_AddBuyOrder.cs @@ -0,0 +1,385 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace EgwCoreLib.Lux.Data.Migrations +{ + /// + public partial class AddBuyOrder : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "item_supplier"); + + migrationBuilder.CreateTable( + name: "buy_supplier", + columns: table => new + { + SupplierID = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + CompanyName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + FirstName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + LastName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + VAT = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_buy_supplier", x => x.SupplierID); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "buy_order", + columns: table => new + { + BuyOrderID = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + RefYear = table.Column(type: "int", nullable: false), + RefNum = table.Column(type: "int", nullable: false), + RefRev = table.Column(type: "int", nullable: false), + Description = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SupplierID = table.Column(type: "int", nullable: true), + Inserted = table.Column(type: "datetime(6)", nullable: false), + Modified = table.Column(type: "datetime(6)", nullable: false), + DueDateReq = table.Column(type: "datetime(6)", nullable: false), + ConsNote = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + OrderState = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_buy_order", x => x.BuyOrderID); + table.ForeignKey( + name: "FK_buy_order_buy_supplier_SupplierID", + column: x => x.SupplierID, + principalTable: "buy_supplier", + principalColumn: "SupplierID", + onDelete: ReferentialAction.Restrict); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "buy_order_row", + columns: table => new + { + BuyOrderRowID = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + BuyOrderID = table.Column(type: "int", nullable: false), + OrderID = table.Column(type: "int", nullable: false), + ItemID = table.Column(type: "int", nullable: false), + ClassCode = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DescriptionCode = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ItemCode = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + OrderRowData = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_buy_order_row", x => x.BuyOrderRowID); + table.ForeignKey( + name: "FK_buy_order_row_buy_order_BuyOrderID", + column: x => x.BuyOrderID, + principalTable: "buy_order", + principalColumn: "BuyOrderID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_buy_order_row_item_item_ItemID", + column: x => x.ItemID, + principalTable: "item_item", + principalColumn: "ItemID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_buy_order_row_sales_order_OrderID", + column: x => x.OrderID, + principalTable: "sales_order", + principalColumn: "OrderID", + onDelete: ReferentialAction.Restrict); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.InsertData( + table: "buy_supplier", + columns: new[] { "SupplierID", "CompanyName", "FirstName", "LastName", "VAT" }, + values: new object[,] + { + { 1, "Company One", "Supplier A", "Egalware", "7294857103879254" }, + { 2, "Company Two", "Supplier B", "User", "7294857103879254" }, + { 3, "Company Two", "Supplier C", "User Test", "7294857103879254" } + }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 1, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5680) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 2, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5692) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 3, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5699) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 4, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5705) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 1, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 2, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 3, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 4, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 5, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 6, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 7, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 8, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 9, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 10, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.CreateIndex( + name: "IX_buy_order_SupplierID", + table: "buy_order", + column: "SupplierID"); + + migrationBuilder.CreateIndex( + name: "IX_buy_order_row_BuyOrderID", + table: "buy_order_row", + column: "BuyOrderID"); + + migrationBuilder.CreateIndex( + name: "IX_buy_order_row_ItemID", + table: "buy_order_row", + column: "ItemID"); + + migrationBuilder.CreateIndex( + name: "IX_buy_order_row_OrderID", + table: "buy_order_row", + column: "OrderID"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "buy_order_row"); + + migrationBuilder.DropTable( + name: "buy_order"); + + migrationBuilder.DropTable( + name: "buy_supplier"); + + migrationBuilder.CreateTable( + name: "item_supplier", + columns: table => new + { + SupplierID = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + CompanyName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + FirstName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + LastName = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + VAT = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_item_supplier", x => x.SupplierID); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.InsertData( + table: "item_supplier", + columns: new[] { "SupplierID", "CompanyName", "FirstName", "LastName", "VAT" }, + values: new object[,] + { + { 1, "Company One", "Supplier A", "Egalware", "7294857103879254" }, + { 2, "Company Two", "Supplier B", "User", "7294857103879254" }, + { 3, "Company Two", "Supplier C", "User Test", "7294857103879254" } + }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 1, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4789) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 2, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4807) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 3, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4813) }); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 4, + columns: new[] { "DueDateProm", "DueDateReq", "ValidUntil" }, + values: new object[] { new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4820) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 1, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 2, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 3, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 4, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 5, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 6, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 7, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 8, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 9, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + + migrationBuilder.UpdateData( + table: "sales_offer_row", + keyColumn: "OfferRowID", + keyValue: 10, + columns: new[] { "Inserted", "Modified" }, + values: new object[] { new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local) }); + } + } +} diff --git a/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs b/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs index 3cc3959d..4d8fd386 100644 --- a/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs +++ b/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs @@ -1171,61 +1171,6 @@ namespace EgwCoreLib.Lux.Data.Migrations }); }); - modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.SupplierModel", b => - { - b.Property("SupplierID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SupplierID")); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("VAT") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("SupplierID"); - - b.ToTable("item_supplier"); - - b.HasData( - new - { - SupplierID = 1, - CompanyName = "Company One", - FirstName = "Supplier A", - LastName = "Egalware", - VAT = "7294857103879254" - }, - new - { - SupplierID = 2, - CompanyName = "Company Two", - FirstName = "Supplier B", - LastName = "User", - VAT = "7294857103879254" - }, - new - { - SupplierID = 3, - CompanyName = "Company Two", - FirstName = "Supplier C", - LastName = "User Test", - VAT = "7294857103879254" - }); - }); - modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverConfigModel", b => { b.Property("JobDriverConfID") @@ -2265,8 +2210,8 @@ namespace EgwCoreLib.Lux.Data.Migrations Description = "Offerta per tre serramenti", DictPresel = "", Discount = 0.0, - DueDateProm = new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), - DueDateReq = new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), Envir = 1, Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), @@ -2274,7 +2219,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 1, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4789) + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5680) }, new { @@ -2285,8 +2230,8 @@ namespace EgwCoreLib.Lux.Data.Migrations Description = "Offerta BEAM", DictPresel = "", Discount = 0.0, - DueDateProm = new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), - DueDateReq = new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), Envir = 2, Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), @@ -2294,7 +2239,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 2, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4807) + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5692) }, new { @@ -2305,8 +2250,8 @@ namespace EgwCoreLib.Lux.Data.Migrations Description = "Offerta Cabinet", DictPresel = "", Discount = 0.0, - DueDateProm = new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), - DueDateReq = new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), Envir = 4, Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), @@ -2314,7 +2259,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 3, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4813) + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5699) }, new { @@ -2325,8 +2270,8 @@ namespace EgwCoreLib.Lux.Data.Migrations Description = "Offerta Wall", DictPresel = "", Discount = 0.0, - DueDateProm = new DateTime(2026, 5, 26, 0, 0, 0, 0, DateTimeKind.Local), - DueDateReq = new DateTime(2026, 4, 26, 0, 0, 0, 0, DateTimeKind.Local), + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), Envir = 3, Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), @@ -2334,7 +2279,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 4, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 4, 27, 17, 9, 50, 585, DateTimeKind.Local).AddTicks(4820) + ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5705) }); }); @@ -2477,14 +2422,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Finestra Anta Singola 2025", OfferID = 1, OfferRowUID = "SOR.26.00000002", @@ -2512,14 +2457,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Finestra Vetro Fisso 2025", OfferID = 1, OfferRowUID = "SOR.26.00000001", @@ -2547,14 +2492,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Persiana per Finestra anta singola 2025", OfferID = 1, OfferRowUID = "SOR.26.00000003", @@ -2582,14 +2527,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Installazione serramento", OfferID = 1, OfferRowUID = "SOR.26.00000004", @@ -2617,14 +2562,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 01", OfferID = 2, OfferRowUID = "SOR.26.00000005", @@ -2652,14 +2597,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 02", OfferID = 2, OfferRowUID = "SOR.26.00000006", @@ -2687,14 +2632,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 01", OfferID = 3, OfferRowUID = "SOR.26.00000007", @@ -2722,14 +2667,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 02", OfferID = 3, OfferRowUID = "SOR.26.00000008", @@ -2757,14 +2702,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 01", OfferID = 4, OfferRowUID = "SOR.26.00000009", @@ -2792,14 +2737,14 @@ namespace EgwCoreLib.Lux.Data.Migrations FileResource = "", FileSize = 0L, ImgType = 0, - Inserted = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), ItemBOM = "", ItemJCD = "", ItemOk = true, ItemSteps = "{}", ItemTags = "", JobID = 0, - Modified = new DateTime(2026, 3, 27, 0, 0, 0, 0, DateTimeKind.Local), + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), Note = "Demo file 02", OfferID = 4, OfferRowUID = "SOR.26.0000000A", @@ -3408,6 +3353,152 @@ namespace EgwCoreLib.Lux.Data.Migrations }); }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Property("BuyOrderID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OrderState") + .HasColumnType("int"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("SupplierID") + .HasColumnType("int"); + + b.HasKey("BuyOrderID"); + + b.HasIndex("SupplierID"); + + b.ToTable("buy_order"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.Property("BuyOrderRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderRowID")); + + b.Property("BuyOrderID") + .HasColumnType("int"); + + b.Property("ClassCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DescriptionCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("OrderID") + .HasColumnType("int"); + + b.Property("OrderRowData") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("BuyOrderRowID"); + + b.HasIndex("BuyOrderID"); + + b.HasIndex("ItemID"); + + b.HasIndex("OrderID"); + + b.ToTable("buy_order_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", b => + { + b.Property("SupplierID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SupplierID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("SupplierID"); + + b.ToTable("buy_supplier"); + + b.HasData( + new + { + SupplierID = 1, + CompanyName = "Company One", + FirstName = "Supplier A", + LastName = "Egalware", + VAT = "7294857103879254" + }, + new + { + SupplierID = 2, + CompanyName = "Company Two", + FirstName = "Supplier B", + LastName = "User", + VAT = "7294857103879254" + }, + new + { + SupplierID = 3, + CompanyName = "Company Two", + FirstName = "Supplier C", + LastName = "User Test", + VAT = "7294857103879254" + }); + }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.CounterModel", b => { b.Property("RefYear") @@ -4046,6 +4137,43 @@ namespace EgwCoreLib.Lux.Data.Migrations b.Navigation("ItemNav"); }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", "SupplierNav") + .WithMany() + .HasForeignKey("SupplierID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("SupplierNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", "BuyOrderNav") + .WithMany("BuyOrderRowNav") + .HasForeignKey("BuyOrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", "OrderNav") + .WithMany() + .HasForeignKey("OrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BuyOrderNav"); + + b.Navigation("ItemNav"); + + b.Navigation("OrderNav"); + }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => { b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", "GenClassNav") @@ -4109,6 +4237,11 @@ namespace EgwCoreLib.Lux.Data.Migrations b.Navigation("ProdItemNav"); }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Navigation("BuyOrderRowNav"); + }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => { b.Navigation("GenValNav"); diff --git a/Lux.API/Lux.API.csproj b/Lux.API/Lux.API.csproj index ee58a709..a3c6e34a 100644 --- a/Lux.API/Lux.API.csproj +++ b/Lux.API/Lux.API.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 1.1.2604.0917 + 1.1.2604.1411 diff --git a/Lux.UI/Lux.UI.csproj b/Lux.UI/Lux.UI.csproj index 037496a4..05f0a959 100644 --- a/Lux.UI/Lux.UI.csproj +++ b/Lux.UI/Lux.UI.csproj @@ -5,7 +5,7 @@ enable enable aspnet-Lux.UI-a758c101-a2f4-4e38-977d-1c4887dbbd50 - 1.1.2604.0917 + 1.1.2604.1411 diff --git a/Resources/ChangeLog.html b/Resources/ChangeLog.html index a0319c34..74943326 100644 --- a/Resources/ChangeLog.html +++ b/Resources/ChangeLog.html @@ -1,6 +1,6 @@ LUX - Web Windows MES -

Versione: 1.1.2604.1015

+

Versione: 1.1.2604.1411


Note di rilascio:
  • diff --git a/Resources/VersNum.txt b/Resources/VersNum.txt index 499bc537..c1d7d9a3 100644 --- a/Resources/VersNum.txt +++ b/Resources/VersNum.txt @@ -1 +1 @@ -1.1.2604.1015 +1.1.2604.1411 diff --git a/Resources/manifest.xml b/Resources/manifest.xml index 637ebbaa..361c4c4d 100644 --- a/Resources/manifest.xml +++ b/Resources/manifest.xml @@ -1,6 +1,6 @@ - 1.1.2604.1015 + 1.1.2604.1411 http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html false From acf43e8f43bd2bcc0d53dd560afc1ea266ccce73 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Apr 2026 11:40:01 +0200 Subject: [PATCH 2/5] Implementazione interfaccia + repository x supplier --- .../EgwCoreLib.Lux.Data.csproj | 1 + .../Supplier/ISupplierRepository.cs | 45 +++++++++++ .../Repository/Supplier/SupplierRepository.cs | 80 +++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs diff --git a/EgwCoreLib.Lux.Data/EgwCoreLib.Lux.Data.csproj b/EgwCoreLib.Lux.Data/EgwCoreLib.Lux.Data.csproj index fed9128f..b84c34a9 100644 --- a/EgwCoreLib.Lux.Data/EgwCoreLib.Lux.Data.csproj +++ b/EgwCoreLib.Lux.Data/EgwCoreLib.Lux.Data.csproj @@ -54,6 +54,7 @@ + diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs new file mode 100644 index 00000000..9d28c48f --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs @@ -0,0 +1,45 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + public interface ISupplierRepository : IBaseRepository + { + #region Public Methods + + /// + /// Inserisce un nuovo record Supplier nel database. + /// + /// Record da inserire + Task AddAsync(SupplierModel entity); + + /// + /// Elimina un record Supplier dal database. + /// + /// Record da eliminare + Task DeleteAsync(SupplierModel entity); + + /// + /// Elenco completo supplier + /// + /// + Task> GetAllAsync(); + + /// + /// Recupera un record Supplier specifico per ID. + /// + /// ID dell'Supplier da recuperare + Task GetByIdAsync(int recId); + + /// + /// Recupera gli Supplier filtrati per gruppo e tipo classe. + /// + /// Codice del gruppo filtro (vuoto = tutti) + Task> GetFiltAsync(string CodGroup); + + /// + /// Aggiorna un record Supplier esistente nel database. + /// + /// Record aggiornato + Task UpdateAsync(SupplierModel entity); + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs new file mode 100644 index 00000000..cdacf562 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs @@ -0,0 +1,80 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + public class SupplierRepository : BaseRepository, ISupplierRepository + { + #region Public Constructors + + public SupplierRepository(IDbContextFactory ctxFactory) : base(ctxFactory) + { + } + + #endregion Public Constructors + + #region Public Methods + + /// + public async Task AddAsync(SupplierModel entity) + { + await using var dbCtx = await CreateContextAsync(); + await dbCtx.DbSetSupplier.AddAsync(entity); + return await dbCtx.SaveChangesAsync() > 0; + } + + /// + public async Task DeleteAsync(SupplierModel entity) + { + await using var dbCtx = await CreateContextAsync(); + dbCtx.DbSetSupplier.Remove(entity); + return await dbCtx.SaveChangesAsync() > 0; + } + + /// + public async Task> GetAllAsync() + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetSupplier + .AsNoTracking() + .ToListAsync(); + } + + /// + public async Task GetByIdAsync(int recId) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetSupplier + .Where(x => x.SupplierID == recId) + .FirstOrDefaultAsync(); + } + + /// + public async Task> GetFiltAsync(string CodGroup) + { + // FixMet - ToDo: da implementare secondo CodGroup da relazione n-n da implementare + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetSupplier + .AsNoTracking() + .ToListAsync(); + } + + /// + public async Task UpdateAsync(SupplierModel entity) + { + await using var dbCtx = await CreateContextAsync(); + // Recuperiamo l'entità tracciata dal context + var trackedEntity = await dbCtx.DbSetSupplier.FirstOrDefaultAsync(x => x.SupplierID == entity.SupplierID); + + if (trackedEntity != null) + { + // Aggiorna i valori dell'entità tracciata con quelli della nuova + dbCtx.Entry(trackedEntity).CurrentValues.SetValues(entity); + } + else + { + dbCtx.DbSetSupplier.Update(entity); + } + return await dbCtx.SaveChangesAsync() > 0; + } + + #endregion Public Methods + } +} \ No newline at end of file From ce4a42265ef9bc929d55c1a00a2e538ed12f35fa Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Apr 2026 11:40:11 +0200 Subject: [PATCH 3/5] Bozza itnerfacce BuyOrder/OrderRow --- .../Supplier/IBuyOrderRepository.cs | 83 ++++++++++++++ .../Supplier/IBuyOrderRowrepository.cs | 102 ++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs new file mode 100644 index 00000000..b0b9681b --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs @@ -0,0 +1,83 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + /// + /// Interfaccia per la gestione degli ordini. + /// + public interface IBuyOrderRepository : IBaseRepository + { + /// + /// Inserisce un nuovo ordine nel database. + /// + /// L'ordine da inserire. + /// True se l'inserimento ha successo, false altrimenti. + Task AddAsync(BuyOrderModel entity); + + /// + /// Esegue il cloning completo di un'Offerta e di tutte le relative righe. + /// + /// L'offerta da clonare. + /// L'ordine creato, o null se l'offerta non esiste. + Task CloneOfferAsync(OfferModel rec2clone); + + /// + /// Elimina un ordine dal database. + /// + /// L'ordine da eliminare. + /// True se l'eliminazione ha successo, false altrimenti. + Task DeleteAsync(BuyOrderModel entity); + + /// + /// Recupera l'elenco di tutti gli ordini. + /// + /// L'elenco di tutti gli ordini con clienti, rivenditori e righe associate. + Task> GetAllAsync(); + + /// + /// Recupera l'elenco degli elementi BOM (Bill of Materials) utilizzati negli ordini. + /// + /// L'elenco degli elementi BOM. + Task> GetBomItemsAsync(); + + /// + /// Recupera un ordine per il suo identificatore. + /// + /// L'identificatore dell'ordine. + /// L'ordine corrispondente, o null se non esiste. + Task GetByIdAsync(int recId); + + /// + /// Recupera gli ordini inseriti in un intervallo di date specifico. + /// + /// La data di inizio del periodo. + /// La data di fine del periodo. + /// L'elenco degli ordini nell'intervallo specificato. + Task> GetFiltAsync(DateTime inizio, DateTime fine); + + /// + /// Recupera l'elenco dei gruppi di articoli. + /// + /// L'elenco dei gruppi di articoli. + Task> GetItemGroupsAsync(); + + /// + /// Recupera le righe dell'ordine per un ordine specifico. + /// + /// L'identificatore dell'ordine. + /// L'elenco delle righe dell'ordine. + Task> GetRowsAsync(int recId); + + /// + /// Aggiorna in batch le righe di un ordine. + /// + /// L'elenco delle righe da aggiornare. + /// True se l'aggiornamento ha successo, false altrimenti. + Task SaveRowsAsync(List rows); + + /// + /// Aggiorna un ordine esistente nel database. + /// + /// L'ordine aggiornato. + /// True se l'aggiornamento ha successo, false altrimenti. + Task UpdateAsync(BuyOrderModel entity); + } +} diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs new file mode 100644 index 00000000..446dd970 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs @@ -0,0 +1,102 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + /// + /// Interfaccia per la gestione delle righe degli ordini. + /// + public interface IBuyOrderRowrepository : IBaseRepository + { + /// + /// Inserisce una nuova riga d'ordine nel database. + /// + /// La riga d'ordine da inserire. + /// True se l'inserimento ha successo, false altrimenti. + Task AddAsync(BuyOrderRowModel entity); + + /// + /// Elimina una riga d'ordine e adegua i numeri di riga successivi. + /// + /// La riga d'ordine da eliminare. + /// True se l'eliminazione ha successo, false altrimenti. + Task DeleteAsync(BuyOrderRowModel entity); + + /// + /// Recupera l'elenco degli elementi BOM (Bill of Materials). + /// + /// L'elenco degli elementi BOM. + Task> GetBomItemsAsync(); + + /// + /// Recupera una riga d'ordine per il suo identificatore. + /// + /// L'identificatore della riga d'ordine. + /// La riga d'ordine corrispondente, o null se non esiste. + Task GetByIdAsync(int BuyOrderRowId); + + /// + /// Recupera tutte le righe d'ordine per un ordine specifico. + /// + /// L'identificatore dell'ordine. + /// L'elenco delle righe d'ordine associate all'ordine. + Task> GetByParentAsync(int orderId); + + /// + /// Recupera le righe d'ordine per stato e intervallo di date. + /// + /// Lo stato richiesto della riga. + /// La data di inizio del periodo. + /// La data di fine del periodo. + /// L'elenco delle righe d'ordine con lo stato e le date specificate. + Task> GetByStateAsync(OrderStates reqState, DateTime dtStart, DateTime dtEnd); + + /// + /// Recupera le righe d'ordine per stato minimo e intervallo di date. + /// + /// Lo stato minimo richiesto. + /// La data di inizio del periodo. + /// La data di fine del periodo. + /// L'elenco delle righe d'ordine con stato >= a quello specificato. + Task> GetByStateMinAsync(OrderStates reqState, DateTime dtStart, DateTime dtEnd); + + /// + /// Recupera una riga d'ordine per il suo UID. + /// + /// L'UID della riga d'ordine. + /// La riga d'ordine corrispondente, o null se non esiste. + Task GetByUidAsync(string BuyOrderRowUid); + + /// + /// Recupera l'elenco dei gruppi di articoli. + /// + /// L'elenco dei gruppi di articoli. + Task> GetItemGroupsAsync(); + + /// + /// Aggiorna la stima di produzione per una riga d'ordine. + /// + /// L'UID della riga d'ordine. + /// La nuova stima di produzione. + /// True se l'aggiornamento ha successo, false altrimenti. + Task SaveProdEstAsync(string uID, string prodEstim); + + /// + /// Aggiorna in batch le righe d'ordine. + /// + /// L'elenco delle righe da aggiornare. + /// True se l'aggiornamento ha successo, false altrimenti. + Task SaveRowsAsync(List rows); + + /// + /// Aggiorna una riga d'ordine esistente. + /// + /// La riga d'ordine aggiornata. + /// True se l'aggiornamento ha successo, false altrimenti. + Task UpdateAsync(BuyOrderRowModel entity); + + /// + /// Convalida un elenco di righe d'ordine e aggiorna lo stato se necessario. + /// + /// L'elenco delle righe da convalidare. + /// Il numero di righe elaborate correttamente. + Task ValidateAsync(List list2chk); + } +} From 0ff38c19a43a0e70c534cae9198fe5d05a05debb Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Apr 2026 12:06:29 +0200 Subject: [PATCH 4/5] Completo repository BuyOrder + aggiungo repository BuyOrderRow --- .../DbModel/Supplier/BuyOrderRowModel.cs | 10 +- .../Repository/Supplier/BuyOrderRepository.cs | 127 ++++++++++++++++ .../Supplier/BuyOrderRowrepository.cs | 135 ++++++++++++++++++ .../Supplier/IBuyOrderRepository.cs | 19 --- .../Supplier/IBuyOrderRowrepository.cs | 59 +------- Lux.API/Lux.API.csproj | 2 +- Lux.UI/Lux.UI.csproj | 2 +- Resources/ChangeLog.html | 2 +- Resources/VersNum.txt | 2 +- Resources/manifest.xml | 2 +- 10 files changed, 273 insertions(+), 87 deletions(-) create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRepository.cs create mode 100644 EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRowrepository.cs diff --git a/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs index 29dffe7c..dc2a08a8 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/BuyOrderRowModel.cs @@ -19,9 +19,9 @@ public int BuyOrderID { get; set; } /// - /// ID Ordine cliente di riferimento + /// Riga Ordine (per ordinamento) /// - public int OrderID { get; set; } + public int RowNum { get; set; } = 0; /// /// ID dell'item richiesto @@ -77,12 +77,6 @@ } } - /// - /// Navigazione Ordine Cliente - /// - [ForeignKey("OrderID")] - public virtual OrderModel? OrderNav { get; set; } = null; - /// /// Navigazione Ordine Acquisto /// diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRepository.cs new file mode 100644 index 00000000..ce806c45 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRepository.cs @@ -0,0 +1,127 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + public class BuyOrderRepository : BaseRepository, IBuyOrderRepository + { + #region Public Constructors + + public BuyOrderRepository(IDbContextFactory ctxFactory) : base(ctxFactory) + { + } + + #endregion Public Constructors + + #region Public Methods + + /// + public async Task AddAsync(BuyOrderModel entity) + { + await using var dbCtx = await CreateContextAsync(); + await dbCtx.DbSetBuyOrder.AddAsync(entity); + return await dbCtx.SaveChangesAsync() > 0; + } + + /// + public async Task DeleteAsync(BuyOrderModel entity) + { + await using var dbCtx = await CreateContextAsync(); + dbCtx.DbSetBuyOrder.Remove(entity); + return await dbCtx.SaveChangesAsync() > 0; + } + + /// + public async Task> GetAllAsync() + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrder + .Include(c => c.SupplierNav) + .Include(o => o.BuyOrderRowNav) + .ThenInclude(s => s.ItemNav) + .AsNoTracking() + .ToListAsync(); + } + + /// + public async Task GetByIdAsync(int recId) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrder + .Where(x => x.BuyOrderID == recId) + .Include(c => c.SupplierNav) + .Include(o => o.BuyOrderRowNav) + .ThenInclude(s => s.ItemNav) + .FirstOrDefaultAsync(); + } + + /// + public async Task> GetFiltAsync(DateTime inizio, DateTime fine) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrder + .Where(x => x.Inserted >= inizio && x.Inserted <= fine) + .Include(c => c.SupplierNav) + .Include(o => o.BuyOrderRowNav) + .ThenInclude(s => s.ItemNav) + .AsNoTracking() + .ToListAsync(); + } + + /// + public async Task> GetRowsAsync(int recId) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrderRow + .Where(x => x.BuyOrderID == recId) + .ToListAsync(); + } + + /// + public async Task SaveRowsAsync(List rows) + { + // Add validation for null or empty list + if (rows == null || rows.Count == 0) return false; + + await using var dbCtx = await CreateContextAsync(); + + // Wrap in transaction for atomicity (batch update multiple rows) + await using var tx = await dbCtx.Database.BeginTransactionAsync(); + try + { + foreach (var row in rows) + dbCtx.Entry(row).State = EntityState.Modified; + + bool done = await dbCtx.SaveChangesAsync() > 0; + + if (done) + await tx.CommitAsync(); + + return done; + } + catch + { + await tx.RollbackAsync(); + throw; + } + } + + /// + public async Task UpdateAsync(BuyOrderModel entity) + { + await using var dbCtx = await CreateContextAsync(); + // Recuperiamo l'entità tracciata dal context + var trackedEntity = await dbCtx.DbSetBuyOrder.FirstOrDefaultAsync(x => x.BuyOrderID == entity.BuyOrderID); + + if (trackedEntity != null) + { + // Aggiorna i valori dell'entità tracciata con quelli della nuova + dbCtx.Entry(trackedEntity).CurrentValues.SetValues(entity); + } + else + { + dbCtx.DbSetBuyOrder.Update(entity); + } + return await dbCtx.SaveChangesAsync() > 0; + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRowrepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRowrepository.cs new file mode 100644 index 00000000..42026212 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/BuyOrderRowrepository.cs @@ -0,0 +1,135 @@ +namespace EgwCoreLib.Lux.Data.Repository.Supplier +{ + public class BuyOrderRowrepository : BaseRepository, IBuyOrderRowrepository + { + #region Public Constructors + + public BuyOrderRowrepository(IDbContextFactory ctxFactory) : base(ctxFactory) + { + } + + #endregion Public Constructors + + #region Public Methods + + /// + public async Task AddAsync(BuyOrderRowModel entity) + { + await using var dbCtx = await CreateContextAsync(); + await dbCtx.DbSetBuyOrderRow.AddAsync(entity); + return await dbCtx.SaveChangesAsync() > 0; + } + + /// + public async Task DeleteAsync(BuyOrderRowModel entity) + { + await using var dbCtx = await CreateContextAsync(); + + // Wrap in transaction for atomicity (multi-row update + delete) + await using var tx = await dbCtx.Database.BeginTransactionAsync(); + try + { + // 1. Recupero il record da eliminare + var dbResult = await dbCtx.DbSetBuyOrderRow + .FirstOrDefaultAsync(x => x.BuyOrderRowID == entity.BuyOrderRowID); + + if (dbResult == null) + return false; + + // 2. Recupero i record successivi da shiftare + var list2Move = await dbCtx.DbSetBuyOrderRow + .Where(x => x.BuyOrderID == entity.BuyOrderID && x.RowNum > dbResult.RowNum) + .ToListAsync(); + + foreach (var item in list2Move) + { + item.RowNum--; + dbCtx.Entry(item).State = EntityState.Modified; + } + + // 3. Rimuovo il record + dbCtx.DbSetBuyOrderRow.Remove(dbResult); + + // 4. Salvo tutto + bool done = await dbCtx.SaveChangesAsync() > 0; + + if (done) + await tx.CommitAsync(); + + return done; + } + catch + { + await tx.RollbackAsync(); + throw; + } + } + + /// + public async Task GetByIdAsync(int buyOrderRowId) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrderRow + .Include(r => r.ItemNav) + .FirstOrDefaultAsync(x => x.BuyOrderRowID == buyOrderRowId); + } + + /// + public async Task> GetByParentAsync(int buyOrderId) + { + await using var dbCtx = await CreateContextAsync(); + return await dbCtx.DbSetBuyOrderRow + .Where(x => x.BuyOrderID == buyOrderId) + .Include(r => r.ItemNav) + .AsNoTracking() + .ToListAsync(); + } + + /// + public async Task SaveRowsAsync(List rows) + { + await using var dbCtx = await CreateContextAsync(); + + // Wrap in transaction for atomicity (batch update multiple rows) + await using var tx = await dbCtx.Database.BeginTransactionAsync(); + try + { + foreach (var row in rows) + dbCtx.Entry(row).State = EntityState.Modified; + + bool done = await dbCtx.SaveChangesAsync() > 0; + + if (done) + await tx.CommitAsync(); + + return done; + } + catch + { + await tx.RollbackAsync(); + throw; + } + } + + /// + public async Task UpdateAsync(BuyOrderRowModel entity) + { + await using var dbCtx = await CreateContextAsync(); + // Recuperiamo l'entità tracciata dal context + var trackedEntity = await dbCtx.DbSetBuyOrderRow.FirstOrDefaultAsync(x => x.BuyOrderRowID == entity.BuyOrderRowID); + + if (trackedEntity != null) + { + // Aggiorna i valori dell'entità tracciata con quelli della nuova + dbCtx.Entry(trackedEntity).CurrentValues.SetValues(entity); + } + else + { + dbCtx.DbSetBuyOrderRow.Update(entity); + } + return await dbCtx.SaveChangesAsync() > 0; + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs index b0b9681b..75d72cc3 100644 --- a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRepository.cs @@ -12,13 +12,6 @@ /// True se l'inserimento ha successo, false altrimenti. Task AddAsync(BuyOrderModel entity); - /// - /// Esegue il cloning completo di un'Offerta e di tutte le relative righe. - /// - /// L'offerta da clonare. - /// L'ordine creato, o null se l'offerta non esiste. - Task CloneOfferAsync(OfferModel rec2clone); - /// /// Elimina un ordine dal database. /// @@ -32,12 +25,6 @@ /// L'elenco di tutti gli ordini con clienti, rivenditori e righe associate. Task> GetAllAsync(); - /// - /// Recupera l'elenco degli elementi BOM (Bill of Materials) utilizzati negli ordini. - /// - /// L'elenco degli elementi BOM. - Task> GetBomItemsAsync(); - /// /// Recupera un ordine per il suo identificatore. /// @@ -53,12 +40,6 @@ /// L'elenco degli ordini nell'intervallo specificato. Task> GetFiltAsync(DateTime inizio, DateTime fine); - /// - /// Recupera l'elenco dei gruppi di articoli. - /// - /// L'elenco dei gruppi di articoli. - Task> GetItemGroupsAsync(); - /// /// Recupera le righe dell'ordine per un ordine specifico. /// diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs index 446dd970..6412df55 100644 --- a/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/IBuyOrderRowrepository.cs @@ -19,64 +19,19 @@ /// True se l'eliminazione ha successo, false altrimenti. Task DeleteAsync(BuyOrderRowModel entity); - /// - /// Recupera l'elenco degli elementi BOM (Bill of Materials). - /// - /// L'elenco degli elementi BOM. - Task> GetBomItemsAsync(); - /// /// Recupera una riga d'ordine per il suo identificatore. /// - /// L'identificatore della riga d'ordine. + /// L'identificatore della riga d'ordine. /// La riga d'ordine corrispondente, o null se non esiste. - Task GetByIdAsync(int BuyOrderRowId); + Task GetByIdAsync(int buyOrderRowId); /// /// Recupera tutte le righe d'ordine per un ordine specifico. /// - /// L'identificatore dell'ordine. + /// L'identificatore dell'ordine. /// L'elenco delle righe d'ordine associate all'ordine. - Task> GetByParentAsync(int orderId); - - /// - /// Recupera le righe d'ordine per stato e intervallo di date. - /// - /// Lo stato richiesto della riga. - /// La data di inizio del periodo. - /// La data di fine del periodo. - /// L'elenco delle righe d'ordine con lo stato e le date specificate. - Task> GetByStateAsync(OrderStates reqState, DateTime dtStart, DateTime dtEnd); - - /// - /// Recupera le righe d'ordine per stato minimo e intervallo di date. - /// - /// Lo stato minimo richiesto. - /// La data di inizio del periodo. - /// La data di fine del periodo. - /// L'elenco delle righe d'ordine con stato >= a quello specificato. - Task> GetByStateMinAsync(OrderStates reqState, DateTime dtStart, DateTime dtEnd); - - /// - /// Recupera una riga d'ordine per il suo UID. - /// - /// L'UID della riga d'ordine. - /// La riga d'ordine corrispondente, o null se non esiste. - Task GetByUidAsync(string BuyOrderRowUid); - - /// - /// Recupera l'elenco dei gruppi di articoli. - /// - /// L'elenco dei gruppi di articoli. - Task> GetItemGroupsAsync(); - - /// - /// Aggiorna la stima di produzione per una riga d'ordine. - /// - /// L'UID della riga d'ordine. - /// La nuova stima di produzione. - /// True se l'aggiornamento ha successo, false altrimenti. - Task SaveProdEstAsync(string uID, string prodEstim); + Task> GetByParentAsync(int buyOrderId); /// /// Aggiorna in batch le righe d'ordine. @@ -92,11 +47,5 @@ /// True se l'aggiornamento ha successo, false altrimenti. Task UpdateAsync(BuyOrderRowModel entity); - /// - /// Convalida un elenco di righe d'ordine e aggiorna lo stato se necessario. - /// - /// L'elenco delle righe da convalidare. - /// Il numero di righe elaborate correttamente. - Task ValidateAsync(List list2chk); } } diff --git a/Lux.API/Lux.API.csproj b/Lux.API/Lux.API.csproj index a3c6e34a..02bbcde5 100644 --- a/Lux.API/Lux.API.csproj +++ b/Lux.API/Lux.API.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 1.1.2604.1411 + 1.1.2604.1412 diff --git a/Lux.UI/Lux.UI.csproj b/Lux.UI/Lux.UI.csproj index 05f0a959..8af1268c 100644 --- a/Lux.UI/Lux.UI.csproj +++ b/Lux.UI/Lux.UI.csproj @@ -5,7 +5,7 @@ enable enable aspnet-Lux.UI-a758c101-a2f4-4e38-977d-1c4887dbbd50 - 1.1.2604.1411 + 1.1.2604.1412 diff --git a/Resources/ChangeLog.html b/Resources/ChangeLog.html index 74943326..d3263c88 100644 --- a/Resources/ChangeLog.html +++ b/Resources/ChangeLog.html @@ -1,6 +1,6 @@ LUX - Web Windows MES -

    Versione: 1.1.2604.1411

    +

    Versione: 1.1.2604.1412


    Note di rilascio:
    • diff --git a/Resources/VersNum.txt b/Resources/VersNum.txt index c1d7d9a3..464ef7ec 100644 --- a/Resources/VersNum.txt +++ b/Resources/VersNum.txt @@ -1 +1 @@ -1.1.2604.1411 +1.1.2604.1412 diff --git a/Resources/manifest.xml b/Resources/manifest.xml index 361c4c4d..69b6ba73 100644 --- a/Resources/manifest.xml +++ b/Resources/manifest.xml @@ -1,6 +1,6 @@ - 1.1.2604.1411 + 1.1.2604.1412 http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html false From 2b30e7e8bb9ba6f441cd216efd9e0c6c3b1ad52f Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Apr 2026 12:25:10 +0200 Subject: [PATCH 5/5] Aggiunta migrazione x BuyOrder --- EgwCoreLib.Lux.Data/DataLayerContext.cs | 5 + .../DbModel/Supplier/SupplierModel.cs | 4 + .../DbModel/Supplier/SupplierQualifyModel.cs | 15 + ...60414102422_UpdateBuyOrderData.Designer.cs | 4291 +++++++++++++++++ .../20260414102422_UpdateBuyOrderData.cs | 140 + .../DataLayerContextModelSnapshot.cs | 61 +- .../Supplier/ISupplierRepository.cs | 10 +- .../Repository/Supplier/SupplierRepository.cs | 20 +- 8 files changed, 4524 insertions(+), 22 deletions(-) create mode 100644 EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierQualifyModel.cs create mode 100644 EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.Designer.cs create mode 100644 EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.cs diff --git a/EgwCoreLib.Lux.Data/DataLayerContext.cs b/EgwCoreLib.Lux.Data/DataLayerContext.cs index b59198e4..2f37f1a8 100644 --- a/EgwCoreLib.Lux.Data/DataLayerContext.cs +++ b/EgwCoreLib.Lux.Data/DataLayerContext.cs @@ -44,8 +44,10 @@ public virtual DbSet DbSetCustomer { get; set; } public virtual DbSet DbSetDealer { get; set; } public virtual DbSet DbSetSupplier { get; set; } + public virtual DbSet DbSetSupplierQualify { get; set; } public virtual DbSet DbSetBuyOrder { get; set; } public virtual DbSet DbSetBuyOrderRow { get; set; } + public virtual DbSet DbSetOffer { get; set; } public virtual DbSet DbSetOfferRow { get; set; } public virtual DbSet DbSetOrder { get; set; } @@ -125,6 +127,9 @@ modelBuilder.Entity() .HasKey(jst => new { jst.JobStepID, jst.CodTag }); + modelBuilder.Entity() + .HasKey(sq => new { sq.SupplierID, sq.CodGroup }); + modelBuilder.Entity() .HasKey(x => new { x.ProdItemID, x.ProdODLID }); diff --git a/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs index cb69dab4..85c806b5 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierModel.cs @@ -33,5 +33,9 @@ ///
    public string VAT { get; set; } = ""; + /// + /// Many-to-many with Qualifica Fornitori + /// + public virtual ICollection QualifNav { get; set; } = new List(); } } diff --git a/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierQualifyModel.cs b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierQualifyModel.cs new file mode 100644 index 00000000..4223a010 --- /dev/null +++ b/EgwCoreLib.Lux.Data/DbModel/Supplier/SupplierQualifyModel.cs @@ -0,0 +1,15 @@ +namespace EgwCoreLib.Lux.Data.DbModel.Supplier +{ + [Table("buy_supplier_qualify")] + public class SupplierQualifyModel + { + public int SupplierID { get; set; } + public string CodGroup { get; set; } = ""; + + [ForeignKey("SupplierID")] + public virtual SupplierModel SupplierNav { get; set; } = null!; + + [ForeignKey("CodGroup")] + public virtual ItemGroupModel GroupNav { get; set; } = null!; + } +} diff --git a/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.Designer.cs b/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.Designer.cs new file mode 100644 index 00000000..29917480 --- /dev/null +++ b/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.Designer.cs @@ -0,0 +1,4291 @@ +// +using System; +using EgwCoreLib.Lux.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EgwCoreLib.Lux.Data.Migrations +{ + [DbContext(typeof(DataLayerContext))] + [Migration("20260414102422_UpdateBuyOrderData")] + partial class UpdateBuyOrderData + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.23") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", b => + { + b.Property("TemplateID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("TemplateID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SourceType") + .HasColumnType("int"); + + b.HasKey("TemplateID"); + + b.ToTable("sales_template"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", b => + { + b.Property("TemplateRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("TemplateRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateID") + .HasColumnType("int"); + + b.Property("TemplateRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("TemplateRowID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateID"); + + b.ToTable("sales_template_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.EnvirParamModel", b => + { + b.Property("EnvirID") + .HasColumnType("int"); + + b.Property("SerStrucKey") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("EnvirID"); + + b.ToTable("conf_envir"); + + b.HasData( + new + { + EnvirID = 1, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 2, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 4, + SerStrucKey = "SerializedData" + }, + new + { + EnvirID = 3, + SerStrucKey = "SerializedData" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.GlassModel", b => + { + b.Property("GlassID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("GlassID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Thickness") + .HasColumnType("double"); + + b.HasKey("GlassID"); + + b.ToTable("conf_glass"); + + b.HasData( + new + { + GlassID = 1, + Code = "0001", + Description = "Vetro BE 2S 4/12/4", + Thickness = 20.0 + }, + new + { + GlassID = 2, + Code = "0002", + Description = "Vetro BE 2S 4/16/4", + Thickness = 24.0 + }, + new + { + GlassID = 3, + Code = "0003", + Description = "Vetro BE 3S 4/12/4/12/4", + Thickness = 36.0 + }, + new + { + GlassID = 4, + Code = "0004", + Description = "Vetro BE 3S 4/16/4/16/4", + Thickness = 44.0 + }, + new + { + GlassID = 5, + Code = "0005", + Description = "Vetro BE 2S 4T/12/4T", + Thickness = 20.0 + }, + new + { + GlassID = 6, + Code = "0006", + Description = "Vetro BE 2S 4T/16/4T", + Thickness = 24.0 + }, + new + { + GlassID = 7, + Code = "0007", + Description = "Vetro BE 3S 4T/12/4T/12/4T", + Thickness = 36.0 + }, + new + { + GlassID = 8, + Code = "0008", + Description = "Vetro BE 3S 4T/16/4T/16/4T", + Thickness = 44.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.ProfileModel", b => + { + b.Property("ProfileID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProfileID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("ProfDataRaw") + .HasColumnType("longtext"); + + b.Property("Thickness") + .HasColumnType("double"); + + b.Property("ThreshDataRaw") + .HasColumnType("longtext"); + + b.HasKey("ProfileID"); + + b.ToTable("conf_profile"); + + b.HasData( + new + { + ProfileID = 1, + Code = "0001", + Description = "Profilo60", + ProfDataRaw = "", + Thickness = 60.0, + ThreshDataRaw = "" + }, + new + { + ProfileID = 2, + Code = "0002", + Description = "Profilo78", + ProfDataRaw = "", + Thickness = 78.0, + ThreshDataRaw = "" + }, + new + { + ProfileID = 3, + Code = "0003", + Description = "Profilo90", + ProfDataRaw = "", + Thickness = 90.0, + ThreshDataRaw = "" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Config.WoodModel", b => + { + b.Property("WoodID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("WoodID")); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("WoodID"); + + b.ToTable("conf_wood"); + + b.HasData( + new + { + WoodID = 1, + Code = "0001", + Description = "Abete", + Type = 1 + }, + new + { + WoodID = 2, + Code = "0002", + Description = "Acero", + Type = 1 + }, + new + { + WoodID = 3, + Code = "0003", + Description = "Pino", + Type = 2 + }, + new + { + WoodID = 4, + Code = "0004", + Description = "Tek", + Type = 3 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", b => + { + b.Property("CostDriverID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CostDriverID")); + + b.Property("Descript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Unit") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CostDriverID"); + + b.ToTable("cost_driver"); + + b.HasData( + new + { + CostDriverID = 1, + Descript = "Ore lavorate", + Name = "WorkHour", + Unit = "h" + }, + new + { + CostDriverID = 2, + Descript = "Metri prodotto", + Name = "Meter", + Unit = "m" + }, + new + { + CostDriverID = 3, + Descript = "Unità prodotto", + Name = "Unit", + Unit = "#" + }, + new + { + CostDriverID = 4, + Descript = "Volume prodotto", + Name = "Volume", + Unit = "m3" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.Property("ResourceID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ResourceID")); + + b.Property("CodResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CostDriverBudget") + .HasColumnType("decimal(65,30)"); + + b.Property("CostDriverID") + .HasColumnType("int"); + + b.Property("EBTPerc") + .HasColumnType("decimal(65,30)"); + + b.Property("FixedCost") + .HasColumnType("decimal(65,30)"); + + b.Property("LaborCost") + .HasColumnType("decimal(65,30)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OverHeadCost") + .HasColumnType("decimal(65,30)"); + + b.Property("OverHeadPerc") + .HasColumnType("decimal(65,30)"); + + b.Property("PriceMargin") + .HasColumnType("decimal(65,30)"); + + b.Property("VariableCost") + .HasColumnType("decimal(65,30)"); + + b.HasKey("ResourceID"); + + b.HasIndex("CostDriverID"); + + b.ToTable("cost_resource"); + + b.HasData( + new + { + ResourceID = 1, + CodResource = "0000", + CostDriverBudget = 1m, + CostDriverID = 3, + EBTPerc = 0.15m, + FixedCost = 50m, + LaborCost = 100m, + Name = "Item Generico", + OverHeadCost = 100m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 50m + }, + new + { + ResourceID = 2, + CodResource = "0010", + CostDriverBudget = 2200m, + CostDriverID = 3, + EBTPerc = 0.15m, + FixedCost = 200000m, + LaborCost = 200000m, + Name = "Serramento (media annua globale)", + OverHeadCost = 100000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 200000m + }, + new + { + ResourceID = 3, + CodResource = "0110", + CostDriverBudget = 880m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 12000m, + LaborCost = 30m, + Name = "Sezionatrice", + OverHeadCost = 5000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 4, + CodResource = "0120.01", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 100000m, + LaborCost = 40m, + Name = "Linea SAOMAD WoodPecker Just 3500", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 30000m + }, + new + { + ResourceID = 5, + CodResource = "0120.02", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 24000m, + LaborCost = 35m, + Name = "Linea Pantografo", + OverHeadCost = 5000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 6, + CodResource = "0130.01", + CostDriverBudget = 880m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 24000m, + LaborCost = 30m, + Name = "Stazione Verniciatura", + OverHeadCost = 3000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 6000m + }, + new + { + ResourceID = 7, + CodResource = "0130.02", + CostDriverBudget = 220m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 6000m, + LaborCost = 30m, + Name = "Verniciatura Manuale", + OverHeadCost = 3000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 2000m + }, + new + { + ResourceID = 8, + CodResource = "0140", + CostDriverBudget = 3520m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 500m, + LaborCost = 30m, + Name = "Montaggio Manuale", + OverHeadCost = 500m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 500m + }, + new + { + ResourceID = 9, + CodResource = "0150", + CostDriverBudget = 3520m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 0m, + LaborCost = 40m, + Name = "Installatore", + OverHeadCost = 0m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 3000m + }, + new + { + ResourceID = 10, + CodResource = "0120.3", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 100000m, + LaborCost = 40m, + Name = "Linea Essetre FAST", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 30000m + }, + new + { + ResourceID = 11, + CodResource = "0120.0", + CostDriverBudget = 1760m, + CostDriverID = 1, + EBTPerc = 0.15m, + FixedCost = 0m, + LaborCost = 40m, + Name = "Lavorazione Manuale /Esterna", + OverHeadCost = 15000m, + OverHeadPerc = 0.15m, + PriceMargin = 0.2m, + VariableCost = 90000m + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", b => + { + b.Property("CodGroup") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CodGroup"); + + b.ToTable("item_group"); + + b.HasData( + new + { + CodGroup = "BeamTrunk", + Description = "Barre legno per lavorazione Travi" + }, + new + { + CodGroup = "WindowTrunk", + Description = "Barre legno per lavorazione Finestre" + }, + new + { + CodGroup = "WindowGlass", + Description = "Vetri serramento" + }, + new + { + CodGroup = "WindowVarnish", + Description = "Vernici per legno" + }, + new + { + CodGroup = "WindowHardware", + Description = "Ferramenta serramento" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", b => + { + b.Property("ItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ItemID")); + + b.Property("CodGroup") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Cost") + .HasColumnType("double"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("IsService") + .HasColumnType("tinyint(1)"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("ItemIDParent") + .HasColumnType("int"); + + b.Property("ItemType") + .HasColumnType("int"); + + b.Property("Margin") + .HasColumnType("double"); + + b.Property("QtyMax") + .HasColumnType("double"); + + b.Property("QtyMin") + .HasColumnType("double"); + + b.Property("SupplCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("UM") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ItemID"); + + b.HasIndex("CodGroup"); + + b.ToTable("item_item"); + + b.HasData( + new + { + ItemID = 1, + CodGroup = "WindowTrunk", + Cost = 20.0, + Description = "BARRA-60x80 generica", + ExtItemCode = "", + IsService = false, + ItemCode = 1001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.29999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "BARR.001", + UM = "#" + }, + new + { + ItemID = 2, + CodGroup = "WindowTrunk", + Cost = 16.5, + Description = "Barra 60x80, lunghezza 12m", + ExtItemCode = "BARRA-60x80x12000", + IsService = false, + ItemCode = 1002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.12000", + UM = "#" + }, + new + { + ItemID = 3, + CodGroup = "WindowTrunk", + Cost = 17.5, + Description = "Barra 60x80, lunghezza 8m", + ExtItemCode = "BARRA-60x80x8000", + IsService = false, + ItemCode = 1003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.22, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.8000", + UM = "#" + }, + new + { + ItemID = 4, + CodGroup = "WindowTrunk", + Cost = 15.5, + Description = "Barra 60x80, lunghezza 16m", + ExtItemCode = "BARRA-60x80x16000", + IsService = false, + ItemCode = 1004, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "ABC.00123.16000", + UM = "#" + }, + new + { + ItemID = 5, + CodGroup = "WindowGlass", + Cost = 300.0, + Description = "Vetro triplo, basso indice termico, 800x1000", + ExtItemCode = "VETRO-3L-THERMO-800x1000", + IsService = false, + ItemCode = 2001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V3T.800.1000", + UM = "m2" + }, + new + { + ItemID = 6, + CodGroup = "WindowGlass", + Cost = 200.0, + Description = "Vetro doppio, 800x1000", + ExtItemCode = "VETRO-2L-800x1000", + IsService = false, + ItemCode = 2002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.14999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V2.800.1000", + UM = "m2" + }, + new + { + ItemID = 7, + CodGroup = "WindowGlass", + Cost = 250.0, + Description = "Vetro triplo, 800x1000", + ExtItemCode = "VETRO-3L-800x1000", + IsService = false, + ItemCode = 2003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.17999999999999999, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "V3.800.1000", + UM = "m2" + }, + new + { + ItemID = 8, + CodGroup = "WindowVarnish", + Cost = 20.0, + Description = "Vernice trasparente", + ExtItemCode = "VERN-TRASP", + IsService = false, + ItemCode = 3001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "VT.STD", + UM = "l" + }, + new + { + ItemID = 9, + CodGroup = "WindowHardware", + Cost = 65.0, + Description = "Kit standard completo AGB tipo 001", + ExtItemCode = "KIT-001", + IsService = false, + ItemCode = 5001, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-KIT-001", + UM = "#" + }, + new + { + ItemID = 10, + CodGroup = "WindowHardware", + Cost = 10.0, + Description = "Cerniera AGB tipo 001", + ExtItemCode = "CERN-001", + IsService = false, + ItemCode = 5002, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-CERN-001", + UM = "#" + }, + new + { + ItemID = 11, + CodGroup = "WindowHardware", + Cost = 15.0, + Description = "Serratura AGB tipo 001", + ExtItemCode = "SERR-001", + IsService = false, + ItemCode = 5003, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-SERR-001", + UM = "#" + }, + new + { + ItemID = 12, + CodGroup = "WindowHardware", + Cost = 25.0, + Description = "Maniglia AGB tipo 001", + ExtItemCode = "MAN-001", + IsService = false, + ItemCode = 5004, + ItemIDParent = 0, + ItemType = 1, + Margin = 0.20000000000000001, + QtyMax = 0.0, + QtyMin = 0.0, + SupplCode = "AGB-MAN-001", + UM = "#" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", b => + { + b.Property("SellingItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SellingItemID")); + + b.Property("Cost") + .HasColumnType("double"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("IsService") + .HasColumnType("tinyint(1)"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Margin") + .HasColumnType("double"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SourceType") + .HasColumnType("int"); + + b.Property("SupplCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("UM") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("SellingItemID"); + + b.HasIndex("JobID"); + + b.ToTable("item_selling_item"); + + b.HasData( + new + { + SellingItemID = 1, + Cost = 500.0, + Description = "Finestra Anta Singola", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 2, + Margin = 0.20000000000000001, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 2, + Cost = 300.0, + Description = "Finestra Vetro Fisso ", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 2, + Margin = 0.20000000000000001, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 3, + Cost = 150.0, + Description = "Persiana anta singola", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 1, + Margin = 0.10000000000000001, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 4, + Cost = 200.0, + Description = "Installazione", + Envir = 1, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = true, + ItemCode = 0, + ItemSteps = "", + JobID = 1, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 5, + Cost = 1000.0, + Description = "Trave lamellare", + Envir = 2, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 3, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 6, + Cost = 500.0, + Description = "Cabinet", + Envir = 4, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 4, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }, + new + { + SellingItemID = 7, + Cost = 2000.0, + Description = "Parete", + Envir = 3, + ExtItemCode = "", + FileName = "", + ImgType = 0, + IsService = false, + ItemCode = 0, + ItemSteps = "", + JobID = 5, + Margin = 0.29999999999999999, + SerStruct = "", + SourceType = 0, + SupplCode = "", + UM = "#" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverConfigModel", b => + { + b.Property("JobDriverConfID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobDriverConfID")); + + b.Property("CostDriverID") + .HasColumnType("int"); + + b.Property("DefaultVal") + .HasColumnType("double"); + + b.Property("Intercept") + .HasColumnType("double"); + + b.Property("JobDriverID") + .HasColumnType("int"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Regress") + .HasColumnType("double"); + + b.HasKey("JobDriverConfID"); + + b.HasIndex("CostDriverID"); + + b.HasIndex("JobDriverID"); + + b.HasIndex("JobID"); + + b.ToTable("task_job_driver_config"); + + b.HasData( + new + { + JobDriverConfID = 1, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 6, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 2, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 7, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 3, + CostDriverID = 1, + DefaultVal = 5.0, + Intercept = 0.0, + JobDriverID = 1, + JobID = 7, + Note = "Ore Equivalenti", + Regress = 0.016666666666666666 + }, + new + { + JobDriverConfID = 4, + CostDriverID = 3, + DefaultVal = 1.0, + Intercept = 0.0, + JobDriverID = 3, + JobID = 2, + Note = "Numero prodotti", + Regress = 1.0 + }, + new + { + JobDriverConfID = 5, + CostDriverID = 1, + DefaultVal = 5.0, + Intercept = 0.0, + JobDriverID = 1, + JobID = 2, + Note = "Ore Equivalenti", + Regress = 0.016666666666666666 + }, + new + { + JobDriverConfID = 6, + CostDriverID = 1, + DefaultVal = 8.0, + Intercept = 0.0, + JobDriverID = 4, + JobID = 2, + Note = "Ore Extra per complex Articolo (1 min/pezzo)", + Regress = 0.016666666666666666 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverModel", b => + { + b.Property("JobDriverID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobDriverID")); + + b.Property("Descript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("JobDriverID"); + + b.ToTable("task_job_driver"); + + b.HasData( + new + { + JobDriverID = 1, + Descript = "Tempo netto di lavorazione, in minuti", + Name = "LeadTime" + }, + new + { + JobDriverID = 2, + Descript = "Tempo di attraversamento complessivo del processo, in giorni lavorativi", + Name = "FlowTime" + }, + new + { + JobDriverID = 3, + Descript = "Numero Articoli/Prodotti", + Name = "NumArticoli" + }, + new + { + JobDriverID = 4, + Descript = "Numero Items per Articolo", + Name = "NumItems" + }, + new + { + JobDriverID = 5, + Descript = "Indice complex lavorazioni", + Name = "WorkCompScore" + }, + new + { + JobDriverID = 6, + Descript = "Indice complex materiali", + Name = "MaterialCompScore" + }, + new + { + JobDriverID = 7, + Descript = "Indice complex generale", + Name = "GeneralScore" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepItemModel", b => + { + b.Property("JobStepItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobStepItemID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("JobStepID") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.HasKey("JobStepItemID"); + + b.HasIndex("ItemID"); + + b.HasIndex("JobStepID"); + + b.ToTable("task_job_step_item"); + + b.HasData( + new + { + JobStepItemID = 1, + Description = "Grezzo legno abete", + Index = 1, + ItemID = 1, + JobStepID = 1, + Qty = 1.0 + }, + new + { + JobStepItemID = 2, + Description = "Vernice trasparente standard 1L", + Index = 2, + ItemID = 8, + JobStepID = 3, + Qty = 0.10000000000000001 + }, + new + { + JobStepItemID = 3, + Description = "Ferramenta AGB - rif. AGFD.00000.00000", + Index = 3, + ItemID = 9, + JobStepID = 4, + Qty = 1.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.Property("JobStepID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobStepID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("PhaseID") + .HasColumnType("int"); + + b.Property("ProductivityRate") + .HasColumnType("decimal(65,30)"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.Property("TagsModelCodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobStepID"); + + b.HasIndex("JobID"); + + b.HasIndex("PhaseID"); + + b.HasIndex("ResourceID"); + + b.HasIndex("TagsModelCodTag"); + + b.ToTable("task_job_step"); + + b.HasData( + new + { + JobStepID = 1, + Description = "Preparazione Tronchetti", + Index = 1, + JobID = 2, + PhaseID = 1, + ProductivityRate = 1m, + ResourceID = 3 + }, + new + { + JobStepID = 2, + Description = "Taglio profilo", + Index = 2, + JobID = 2, + PhaseID = 2, + ProductivityRate = 1m, + ResourceID = 4 + }, + new + { + JobStepID = 3, + Description = "Verniciatura", + Index = 3, + JobID = 2, + PhaseID = 3, + ProductivityRate = 1m, + ResourceID = 6 + }, + new + { + JobStepID = 4, + Description = "Assemblaggio Serramento", + Index = 4, + JobID = 2, + PhaseID = 4, + ProductivityRate = 1m, + ResourceID = 8 + }, + new + { + JobStepID = 5, + Description = "Installazione cliente", + Index = 5, + JobID = 2, + PhaseID = 6, + ProductivityRate = 1m, + ResourceID = 9 + }, + new + { + JobStepID = 6, + Description = "Produzione Serramento (media annua)", + Index = 1, + JobID = 6, + PhaseID = 7, + ProductivityRate = 1m, + ResourceID = 2 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepTagModel", b => + { + b.Property("JobStepID") + .HasColumnType("int"); + + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobStepID", "CodTag"); + + b.HasIndex("CodTag"); + + b.ToTable("task_job_step_tag"); + + b.HasData( + new + { + JobStepID = 1, + CodTag = "Serramento" + }, + new + { + JobStepID = 2, + CodTag = "Serramento" + }, + new + { + JobStepID = 3, + CodTag = "Serramento" + }, + new + { + JobStepID = 4, + CodTag = "Serramento" + }, + new + { + JobStepID = 5, + CodTag = "Serramento" + }, + new + { + JobStepID = 6, + CodTag = "Serramento" + }, + new + { + JobStepID = 2, + CodTag = "LineaCNC" + }, + new + { + JobStepID = 4, + CodTag = "Montaggio" + }, + new + { + JobStepID = 5, + CodTag = "Servizi" + }, + new + { + JobStepID = 2, + CodTag = "LineaManuale" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.Property("JobID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("JobID")); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("Lock") + .HasColumnType("tinyint(1)"); + + b.Property("TagsModelCodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobID"); + + b.HasIndex("TagsModelCodTag"); + + b.ToTable("task_job"); + + b.HasData( + new + { + JobID = 1, + Description = "Rivendita / servizi", + Enabled = true, + Index = 4, + Lock = true + }, + new + { + JobID = 2, + Description = "Serramento Legno - Ciclo Completo con installazione", + Enabled = true, + Index = 3, + Lock = true + }, + new + { + JobID = 3, + Description = "Realizzazione Trave", + Enabled = true, + Index = 5, + Lock = true + }, + new + { + JobID = 4, + Description = "Realizzazione Cabinet", + Enabled = true, + Index = 6, + Lock = true + }, + new + { + JobID = 5, + Description = "Realizzazione Parete", + Enabled = true, + Index = 7, + Lock = true + }, + new + { + JobID = 6, + Description = "Serramento - ciclo base", + Enabled = true, + Index = 1, + Lock = true + }, + new + { + JobID = 7, + Description = "Serramento - ciclo intermedio", + Enabled = true, + Index = 2, + Lock = true + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskTagModel", b => + { + b.Property("JobID") + .HasColumnType("int"); + + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("JobID", "CodTag"); + + b.HasIndex("CodTag"); + + b.ToTable("task_job_task_tag"); + + b.HasData( + new + { + JobID = 1, + CodTag = "Rivendita" + }, + new + { + JobID = 2, + CodTag = "Serramento" + }, + new + { + JobID = 3, + CodTag = "Trave" + }, + new + { + JobID = 4, + CodTag = "Cabinet" + }, + new + { + JobID = 5, + CodTag = "Parete" + }, + new + { + JobID = 6, + CodTag = "Serramento" + }, + new + { + JobID = 7, + CodTag = "Serramento" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.PhaseModel", b => + { + b.Property("PhaseID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("PhaseID")); + + b.Property("CodPhase") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("PhaseID"); + + b.ToTable("task_phase"); + + b.HasData( + new + { + PhaseID = 1, + CodPhase = "010", + Description = "Taglio tronchetti", + Name = "Taglio" + }, + new + { + PhaseID = 2, + CodPhase = "020", + Description = "Lavorazione pezzi serramento", + Name = "Lavorazione CNC" + }, + new + { + PhaseID = 3, + CodPhase = "030", + Description = "Verniciatura", + Name = "Verniciatura" + }, + new + { + PhaseID = 4, + CodPhase = "030.01", + Description = "Assemblaggio completo", + Name = "Montaggio" + }, + new + { + PhaseID = 5, + CodPhase = "030.02", + Description = "Assemblaggio Ferramenta", + Name = "Ferramenta" + }, + new + { + PhaseID = 6, + CodPhase = "040", + Description = "Installazione e posa in opera", + Name = "Installazione" + }, + new + { + PhaseID = 7, + CodPhase = "000", + Description = "Produzione Completa: Fase Unica complessiva", + Name = "Produzione Completa" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", b => + { + b.Property("ProdBatchID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdBatchID")); + + b.Property("BatchTag") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DateEnd") + .HasColumnType("datetime(6)"); + + b.Property("DateStart") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DueDate") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.HasKey("ProdBatchID"); + + b.ToTable("production_batch"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.Property("ProdGroupID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdGroupID")); + + b.Property("GrpIdx") + .HasColumnType("int"); + + b.Property("OrderRowID") + .HasColumnType("int"); + + b.Property("WorkGroupListRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ProdGroupID"); + + b.HasIndex("OrderRowID"); + + b.ToTable("production_group"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItem2ODLModel", b => + { + b.Property("ProdItemID") + .HasColumnType("int"); + + b.Property("ProdODLID") + .HasColumnType("int"); + + b.Property("DtAssign") + .HasColumnType("datetime(6)"); + + b.HasKey("ProdItemID", "ProdODLID"); + + b.HasIndex("ProdODLID"); + + b.ToTable("production_item2odl"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.Property("ProdItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdItemID")); + + b.Property("EstimTime") + .HasColumnType("double"); + + b.Property("ExtItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemCode") + .HasColumnType("int"); + + b.Property("OrderRowID") + .HasColumnType("int"); + + b.Property("ProdBatchID") + .HasColumnType("int"); + + b.Property("ProdGroupID") + .HasColumnType("int"); + + b.Property("ProdItemTag") + .HasColumnType("varchar(255)"); + + b.HasKey("ProdItemID"); + + b.HasIndex("OrderRowID"); + + b.HasIndex("ProdBatchID"); + + b.HasIndex("ProdGroupID"); + + b.HasIndex("ProdItemTag") + .IsUnique() + .HasDatabaseName("idx_prod_item_tag"); + + b.ToTable("production_item"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.Property("ProdODLID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProdODLID")); + + b.Property("DateAssign") + .HasColumnType("datetime(6)"); + + b.Property("DateEnd") + .HasColumnType("datetime(6)"); + + b.Property("DateMaxCompl") + .HasColumnType("datetime(6)"); + + b.Property("DateStart") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("EstimTime") + .HasColumnType("decimal(65,30)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("OdlTag") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("PhaseID") + .HasColumnType("int"); + + b.Property("ProdBatchID") + .HasColumnType("int"); + + b.Property("ProdPlantCod") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RawBoM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RawItemRawList") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RawMaterials") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.Property("WorkTime") + .HasColumnType("decimal(65,30)"); + + b.HasKey("ProdODLID"); + + b.HasIndex("ProdBatchID"); + + b.ToTable("production_odl"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionPlantModel", b => + { + b.Property("ProdPlantCod") + .HasColumnType("varchar(255)"); + + b.Property("IsManual") + .HasColumnType("tinyint(1)"); + + b.Property("Outsource") + .HasColumnType("tinyint(1)"); + + b.Property("ProdPlantDescript") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ResourceID") + .HasColumnType("int"); + + b.HasKey("ProdPlantCod"); + + b.HasIndex("ResourceID"); + + b.ToTable("production_plant"); + + b.HasData( + new + { + ProdPlantCod = "EXT", + IsManual = true, + Outsource = true, + ProdPlantDescript = "External / Manuale" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", b => + { + b.Property("CustomerID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CustomerID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CustomerID"); + + b.ToTable("sales_customer"); + + b.HasData( + new + { + CustomerID = 1, + CompanyName = "", + FirstName = "Customer A", + LastName = "Egalware", + VAT = "1234567890123456" + }, + new + { + CustomerID = 2, + CompanyName = "", + FirstName = "Customer B", + LastName = "User", + VAT = "1234567890123456" + }, + new + { + CustomerID = 3, + CompanyName = "", + FirstName = "Customer C", + LastName = "User Test", + VAT = "1234567890123456" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", b => + { + b.Property("DealerID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("DealerID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("DealerID"); + + b.ToTable("sales_dealer"); + + b.HasData( + new + { + DealerID = 1, + CompanyName = "Company First", + FirstName = "Dealer A", + LastName = "Egalware", + VAT = "9587362514671527" + }, + new + { + DealerID = 2, + CompanyName = "Company First", + FirstName = "Dealer B", + LastName = "User", + VAT = "9587362514671527" + }, + new + { + DealerID = 3, + CompanyName = "Company Second", + FirstName = "Dealer C", + LastName = "User Test", + VAT = "9587362514671527" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.Property("OfferID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OfferID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CustomerID") + .HasColumnType("int"); + + b.Property("DealerID") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DictPresel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Discount") + .HasColumnType("double"); + + b.Property("DueDateProm") + .HasColumnType("datetime(6)"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OffertState") + .HasColumnType("int"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("ValidUntil") + .HasColumnType("datetime(6)"); + + b.HasKey("OfferID"); + + b.HasIndex("CustomerID"); + + b.HasIndex("DealerID"); + + b.ToTable("sales_offer"); + + b.HasData( + new + { + OfferID = 1, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta per tre serramenti", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 1, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 1, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7042) + }, + new + { + OfferID = 2, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta BEAM", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 2, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 2, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7058) + }, + new + { + OfferID = 3, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta Cabinet", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 4, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 3, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7064) + }, + new + { + OfferID = 4, + ConsNote = "", + CustomerID = 2, + DealerID = 2, + Description = "Offerta Wall", + DictPresel = "", + Discount = 0.0, + DueDateProm = new DateTime(2026, 6, 13, 0, 0, 0, 0, DateTimeKind.Local), + DueDateReq = new DateTime(2026, 5, 14, 0, 0, 0, 0, DateTimeKind.Local), + Envir = 3, + Inserted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Modified = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + OffertState = 0, + RefNum = 4, + RefRev = 1, + RefYear = 2025, + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7071) + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferRowModel", b => + { + b.Property("OfferRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OfferRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("DictPendPresRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OfferID") + .HasColumnType("int"); + + b.Property("OfferRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateRowID") + .HasColumnType("int"); + + b.HasKey("OfferRowID"); + + b.HasIndex("OfferID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateRowID"); + + b.ToTable("sales_offer_row"); + + b.HasData( + new + { + OfferRowID = 2, + AwaitBom = false, + AwaitPrice = false, + BomCost = 900.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Finestra Anta Singola 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000002", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 1, + SellingItemID = 1, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 1, + AwaitBom = false, + AwaitPrice = false, + BomCost = 900.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Finestra Vetro Fisso 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000001", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 2, + SellingItemID = 2, + SerStruct = "{\"ProfilePath\": \"Profilo78\",\"Material\": \"Pino\",\"ColorMaterial\": \"Black\",\"Glass\": \"Vetro BE 2S 4T/16/4T\",\"AreaList\": [{\"Shape\": \"RECTANGLE\",\"DimensionList\": [{\"Index\": 1,\"Name\": \"Width\",\"Value\": 800.0},{\"Index\": 2,\"Name\": \"Height\",\"Value\": 1200.0}],\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"BottomRail\": false,\"BottomRailQty\": 0,\"GroupId\": 1,\"AreaList\": [{\"IsSashVertical\": true,\"SashList\": [{\"SashId\": 1,\"OpeningType\": \"TILTTURN_LEFT\",\"HasHandle\": true,\"Dimension\": 100.0}],\"SashType\": \"NULL\",\"JointList\": [{\"Index\": 1,\"JointType\": \"FULL_H\"},{\"Index\": 2,\"JointType\": \"FULL_H\"},{\"Index\": 3,\"JointType\": \"FULL_H\"},{\"Index\": 4,\"JointType\": \"FULL_H\"}],\"Hardware\": \"000635\",\"HwOptionList\": [{\"Name\": \"Entrata\",\"Value\": \"15\"},{\"Name\": \"LavManigliaPassante\",\"Value\": \"false\"},{\"Name\": \"PosizioneForoCilindro\",\"Value\": \"sotto\"},{\"Name\": \"Deviatore\",\"Value\": \"false\"},{\"Name\": \"ModelloCilindro\",\"Value\": \"c999\"},{\"Name\": \"LavCilindroPassante\",\"Value\": \"false\"},{\"Name\": \"HMan\",\"Value\": \"400\"}],\"GroupId\": 2,\"AreaList\": [{\"FillType\": \"GLASS\",\"GroupId\": 3,\"AreaList\": [],\"AreaType\": \"FILL\"}],\"AreaType\": \"SASH\"}],\"AreaType\": \"FRAME\"}]}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 3, + AwaitBom = false, + AwaitPrice = false, + BomCost = 160.0, + BomOk = true, + BomPrice = 200.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Persiana per Finestra anta singola 2025", + OfferID = 1, + OfferRowUID = "SOR.26.00000003", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 3, + SellingItemID = 3, + SerStruct = "{}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 4, + AwaitBom = false, + AwaitPrice = false, + BomCost = 200.0, + BomOk = true, + BomPrice = 250.0, + DictPendPresRaw = "", + Envir = 1, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Installazione serramento", + OfferID = 1, + OfferRowUID = "SOR.26.00000004", + ProdItemQty = 0, + Qty = 3.0, + RowNum = 4, + SellingItemID = 4, + SerStruct = "{}", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 5, + AwaitBom = false, + AwaitPrice = false, + BomCost = 800.0, + BomOk = true, + BomPrice = 1150.0, + DictPendPresRaw = "", + Envir = 2, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 2, + OfferRowUID = "SOR.26.00000005", + ProdItemQty = 0, + Qty = 10.0, + RowNum = 1, + SellingItemID = 5, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 6, + AwaitBom = false, + AwaitPrice = false, + BomCost = 600.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 2, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 2, + OfferRowUID = "SOR.26.00000006", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 5, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 7, + AwaitBom = false, + AwaitPrice = false, + BomCost = 200.0, + BomOk = true, + BomPrice = 250.0, + DictPendPresRaw = "", + Envir = 3, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 3, + OfferRowUID = "SOR.26.00000007", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 6, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 8, + AwaitBom = false, + AwaitPrice = false, + BomCost = 50.0, + BomOk = true, + BomPrice = 80.0, + DictPendPresRaw = "", + Envir = 3, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 3, + OfferRowUID = "SOR.26.00000008", + ProdItemQty = 0, + Qty = 12.0, + RowNum = 1, + SellingItemID = 6, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 9, + AwaitBom = false, + AwaitPrice = false, + BomCost = 800.0, + BomOk = true, + BomPrice = 1150.0, + DictPendPresRaw = "", + Envir = 4, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 01", + OfferID = 4, + OfferRowUID = "SOR.26.00000009", + ProdItemQty = 0, + Qty = 6.0, + RowNum = 1, + SellingItemID = 7, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }, + new + { + OfferRowID = 10, + AwaitBom = false, + AwaitPrice = false, + BomCost = 600.0, + BomOk = true, + BomPrice = 950.0, + DictPendPresRaw = "", + Envir = 4, + FileName = "", + FileResource = "", + FileSize = 0L, + ImgType = 0, + Inserted = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + ItemBOM = "", + ItemJCD = "", + ItemOk = true, + ItemSteps = "{}", + ItemTags = "", + JobID = 0, + Modified = new DateTime(2026, 4, 14, 0, 0, 0, 0, DateTimeKind.Local), + Note = "Demo file 02", + OfferID = 4, + OfferRowUID = "SOR.26.0000000A", + ProdItemQty = 0, + Qty = 4.0, + RowNum = 1, + SellingItemID = 7, + SerStruct = "", + StepCost = 0.0, + StepFlowTime = 0.0, + StepLeadTime = 0.0, + StepPrice = 0.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.Property("OrderID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OrderID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CustomerID") + .HasColumnType("int"); + + b.Property("DealerID") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DictPresel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Discount") + .HasColumnType("double"); + + b.Property("DueDateProm") + .HasColumnType("datetime(6)"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OfferID") + .HasColumnType("int"); + + b.Property("OrderState") + .HasColumnType("int"); + + b.Property("RawHistory") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("ValidUntil") + .HasColumnType("datetime(6)"); + + b.HasKey("OrderID"); + + b.HasIndex("CustomerID"); + + b.HasIndex("DealerID"); + + b.HasIndex("OfferID"); + + b.ToTable("sales_order"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.Property("OrderRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("OrderRowID")); + + b.Property("AwaitBom") + .HasColumnType("tinyint(1)"); + + b.Property("AwaitPrice") + .HasColumnType("tinyint(1)"); + + b.Property("BomCost") + .HasColumnType("double"); + + b.Property("BomOk") + .HasColumnType("tinyint(1)"); + + b.Property("BomPrice") + .HasColumnType("double"); + + b.Property("DictPendPresRaw") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Envir") + .HasColumnType("int"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileResource") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("ImgType") + .HasColumnType("int"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("ItemBOM") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemJCD") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemOk") + .HasColumnType("tinyint(1)"); + + b.Property("ItemSteps") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemTags") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("JobID") + .HasColumnType("int"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrderID") + .HasColumnType("int"); + + b.Property("OrderRowState") + .HasColumnType("int"); + + b.Property("OrderRowUID") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdEstimTime") + .HasColumnType("decimal(65,30)"); + + b.Property("ProdEstimate") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProdItemQty") + .HasColumnType("int"); + + b.Property("Qty") + .HasColumnType("double"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.Property("SellingItemID") + .HasColumnType("int"); + + b.Property("SerStruct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StepCost") + .HasColumnType("double"); + + b.Property("StepFlowTime") + .HasColumnType("double"); + + b.Property("StepLeadTime") + .HasColumnType("double"); + + b.Property("StepPrice") + .HasColumnType("double"); + + b.Property("TemplateRowID") + .HasColumnType("int"); + + b.HasKey("OrderRowID"); + + b.HasIndex("OrderID"); + + b.HasIndex("SellingItemID"); + + b.HasIndex("TemplateRowID"); + + b.ToTable("sales_order_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stats.StatsAggregatedModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AvgDuration") + .HasColumnType("double"); + + b.Property("Hour") + .HasColumnType("datetime(6)"); + + b.Property("MaxDuration") + .HasColumnType("double"); + + b.Property("NoReply") + .HasColumnType("bigint"); + + b.Property("RequestCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("Hour") + .IsUnique() + .HasDatabaseName("idx_statsaggr_hour"); + + b.ToTable("stats_aggr"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stats.StatsDetailModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AvgDuration") + .HasColumnType("double"); + + b.Property("Environment") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Hour") + .HasColumnType("datetime(6)"); + + b.Property("MaxDuration") + .HasColumnType("double"); + + b.Property("NoReply") + .HasColumnType("bigint"); + + b.Property("RequestCount") + .HasColumnType("bigint"); + + b.Property("Type") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.HasIndex("Hour", "Environment", "Type") + .IsUnique() + .HasDatabaseName("idx_statsdet_hour_env_type"); + + b.ToTable("stats_detail"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockMovModel", b => + { + b.Property("StockMovID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StockMovID")); + + b.Property("CodDoc") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DtCreate") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("DtMod") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("timestamp") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + MySqlPropertyBuilderExtensions.UseMySqlComputedColumn(b.Property("DtMod")); + + b.Property("MovCod") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("QtyRec") + .HasColumnType("double"); + + b.Property("StockStatusId") + .HasColumnType("int"); + + b.Property("UnitVal") + .HasColumnType("double"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("StockMovID"); + + b.HasIndex("MovCod"); + + b.HasIndex("StockStatusId"); + + b.ToTable("stock_mov"); + + b.HasData( + new + { + StockMovID = 1, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 5.0, + StockStatusId = 1, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 2, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 8.0, + StockStatusId = 2, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 3, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 5.0, + StockStatusId = 3, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 4, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 4, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 5, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 10.0, + StockStatusId = 5, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 6, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 6, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 7, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 50.0, + StockStatusId = 7, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 8, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 8, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 9, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 9, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }, + new + { + StockMovID = 10, + CodDoc = "", + DtCreate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DtMod = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + MovCod = "CAR", + Note = "DEMO", + QtyRec = 1.0, + StockStatusId = 10, + UnitVal = 0.0, + UserId = "samuele.locatelli@egalware.com" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", b => + { + b.Property("StockStatusId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StockStatusId")); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("IsRemn") + .HasColumnType("tinyint(1)"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("Location") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("QtyAvail") + .HasColumnType("double"); + + b.HasKey("StockStatusId"); + + b.HasIndex("ItemID"); + + b.ToTable("stock_status"); + + b.HasData( + new + { + StockStatusId = 1, + IsDeleted = false, + IsRemn = false, + ItemID = 1, + Location = "B001-001-003", + QtyAvail = 5.0 + }, + new + { + StockStatusId = 2, + IsDeleted = false, + IsRemn = false, + ItemID = 2, + Location = "B001-001-002", + QtyAvail = 8.0 + }, + new + { + StockStatusId = 3, + IsDeleted = false, + IsRemn = false, + ItemID = 3, + Location = "B001-001-001", + QtyAvail = 5.0 + }, + new + { + StockStatusId = 4, + IsDeleted = false, + IsRemn = false, + ItemID = 4, + Location = "V002-001-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 5, + IsDeleted = false, + IsRemn = false, + ItemID = 5, + Location = "V001-001-002", + QtyAvail = 10.0 + }, + new + { + StockStatusId = 6, + IsDeleted = false, + IsRemn = false, + ItemID = 6, + Location = "V001-001-003", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 7, + IsDeleted = false, + IsRemn = false, + ItemID = 8, + Location = "V001-001-003", + QtyAvail = 50.0 + }, + new + { + StockStatusId = 8, + IsDeleted = false, + IsRemn = false, + ItemID = 11, + Location = "S001-002-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 9, + IsDeleted = false, + IsRemn = false, + ItemID = 9, + Location = "S001-002-001", + QtyAvail = 1.0 + }, + new + { + StockStatusId = 10, + IsDeleted = false, + IsRemn = false, + ItemID = 10, + Location = "S001-001-001", + QtyAvail = 1.0 + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Property("BuyOrderID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderID")); + + b.Property("ConsNote") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DueDateReq") + .HasColumnType("datetime(6)"); + + b.Property("Inserted") + .HasColumnType("datetime(6)"); + + b.Property("Modified") + .HasColumnType("datetime(6)"); + + b.Property("OrderState") + .HasColumnType("int"); + + b.Property("RefNum") + .HasColumnType("int"); + + b.Property("RefRev") + .HasColumnType("int"); + + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("SupplierID") + .HasColumnType("int"); + + b.HasKey("BuyOrderID"); + + b.HasIndex("SupplierID"); + + b.ToTable("buy_order"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.Property("BuyOrderRowID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("BuyOrderRowID")); + + b.Property("BuyOrderID") + .HasColumnType("int"); + + b.Property("ClassCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DescriptionCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ItemID") + .HasColumnType("int"); + + b.Property("OrderRowData") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("RowNum") + .HasColumnType("int"); + + b.HasKey("BuyOrderRowID"); + + b.HasIndex("BuyOrderID"); + + b.HasIndex("ItemID"); + + b.ToTable("buy_order_row"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", b => + { + b.Property("SupplierID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SupplierID")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("VAT") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("SupplierID"); + + b.ToTable("buy_supplier"); + + b.HasData( + new + { + SupplierID = 1, + CompanyName = "Company One", + FirstName = "Supplier A", + LastName = "Egalware", + VAT = "7294857103879254" + }, + new + { + SupplierID = 2, + CompanyName = "Company Two", + FirstName = "Supplier B", + LastName = "User", + VAT = "7294857103879254" + }, + new + { + SupplierID = 3, + CompanyName = "Company Two", + FirstName = "Supplier C", + LastName = "User Test", + VAT = "7294857103879254" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierQualifyModel", b => + { + b.Property("SupplierID") + .HasColumnType("int"); + + b.Property("CodGroup") + .HasColumnType("varchar(255)"); + + b.HasKey("SupplierID", "CodGroup"); + + b.HasIndex("CodGroup"); + + b.ToTable("buy_supplier_qualify"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.CounterModel", b => + { + b.Property("RefYear") + .HasColumnType("int"); + + b.Property("CountName") + .HasColumnType("varchar(255)"); + + b.Property("Counter") + .HasColumnType("int"); + + b.HasKey("RefYear", "CountName"); + + b.ToTable("utils_counter"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => + { + b.Property("ClassCod") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ClassCod"); + + b.ToTable("utils_gen_class"); + + b.HasData( + new + { + ClassCod = "ShapeList", + Description = "Elenco Shape Gestite" + }, + new + { + ClassCod = "WoodCol", + Description = "Elenco Colori Legno" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => + { + b.Property("GenValID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("GenValID")); + + b.Property("ClassCod") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Index") + .HasColumnType("int"); + + b.Property("ValString") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("GenValID"); + + b.HasIndex("ClassCod"); + + b.ToTable("utils_gen_value"); + + b.HasData( + new + { + GenValID = 1, + ClassCod = "WoodCol", + Index = 1, + ValString = "Blue" + }, + new + { + GenValID = 2, + ClassCod = "WoodCol", + Index = 2, + ValString = "White" + }, + new + { + GenValID = 3, + ClassCod = "WoodCol", + Index = 3, + ValString = "Red" + }, + new + { + GenValID = 4, + ClassCod = "WoodCol", + Index = 4, + ValString = "Black" + }, + new + { + GenValID = 5, + ClassCod = "ShapeList", + Index = 1, + ValString = "Rectangle" + }, + new + { + GenValID = 6, + ClassCod = "ShapeList", + Index = 2, + ValString = "Trapezoid" + }, + new + { + GenValID = 7, + ClassCod = "ShapeList", + Index = 3, + ValString = "Triangular" + }, + new + { + GenValID = 8, + ClassCod = "ShapeList", + Index = 4, + ValString = "Arc" + }, + new + { + GenValID = 9, + ClassCod = "ShapeList", + Index = 5, + ValString = "FullArc" + }, + new + { + GenValID = 10, + ClassCod = "ShapeList", + Index = 6, + ValString = "SemiFullArc" + }, + new + { + GenValID = 11, + ClassCod = "ShapeList", + Index = 7, + ValString = "SemiArc" + }, + new + { + GenValID = 12, + ClassCod = "ShapeList", + Index = 8, + ValString = "Circle" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.MovTypeModel", b => + { + b.Property("MovCod") + .HasColumnType("varchar(255)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("MovCod"); + + b.ToTable("utils_mov_type"); + + b.HasData( + new + { + MovCod = "CAR", + Description = "Carico a magazzino" + }, + new + { + MovCod = "MOV", + Description = "Movimento interno (spostamento)" + }, + new + { + MovCod = "ND", + Description = "Non Definito" + }, + new + { + MovCod = "OFOR", + Description = "Ordine Fornitore" + }, + new + { + MovCod = "RETT", + Description = "Rettifica magazzino" + }, + new + { + MovCod = "SCAR", + Description = "Scarico da magazzino" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", b => + { + b.Property("CodTag") + .HasColumnType("varchar(255)"); + + b.HasKey("CodTag"); + + b.ToTable("utils_tags"); + + b.HasData( + new + { + CodTag = "Cabinet" + }, + new + { + CodTag = "LineaCNC" + }, + new + { + CodTag = "LineaManuale" + }, + new + { + CodTag = "Montaggio" + }, + new + { + CodTag = "Parete" + }, + new + { + CodTag = "Rivendita" + }, + new + { + CodTag = "Serramento" + }, + new + { + CodTag = "Servizi" + }, + new + { + CodTag = "Trave" + }, + new + { + CodTag = "Trave_200x200" + }, + new + { + CodTag = "Trave_400x400" + }, + new + { + CodTag = "Trave_800x600" + }); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", "TemplateNav") + .WithMany("TemplateRowNav") + .HasForeignKey("TemplateID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", "DriverNav") + .WithMany() + .HasForeignKey("CostDriverID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("DriverNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", "ItemGroupNav") + .WithMany() + .HasForeignKey("CodGroup") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemGroupNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany() + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverConfigModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.CostDriverModel", "CostDriverNav") + .WithMany() + .HasForeignKey("CostDriverID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobDriverModel", "JobDriverNav") + .WithMany() + .HasForeignKey("JobDriverID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany() + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CostDriverNav"); + + b.Navigation("JobDriverNav"); + + b.Navigation("JobNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", "JobStepNav") + .WithMany() + .HasForeignKey("JobStepID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemNav"); + + b.Navigation("JobStepNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany("JobStepNav") + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.PhaseModel", "PhaseNav") + .WithMany() + .HasForeignKey("PhaseID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", "ResourceNav") + .WithMany("JobStepNav") + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", null) + .WithMany("JobSteps") + .HasForeignKey("TagsModelCodTag") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("JobNav"); + + b.Navigation("PhaseNav"); + + b.Navigation("ResourceNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepTagModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", "TagNav") + .WithMany() + .HasForeignKey("CodTag") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", "JobStepNav") + .WithMany("TagNav") + .HasForeignKey("JobStepID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobStepNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", null) + .WithMany("JobTasks") + .HasForeignKey("TagsModelCodTag") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskTagModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", "TagNav") + .WithMany() + .HasForeignKey("CodTag") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", "JobNav") + .WithMany("TagNav") + .HasForeignKey("JobID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("JobNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", "OrderRowNav") + .WithMany() + .HasForeignKey("OrderRowID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("OrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItem2ODLModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", "ProductionItemNav") + .WithMany("Item2OdlNav") + .HasForeignKey("ProdItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", "ProductionODLNav") + .WithMany("Item2OdlNav") + .HasForeignKey("ProdODLID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ProductionItemNav"); + + b.Navigation("ProductionODLNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", "OrderRowNav") + .WithMany("ProdItemNav") + .HasForeignKey("OrderRowID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", "ProductionBatchNav") + .WithMany() + .HasForeignKey("ProdBatchID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", "ProductionGroupNav") + .WithMany("ItemsNav") + .HasForeignKey("ProdGroupID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OrderRowNav"); + + b.Navigation("ProductionBatchNav"); + + b.Navigation("ProductionGroupNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Production.ProductionBatchModel", "ProdBatchNav") + .WithMany() + .HasForeignKey("ProdBatchID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ProdBatchNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionPlantModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", "ResourceNav") + .WithMany() + .HasForeignKey("ResourceID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("ResourceNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", "CustomerNav") + .WithMany() + .HasForeignKey("CustomerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", "DealerNav") + .WithMany() + .HasForeignKey("DealerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomerNav"); + + b.Navigation("DealerNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", "OfferNav") + .WithMany("OfferRowNav") + .HasForeignKey("OfferID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", "TemplateRowNav") + .WithMany() + .HasForeignKey("TemplateRowID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OfferNav"); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.CustomerModel", "CustomerNav") + .WithMany() + .HasForeignKey("CustomerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.DealerModel", "DealerNav") + .WithMany() + .HasForeignKey("DealerID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", "OfferNav") + .WithMany() + .HasForeignKey("OfferID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomerNav"); + + b.Navigation("DealerNav"); + + b.Navigation("OfferNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", "OrderNav") + .WithMany("OrderRowNav") + .HasForeignKey("OrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.SellingItemModel", "SellingItemNav") + .WithMany() + .HasForeignKey("SellingItemID") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateRowModel", "TemplateRowNav") + .WithMany() + .HasForeignKey("TemplateRowID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("OrderNav"); + + b.Navigation("SellingItemNav"); + + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockMovModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.MovTypeModel", "MovTypeNav") + .WithMany() + .HasForeignKey("MovCod") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", "StockStatusNav") + .WithMany() + .HasForeignKey("StockStatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("MovTypeNav"); + + b.Navigation("StockStatusNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Stock.StockStatusModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("ItemNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", "SupplierNav") + .WithMany() + .HasForeignKey("SupplierID") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("SupplierNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderRowModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", "BuyOrderNav") + .WithMany("BuyOrderRowNav") + .HasForeignKey("BuyOrderID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemModel", "ItemNav") + .WithMany() + .HasForeignKey("ItemID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BuyOrderNav"); + + b.Navigation("ItemNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierQualifyModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", "GroupNav") + .WithMany() + .HasForeignKey("CodGroup") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", "SupplierNav") + .WithMany("QualifNav") + .HasForeignKey("SupplierID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("GroupNav"); + + b.Navigation("SupplierNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", "GenClassNav") + .WithMany("GenValNav") + .HasForeignKey("ClassCod") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("GenClassNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Catalog.TemplateModel", b => + { + b.Navigation("TemplateRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Cost.ResourceModel", b => + { + b.Navigation("JobStepNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobStepModel", b => + { + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Job.JobTaskModel", b => + { + b.Navigation("JobStepNav"); + + b.Navigation("TagNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionGroupModel", b => + { + b.Navigation("ItemsNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionItemModel", b => + { + b.Navigation("Item2OdlNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Production.ProductionODLModel", b => + { + b.Navigation("Item2OdlNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OfferModel", b => + { + b.Navigation("OfferRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", b => + { + b.Navigation("OrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Sales.OrderRowModel", b => + { + b.Navigation("ProdItemNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.BuyOrderModel", b => + { + b.Navigation("BuyOrderRowNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", b => + { + b.Navigation("QualifNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => + { + b.Navigation("GenValNav"); + }); + + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.TagsModel", b => + { + b.Navigation("JobSteps"); + + b.Navigation("JobTasks"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.cs b/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.cs new file mode 100644 index 00000000..6186f25a --- /dev/null +++ b/EgwCoreLib.Lux.Data/Migrations/20260414102422_UpdateBuyOrderData.cs @@ -0,0 +1,140 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace EgwCoreLib.Lux.Data.Migrations +{ + /// + public partial class UpdateBuyOrderData : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_buy_order_row_sales_order_OrderID", + table: "buy_order_row"); + + migrationBuilder.DropIndex( + name: "IX_buy_order_row_OrderID", + table: "buy_order_row"); + + migrationBuilder.RenameColumn( + name: "OrderID", + table: "buy_order_row", + newName: "RowNum"); + + migrationBuilder.CreateTable( + name: "buy_supplier_qualify", + columns: table => new + { + SupplierID = table.Column(type: "int", nullable: false), + CodGroup = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_buy_supplier_qualify", x => new { x.SupplierID, x.CodGroup }); + table.ForeignKey( + name: "FK_buy_supplier_qualify_buy_supplier_SupplierID", + column: x => x.SupplierID, + principalTable: "buy_supplier", + principalColumn: "SupplierID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_buy_supplier_qualify_item_group_CodGroup", + column: x => x.CodGroup, + principalTable: "item_group", + principalColumn: "CodGroup", + onDelete: ReferentialAction.Restrict); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 1, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7042)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 2, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7058)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 3, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7064)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 4, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7071)); + + migrationBuilder.CreateIndex( + name: "IX_buy_supplier_qualify_CodGroup", + table: "buy_supplier_qualify", + column: "CodGroup"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "buy_supplier_qualify"); + + migrationBuilder.RenameColumn( + name: "RowNum", + table: "buy_order_row", + newName: "OrderID"); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 1, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5680)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 2, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5692)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 3, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5699)); + + migrationBuilder.UpdateData( + table: "sales_offer", + keyColumn: "OfferID", + keyValue: 4, + column: "ValidUntil", + value: new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5705)); + + migrationBuilder.CreateIndex( + name: "IX_buy_order_row_OrderID", + table: "buy_order_row", + column: "OrderID"); + + migrationBuilder.AddForeignKey( + name: "FK_buy_order_row_sales_order_OrderID", + table: "buy_order_row", + column: "OrderID", + principalTable: "sales_order", + principalColumn: "OrderID", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs b/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs index 4d8fd386..507ee1bf 100644 --- a/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs +++ b/EgwCoreLib.Lux.Data/Migrations/DataLayerContextModelSnapshot.cs @@ -2219,7 +2219,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 1, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5680) + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7042) }, new { @@ -2239,7 +2239,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 2, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5692) + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7058) }, new { @@ -2259,7 +2259,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 3, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5699) + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7064) }, new { @@ -2279,7 +2279,7 @@ namespace EgwCoreLib.Lux.Data.Migrations RefNum = 4, RefRev = 1, RefYear = 2025, - ValidUntil = new DateTime(2026, 5, 14, 11, 22, 33, 792, DateTimeKind.Local).AddTicks(5705) + ValidUntil = new DateTime(2026, 5, 14, 12, 24, 22, 268, DateTimeKind.Local).AddTicks(7071) }); }); @@ -3426,21 +3426,19 @@ namespace EgwCoreLib.Lux.Data.Migrations b.Property("ItemID") .HasColumnType("int"); - b.Property("OrderID") - .HasColumnType("int"); - b.Property("OrderRowData") .IsRequired() .HasColumnType("longtext"); + b.Property("RowNum") + .HasColumnType("int"); + b.HasKey("BuyOrderRowID"); b.HasIndex("BuyOrderID"); b.HasIndex("ItemID"); - b.HasIndex("OrderID"); - b.ToTable("buy_order_row"); }); @@ -3499,6 +3497,21 @@ namespace EgwCoreLib.Lux.Data.Migrations }); }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierQualifyModel", b => + { + b.Property("SupplierID") + .HasColumnType("int"); + + b.Property("CodGroup") + .HasColumnType("varchar(255)"); + + b.HasKey("SupplierID", "CodGroup"); + + b.HasIndex("CodGroup"); + + b.ToTable("buy_supplier_qualify"); + }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.CounterModel", b => { b.Property("RefYear") @@ -4161,17 +4174,28 @@ namespace EgwCoreLib.Lux.Data.Migrations .OnDelete(DeleteBehavior.Restrict) .IsRequired(); - b.HasOne("EgwCoreLib.Lux.Data.DbModel.Sales.OrderModel", "OrderNav") - .WithMany() - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - b.Navigation("BuyOrderNav"); b.Navigation("ItemNav"); + }); - b.Navigation("OrderNav"); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierQualifyModel", b => + { + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Items.ItemGroupModel", "GroupNav") + .WithMany() + .HasForeignKey("CodGroup") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", "SupplierNav") + .WithMany("QualifNav") + .HasForeignKey("SupplierID") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("GroupNav"); + + b.Navigation("SupplierNav"); }); modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenValueModel", b => @@ -4242,6 +4266,11 @@ namespace EgwCoreLib.Lux.Data.Migrations b.Navigation("BuyOrderRowNav"); }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Supplier.SupplierModel", b => + { + b.Navigation("QualifNav"); + }); + modelBuilder.Entity("EgwCoreLib.Lux.Data.DbModel.Utils.GenClassModel", b => { b.Navigation("GenValNav"); diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs index 9d28c48f..be7fdc92 100644 --- a/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/ISupplierRepository.cs @@ -31,8 +31,14 @@ /// /// Recupera gli Supplier filtrati per gruppo e tipo classe. /// - /// Codice del gruppo filtro (vuoto = tutti) - Task> GetFiltAsync(string CodGroup); + /// Codice del gruppo filtro (vuoto = tutti) + Task> GetFiltAsync(string codGroup); + + /// + /// Recupera gli Supplier filtrati per più gruppi e tipo classe. + /// + /// Elenco Codici dei gruppi + Task> GetFiltAsync(List codGroups); /// /// Aggiorna un record Supplier esistente nel database. diff --git a/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs b/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs index cdacf562..6277efdc 100644 --- a/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Supplier/SupplierRepository.cs @@ -34,6 +34,7 @@ await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetSupplier .AsNoTracking() + .Include(s => s.QualifNav) .ToListAsync(); } @@ -43,17 +44,28 @@ await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetSupplier .Where(x => x.SupplierID == recId) + .Include(s => s.QualifNav) .FirstOrDefaultAsync(); } /// - public async Task> GetFiltAsync(string CodGroup) + public async Task> GetFiltAsync(string codGroup) { - // FixMet - ToDo: da implementare secondo CodGroup da relazione n-n da implementare await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetSupplier - .AsNoTracking() - .ToListAsync(); + .AsNoTracking() + .Include(s => s.QualifNav) + .Where(s => s.QualifNav.Any(q => q.CodGroup == codGroup)) + .ToListAsync(); + } + public async Task> GetFiltAsync(List codGroups) + { + await using var dbCtx = await CreateContextAsync(); + + return await dbCtx.DbSetSupplier + .AsNoTracking() + .Where(s => s.QualifNav.Any(q => codGroups.Contains(q.CodGroup))) + .ToListAsync(); } ///