using MagMan.Data.Tenant.DbModels; using MagMan.Data.Tenant.Services; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MagMan.Data.Tenant.Controllers { public class TenantController : IDisposable { #region Public Constructors public TenantController() { } #endregion Public Constructors #region Public Methods public async Task DatabaseMigrate(string connString) { bool answ = false; using (MagManContext dbCtx = new MagManContext(connString)) { await dbCtx.Database.MigrateAsync(); answ = true; } return answ; } public void Dispose() { // Clear database context Log.Info("Dispose di TenantController"); } /// /// Elimina Item da magazzino /// /// Stringa connessione (variabile x cliente) /// Item da eliminare /// public bool ItemDelete(string connString, RawItemModel rec2del) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { var currData = dbCtx .DbSetItems .Where(x => x.RawItemId == rec2del.RawItemId) .FirstOrDefault(); if (currData != null) { dbCtx .DbSetItems .Remove(currData); dbCtx.SaveChanges(); done = true; } } catch (Exception exc) { Log.Error($"Eccezione in ItemDelete{Environment.NewLine}{exc}"); } } return done; } /// /// Elenco Items gestiti a magazzino (all) /// /// Stringa connessione (variabile x cliente) /// public List ItemGetAll(string connString) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { dbResult = dbCtx .DbSetItems //.Where(x => CustomerId == 0 || x.CustomerID == CustomerId) .Include(c => c.MaterialNav) .OrderBy(x => x.MatId) .ToList(); } return dbResult; } /// /// Elenco Items gestiti a magazzino dato Materiale /// /// Stringa connessione (variabile x cliente) /// ID del materiale x cui filtrare, 0 = tutti /// public List ItemGetByMat(string connString, int matID) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { dbResult = dbCtx .DbSetItems .Where(x => matID == 0 || x.MatId == matID) .Include(c => c.MaterialNav) //.OrderBy(x => x.MatId) .OrderBy(x => x.WMm) .ThenBy(x => x.HMm) .ThenBy(x => x.LMm) .ToList(); } return dbResult; } /// Aggiunge/Modifica un item in magazzino Stringa connessione (variabile x cliente) Record da aggiornare quantità da /// aggiornare (se <0 è consumo) public bool ItemModQty(string connString, RawItemModel rec2upd, int deltaQty) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { /* * Verifica se esistesse: deve essere valido TUTTO * - stesso materiale * - stesse dimensioni * */ var currData = dbCtx .DbSetItems .Where(x => (x.RawItemId == rec2upd.RawItemId) || (x.MatId == rec2upd.MatId && (x.WMm == rec2upd.WMm && x.HMm == rec2upd.HMm && x.LMm == rec2upd.LMm))) .FirstOrDefault(); if (currData != null) { currData.QtyAvail += deltaQty; dbCtx.Entry(currData).State = EntityState.Modified; } dbCtx.SaveChanges(); done = true; } catch (Exception exc) { Log.Error($"Eccezione in ItemModQty{Environment.NewLine}{exc}"); } } return done; } /// /// Aggiunge/Modifica un item in magazzino /// /// Stringa connessione (variabile x cliente) /// Record da aggiungere/aggiornare /// public bool ItemUpdate(string connString, RawItemModel rec2upd) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { /* * Verifica se esistesse: deve essere valido TUTTO * - stesso materiale * - stesse dimensioni * */ var currData = dbCtx .DbSetItems .Where(x => (x.RawItemId == rec2upd.RawItemId) || (x.MatId == rec2upd.MatId && (x.WMm == rec2upd.WMm && x.HMm == rec2upd.HMm && x.LMm == rec2upd.LMm))) .FirstOrDefault(); if (currData != null) { currData.MatId = rec2upd.MatId; currData.QtyAvail = rec2upd.QtyAvail; currData.IsActive = rec2upd.IsActive; currData.IsRemn = rec2upd.IsRemn; currData.Location = rec2upd.Location; currData.LMm = rec2upd.LMm; currData.HMm = rec2upd.HMm; currData.WMm = rec2upd.WMm; currData.Note = rec2upd.Note; dbCtx.Entry(currData).State = EntityState.Modified; } else { dbCtx .DbSetItems .Add(rec2upd); } dbCtx.SaveChanges(); done = true; } catch (Exception exc) { Log.Error($"Eccezione in ItemUpdate{Environment.NewLine}{exc}"); } } return done; } /// /// Elimina Materiale da magazzino /// /// Stringa connessione (variabile x cliente) /// Item da eliminare /// public bool MaterialDelete(string connString, MaterialModel rec2del) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { var currData = dbCtx .DbSetMaterials .Where(x => x.MatId == rec2del.MatId) .FirstOrDefault(); if (currData != null) { dbCtx .DbSetMaterials .Remove(currData); dbCtx.SaveChanges(); done = true; } } catch (Exception exc) { Log.Error($"Eccezione in MaterialDelete{Environment.NewLine}{exc}"); } } return done; } /// /// Elenco Materiali gestiti a magazzino /// /// Stringa connessione (variabile x cliente) /// public List MaterialGetAll(string connString, bool withChild) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { if (withChild) { dbResult = dbCtx .DbSetMaterials .Include(x => x.RawItemList) .OrderBy(x => x.MatDesc) .ThenBy(x => x.WMm) .ThenBy(x => x.HMm) .ThenBy(x => x.LMm) .ToList(); } else { dbResult = dbCtx .DbSetMaterials .OrderBy(x => x.MatDesc) .ThenBy(x => x.WMm) .ThenBy(x => x.HMm) .ThenBy(x => x.LMm) .ToList(); } } return dbResult; } /// /// Elenco Materiali gestiti a magazzino Stringa /// connessione (variabile x cliente) Materiale richiesto, 0 /// = tutti Se true allora include record child /// (Items) public List MaterialGetFilt(string connString, int matID, bool withChild) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { if (withChild) { dbResult = dbCtx .DbSetMaterials .Where(x => matID == 0 || x.MatId == matID) .Include(x => x.RawItemList) .OrderBy(x => x.MatDesc) .ThenBy(x => x.WMm) .ThenBy(x => x.HMm) .ThenBy(x => x.LMm) .ToList(); } else { dbResult = dbCtx .DbSetMaterials .Where(x => matID == 0 || x.MatId == matID) .OrderBy(x => x.MatDesc) .ThenBy(x => x.WMm) .ThenBy(x => x.HMm) .ThenBy(x => x.LMm) .ToList(); } } return dbResult; } /// /// Aggiunge/Modifica un Materiale in magazzino /// /// Stringa connessione (variabile x cliente) /// Record da aggiungere/aggiornare /// public bool MaterialUpdate(string connString, MaterialModel rec2upd) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { /* * Ricerca equal: corrisponde se * - MatId identico * - se Uguali + NonNulli [MatCode oppure MatDescript] + uguali [W/H/L]... */ var currData = dbCtx .DbSetMaterials .Where(x => (rec2upd.MatId > 0 && x.MatId == rec2upd.MatId) || ((x.WMm == rec2upd.WMm && x.HMm == rec2upd.HMm && x.LMm == rec2upd.LMm) && ((!string.IsNullOrEmpty(rec2upd.MatCode) && x.MatCode == rec2upd.MatCode) || (!string.IsNullOrEmpty(rec2upd.MatDesc) && x.MatDesc == rec2upd.MatDesc)) )) .FirstOrDefault(); if (currData != null) { currData.MatCode = rec2upd.MatCode; currData.MatDesc = rec2upd.MatDesc; currData.LMm = rec2upd.LMm; currData.HMm = rec2upd.HMm; currData.WMm = rec2upd.WMm; dbCtx.Entry(currData).State = EntityState.Modified; } else { dbCtx .DbSetMaterials .Add(rec2upd); } dbCtx.SaveChanges(); done = true; } catch (Exception exc) { Log.Error($"Eccezione in MaterialUpdate{Environment.NewLine}{exc}"); } } return done; } /// /// Elimina record Project /// /// Stringa connessione (variabile x cliente) /// Item da eliminare /// public bool ProjectDelete(string connString, ProjModel rec2del) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { var currData = dbCtx .DbSetProjects .Where(x => x.ProjDbId == rec2del.ProjDbId) .FirstOrDefault(); if (currData != null) { dbCtx .DbSetProjects .Remove(currData); dbCtx.SaveChanges(); done = true; } } catch (Exception exc) { Log.Error($"Eccezione in ProjectDelete{Environment.NewLine}{exc}"); } } return done; } /// /// Elenco Projects (all) /// /// Stringa connessione (variabile x cliente) /// public List ProjectGetAll(string connString) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { dbResult = dbCtx .DbSetProjects .OrderBy(x => x.DtCreated) .ToList(); } return dbResult; } /// /// Elenco Items gestiti a magazzino dato Materiale /// /// Stringa connessione (variabile x cliente) /// ID del materiale x cui filtrare, 0 = tutti /// public List ProjectGetByNumKey(string connString, int numKey) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { dbResult = dbCtx .DbSetProjects .Where(x => numKey == 0 || x.KeyNum == numKey) .OrderBy(x => x.DtCreated) .ToList(); } return dbResult; } /// /// Elenco Items gestiti a magazzino dato Materiale /// /// Stringa connessione (variabile x cliente) /// ID master key, 0 = tutti /// periodo x filtraggio /// public List ProjectGetFilt(string connString, int numKey, SelectData period) { List dbResult = new List(); using (MagManContext dbCtx = new MagManContext(connString)) { dbResult = dbCtx .DbSetProjects .Where(x => (numKey == 0 || x.KeyNum == numKey) && ((x.DtCreated >= period.DateStart && x.DtCreated <= period.DateEnd) || (x.DtSchedule >= period.DateStart && x.DtSchedule <= period.DateEnd) || (x.DtLastAction >= period.DateStart && x.DtLastAction <= period.DateEnd) )) .OrderBy(x => x.DtCreated) .ToList(); } return dbResult; } /// /// Aggiunge/Modifica un record Project /// /// Stringa connessione (variabile x cliente) /// Record da aggiungere/aggiornare /// public bool ProjectUpdate(string connString, ProjModel rec2upd) { bool done = false; using (MagManContext dbCtx = new MagManContext(connString)) { try { /* * Ricerca: * - DbId corrisponde * - Key + Id remoti corrispondono * */ var currData = dbCtx .DbSetProjects .Where(x => (x.ProjDbId == rec2upd.ProjDbId) || (x.ProjExtDbId == rec2upd.ProjExtDbId && x.KeyNum == rec2upd.KeyNum) || (x.ProjExtId == rec2upd.ProjExtId && x.KeyNum == rec2upd.KeyNum)) .FirstOrDefault(); if (currData != null) { currData.MachineID = rec2upd.MachineID; currData.KeyNum = rec2upd.KeyNum; currData.ProjExtDbId = rec2upd.ProjExtDbId; currData.ProjExtId = rec2upd.ProjExtId; currData.BTLFileName = rec2upd.BTLFileName; currData.PType = rec2upd.PType; currData.Machine = rec2upd.Machine; currData.ProjDescription = rec2upd.ProjDescription; currData.DtCreated = rec2upd.DtCreated; currData.DtLastAction = rec2upd.DtLastAction; currData.DtSchedule = rec2upd.DtSchedule; currData.DtStartProd = rec2upd.DtStartProd; currData.ListName = rec2upd.ListName; currData.ProcTimeEst = rec2upd.ProcTimeEst; currData.ProcTimeReal = rec2upd.ProcTimeReal; currData.IsActive = rec2upd.IsActive; currData.IsArchived = rec2upd.IsArchived; dbCtx.Entry(currData).State = EntityState.Modified; } else { dbCtx .DbSetProjects .Add(rec2upd); } dbCtx.SaveChanges(); done = true; } catch (Exception exc) { Log.Error($"Eccezione in ItemUpdate{Environment.NewLine}{exc}"); } } return done; } #endregion Public Methods #region Private Fields private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }