using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using MP.Data.DbModels; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MP.Data.Controllers { public class MpInveController : IDisposable { #region Public Constructors public MpInveController(IConfiguration configuration) { _configuration = configuration; string connStr = _configuration.GetConnectionString("MP.Data"); options = new DbContextOptionsBuilder() .UseSqlServer(connStr) .Options; Log.Info("Avviata classe MpInveController"); } #endregion Public Constructors #region Public Methods public void Dispose() { _configuration = null; } #region gestione lotti esterni /// /// Elenco lotti esterni presenti sul db di ARCA /// /// Codice articolo /// Codice lotto /// Codice magazzino /// public List LottoEsterno(string codArt, string codLotto, string codMagazzino) { List dbResult = new List(); using (var dbCtx = new MoonPro_ISContext(_configuration)) { var DataGiac = new SqlParameter("@DataGiac", DBNull.Value); var CodArt = new SqlParameter("@CodArt", codArt); var CodLotto = new SqlParameter("@CodLotto", codLotto); var CodMagaz = new SqlParameter("@CodMagaz", codMagazzino); var OnlyTest = new SqlParameter("@OnlyTest", false); dbResult = dbCtx .DbLottoArca .FromSqlRaw("exec dbo.stp_GIAC_getByDate @DataGiac,@CodArt,@CodLotto,@CodMagaz,@OnlyTest", DataGiac, CodArt, CodLotto, CodMagaz, OnlyTest) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } #endregion gestione lotti esterni #region gestione articoli /// /// articolo MAG corrispondente all' articolo selezionato /// /// /// public AnagArticoli_MAG artBySearch(string artSearch) { AnagArticoli_MAG dbResult = new AnagArticoli_MAG(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbArtMag .AsNoTracking() .Where(x => x.CodArt == artSearch) .FirstOrDefault(); } return dbResult; } #endregion gestione articoli private DbContextOptions options; #region gestione config /// /// Elenco da tabella Config /// /// public List ConfigGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetConfig .AsNoTracking() .OrderBy(x => x.Chiave) .ToList(); } return dbResult; } #endregion gestione config #region gestione scansioni /// /// Elenco Scansioni Totali /// /// public List ScanList() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbScanData .AsNoTracking() .OrderByDescending(x => x.DtScan) .ToList(); } return dbResult; } /// /// Elenco Scansioni Totali /// /// /// /// public ScanDataModel ScanByUdcSession(string Udc, int InveSessId) { ScanDataModel dbResult = new ScanDataModel(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { if (InveSessId != 0) { dbResult = dbCtx .DbScanData .Where(x => (x.ScanValue == Udc) && (x.InveSessID == InveSessId)) .AsNoTracking() .OrderByDescending(x => x.DtScan) .FirstOrDefault(); } else { dbResult = dbCtx .DbScanData .Where(x => (x.ScanValue == Udc)) .AsNoTracking() .OrderByDescending(x => x.DtScan) .FirstOrDefault(); } } return dbResult; } /// /// Elenco Scansioni dato lotto e sessione /// /// /// /// public List ScanByLottoSession(string Lotto, int InveSessId) { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { if (InveSessId != 0) { dbResult = dbCtx .DbScanData .Where(x => (x.Lotto == Lotto) && (x.InveSessID == InveSessId)) .AsNoTracking() .OrderByDescending(x => x.DtScan) .ToList(); } else { dbResult = dbCtx .DbScanData .Where(x => (x.Lotto == Lotto)) .AsNoTracking() .OrderByDescending(x => x.DtScan) .ToList(); } } return dbResult; } /// /// Elenco Scansioni per valore, operatore e sessione /// /// public List ScanByValueSessionOpr(string scanData, int InveSessId, string idOpr) { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbScanData .Where(x => (x.ScanValue == scanData) && (x.InveSessID == InveSessId) && (x.UserScan == idOpr)) .AsNoTracking() .OrderByDescending(x => x.DtScan) .ToList(); } return dbResult; } /// /// Export dei dati data la sessione /// /// /// public List ExportSessionDetail(int sessionID) { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbExpSessione .Where(x => (x.InveSessId == sessionID)) .AsNoTracking() .OrderBy(x => x.DtScan) .ToList(); } return dbResult; } /// /// Elenco Scansioni dato Id sessione inventario /// /// /// public async Task updateScan(ScanDataModel editRec) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { var currRec = dbCtx .DbScanData .Where(x => x.ScanID == editRec.ScanID) .FirstOrDefault(); if (currRec != null) { currRec.ScanID = editRec.ScanID; currRec.CodArticolo = editRec.CodArticolo; currRec.DtScan = editRec.DtScan; currRec.UserScan = editRec.UserScan; currRec.ScanValue = editRec.ScanValue; currRec.IsForced = editRec.IsForced; currRec.Lotto = editRec.Lotto; currRec.RifExt = editRec.RifExt; currRec.Qty = editRec.Qty; currRec.Note = editRec.Note; currRec.IsKnown = editRec.IsKnown; currRec.IsUnique = editRec.IsUnique; currRec.InveSessID = editRec.InveSessID; dbCtx.Entry(currRec).State = EntityState.Modified; } else { dbCtx .DbScanData .Add(editRec); } await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ScanBySession{Environment.NewLine}{exc}"); } } return fatto; } /// /// Inserisco nuova scansione /// /// /// /// /// insert di un record sessione /// /// public async Task InsertNewScansione(ScanDataModel newRec) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbScanData .Add(newRec); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante InsertNewScansione{Environment.NewLine}{exc}"); } } return fatto; } /// /// delete scansione /// /// public async Task deleteScansione(ScanDataModel record) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbScanData .Remove(record); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante deleteScansione{Environment.NewLine}{exc}"); } } return fatto; } #endregion gestione scansioni #region gestione operatori /// /// Elenco operatori /// /// /// /// /// /// public List ElencoOperatori() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbOperatori .Where(s => s.MatrOpr > 0) .AsNoTracking() .OrderBy(x => x.MatrOpr) .ToList(); } return dbResult; } /// /// login operatori /// /// /// /// /// /// public bool LoginOperatore(int matrOpr, string authKey) { List dbResult = new List(); bool answ = false; using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbOperatori .Where(s => (s.MatrOpr > 0) && (s.MatrOpr == matrOpr) && (s.authKey == authKey)) .AsNoTracking() .ToList(); if (dbResult.Count == 1) { answ = true; } } return answ; } #endregion gestione operatori #region gestione magazzini /// /// Elenco Magazzini /// /// public List MagazziniList() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbAnagMag .AsNoTracking() .OrderBy(x => x.MagID) .ToList(); } return dbResult; } /// /// insert di un record magazzino /// /// public async Task InsertNewMag(AnagMagModel newRec) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbAnagMag .Add(newRec); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante InsertNewMag{Environment.NewLine}{exc}"); } } return fatto; } /// /// modifica di un record magazzino /// /// public async Task UpdateMag(AnagMagModel magRec) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { var dbResult = dbCtx .DbAnagMag .AsNoTracking() .Where(x => x.MagID == magRec.MagID) .FirstOrDefault(); if (dbResult != null) { if (dbResult.DescMag != magRec.DescMag) { dbResult.DescMag = magRec.DescMag.ToUpper(); dbCtx.Entry(dbResult).State = EntityState.Modified; } } await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante UpdateMag{Environment.NewLine}{exc}"); } } return fatto; } /// /// delete magazzino /// /// public async Task DeleteMag(AnagMagModel record) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbAnagMag .Remove(record); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante deleteMag{Environment.NewLine}{exc}"); } } return fatto; } #endregion gestione magazzini #region gestione UDC /// /// elenco Udc /// /// public List ElencoUdc() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbUdcData .Include(m => m.lottoNav) .AsNoTracking() .OrderByDescending(x => x.UDC) .ToList(); } return dbResult; } /// /// check Udc /// /// /// public AnagUdcModel IsUDC(string Udc) { AnagUdcModel dbResult = new AnagUdcModel(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbUdcData .Where(x => x.UDC == Udc) .Include(m => m.lottoNav) .AsNoTracking() .OrderByDescending(x => x.UDC) .FirstOrDefault(); ; } return dbResult; } #endregion gestione UDC #region gestione lotti interni /// /// elenco lotti /// /// public List ElencoLotti() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbLottoData .AsNoTracking() .OrderByDescending(x => x.Lotto) .ToList(); } return dbResult; } /// /// check lotto /// /// /// public AnagLottoModel LottoInterno(string lotto) { AnagLottoModel dbResult = new AnagLottoModel(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbLottoData .Where(x => x.Lotto == lotto) .AsNoTracking() .OrderByDescending(x => x.Lotto) .FirstOrDefault(); } return dbResult; } #endregion gestione lotti interni #region gestione sessione /// /// delete sessione /// /// public async Task deleteSessione(InventorySessionModel record) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbInveSess .Remove(record); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante deleteSessione{Environment.NewLine}{exc}"); } } return fatto; } /// /// insert di un record sessione /// /// public async Task InsertNewSessione(InventorySessionModel newRec) { bool fatto = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { try { dbCtx .DbInveSess .Add(newRec); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante InsertNewSessione{Environment.NewLine}{exc}"); } } return fatto; } /// /// Elenco Inventari Filtrati per id /// /// public InventorySessionModel InventSessByID(int sessID) { InventorySessionModel dbResult = new InventorySessionModel(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbInveSess .Where(x => x.InveSessID == sessID) .Include(m => m.AnagMagNav) .AsNoTracking() .OrderByDescending(x => x.DtStart) .FirstOrDefault(); } return dbResult; } /// /// Elenco Inventari tipo Azienda (TUTTI, chiusi e paerti) filtrati x data /// /// /// /// public List InventSessHistList() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbInveSess .Where(x => x.Transferred) .Include(m => m.AnagMagNav) .AsNoTracking() .OrderByDescending(x => x.DtStart) .ToList(); } return dbResult; } /// /// Elenco Inventari CORRENTI (=aperti, senza data fine) /// /// public List InventSessCurrList() { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { dbResult = dbCtx .DbInveSess .Where(x => (x.DtEnd == null) || !(x.Transferred)) .Include(m => m.AnagMagNav) .AsNoTracking() .OrderByDescending(x => x.DtStart) .ToList(); } return dbResult; } /// /// Chiusura/apertura sessione /// /// /// /// public async Task CloseOpenSessione(int sessID, bool flgClose) { bool answ = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { var SessID = new SqlParameter("@InveSessID", sessID); var FlgClose = new SqlParameter("@FlgClose", flgClose); var callResulr = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_INV_CloseOpen @InveSessID, @FlgClose", SessID, FlgClose); answ = true; } return answ; } /// /// Trasferimento /// /// /// public async Task TransferSessione(int sessID) { bool answ = false; using (var dbCtx = new MoonPro_InveContext(_configuration)) { var SessID = new SqlParameter("@InveSessID", sessID); var callResulr = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_INV_InveSess_Transfer @InveSessID", SessID); answ = true; } return answ; } #endregion gestione sessione #region gestione totale lotti /// /// Elenco Totale lotti x sessione /// /// /// public List InveSessTotLotList(int sessID) { List dbResult = new List(); using (var dbCtx = new MoonPro_InveContext(_configuration)) { var SessID = new SqlParameter("@sessId", sessID); dbResult = dbCtx .DbTotLotti .FromSqlRaw("exec dbo.stp_INVE_TotLotBySess @sessId", SessID) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } #endregion gestione totale lotti #endregion Public Methods #region Private Fields private static IConfiguration _configuration; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }