using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using MP.Core.Objects; using MP.Data.DbModels; using NLog; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; using static MP.Core.Objects.Enums; namespace MP.Data.Controllers { public class MpTabController : IDisposable { #region Public Constructors public MpTabController(IConfiguration configuration) { _configuration = configuration; string connStr = _configuration.GetConnectionString("MP.Data"); options = new DbContextOptionsBuilder() .UseSqlServer(connStr) .Options; Log.Info("Avviato MpTabController"); } #endregion Public Constructors #region Public Methods /// /// Insert record allarme /// /// Data evento /// Id macchina /// area memoria /// indice memoria /// valore status /// valore decodificato /// public bool AlarmLogInsert(DateTime dtRif, string machineId, string memAddress, int memIndex, int statusVal, string valDecoded) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var DtRif = new SqlParameter("@DtRif", dtRif); var MachineId = new SqlParameter("@MachineId", machineId); var MemAddress = new SqlParameter("@MemAddress", memAddress); var MemIndex = new SqlParameter("@MemIndex", memIndex); var StatusVal = new SqlParameter("@StatusVal", statusVal); var ValDecoded = new SqlParameter("@ValDecoded", valDecoded); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_AL_insertQuery @DtRif, @MachineId, @MemAddress, @MemIndex, @StatusVal, @ValDecoded, ", DtRif, MachineId, MemAddress, MemIndex, StatusVal, ValDecoded); fatto = result != 0; } return fatto; } /// /// Elenco allarmi macchina /// /// Macchina /// Inizio periodo /// Fine periodo /// /// public List AlarmLogListFilt(string idxMacchina, DateTime dtFrom, DateTime dtTo, bool showMulti) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var DtFrom = new SqlParameter("@dtFrom", dtFrom); var DtTo = new SqlParameter("@dtTo", dtTo); var ShowMulti = new SqlParameter("@showMulti", showMulti); dbResult = dbCtx .DbSetAlarmLog .FromSqlRaw("EXEC stp_AL_getFilt @IdxMacchina, @dtFrom, @DtTo, @showMulti", IdxMacc, DtFrom, DtTo, ShowMulti) .AsNoTracking() .ToList(); } return dbResult; } /// /// Registrato ACK allarme /// /// Id Allarme /// Data Ack /// User Ack /// public bool AlarmLogSetAck(int alarmLogId, DateTime dtAck, string userAck) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var AlarmLogId = new SqlParameter("@MachineId", alarmLogId); var DtAck = new SqlParameter("@DtRif", dtAck); var UserAck = new SqlParameter("@MemAddress", userAck); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_AL_setAck @MachineId, @DtRif, @MemAddress", AlarmLogId, DtAck, UserAck); fatto = result != 0; } return fatto; } /// /// Registrato invio notifica allarme /// /// Id Allarme /// Data notifica /// public bool AlarmLogSetNotify(int alarmLogId, DateTime dtNotify) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var AlarmLogId = new SqlParameter("@MachineId", alarmLogId); var DtNotify = new SqlParameter("@DtNotify", dtNotify); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_AL_setNotify @MachineId, @DtNotify", AlarmLogId, DtNotify); fatto = result != 0; } return fatto; } /// /// Restituisce l'anagrafica EVENTI per intero /// /// public List AnagEventiGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetAnagEventi .AsNoTracking() .ToList(); } return dbResult; } /// /// Restituisce l'anagrafica EVENTI per macchina /// /// public List AnagEventiGetByMacc(string IdxMac) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacch = new SqlParameter("@idxMacchina", IdxMac); dbResult = dbCtx .DbSetVSEB .FromSqlRaw("exec dbo.stp_vseb_getByIdxMacchinaFull @idxMacchina", IdxMacch) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Restituisce l'anagrafica STATI per intero /// /// public List AnagStatiGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetAnagStati .AsNoTracking() .ToList(); } return dbResult; } /// /// Restituisce l'anagrafica EVENTI per intero /// /// public List AnagTagsOrd() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetAnagTags .FromSqlRaw("exec dbo.stp_AT_getOrd") .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Restitusice elenco articoli dato tipo (es KIT) /// /// /// /// /// public List ArticoliGetByTipo(string tipo, string azienda = "*") { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetArticoli .AsNoTracking() .Where(x => x.Tipo.ToUpper() == tipo.ToUpper() && (azienda == "*" || x.Azienda.ToUpper() == azienda.ToUpper())) .OrderBy(x => x.CodArticolo) .ToList(); } return dbResult; } /// /// Verifica se sia necessario inserire un cambio di stato impianto in modalità batch /// /// /// /// /// /// /// /// /// public void CheckCambiaStatoBatch(tipoInputEvento tipoInput, string IdxMacchina, DateTime InizioStato, int IdxTipo, string CodArt, string Value, int MatrOpr, string pallet) { List tabTransStati = new List(); TransizioneStatiModel rigaTransStati = new TransizioneStatiModel(); switch (tipoInput) { case tipoInputEvento.barcode: // effettuo cambio stato INDIPENDENTEMENTE da stato precedente try { tabTransStati = SMES_getUserForced(IdxMacchina, IdxTipo); if (tabTransStati != null) { if (tabTransStati.Count > 0) { rigaTransStati = tabTransStati.FirstOrDefault(); // solo se cambia stato... if (rigaTransStati.IdxStato != rigaTransStati.next_IdxStato) { DDB_InsStatoBatch(IdxMacchina, InizioStato, rigaTransStati.next_IdxStato, CodArt, Value, MatrOpr, pallet); // aggiorno MSE RicalcMse(IdxMacchina, 0); } } else { Log.Debug($"Non trovata riga per: BARCODE | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}"); } } } catch (Exception exc) { // non dovrebbe succedere... input utente da barcode dovrebbero TUTTI essere // inseriti in tab transizione con famiglia 1... Log.Error($"Eccezione controllo transizione stato x evento barcode: BARCODE | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}{Environment.NewLine}{exc}"); } break; case tipoInputEvento.hw: // verifico se ci sia necessità di cambio stato try { tabTransStati = SMES_getHwTransitions(IdxMacchina, IdxTipo); if (tabTransStati != null) { if (tabTransStati.Count > 0) { //rigaTransStati = tabTransStati[0]; rigaTransStati = tabTransStati.FirstOrDefault(); if (rigaTransStati != null) { // solo se cambia stato... if (rigaTransStati.IdxStato != rigaTransStati.next_IdxStato) { DDB_InsStatoBatch(IdxMacchina, InizioStato, rigaTransStati.next_IdxStato, CodArt, Value, MatrOpr, pallet); } } } else { Log.Debug($"Non trovata riga per: HW | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}"); } } } catch (Exception exc) { // non trovo riga [0]... NON scrivo! Log.Error($"Errore controllo transizione stato x evento barcode: HW | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}{Environment.NewLine}{exc}"); } break; } } /// /// Recupera elenco ultimi commenti x macchina /// /// Idx macchina, "*" = tutte /// Num massimo di record da recuperare /// public List CommentiGetLastByMacc(string idxMacchina, int numDays) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var NumDays = new SqlParameter("@NumDays", numDays); dbResult = dbCtx .DbSetCommenti .FromSqlRaw("exec dbo.stp_Comm_getLastByMacchinaDays @IdxMacchina, @numDays", IdxMacchina, NumDays) .AsNoTracking() //.AsEnumerable() .ToList(); } return dbResult; } /// /// Effettua conferma prod macchina dell'intero periodo da confermare (ultima conferma /// --> dtEvent) /// /// idx macchina da confermare /// 0=periodo, 1 = giorno, 2 = turno /// qta pezzi BUONI da confermare /// qta pezzi SCARTO da confermare /// DataOra in cui registrare approvazione /// Matricola operatore /// public bool ConfermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzScarto, DateTime DataOraApp, int MatrOpr) { bool answ = false; try { var rigaProd = StatoProdMacchina(idxMacchina, DateTime.Now); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina); var MatrApp = new SqlParameter("@MatrApp ", MatrOpr); var DataFrom = new SqlParameter("@dataFrom ", rigaProd.DataFrom); var DataTo = new SqlParameter("@dataTo", DataOraApp); var PezziConf = new SqlParameter("@pezziConf", numPzConfermati); var PezziScar = new SqlParameter("@pezziScar", numPzScarto); var TipoConf = new SqlParameter("@TipoConf", modoConfProd); var DtOraApp = new SqlParameter("@DataOraApp", DataOraApp); var TestConferma = new SqlParameter("@TestConferma", true); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ConfermaProduzCompleta @idxMacchina, @MatrApp, @dataFrom, @dataTo, @pezziConf, @pezziScar, @TipoConf, @DataOraApp, @TestConferma ", IdxMacchina, MatrApp, DataFrom, DataTo, PezziConf, PezziScar, TipoConf, DtOraApp, TestConferma); // indico eseguito! answ = result > 0; } } catch (Exception exc) { Log.Error($"Eccezione in ConfermaProdMacchina:{Environment.NewLine}{exc}"); } return answ; } /// /// Effettua conferma prod macchina dell'intero periodo da confermare (ultima conferma /// --> dtEvent) /// /// idx macchina da confermare /// 0=periodo, 1 = giorno, 2 = turno /// qta pezzi BUONI da confermare /// /// qta pezzi LASCIATI alla macchina da confermare (2 eventi 121 rettifica neg/pos) /// /// qta pezzi SCARTO da confermare /// DataOra in cui registrare approvazione /// Matricola operatore /// public bool ConfermaProdMacchinaFull(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzLasciati, int numPzScarto, DateTime DataOraApp, int MatrOpr) { bool answ = false; try { var rigaProd = StatoProdMacchina(idxMacchina, DateTime.Now); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina); var MatrApp = new SqlParameter("@MatrApp ", MatrOpr); var DataFrom = new SqlParameter("@dataFrom ", rigaProd.DataFrom); var DataTo = new SqlParameter("@dataTo", DataOraApp); var PezziConf = new SqlParameter("@pezziConf", numPzConfermati); var PezziLasc = new SqlParameter("@pezziLasciati", numPzLasciati); var PezziScar = new SqlParameter("@pezziScar", numPzScarto); var TipoConf = new SqlParameter("@TipoConf", modoConfProd); var DtOraApp = new SqlParameter("@DataOraApp", DataOraApp); var TestConferma = new SqlParameter("@TestConferma", true); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ConfermaProduzCompletaFull @idxMacchina, @MatrApp, @dataFrom, @dataTo, @pezziConf, @pezziLasciati, @pezziScar, @TipoConf, @DataOraApp, @TestConferma ", IdxMacchina, MatrApp, DataFrom, DataTo, PezziConf, PezziLasc, PezziScar, TipoConf, DtOraApp, TestConferma); // indico eseguito! answ = result > 0; } } catch (Exception exc) { Log.Error($"Eccezione in ConfermaProdMacchinaFull con rett ev121:{Environment.NewLine}{exc}"); } return answ; } /// /// 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; } /// /// Inserimento record in DDB /// /// /// /// /// /// /// /// public bool DDB_DoRecalc(string idxMacchina, DateTime inizio, int idxStatoStart, int nStepEventi, int nRecCheck, bool checkOnly) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var Inizio = new SqlParameter("@inizio", inizio); var IdxStatoStart = new SqlParameter("@idxStatoStart", idxStatoStart); var NStepEventi = new SqlParameter("@nStepEventi", nStepEventi); var NRecCheck = new SqlParameter("@nRecCheck", nRecCheck); var CheckOnly = new SqlParameter("@CheckOnly", checkOnly); var result = dbCtx .Database .ExecuteSqlRaw("exec man.stp_ricalcolaDatiMacchinaFromDateFork @IdxMacchina, @inizio, @idxStatoStart, @nStepEventi, @nRecCheck, @CheckOnly", IdxMacchina, Inizio, IdxStatoStart, NStepEventi, NRecCheck, CheckOnly); // indico eseguito! fatto = result != 0; } return fatto; } /// /// Recupera record successivo da DDB /// /// /// /// public DiarioDiBordoModel DDB_getNext(string idxMacchina, DateTime inizioStato) { DiarioDiBordoModel dbResult = new DiarioDiBordoModel(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var DataRif = new SqlParameter("@dataRif", inizioStato); dbResult = dbCtx .DbSetDDB .FromSqlRaw("exec dbo.stp_DDB_getNextByMacchinaFrom @IdxMacchina, @dataRif", IdxMacchina, DataRif) .AsNoTracking() .AsEnumerable() .FirstOrDefault(); } return dbResult; } /// /// Inserimento record in DDB /// /// /// /// /// /// /// /// /// public bool DDB_InsStatoBatch(string idxMacchina, DateTime inizioStato, int idxStato, string codArt, string value, int matrOpr, string pallet) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var InizioStato = new SqlParameter("@InizioStato", inizioStato); var IdxStato = new SqlParameter("@IdxStato", idxStato); var CodArticolo = new SqlParameter("@CodArticolo", codArt); var Value = new SqlParameter("@Value", value); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var Pallet = new SqlParameter("@pallet", pallet); var result = dbCtx .Database .ExecuteSqlRaw("exec dbo.stp_DDB_InsStatoBatch @IdxMacchina, @InizioStato, @IdxStato, @CodArticolo, @Value, @MatrOpr, @pallet", IdxMacchina, InizioStato, IdxStato, CodArticolo, Value, MatrOpr, Pallet); // indico eseguito! fatto = result > 0; } return fatto; } public void Dispose() { _configuration = null; } /// /// Restituisce elenco RC filtrato /// /// /// /// /// public List ElencoConfProdFilt(string idxMacchina, DateTime dataFrom, DateTime dataTo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetElConfProd .Where(x => x.IdxMacchina == idxMacchina && (dataFrom <= x.DataOraConf && x.DataOraConf <= dataTo)) .AsNoTracking() .ToList(); } return dbResult; } /// /// Fix ODL per Elenco Lotti /// /// /// /// public bool ElencoLottiUpsertByOdl(int idxOdl, bool flgStorico) { bool fatto = false; using (var dbCtx = new MoonPro_MagContext(_configuration)) { try { var IdxOdl = new SqlParameter("@IdxOdl", idxOdl); var FlgStorico = new SqlParameter("@flgStorico", flgStorico); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_EL_UpsertByOdl @IdxODL, @flgStorico", IdxOdl, FlgStorico); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante ElLottiUpsertByOdl{Environment.NewLine}{exc}"); } } return fatto; } /// /// 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; } /// /// Eliminazione record EventList (SE trovato) /// /// /// /// /// public bool EvListDelete(string idxMacchina, DateTime dtEvento, int idxTipo) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var InizioStato = new SqlParameter("@InizioStato", dtEvento); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); try { var result = dbCtx .Database .ExecuteSqlRaw("exec dbo.stp_EL_Delete @IdxMacchina, @InizioStato, @IdxTipo", IdxMacchina, InizioStato, IdxTipo); // indico eseguito! fatto = result > 0; } catch (Exception exc) { string logMsg = $"Eccezione in stp_EL_Delete | macchina: {idxMacchina} | DataEv: {dtEvento} | idxTipo: {idxTipo}{Environment.NewLine}{exc}"; Log.Error(logMsg); } } return fatto; } /// /// Recupera record EventList date condizioni filtro /// /// Idx macchina, "*" = tutte /// Data limite per recupero antecedenti /// Tipo evento cercato, 0 = tutti /// Num massimo di record da recuperare /// public async Task> EvListGetLastBySearch(string idxMacchina, DateTime dtLimit, int idxTipo, int maxRec) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = await dbCtx .DbSetEvList .Where(x => (idxMacchina == "*" || x.IdxMacchina == idxMacchina) && (x.InizioStato <= dtLimit) && (idxTipo == 0 || x.IdxTipo == idxTipo)) .OrderByDescending(x => x.InizioStato) .Take(maxRec) .ToListAsync(); } return dbResult; } /// /// Aggiunta record EventList /// /// /// public async Task EvListInsert(EventListModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var currRec = dbCtx .DbSetEvList .Add(newRec); await dbCtx.SaveChangesAsync(); } catch (Exception exc) { Log.Error($"Eccezione durante EvListInsert{Environment.NewLine}{exc}"); } } await Task.Delay(1); return fatto; } /// /// Recupera elenco fermi non qualificati da filtro /// /// Idx macchina, "*" = tutte /// Num massimo di giorni antecedenti /// Durata minima (in minuti) /// public List FermiNonQualificatiFilt(string idxMacchina, int gg, double durataMin) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var GG = new SqlParameter("@gg", gg); var DurataMin = new SqlParameter("@durataMin", durataMin); dbResult = dbCtx .DbSetFNQ .FromSqlRaw("exec dbo.stp_FNQ_getFilt @IdxMacchina, @gg, @durataMin", IdxMacchina, GG, DurataMin) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Elimina record /// /// public bool InsManDelete(InsManualiModel currRecord) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var actRec = dbCtx .DbSetInsManuali .Where(x => currRecord.IdxInsMan > 0 && x.IdxInsMan == currRecord.IdxInsMan) .FirstOrDefault(); // se ci fosse aggiorno... if (actRec != null) { dbCtx .DbSetInsManuali .Remove(actRec); } var res = dbCtx.SaveChanges(); fatto = res != 0; } return fatto; } /// /// Elenco insert manuali dato /// /// /// /// /// public List InsManFilt(string IdxMacc, DateTime dtStart, DateTime dtEnd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetInsManuali .Where(x => x.IdxMacchina == IdxMacc && x.InizioStato >= dtStart && x.InizioStato <= dtEnd) .AsNoTracking() .ToList(); } return dbResult; } /// /// Congela la giornata di ins manuali richeista /// /// /// /// public async Task InsManFreezeDay(string idxMacchina, DateTime dtCurr) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var DataElab = new SqlParameter("@pDataOra", dtCurr); var dbResult = await dbCtx .Database .ExecuteSqlRawAsync("EXEC stp_IM_ElaboraInsManuali @IdxMacchina, @pDataOra", IdxMacc, DataElab); fatto = dbResult > 0; } return fatto; } /// /// Esegue upsert record /// /// public bool InsManUpsert(InsManualiModel currRecord) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var actRec = dbCtx .DbSetInsManuali .Where(x => currRecord.IdxInsMan > 0 && x.IdxInsMan == currRecord.IdxInsMan) .FirstOrDefault(); // se ci fosse aggiorno... if (actRec == null) { dbCtx .DbSetInsManuali .Add(currRecord); } else { actRec.CodArticolo = currRecord.CodArticolo; actRec.FineStato = currRecord.FineStato; actRec.IdxMacchina = currRecord.IdxMacchina; actRec.IdxTipoEv = currRecord.IdxTipoEv; actRec.Imported = currRecord.Imported; actRec.InizioStato = currRecord.InizioStato; actRec.KeyRichiesta = currRecord.KeyRichiesta; actRec.MatrOpr = currRecord.MatrOpr; actRec.MinProd = currRecord.MinProd; actRec.PzBuoni = currRecord.PzBuoni; actRec.TCiclo = currRecord.TCiclo; dbCtx.Entry(actRec).State = EntityState.Modified; } var res = dbCtx.SaveChanges(); fatto = res != 0; } return fatto; } /// /// Esegue salvataggio lista records + svuotamento cache /// /// public bool InsManUpsert(List listRecord) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { foreach (var currRecord in listRecord) { var actRec = dbCtx .DbSetInsManuali .Where(x => currRecord.IdxInsMan > 0 && x.IdxInsMan == currRecord.IdxInsMan) .FirstOrDefault(); // se ci fosse aggiorno... if (actRec == null) { dbCtx .DbSetInsManuali .Add(currRecord); } else { actRec.CodArticolo = currRecord.CodArticolo; actRec.FineStato = currRecord.FineStato; actRec.IdxMacchina = currRecord.IdxMacchina; actRec.IdxTipoEv = currRecord.IdxTipoEv; actRec.Imported = currRecord.Imported; actRec.InizioStato = currRecord.InizioStato; actRec.KeyRichiesta = currRecord.KeyRichiesta; actRec.MatrOpr = currRecord.MatrOpr; actRec.MinProd = currRecord.MinProd; actRec.PzBuoni = currRecord.PzBuoni; actRec.TCiclo = currRecord.TCiclo; dbCtx.Entry(actRec).State = EntityState.Modified; } } var res = dbCtx.SaveChanges(); fatto = res != 0; } return fatto; } /// /// Elenco PODL in un istanza KIT dall'ID del parent /// /// IDX PODL parent /// public List ListPODL_ByKitParent(int IdxPodlParent) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var pIdxPodlParent = new SqlParameter("@IdxPodlParent", IdxPodlParent); dbResult = dbCtx .DbSetPODLExp .FromSqlRaw("EXEC stp_PODL_getByParentKitIdx @IdxPodlParent", pIdxPodlParent) .AsNoTracking() .ToList(); } return dbResult; } /// /// Elenco PODL macchina /// /// Macchina /// Solo disponibili (1) o tutte (0) /// Gruppo /// public List ListPODLByMacc(string idxMacchina, bool onlyFree, bool onlyDirect) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var OnlyFree = new SqlParameter("@onlyFree", onlyFree); var OnlyDirect = new SqlParameter("@onlyDirect", onlyDirect); dbResult = dbCtx .DbSetPODLExp .FromSqlRaw("EXEC stp_PODL_getByIdxMacc @IdxMacchina, @onlyFree, @onlyDirect", IdxMacc, OnlyFree, OnlyDirect) .AsNoTracking() .ToList(); } return dbResult; } /// /// Elenco valori ammessi x tabella/colonna /// /// /// /// public List ListValuesFilt(string tabName, string fieldName) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetListValues .Where(x => x.TableName == tabName && x.FieldName == fieldName) .AsNoTracking() .OrderBy(x => x.ordinal) .ToList(); } return dbResult; } /// /// Imposto abilitazione insert eventi macchina (x fermare/avviare dati da IOB) /// /// Idx macchina, "*" = tutte /// Abilitazione insert ev macchina /// public bool MacchinaSetInsEnab(string idxMacchina, bool insEnabled) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina); var InsEnabled = new SqlParameter("@insEnabled", insEnabled); var result = dbCtx .Database .ExecuteSqlRaw("exec dbo.stp_STM_setInsEnabled @idxMacchina, @insEnabled", IdxMacchina, InsEnabled); // indico eseguito! fatto = result > 0; } return fatto; } /// /// Intera tabella relazione master/slave in machine (gestione setup master --> slave) /// /// public List Macchine2Slave() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetM2S .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } /// /// Elenco Macchine dato operatore secondo gruppi (macchine/operatore) /// /// /// public List MacchineByMatrOper(int MatrOpr) { List dbResult = new List(); try { using (var dbCtx = new MoonProContext(options)) { if (MatrOpr == 0) { dbResult = dbCtx .DbSetMacchine .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } else { dbResult = dbCtx .DbSetGrp2Oper .Where(g => g.MatrOpr == MatrOpr) .Join(dbCtx.DbSetGrp2Macc, g => g.CodGruppo, m => m.CodGruppo, (g, m) => m ) .Distinct() .Join(dbCtx.DbSetMacchine, g => g.IdxMacchina, m => m.IdxMacchina, (g, m) => m ) .Distinct() .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } } } catch (Exception exc) { Log.Error($"Eccezione in MacchineByMatrOper{Environment.NewLine}{exc}"); } return dbResult; } /// /// MicroStato macchina (da key) /// /// /// public MicroStatoMacchinaModel MicroStatoMacchina(string idxMacchina) { MicroStatoMacchinaModel dbResult = new MicroStatoMacchinaModel(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetMicroStatoMacc .Where(x => x.IdxMacchina == idxMacchina) .AsNoTracking() .FirstOrDefault(); } return dbResult; } //stp_STM_setInsEnabled /// /// Stato macchina - tutte /// /// /// public List MicroStatoMacchinaGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetMicroStatoMacc .AsNoTracking() .ToList(); } return dbResult; } /// /// Aggiornamento record Microstato macchina /// /// /// public bool MicroStatoMacchinaUpsert(MicroStatoMacchinaModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var actRec = dbCtx .DbSetMicroStatoMacc .Where(x => x.IdxMacchina == newRec.IdxMacchina) .AsNoTracking() .FirstOrDefault(); if (actRec == null) { dbCtx .DbSetMicroStatoMacc .Add(newRec); } else { actRec.IdxMicroStato = newRec.IdxMicroStato; actRec.InizioStato = newRec.InizioStato; actRec.Value = newRec.Value; dbCtx.Entry(actRec).State = EntityState.Modified; } dbCtx.SaveChanges(); fatto = true; } return fatto; } /// /// Dati MSE x singola macchina SUB (tipicamente TAV) /// /// /// /// public List MseGetSub(string idxMacc, string idxMacchSub) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacc); var IdxMacchSub = new SqlParameter("@IdxMacchSub", idxMacchSub); dbResult = dbCtx .DbSetMSE .FromSqlRaw("EXEC stp_MSE_getByIdxMacchAndSub @IdxMacchina, @IdxMacchSub", IdxMacc, IdxMacchSub) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante MseGetSub{Environment.NewLine}{exc}"); } } return dbResult; } /// /// ODL da key /// /// /// /// public List OdlByIdx(int idxOdl, bool onlyUnused) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxOdl = new SqlParameter("@IdxOdl", idxOdl); var OnlyUnused = new SqlParameter("@onlyUnused", onlyUnused); dbResult = dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByIdx @IdxOdl, @onlyUnused", IdxOdl, OnlyUnused) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlByIdx{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Clear operazione setup ODL (annullamento) /// /// /// /// public bool OdlClearSetup(int idxODL, string idxMacchina) { bool answ = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxODL", idxODL); var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_clearSetup @IdxODL, @IdxMacchina", IdxODL, IdxMacchina); answ = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlClearSetup{Environment.NewLine}{exc}"); } } return answ; } /// /// ODL corrente macchina /// /// /// public List OdlCurrByMacc(string idxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlCurrByMaccAsync{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Attrezzo stesso ODL dell'altra tavola /// /// /// /// /// public bool OdlDividiDaAltraTavola(int idxODL, int matrOpr, string idxMacchinaTo) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxODL", idxODL); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMaccTo = new SqlParameter("@IdxMacchinaTo", idxMacchinaTo); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_dividiDaAltraTav @idxODL, @MatrOpr, @IdxMacchinaTo", IdxODL, MatrOpr, IdxMaccTo); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlDividiDaAltraTavola{Environment.NewLine}{exc}"); } } return fatto; } /// /// Registro fine prod ODL /// /// /// /// /// public bool OdlFineProd(int idxODL, string idxMacchina, DateTime dtRif) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@IdxODL", idxODL); var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var DataChiusura = new SqlParameter("@DataChiusura", dtRif); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_fineProd @IdxODL, @IdxMacchina, @DataChiusura", IdxODL, IdxMacc, DataChiusura); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlFineProd{Environment.NewLine}{exc}"); } } return fatto; } /// /// Fix ODL per macchine SLAVE /// /// /// /// /// public bool OdlFixMachineSlave(string idxMacchina, int numDayPrev, int doInsert) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var NumDayPrev = new SqlParameter("@NumDayPrev", numDayPrev); var DoInsert = new SqlParameter("@DoInsert", doInsert); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_fixMachineSlave @IdxMacchina, @NumDayPrev, @DoInsert", IdxMacc, NumDayPrev, DoInsert); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlFixMachineSlave{Environment.NewLine}{exc}"); } } return fatto; } /// /// Setup PODL Postumo /// /// /// /// /// /// /// /// public bool OdlInizioSetup(int idxODL, int matrOpr, string idxMacchina, decimal tcRich, int pzPallet, string note) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxPromessa", idxODL); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var TCRichAttr = new SqlParameter("@TCRichAttr", tcRich); var PzPallet = new SqlParameter("@PzPallet", pzPallet); var Note = new SqlParameter("@Note", note); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_inizioSetup @idxODL, @MatrOpr, @IdxMacchina, @TCRichAttr, @PzPallet, @Note", IdxODL, MatrOpr, IdxMacc, TCRichAttr, PzPallet, Note); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlInizioSetup{Environment.NewLine}{exc}"); } } return fatto; } /// /// Ultimo ODL data macchina /// /// /// public List OdlLastByMacc(string idxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetODL .FromSqlRaw("EXEC stp_ODL_getLastByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlLastByMacc{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Elenco ODL data macchina e periodo /// /// /// /// /// public List OdlListByMaccPeriodo(string idxMacchina, DateTime dtStart, DateTime dtEnd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var DataFrom = new SqlParameter("@dataFrom", dtStart); var DataTo = new SqlParameter("@dataTo", dtEnd); dbResult = dbCtx .DbSetODLExp .FromSqlRaw("EXEC stp_ODL_getByMacchinaPeriodo @IdxMacchina, @dataFrom, @dataTo", IdxMacchina, DataFrom, DataTo) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlListByMaccPeriodo{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Riapertura ULTIMO ODL data macchina /// /// /// public List OdlReopenOdlMacc(string idxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { try { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetODL .FromSqlRaw("EXEC stp_ODL_reopenOdlMacc @IdxMacchina", IdxMacchina) .AsNoTracking() .ToList(); } catch (Exception exc) { Log.Error($"Eccezione durante OdlReopenOdlMacc{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Setup ODL Postumo /// /// /// /// public bool OdlSetupPostumo(int idxODL, string idxMacchina) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxODL", idxODL); var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_insPostumo @idxODL, @IdxMacchina", IdxODL, IdxMacc); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlSetupPostumo{Environment.NewLine}{exc}"); } } return fatto; } /// /// Setup PODL Postumo /// /// /// /// /// public bool OdlSetupPromPostuma(int idxPromOdl, int matrOpr, string idxMacchina) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxPODL = new SqlParameter("@idxPromessa", idxPromOdl); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_inizioSetupPromessaPostuma @idxPromessa, @MatrOpr, @IdxMacchina", IdxPODL, MatrOpr, IdxMacc); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlSetupPromPostuma{Environment.NewLine}{exc}"); } } return fatto; } /// /// Split ODL /// /// /// /// /// /// /// /// /// /// public bool OdlSplit(int idxODL, int matrOpr, string idxMacchina, decimal TCRich, int pzPallet, string note, bool startNewOdl, int qtyRich) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxODL", idxODL); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var TCRichAttr = new SqlParameter("@TCRichAttr", TCRich); var PzPallet = new SqlParameter("@PzPallet", pzPallet); var Note = new SqlParameter("@Note", note); var StartNewOdl = new SqlParameter("@StartNewOdl", startNewOdl); var QtyRich = new SqlParameter("@QtyRich", qtyRich); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_split @idxODL, @MatrOpr, @IdxMacchina, @TCRichAttr, @PzPallet, @Note, @StartNewOdl, @QtyRich", IdxODL, MatrOpr, IdxMacc, TCRichAttr, PzPallet, Note, StartNewOdl, QtyRich); fatto = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlSplit{Environment.NewLine}{exc}"); } } return fatto; } /// /// Update ODL (es: in setup x chiusura attrezzaggio) /// /// /// /// /// /// /// public bool OdlUpdate(int idxODL, int matrOpr, decimal tCRichAttr, int pzPallet, string note) { bool answ = false; using (var dbCtx = new MoonProContext(options)) { try { var IdxODL = new SqlParameter("@idxODL", idxODL); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var TCRichAttr = new SqlParameter("@TCRichAttr", tCRichAttr); var PzPallet = new SqlParameter("@PzPallet", pzPallet); var Note = new SqlParameter("@Note", note); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_updateSetup @IdxODL, @MatrOpr, @TCRichAttr, @PzPallet, @Note", IdxODL, MatrOpr, TCRichAttr, PzPallet, Note); answ = result != 0; } catch (Exception exc) { Log.Error($"Eccezione durante OdlUpdate{Environment.NewLine}{exc}"); } } return answ; } /// /// login operatori /// /// /// /// /// /// /// /// public AnagOperatoriModel OperatoreSearch(int matrOpr, string authKey) { AnagOperatoriModel dbResult = null; AnagOperatoriModel answ = new AnagOperatoriModel(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbOperatori .Where(s => (s.MatrOpr > 0) && (s.MatrOpr == matrOpr) && (s.authKey == authKey)) .AsNoTracking() .FirstOrDefault(); if (dbResult != null) { answ = dbResult; } } return answ; } /// /// Stato prod macchina /// /// /// public List PezziProdMacchina(string idxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); try { dbResult = dbCtx .DbSetPzProd .FromSqlRaw("EXEC stp_PzProd_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .ToList(); } catch { } } return dbResult; } /// /// Avvio setup ODL da PODL /// /// /// /// /// /// /// /// public bool PODL_startSetup(PODLExpModel editRec, int matrOpr, decimal tcRich, int pzPallet, string note, DateTime dtEvent) { bool answ = false; PODLModel recPODL = new PODLModel() { IdxPromessa = editRec.IdxPromessa, KeyRichiesta = editRec.KeyRichiesta, KeyBCode = editRec.KeyBCode, IdxOdl = editRec.IdxOdl, CodArticolo = editRec.CodArticolo, CodGruppo = editRec.CodGruppo, IdxMacchina = editRec.IdxMacchina, NumPezzi = editRec.NumPezzi, Tcassegnato = editRec.Tcassegnato, DueDate = editRec.DueDate, Priorita = editRec.Priorita, PzPallet = editRec.PzPallet, Note = editRec.Note, CodCli = editRec.CodCli, InsertDate = editRec.InsertDate }; using (var dbCtx = new MoonProContext(options)) { try { var currRec = dbCtx .DbSetPODL .AsNoTracking() .Where(x => x.IdxPromessa == recPODL.IdxPromessa) .FirstOrDefault(); if (currRec != null) { // eseguo stored attrezzaggio var IdxPromessa = new SqlParameter("@idxPromessa", recPODL.IdxPromessa); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMacchina = new SqlParameter("@IdxMacchina", recPODL.IdxMacchina); var TCRichAttr = new SqlParameter("@TCRichAttr", tcRich); var PzPallet = new SqlParameter("@PzPallet", pzPallet); var Note = new SqlParameter("@Note", note); var DtEvento = new SqlParameter("@dtEvento", dtEvent); var FlagNoteAppend = new SqlParameter("@FlgNoteAppend", false); var callResult = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ODL_inizioSetupPromessa @idxPromessa, @MatrOpr, @IdxMacchina, @TCRichAttr, @PzPallet, @Note, @dtEvento, @FlgNoteAppend", IdxPromessa, MatrOpr, IdxMacchina, TCRichAttr, PzPallet, Note, DtEvento, FlagNoteAppend); answ = true; } } catch (Exception exc) { Log.Error($"Eccezione durante PODL_doSetup{Environment.NewLine}{exc}"); } } return answ; } /// /// Recupero PODL da chiave /// /// /// public PODLExpModel PODLExp_getByKey(int idxPODL) { PODLExpModel dbResult = new PODLExpModel(); using (var dbCtx = new MoonProContext(options)) { try { var IdxPromessa = new SqlParameter("@IdxPromessa", idxPODL); var rawResult = dbCtx .DbSetPODLExp .FromSqlRaw("EXEC stp_PODL_getByIdx @IdxPromessa", IdxPromessa) .AsNoTracking() .ToList(); if (rawResult != null && rawResult.Count > 0) { dbResult = rawResult.FirstOrDefault(); } } catch (Exception exc) { Log.Error($"Eccezione durante PODL_getByKey{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Recupero PODL da chiave /// /// /// public async Task PODLExp_getByKeyAsync(int idxPODL) { PODLExpModel dbResult = new PODLExpModel(); using (var dbCtx = new MoonProContext(options)) { try { var IdxPromessa = new SqlParameter("@IdxPromessa", idxPODL); var rawResult = await dbCtx .DbSetPODLExp .FromSqlRaw("EXEC stp_PODL_getByIdx @IdxPromessa", IdxPromessa) .AsNoTracking() .ToListAsync(); if (rawResult != null && rawResult.Count > 0) { dbResult = rawResult.FirstOrDefault(); } } catch (Exception exc) { Log.Error($"Eccezione durante PODLExp_getByKeyAsync{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Restituisce elenco RC filtrato /// /// /// /// /// /// public List RegControlliFilt(string idxMacchina, int idxODL, DateTime dataFrom, DateTime dataTo, bool showMulti) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var IdxODL = new SqlParameter("@IdxODL", idxODL); var DataFrom = new SqlParameter("@DataFrom", dataFrom); var DataTo = new SqlParameter("@DataTo", dataTo); var ShowMulti = new SqlParameter("@showMulti", showMulti); dbResult = dbCtx .DbSetRegControlli .FromSqlRaw("EXEC stp_RC_getByFilt @IdxMacchina, @IdxODL, @DataFrom, @DataTo, @ShowMulti", IdxMacc, IdxODL, DataFrom, DataTo, ShowMulti) .AsNoTracking() .ToList(); } return dbResult; } /// /// Registra controllo /// /// /// /// /// /// /// public bool RegControlliInsert(string idxMacchina, int matrOpr, bool esitoOk, string note, DateTime dataOra) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var EsitoOk = new SqlParameter("@EsitoOk", esitoOk); var Note = new SqlParameter("@Note", note); var DataOra = new SqlParameter("@DataOra", dataOra); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_RC_insert @IdxMacchina, @MatrOpr, @EsitoOk, @Note, @DataOra", IdxMacc, MatrOpr, EsitoOk, Note, DataOra); fatto = result != 0; } return fatto; } /// Restituisce elenco Ultimi RC macchina /// public List RegControlliLast(string idxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetRegControlli .FromSqlRaw("EXEC stp_RC_getLast @IdxMacchina", IdxMacc) .AsNoTracking() .ToList(); } return dbResult; } /// /// Aggiunta record RegistroScarti /// /// /// /// /// /// /// public List RegDichiarGetFilt(string idxMacchina, string tagCode, int matrOpr, int idxODL, DateTime dataFrom, DateTime dataTo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var TagCode = new SqlParameter("@TagCode", tagCode); var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxODL = new SqlParameter("@IdxODL", idxODL); var DtFrom = new SqlParameter("@DataFrom", dataFrom); var DtTo = new SqlParameter("@DataTo", dataTo); dbResult = dbCtx .DbSetRegDich .FromSqlRaw("EXEC stp_DD_getFilt @TagCode, @IdxMacchina, @MatrOpr, @IdxODL, @DataFrom, @DataTo", TagCode, IdxMacchina, MatrOpr, IdxODL, DtFrom, DtTo) .AsNoTracking() .ToList(); } return dbResult; } /// /// Aggiunta record Registro Dichiarazioni /// /// /// public async Task RegDichiarInsert(RegistroDichiarazioniModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var TagCode = new SqlParameter("@TagCode", newRec.TagCode); var IdxMacchina = new SqlParameter("@IdxMacchina", newRec.IdxMacchina); var DtRec = new SqlParameter("@DtRec", newRec.DtRec); var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr); var ValString = new SqlParameter("@ValString", newRec.ValString); var result = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_DD_insertQuery @TagCode, @IdxMacchina, @DtRec, @MatrOpr, @ValString", TagCode, IdxMacchina, DtRec, MatrOpr, ValString); // indico eseguito! fatto = result > 0; } return fatto; } /// /// Update record Registro Dichiarazioni /// /// /// public async Task RegDichiarUpdate(RegistroDichiarazioniModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var Original_IdxDich = new SqlParameter("@Original_IdxDich", newRec.IdxDich); var DtRec = new SqlParameter("@DtRec", newRec.DtRec); var TagCode = new SqlParameter("@TagCode", newRec.TagCode); var ValString = new SqlParameter("@ValString", newRec.ValString); var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr); var result = await dbCtx .Database .ExecuteSqlRawAsync("exec dbo.stp_DD_updateQuery @Original_IdxDich, @DtRec, @TagCode, @ValString, @MatrOpr", Original_IdxDich, DtRec, TagCode, ValString, MatrOpr); // indico eseguito! fatto = result > 0; } return fatto; } /// /// Aggiunta record RegistroScarti /// /// /// /// /// /// /// public List RegScartiGetFilt(string idxMacchina, int idxODL, DateTime dataFrom, DateTime dataTo, bool showMulti) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var IdxODL = new SqlParameter("@IdxODL", idxODL); var DataFrom = new SqlParameter("@DataFrom", dataFrom); var DataTo = new SqlParameter("@DataTo", dataTo); var ShowMulti = new SqlParameter("@showMulti", showMulti); dbResult = dbCtx .DbSetRegScarti .FromSqlRaw("EXEC .stp_RS_getByFilt @IdxMacchina, @IdxODL, @DataFrom, @DataTo, @ShowMulti", IdxMacc, IdxODL, DataFrom, DataTo, ShowMulti) .AsNoTracking() .ToList(); } return dbResult; } /// /// Aggiunta record RegistroScarti /// /// /// public bool RegScartiInsert(RegistroScartiModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@idxMacchina", newRec.IdxMacchina); var DataOra = new SqlParameter("@DataOra", newRec.DataOra); var Causale = new SqlParameter("@Causale", newRec.Causale); var Qta = new SqlParameter("@Qta", newRec.Qta); var Note = new SqlParameter("@Note", newRec.Note); var MatrOpr = new SqlParameter("@MatrOpr", newRec.MatrOpr); var result = dbCtx .DbSetRegWithCheck .FromSqlRaw("exec dbo.stp_RS_Insert_withCheck @idxMacchina, @DataOra, @Causale, @Qta, @Note, @MatrOpr", IdxMacchina, DataOra, Causale, Qta, Note, MatrOpr) .AsNoTracking() .ToList(); // indico eseguito! // -1 = restituisce una select fatto = result.Count > 0; } return fatto; } /// /// Elimina scarti KIT dato record parent (e lo resetta) /// /// /// public bool RegScartiKitDelete(RegistroScartiModel parentRec) { bool answ = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", parentRec.IdxMacchina); var DtRif = new SqlParameter("@DataOra", parentRec.DataOra); var Causale = new SqlParameter("@Causale", parentRec.Causale); var dbResult = dbCtx .Database .ExecuteSqlRaw("EXEC stp_RSK_Delete @IdxMacchina, @DataOra, @Causale", IdxMacc, DtRif, Causale); answ = dbResult != 0; } return answ; } /// /// Elenco scarti KIT dato record parent /// /// /// public List RegScartiKitGetFilt(RegistroScartiModel parentRec) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", parentRec.IdxMacchina); var DtRif = new SqlParameter("@DataRif", parentRec.DataOra); var Causale = new SqlParameter("@Causale", parentRec.Causale); dbResult = dbCtx .DbSetRegScartiKit .FromSqlRaw("EXEC stp_RSK_getByFilt @IdxMacchina, @DataRif, @Causale", IdxMacc, DtRif, Causale) .AsNoTracking() .ToList(); } return dbResult; } /// /// Aggiunta record RegistroScartiKit in tab RSK esplodendo x kit /// /// /// public async Task RegScartiKitSplit(RegistroScartiModel newRec) { await Task.Delay(1); bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@idxMacchina", newRec.IdxMacchina); var DataOra = new SqlParameter("@DataOra", newRec.DataOra); var Causale = new SqlParameter("@Causale", newRec.Causale); var CodArt = new SqlParameter("@CodArticolo", newRec.CodArticolo); var Qta = new SqlParameter("@QtyKit", newRec.Qta); var result = dbCtx .DbSetRegWithCheck .FromSqlRaw("exec dbo.stp_RSK_Split @idxMacchina, @DataOra, @Causale, @CodArticolo, @QtyKit", IdxMacchina, DataOra, Causale, CodArt, Qta) .AsNoTracking() .ToList(); // indico eseguito! fatto = result.Count != 0; } return fatto; } /// /// Aggiorna un record scarti KIT ( SE ESISTE...) /// /// /// public bool RegScartiKitUpdateQty(RegistroScartiKitModel currRec) { bool answ = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", currRec.IdxMacchina); var DtRif = new SqlParameter("@DataOra", currRec.DataOra); var Causale = new SqlParameter("@Causale", currRec.Causale); var CodArticolo = new SqlParameter("@CodArticolo", currRec.CodArticolo); var Qty = new SqlParameter("@Qty", currRec.Qta); var dbResult = dbCtx .Database .ExecuteSqlRaw("EXEC stp_RSK_UpdateQty @IdxMacchina, @DataOra, @Causale, @CodArticolo, @Qty", IdxMacc, DtRif, Causale, CodArticolo, Qty); answ = dbResult != 0; } return answ; } /// /// Effettua ricalcolo MSE x macchina indicata /// /// idx macchina da confermare /// Num massimo secondi di "vecchiaia" del dato /// public bool RicalcMse(string idxMacchina, int maxAgeSec) { bool answ = false; try { var rigaProd = StatoProdMacchina(idxMacchina, DateTime.Now); using (var dbCtx = new MoonProContext(options)) { var MaxAgeSec = new SqlParameter("@maxAgeSec ", maxAgeSec); var IdxMacchina = new SqlParameter("@idxMacchina", idxMacchina); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_MSE_recalc @maxAgeSec, @idxMacchina ", MaxAgeSec, IdxMacchina); // indico eseguito! answ = result > 0; } } catch (Exception exc) { Log.Error($"Eccezione in RicalcMse:{Environment.NewLine}{exc}"); } return answ; } /// /// Esegue il ripristino stato precedente x una macchina che abbia una dichiarazione manuale (es Pausa pranzo) da cui "uscire" /// /// /// /// /// /// /// public async Task RipristinaStatoPrec(string idxMacchina, DateTime dtCurr, string valore, int idxStato = 0, int matrOpr = 0) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var pIdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var pDataOra = new SqlParameter("@DataOra", dtCurr); var pIdxStato = new SqlParameter("@IdxStato", idxStato); var pMatrOpr = new SqlParameter("@MatrOpr", matrOpr); var pValueEv = new SqlParameter("@ValueEv", valore); var dbResult = await dbCtx .Database .ExecuteSqlRawAsync("EXEC stp_DDB_RipristinaStato @IdxMacchina, @DataOra, @IdxStato, @MatrOpr, @ValueEv", pIdxMacc, pDataOra, pIdxStato, pMatrOpr, pValueEv); fatto = dbResult > 0; } return fatto; } public bool SetDerogaSt(StCheckOverride deroga) { bool fatto = false; #if false try { string keyDerogaST = memLayer.ML.redHash($"DerogaSt:{user_std.UtSn.utente}:{deroga.IdxST:000}"); string rawData = JsonConvert.SerializeObject(deroga); memLayer.ML.setRSV(keyDerogaST, rawData, 60 * 2); fatto = true; } catch { } #endif return fatto; } /// /// Intera tabella state machine eventi 2 stati /// /// public List SMES_GetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetSMES .AsNoTracking() .ToList(); } return dbResult; } /// /// Tabella state machine eventi 2 stati data famiglia /// /// public List SMES_GetByFam(int idxFam) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetSMES .Where(x => x.IdxFamiglia == idxFam) .AsNoTracking() .ToList(); } return dbResult; } /// /// Tabella state machine eventi 2 stati data macchina e tipo evento /// /// /// public List SMES_getHwTransitions(string idxMacchina, int idxTipo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); dbResult = dbCtx .DbSetSMES .FromSqlRaw("exec dbo.stp_TS_getByIdxMacchIdxTipoEv @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Tabella state machine eventi 2 stati data macchina e tipo evento /// /// /// public List SMES_getUserForced(string idxMacchina, int idxTipo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); dbResult = dbCtx .DbSetSMES .FromSqlRaw("exec dbo.stp_TS_getUserForcedTrans @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Restituisce elenco gruppi Scheda tecnica /// /// public List ST_AnagGruppiList() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetStAnagGruppi .OrderBy(x => x.OrdVisual) .AsNoTracking() .ToList(); } return dbResult; } public bool ST_CheckCleanByOdl(int idxOdl) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxOdl = new SqlParameter("@IdxOdl", idxOdl); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ST_CHK_cleanByOdl @IdxOdl", IdxOdl); fatto = result != 0; } return fatto; } public bool ST_CheckUpsert(int idxOdl, int idxST, int oggetto, int num, string valueRead, string extCode, bool checkOk, string userMod, bool forced) { bool fatto = false; using (var dbCtx = new MoonProContext(options)) { var IdxOdl = new SqlParameter("@IdxOdl", idxOdl); var IdxST = new SqlParameter("@IdxST", idxST); var Oggetto = new SqlParameter("@Oggetto", oggetto); var Num = new SqlParameter("@Num", num); var ValueRead = new SqlParameter("@ValueRead", valueRead); var ExtCode = new SqlParameter("@ExtCode", extCode); var CheckOk = new SqlParameter("@CheckOk", checkOk); var UserMod = new SqlParameter("@UserMod", userMod); var Forced = new SqlParameter("@Forced", forced); var result = dbCtx .Database .ExecuteSqlRaw("EXEC stp_ST_CHK_upsert @IdxOdl, @IdxST, @Oggetto, @Num, @ValueRead, @ExtCode, @CheckOk, @UserMod, @Forced", IdxOdl, IdxST, Oggetto, Num, ValueRead, ExtCode, CheckOk, UserMod, Forced); fatto = result != 0; } return fatto; } /// /// Recupero Righe (Actual) della scheda tecnica da GRUPPO + ODL /// /// /// /// public List STAR_byGrpOdl(string codGruppo, int idxODL) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var CodGruppo = new SqlParameter("@CodGruppo", codGruppo); var IdxODL = new SqlParameter("@IdxODL", idxODL); dbResult = dbCtx .DbSetStActRow .FromSqlRaw("exec dbo.stp_ST_AR_getByGrpOdl @CodGruppo, @IdxODL", CodGruppo, IdxODL) .AsNoTracking() //.AsEnumerable() .ToList(); } return dbResult; } /// /// Recupero Righe (Actual) della scheda tecnica da GRUPPO + ODL + label /// /// /// /// /// public List STAR_byGrpOdlLbl(string codGruppo, string label, int idxODL) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var CodGruppo = new SqlParameter("@CodGruppo", codGruppo); var Label = new SqlParameter("@Label", label); var IdxODL = new SqlParameter("@IdxODL", idxODL); dbResult = dbCtx .DbSetStActRow .FromSqlRaw("exec dbo.stp_ST_AR_getGrpOdlLabel @CodGruppo, @Label, @IdxODL", CodGruppo, Label, IdxODL) .AsNoTracking() //.AsEnumerable() .ToList(); } return dbResult; } /// /// Recupero Righe pending da ODL /// /// /// public List STAR_pendByOdl(int idxODL) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxODL = new SqlParameter("@IdxODL", idxODL); dbResult = dbCtx .DbSetStActRow .FromSqlRaw("exec dbo.stp_ST_AR_getPendingOdl @IdxODL", IdxODL) .AsNoTracking() //.AsEnumerable() .ToList(); } return dbResult; } /// /// Intera tabella state machine ingressi 2 eventi data famiglia /// /// /// public List StateMachineIngressi(int idxFam) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxFamIn = new SqlParameter("@IdxFamigliaIngresso", idxFam); dbResult = dbCtx .DbSetSMI .FromSqlRaw("exec dbo.stp_TRI_getByIdxFamIng @IdxFamigliaIngresso", IdxFamIn) .AsNoTracking() .AsEnumerable() .ToList(); } return dbResult; } /// /// Stato macchina (da key) /// /// /// public StatoMacchineModel StatoMacchina(string idxMacchina) { StatoMacchineModel dbResult = new StatoMacchineModel(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetStatoMacc .Where(x => x.IdxMacchina == idxMacchina) .AsNoTracking() .FirstOrDefault(); } return dbResult; } /// /// Stato prod macchina (completo) /// /// /// /// public StatoProdModel StatoProdMacchina(string idxMacchina, DateTime dtReq) { StatoProdModel dbResult = new StatoProdModel(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var DataOra = new SqlParameter("@DataOra ", dtReq); var rawData = dbCtx .DbSetStatoProd .FromSqlRaw("EXEC stp_StatoProd_getByMacchina @IdxMacchina, @DataOra ", IdxMacchina, DataOra) .AsNoTracking() .AsEnumerable() .ToList(); dbResult = rawData .FirstOrDefault(); } return dbResult; } /// /// Elenco template KIT da ricerca /// /// /// /// public List TemplateKitFilt(string KitCode, string codChild) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetTempKit .Where(x => (string.IsNullOrEmpty(KitCode) && string.IsNullOrEmpty(codChild)) || (x.CodArtParent.Contains(KitCode) && !string.IsNullOrEmpty(KitCode)) || (x.CodArtChild.Contains(codChild) && !string.IsNullOrEmpty(codChild))) .AsNoTracking() .ToList(); } return dbResult; } /// /// Elenco turni macchina (all) /// /// /// public TurniMaccModel TurnoMacchinaGet(string idxMacchina) { TurniMaccModel dbResult = new TurniMaccModel(); using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetTurniMacc .FromSqlRaw("exec dbo.stp_turniMacchineByIdxMacc @IdxMacchina", IdxMacchina) .AsNoTracking() .AsEnumerable() .FirstOrDefault(); } return dbResult; } /// /// Elenco turni macchina (all) /// /// public List TurnoMacchinaGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetTurniMacc .AsNoTracking() .ToList(); } return dbResult; } /// /// Toggle turno macchina (da numero) /// /// /// /// public bool TurnoMacchinaToggle(string idxMacchina, int numTurno) { bool answ = false; using (var dbCtx = new MoonProContext(options)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var NumTurno = new SqlParameter("@numTurno", numTurno); var result = dbCtx .Database .ExecuteSqlRaw("exec dbo.stp_turniMacchineUpdateTurno @IdxMacchina, @numTurno", IdxMacchina, NumTurno); // indico eseguito! answ = result > 0; } return answ; } /// /// Elenco Vocabolario (completo) /// /// public List VocabolarioGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetVocabolario .AsNoTracking() .OrderBy(x => x.Lemma) .ToList(); } return dbResult; } /// /// Elenco causali scarto /// /// public List VSCS_getAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { dbResult = dbCtx .DbSetVSCS .AsNoTracking() .ToList(); } return dbResult; } /// /// Elenco ultimi ODL x macchina /// /// Macchina /// /// public List VSOdlGetLastByMacc(string idxMacchina, int numRec) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var NumRec = new SqlParameter("@numRec", numRec); dbResult = dbCtx .DbSetVSODL .FromSqlRaw("EXEC stp_vsODL_getLastByMacc @IdxMacchina, @numRec", IdxMacc, NumRec) .AsNoTracking() .ToList(); } return dbResult; } /// /// Elenco prossimi ODL/PODL x macchina /// /// Macchina /// /// /// public List VSOdlGetUnused(string idxMacchina, bool showAll, int numDayAdd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(options)) { var IdxMacc = new SqlParameter("@IdxMacchina", idxMacchina); var ShowAll = new SqlParameter("@showAll", showAll); var NumDayAdd = new SqlParameter("@numDayAdd", numDayAdd); dbResult = dbCtx .DbSetVSODL .FromSqlRaw("EXEC stp_vsODL_getUnused @IdxMacchina, @showAll, @numDayAdd", IdxMacc, ShowAll, NumDayAdd) .AsNoTracking() .ToList(); } return dbResult; } #endregion Public Methods #region Private Fields private static IConfiguration _configuration; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private DbContextOptions options; #endregion Private Fields } }