using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NLog; using StockMan.Data.DbModels; namespace StockMan.Data.Controllers { public class StoManController : IDisposable { #region Public Constructors public StoManController(IConfiguration configuration) { _configuration = configuration; Log.Info("Avviata classe StoManController"); } #endregion Public Constructors #region Public Methods /// /// Conferma movimenti /// /// /// public async Task ConfermaMov(int itemID) { bool answ = false; using (var dbCtx = new StockManContext(_configuration)) { var ItemID = new SqlParameter("@ItemID", itemID); var callResult = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_ItemConsolidate @ItemID", ItemID); answ = true; } return answ; } /// /// Lista Contatori /// /// public List CountersGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetCountersList .OrderBy(x => x.Id) .ToList(); } return dbResult; } /// /// Flux Delete /// /// public async Task DeleteFlux(ItemFluxModel currRec) { bool fatto = false; using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var dbResult = localDbCtx .DbSetItemFlux .Where(x => x.Id == currRec.Id) .FirstOrDefault(); if (dbResult != null) { localDbCtx .DbSetItemFlux .Remove(dbResult); await localDbCtx.SaveChangesAsync(); fatto = true; } } catch (Exception exc) { Log.Error($"Eccezione durante DeleteFlux{Environment.NewLine}{exc}"); } } return fatto; } public void Dispose() { GC.Collect(); } /// /// Elimina movimenti duplicati /// /// /// public async Task EliminaDup(int itemID) { bool answ = false; using (var dbCtx = new StockManContext(_configuration)) { var ItemID = new SqlParameter("@ItemID", itemID); var callResult = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_ItemShrinkHist @ItemID", ItemID); answ = true; } return answ; } /// /// aggiunta item /// /// public async Task FluxAdd(ItemFluxModel newRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItemFlux .Where(x => x.Id == newRec.Id) .FirstOrDefault(); if (currRec != null) { fatto = false; } else { localDbCtx .DbSetItemFlux .Add(newRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante FluxAdd{Environment.NewLine}{exc}"); } } return fatto; } /// /// Modifica flux /// /// public async Task FluxMod(ItemFluxModel editRec) { bool fatto = false; //List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItemFlux .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { currRec.ItemId = editRec.ItemId; currRec.LocationId = editRec.LocationId; currRec.MovTypeId = editRec.MovTypeId; currRec.ExtLocationId = editRec.ExtLocationId; currRec.DtMov = editRec.DtMov; currRec.Qta = editRec.Qta; currRec.TotValue = editRec.TotValue; currRec.OperatorId = "ND"; currRec.Note = editRec.Note; currRec.CodDoc = editRec.CodDoc; currRec.ModOperatorId = "ND"; localDbCtx.Entry(currRec).State = EntityState.Modified; } else { localDbCtx .DbSetItemFlux .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante FluxMod;{Environment.NewLine}{exc}"); } } return fatto; } /// /// aggiunta item /// /// public async Task ItemAdd(ItemModel newRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItem .Where(x => x.Id == newRec.Id) .FirstOrDefault(); if (currRec != null) { fatto = false; } else { localDbCtx .DbSetItem .Add(newRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ItemAdd{Environment.NewLine}{exc}"); } } return fatto; } /// /// Aggiunta famiglia di item /// /// public async Task ItemFamilyAdd(ItemFamilyModel newRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItemFamily .Where(x => x.Id == newRec.Id) .FirstOrDefault(); if (currRec != null) { fatto = false; } else { localDbCtx .DbSetItemFamily .Add(newRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ItemFamilyAdd{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Items /// /// public async Task ItemFamilyDeleteByID(ItemFamilyModel currRec) { bool fatto = false; using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var dbResult = localDbCtx .DbSetItemFamily .Where(x => x.Id == currRec.Id) .FirstOrDefault(); if (dbResult != null) { localDbCtx .DbSetItemFamily .Remove(dbResult); await localDbCtx.SaveChangesAsync(); fatto = true; } } catch (Exception exc) { Log.Error($"Eccezione durante ItemFamilyDeleteByID{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Famiglie Articoli /// /// public List ItemFamilyGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemFamily .OrderBy(x => x.Descr) .ToList(); } return dbResult; } /// /// Lista Famiglie Articoli da ricerca /// /// public List ItemFamilyGetSearch(string searchVal) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemFamily .Where(x => x.Descr.Contains(searchVal)) .OrderBy(x => x.Descr) .ToList(); } return dbResult; } /// /// Modifica famiglia articoli /// /// public async Task ItemFamilyMod(ItemFamilyModel editRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItemFamily .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { currRec.Descr = editRec.Descr; } else { localDbCtx .DbSetItemFamily .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ItemFamilyMod{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Flux x item /// /// public List ItemFluxGetById(int id) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemFlux .Include(l => l.Location) .Include(e => e.ExtLocation) .Where(x => x.ItemId == id) .OrderByDescending(x => x.Id) .ToList(); } return dbResult; } /// /// Modifica item, /// /// public async Task ItemMod(ItemModel editRec) { bool fatto = false; //List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetItem .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { currRec.Descr = editRec.Descr; currRec.CodInt = editRec.CodInt; currRec.ItemFamilyId = editRec.ItemFamilyId; currRec.CodExt = editRec.CodExt; currRec.DescrExt = editRec.DescrExt; currRec.QtaMin = editRec.QtaMin; currRec.QtaBatch = editRec.QtaBatch; currRec.CurrValue = editRec.CurrValue; currRec.QtaCurr = editRec.QtaCurr; currRec.QtaPend = editRec.QtaPend; currRec.Um = editRec.Um; localDbCtx.Entry(currRec).State = EntityState.Modified; } else { localDbCtx .DbSetItem .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ItemMod{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Items /// /// public List ItemsGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItem .OrderBy(x => x.Descr) .ToList(); } return dbResult; } /// /// Lista Items da ricerca /// /// public List ItemsGetByID(int id) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { var risultato = localDbCtx .DbSetItem .Where(x => ((x.Id == id))) .ToList(); if (risultato != null) { dbResult = risultato; } } return dbResult; } /// /// Lista Items da ricerca /// /// public List ItemsGetByLocation(string locationSel) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemStock .Where(x => x.LocationId == locationSel) .Include(l => l.ItemNav) .ToList(); } return dbResult; } ///// ///// Lista Items da ricerca ///// ///// //public List ItemsGetSearch(string searchVal, string famID) //{ // List dbResult = new List(); // using (StockManContext localDbCtx = new StockManContext(_configuration)) // { // dbResult = localDbCtx // .DbSetItem // .Where(x => (x.ItemFamilyId == famID || string.IsNullOrEmpty(famID)) && (x.CodExt.Contains(searchVal) || x.Descr.Contains(searchVal) || x.DescrExt.Contains(searchVal) || string.IsNullOrEmpty(searchVal))) // .OrderBy(x => x.Descr) // .ToList(); // } // return dbResult; //} /// /// Lista Items da ricerca /// /// public List ItemsGetSearch(string searchVal, string itemFamId) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { if (!string.IsNullOrEmpty(searchVal) && itemFamId == "*") { var risultato = localDbCtx .DbSetItem .Where(x => ((x.Id.ToString() == searchVal)) || (x.CodInt.Contains(searchVal)) || (x.CodExt.Contains(searchVal)) || (x.Descr.Contains(searchVal) || (x.CurrValue.ToString().Contains(searchVal)))) .ToList(); if (risultato != null) { dbResult = risultato; } } else if (itemFamId != "*" && string.IsNullOrEmpty(searchVal)) { var risultato = localDbCtx .DbSetItem .Where(x => ((x.ItemFamilyId == itemFamId))) .ToList(); if (risultato != null) { dbResult = risultato; } } else if (itemFamId != "*" && !string.IsNullOrEmpty(searchVal)) { var risultato = localDbCtx .DbSetItem .Where(x => ((x.ItemFamilyId == itemFamId) && ((x.CodInt.Contains(searchVal)) || (x.CodExt.Contains(searchVal)) || (x.Descr.Contains(searchVal) || (x.CurrValue.ToString().Contains(searchVal)))))) .ToList(); if (risultato != null) { dbResult = risultato; } } else { dbResult = localDbCtx .DbSetItem .OrderBy(x => x.Id) .ToList(); } } return dbResult; } /// /// Lista Item Stock (ALL!) /// /// public List ItemsStockGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemStock .OrderBy(x => x.Id) .ToList(); } return dbResult; } /// /// Lista Item Stock (By ID) /// /// /// public List ItemsStockGetById(int ItemID) { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetItemStock .Where(x => x.ItemId == ItemID) .OrderBy(x => x.Id) .ToList(); } return dbResult; } /// /// Aggiungi Locazione /// /// public async Task LocationAddNew(LocationModel editRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetLocation .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { fatto = false; } else { localDbCtx .DbSetLocation .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante LocationAddNew{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Locazioni /// /// public List LocationGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetLocation .OrderBy(x => x.Descr) .ToList(); } return dbResult; } /// /// Lista Locazioni join con tabella location type /// /// public List LocationGetLocType() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetLocation .Include(l => l.LocTypeNav) .Where(x => x.LocTypeNav.IsStock) .OrderBy(x => x.Id) .ToList(); } return dbResult; } /// /// Modifica Locazione /// /// public async Task LocationMod(LocationModel editRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetLocation .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { currRec.Descr = editRec.Descr; currRec.LocTypeId = editRec.LocTypeId; } else { localDbCtx .DbSetLocation .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante LocationMod{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Tipi Locazioni /// /// public List LocTypeGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetLocType .OrderBy(x => x.Descr) .ToList(); } return dbResult; } /// /// Muove gli items nei vari scaffali /// /// public async Task MoveItems(int stockId, string locationIdFrom, string locationIdTo, string oprId) { bool answ = false; using (var dbCtx = new StockManContext(_configuration)) { var StockId = new SqlParameter("@StockID", stockId); var LocationIdFrom = new SqlParameter("@LocationID_FROM", locationIdFrom); var LocationIdTo = new SqlParameter("@LocationID_TO", locationIdTo); var OprId = new SqlParameter("@OperatorID", oprId); var callResult = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_ItemStockMove @StockID, @LocationID_FROM, @LocationID_TO, @OperatorID", StockId, LocationIdFrom, LocationIdTo, OprId); answ = true; } return answ; } /// /// Muove gli items nei vari scaffali /// /// public async Task MoveItems_New(int stockId, string locationIdFrom, string locationIdTo, string oprId, int qtyMov) { bool answ = false; using (var dbCtx = new StockManContext(_configuration)) { var StockId = new SqlParameter("@StockID", stockId); var LocationIdFrom = new SqlParameter("@LocationID_FROM", locationIdFrom); var LocationIdTo = new SqlParameter("@LocationID_TO", locationIdTo); var OprId = new SqlParameter("@OperatorID", oprId); var QtyMov = new SqlParameter("@QtyMov", qtyMov); var callResult = await dbCtx .Database .ExecuteSqlRawAsync("exec stp_ItemStockMove_New @StockID, @LocationID_FROM, @LocationID_TO, @OperatorID, @QtyMov", StockId, LocationIdFrom, LocationIdTo, OprId, QtyMov); answ = true; } return answ; } /// /// Lista Tipi Movimenti /// /// public List MovTypeGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetMovType .OrderBy(x => x.Descr) .ToList(); } return dbResult; } //} /// /// Aggiungi Operatore /// /// public async Task OperatorAddNew(OperatorModel editRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetOperator .Where(x => x.CodExt == editRec.CodExt) .FirstOrDefault(); if (currRec != null) { fatto = false; } else { localDbCtx .DbSetOperator .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante OperatorMod{Environment.NewLine}{exc}"); } } return fatto; } ///// ///// Modifica Famiglie Articoli ///// ///// //public List ItemFamilyMod() //{ // List dbResult = new List(); // using (StockManContext localDbCtx = new StockManContext(_configuration)) // { // dbResult = localDbCtx // .DbSetItemFamily // .OrderBy(x => x.Descr) // .ToList(); // } // return dbResult; /// /// Modifica Operatore /// /// public async Task OperatorMod(OperatorModel editRec) { bool fatto = false; List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { try { var currRec = localDbCtx .DbSetOperator .Where(x => x.Id == editRec.Id) .FirstOrDefault(); if (currRec != null) { currRec.CodExt = editRec.CodExt; currRec.LastName = editRec.LastName; currRec.FirstName = editRec.FirstName; } else { localDbCtx .DbSetOperator .Add(editRec); } await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante OperatorMod{Environment.NewLine}{exc}"); } } return fatto; } /// /// Lista Operatori /// /// public List OperatorsGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetOperator .OrderBy(x => x.LastName) .ThenBy(x => x.FirstName) .ToList(); } return dbResult; } /// /// Operatore cercato /// /// public OperatorModel OperatorsGetByCodExt(string codExt) { OperatorModel dbResult = new OperatorModel(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { var risultato = localDbCtx .DbSetOperator .Where(x => x.CodExt == codExt) .OrderBy(x => x.LastName) .ThenBy(x => x.FirstName) .FirstOrDefault(); if (risultato != null) { dbResult = risultato; } } return dbResult; } /// /// Lista Permessi /// /// public List PermessiGetAll() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetPermessi .OrderBy(x => x.GRUPPO) .ToList(); } return dbResult; } /// /// Lista Item Stock (raggruppati x location) /// /// public List StockStatus() { List dbResult = new List(); using (StockManContext localDbCtx = new StockManContext(_configuration)) { dbResult = localDbCtx .DbSetVLocationVal .Include(l => l.LocationNav) .ToList(); } return dbResult; } #endregion Public Methods #region Private Fields private static IConfiguration _configuration = null!; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }