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