update modelli e metodi x novi campi LockBy

This commit is contained in:
Samuele Locatelli
2022-07-06 11:09:54 +02:00
parent 09035439bd
commit b5fef75133
4 changed files with 121 additions and 19 deletions
@@ -1,4 +1,5 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -18,6 +19,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public ProdController()
{
Log.Info("ProdController istance Started");
}
#endregion Public Constructors
@@ -27,10 +29,11 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Aggiunta di un PROJ ad un PROD
/// </summary>
/// <param name="ProdId"></param>
/// <param name="ProjId"></param>
/// <param name="ProdId">ID Prod</param>
/// <param name="ProjId">ID Proj</param>
/// <param name="UserKey">User ID / Key number</param>
/// <returns></returns>
public bool AddProj(int ProdId, int ProjId)
public bool AddProj(int ProdId, int ProjId, string UserKey = "USER01")
{
bool done = false;
@@ -51,6 +54,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// lo aggiorno
currProj.ProdDbId = currProd.ProdDbId;
currProj.Locked = true;
currProj.LockDate = DateTime.Now;
currProj.LockedBy = UserKey;
// salvo
localDbCtx.SaveChanges();
@@ -190,9 +195,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Fornisce nuovo indice VUOTO da usare (allocando sul DB)
/// </summary>
/// <param name="ProjId"></param>
/// <param name="ProjId">ID Proj</param>
/// <param name="UserKey">User ID / Key number</param>
/// <returns></returns>
public int GetNextIndex(int ProjId)
public int GetNextIndex(int ProjId, string UserKey = "USER01")
{
int nextId = 0;
@@ -230,6 +236,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// aggiungo proj-prod
currProj.ProdDbId = newProd.ProdDbId;
currProj.Locked = true;
currProj.LockDate = DateTime.Now;
currProj.LockedBy = UserKey;
// Commit changes
localDbCtx.SaveChanges();
@@ -257,8 +265,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return numAssigned > 0;
}
/// <summary> Return Lock by ProdId (proj & prod) </summary> <param
/// name="ProdId">ProjID</param> <returns></returns>
/// <summary> Return Lock by ProdId (proj & prod) </summary> <param name="ProdId"></param> <returns></returns>
public bool IsLockByProdId(int ProdId)
{
bool bIsLock = false;
@@ -288,9 +295,14 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return bIsLock;
}
/// <summary> Manage Lock by ProdId (proj & prod) </summary> <param
/// name="ProdId">ProjID</param> <param name="Locked">Stato Lock da impostare</param> <returns></returns>
public ProdModel LockByProdId(int ProdId, bool Locked)
/// <summary>
/// Manage Lock by ProdId (proj & prod)
/// </summary>
/// <param name="ProdId"></param>
/// <param name="Locked">Stato Lock da impostare</param>
/// <param name="UserKey">User ID / Key number</param>
/// <returns></returns>
public ProdModel LockByProdId(int ProdId, bool Locked, string UserKey = "USER01")
{
ProdModel currProd;
// seleziono il prod...
@@ -304,6 +316,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
if (currProd != null)
{
currProd.Locked = Locked;
currProd.LockDate = DateTime.Now;
currProd.LockedBy = Locked ? UserKey : "";
localDbCtx.Entry(currProd).State = System.Data.Entity.EntityState.Modified;
var currProj = localDbCtx
@@ -315,6 +329,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
foreach (var item in currProj)
{
item.Locked = Locked;
item.LockDate = DateTime.Now;
item.LockedBy = Locked ? UserKey : "";
localDbCtx.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
@@ -553,6 +569,40 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return coreConv(currData);
}
/// <summary>
/// Return User Code/Key that Locks by ProdId (proj & prod)
/// </summary>
/// <param name="ProdId"></param>
/// <returns></returns>
public string UserLockByProdId(int ProdId)
{
string LockBy = "";
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// seleziono il prod...
var currProd = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.FirstOrDefault();
if (currProd != null)
{
LockBy = currProd.LockedBy;
var currProj = localDbCtx
.ProjList
.Where(x => x.ProdDbId == currProd.ProdDbId)
.ToList();
if (currProj != null && string.IsNullOrEmpty(LockBy))
{
LockBy = currProj.FirstOrDefault(x => !string.IsNullOrEmpty(x.LockedBy)).LockedBy;
}
}
}
return LockBy;
}
#endregion Public Methods
#region Protected Methods
@@ -603,7 +653,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Istanza logger
/// </summary>
private NLog.Logger Log;
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
@@ -8,6 +8,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
public class ProjController : IDisposable
{
#region Public Constructors
public ProjController()
@@ -20,7 +21,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Search for already imported BTL from FileName (only)
/// =0 : NOT found &gt;0 : ProjId (already rpesent) for overwrite
/// =0 : NOT found
/// >0 : ProjId (already present) for overwrite
/// </summary>
/// <param name="BTLFileName"></param>
/// <returns></returns>
@@ -42,7 +44,11 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
return answ;
}
/// <summary>
/// Delete Proj on DB by ProjId
/// </summary>
/// <param name="ProjId"></param>
/// <returns></returns>
public bool DeleteProj(int ProjId)
{
bool done = false;
@@ -302,8 +308,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Fornisce nuovo indice VUOTO da usare (allocando sul DB)
/// </summary>
/// <param name="UserKey">User ID / Key number</param>
/// <returns></returns>
public int GetNextIndex()
public int GetNextIndex(string UserKey = "USER01")
{
int nextId = 0;
@@ -330,7 +337,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// creo nuovo...
var newRec = localDbCtx
.ProjList
.Add(new ProjModel() { ProjId = nextId, BTLFileName = "", IsNew = true, Locked = true, DtCreated = DateTime.Now });
.Add(new ProjModel()
{
ProjId = nextId,
BTLFileName = "",
IsNew = true,
Locked = true,
LockedBy = UserKey,
LockDate = DateTime.Now,
DtCreated = DateTime.Now
});
// Commit changes
localDbCtx.SaveChanges();
@@ -338,9 +354,14 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return nextId;
}
/// <summary> Manage Lock by ProjId (proj & prod) </summary> <param
/// name="ProjId">ProjID</param> <param name="Locked">Stato Lock da impostare</param> <returns></returns>
public Core.ProjFileM LockByProjId(int ProjId, bool Locked)
/// <summary>
/// Manage Lock by ProjId (proj & prod)
/// </summary>
/// <param name="ProjId">ID Proj</param>
/// <param name="Locked">Stato Lock da impostare</param>
/// <param name="UserKey">User ID / Key number</param>
/// <returns></returns>
public Core.ProjFileM LockByProjId(int ProjId, bool Locked, string UserKey = "USER01")
{
ProjModel currProj;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
@@ -351,6 +372,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.SingleOrDefault();
// aggiorno stato del proj
currProj.Locked = Locked;
currProj.LockDate = DateTime.Now;
currProj.LockedBy = Locked ? UserKey : "";
localDbCtx.Entry(currProj).State = System.Data.Entity.EntityState.Modified;
// seleziono il prod e lo blocco...
@@ -363,6 +386,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// blocco prod corrente
currProd.Locked = Locked;
currProd.LockDate = DateTime.Now;
currProd.LockedBy = Locked ? UserKey : "";
localDbCtx.Entry(currProd).State = System.Data.Entity.EntityState.Modified;
// ora blocco altri proj del prod...
@@ -376,6 +401,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
//item.ProdDbId = currProd.ProdDbId;
item.Locked = Locked;
item.LockDate = DateTime.Now;
item.LockedBy = Locked ? UserKey : "";
localDbCtx.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
@@ -726,5 +753,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
private NLog.Logger Log;
#endregion Private Fields
}
}
@@ -32,11 +32,23 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
public bool IsNew { get; set; } = true;
/// <summary>
/// Stato locked (quando aperto da un dispositivo in rete)
/// Stato locked, quando aperto da un dispositivo in rete
/// </summary>
[Column("Lock")]
public bool Locked { get; set; } = false;
/// <summary>
/// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockedBy")]
public string LockedBy { get; set; } = "";
/// <summary>
/// DataOra ultima operazione di Lock (o di rimozione di lock), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockDate")]
public DateTime LockDate { get; set; } = DateTime.MinValue;
/// <summary>
/// Macchina
/// </summary>
@@ -49,6 +49,18 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
[Column("Lock")]
public bool Locked { get; set; } = false;
/// <summary>
/// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockedBy")]
public string LockedBy { get; set; } = "";
/// <summary>
/// DataOra ultima operazione di Lock (o di rimozione di lock), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockDate")]
public DateTime LockDate { get; set; } = DateTime.MinValue;
/// <summary>
/// Macchina
/// </summary>