using MagMan.Data.Tenant.DbModels; 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 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; } #endregion Public Methods #region Private Fields private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }