From 689e81219bdab6876fe5752a16435b02c88ed5c3 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 29 Sep 2023 16:37:25 +0200 Subject: [PATCH] Modifica x gestione lettura proj insieme a prod (da testare) --- .../Controllers/ProdController.cs | 88 ++++++++++++++++++- .../DatabaseModels/ProdModel.cs | 10 +++ 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs index 509259d7..ce33d92a 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs @@ -2,6 +2,7 @@ using NLog; using System; using System.Collections.Generic; +using System.Data.Entity; using System.Linq; using static EgtBEAMWALL.Core.ConstBeam; @@ -285,6 +286,90 @@ namespace EgtBEAMWALL.DataLayer.Controllers return result; } + /// + /// Elenco prod + /// + /// Num max record da recuperare + /// Solo con ALMENO 1 PROJ attivo (senza cancellazione logica) + /// Se true: mostra anche archiviati (default li nasconde) + /// + public List GetLastDescFull(int numRecord, bool OnlyActive, bool ShowArchived = false) + { + List result = new List(); + //List dbResult = GetLastDbModelDesc(numRecord); + List dbResult = new List(); + using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) + { + // se numRecord = 0 --> passo tutti + if (numRecord == 0) + { + numRecord = localDbCtx.ProdList.Count(); + } + // retrieve + dbResult = localDbCtx + .ProdList + .Where(x => (!x.IsArchived || ShowArchived)) + //.Include(j => j.) + // condizione join sui PROJ + .Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive), + p => p.ProdDbId, + e => e.ProdDbId, + (p, e) => p) + .Distinct() + .Include(j => j.ProjListNav) + .OrderByDescending(x => x.ProdId) + .Take(numRecord) + .ToList(); + } + + // conversione + result = dbResult.Select(x => coreConv(x)).ToList(); + //result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description, x.PType, x.Machine, x.LockedBy, x.LockDate, x.IsActive, x.IsProduced, x.IsArchived, x.ProjListNav.Select(j => Core.ProjFileM.CreateProjFileM(j.ProjId, x.ProdId, j.DtCreated, j.DtExported, j.ListName, j.BTLFileName, j.ProjDescription, j.IsNew, j.Locked, j.PType, j.Machine, j.IsActive, j.IsActive)).ToList())).ToList(); + return result; + } + /// + /// Elenco prod + /// + /// Inizio periodo estrazione + /// Fine periodo estrazione + /// Num max record da recuperare + /// Solo con ALMENO 1 PROJ attivo (senza cancellazione logica) + /// Se true: mostra anche archiviati (default li nasconde) + /// + public List GetLastDescFull(DateTime dtStart, DateTime dtEnd, int numRecord, bool OnlyActive, bool ShowArchived = false) + { + List result = new List(); + //List dbResult = GetLastDbModelDesc(numRecord); + List dbResult = new List(); + using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING)) + { + // se numRecord = 0 --> passo tutti + if (numRecord == 0) + { + numRecord = localDbCtx.ProdList.Count(); + } + // retrieve + dbResult = localDbCtx + .ProdList + .Where(x => x.DtCreated >= dtStart && x.DtCreated <= dtEnd && (!x.IsArchived || ShowArchived)) + // condizione join sui PROJ + .Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive), + p => p.ProdDbId, + e => e.ProdDbId, + (p, e) => p) + .Distinct() + .Include(j => j.ProjListNav) + .OrderByDescending(x => x.ProdId) + .Take(numRecord) + .ToList(); + } + + // conversione + result = dbResult.Select(x => coreConv(x)).ToList(); + //result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description, x.PType, x.Machine, x.LockedBy, x.LockDate, x.IsActive, x.IsProduced, x.IsArchived, x.ProjListNav.Select(j => Core.ProjFileM.CreateProjFileM(j.ProjId, x.ProdId, j.DtCreated, j.DtExported, j.ListName, j.BTLFileName, j.ProjDescription, j.IsNew, j.Locked, j.PType, j.Machine, j.IsActive, j.IsActive)).ToList())).ToList(); + return result; + } + /// /// Fornisce nuovo indice VUOTO da usare (allocando sul DB) /// @@ -909,7 +994,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers /// protected Core.ProdFileM coreConv(ProdModel currProd) { - Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived); + //Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived); + Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived, currProd.ProjListNav.Select(j => Core.ProjFileM.CreateProjFileM(j.ProjId, currProd.ProdId, j.DtCreated, j.DtExported, j.ListName, j.BTLFileName, j.ProjDescription, j.IsNew, j.Locked, j.PType, j.Machine, j.IsActive, j.IsActive)).ToList()); return answ; } diff --git a/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs b/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs index 093201f2..7999da61 100644 --- a/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs +++ b/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs @@ -19,6 +19,11 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels { #region Public Properties + public ProdModel() + { + ProjListNav = new HashSet(); + } + /// /// Chiave univoca DB /// @@ -98,6 +103,11 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels [Column("IsArchived")] public bool IsArchived { get; set; } = false; + /// + /// Collezione oggetti Proj associati (almeno 1 by design) + /// + public virtual ICollection ProjListNav { get; set; } + #endregion Public Properties } } \ No newline at end of file