using MapoDb; using SteamWare; using System; /// /// Summary description for utility /// public class utility { #region Public Fields /// /// oggetto static per fare chiamate sul magazzino /// public static utility obj = new utility(); #endregion Public Fields #region Public Methods /// /// Effettua la masking di un valore (INT) rispetto ad una BitMask (INT) /// /// Valore da filtrare /// BitMask (espresso in valore INT: es 1001 --> 9) /// public static int bMaskInt(int valore, int bitMask) { return valore & bitMask; } /// /// restituisce stringa formattata in HH:mm:ss /// /// /// public static string durataEventoHMS(double durataMinuti) { string durataFormattata = ""; try { DateTime tempo = new DateTime(); tempo = tempo.AddMinutes(durataMinuti); durataFormattata = string.Format("{0:00}:{1:00}:{2:00}", tempo.Hour, tempo.Minute, tempo.Second); } catch { logger.lg.scriviLog(string.Format("errore calcolo durata: durataMinuti {0}", durataMinuti), tipoLog.EXCEPTION); } return durataFormattata; } /// /// effettua reset del db /// public void resetDb() { taSM.stp_ZZZ_riallineaDateDb(); } /// /// effettua ultimo step (eliminazione eventi) * 16/15 --> x Syntesy L11 (HW - machining / HW /// - power on) elimino se è (15/16) ed i 2 prec sono 15+16... /// /// /// /// public void ripulisciStepFive(string idxMacchina, int idxEvento1, int idxEvento2) { // adesso svuoto i duplicati dalla tab eventi... DS_applicazione.EventListRow[] righe = (DS_applicazione.EventListRow[])taEventi.GetDataFiltered(idxMacchina, new DateTime(1999, 1, 1), new DateTime(9999, 1, 1)).Select("", "InizioStato ASC"); DS_applicazione.EventListRow rigaMenoUno = righe[0]; DS_applicazione.EventListRow rigaMenoDue = righe[1]; foreach (DS_applicazione.EventListRow riga in righe) { if (riga.InizioStato > rigaMenoDue.InizioStato) { if (riga.IdxTipo == idxEvento1 || riga.IdxTipo == idxEvento2) { if ((rigaMenoUno.IdxTipo == idxEvento1 && rigaMenoDue.IdxTipo == idxEvento2) || (rigaMenoUno.IdxTipo == idxEvento2 && rigaMenoDue.IdxTipo == idxEvento1)) { taEventi.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } rigaMenoDue = rigaMenoUno; rigaMenoUno = riga; } } } /// /// effettua terzo step (eliminazione e ricalcolo durate) pulizia righe tab elenco eventi /// * 16/17 --> x caber 1 e 2 (cambio pallet "instabile" su lavorazione) /// /// /// public void ripulisciStepFour(string idxMacchina, int idxEventoPre, int idxEvento2del) { // adesso svuoto i duplicati dalla tab eventi... DS_applicazione.EventListRow[] righe = (DS_applicazione.EventListRow[])taEventi.GetDataFiltered(idxMacchina, new DateTime(1999, 1, 1), new DateTime(9999, 1, 1)).Select("", "InizioStato ASC"); DS_applicazione.EventListRow rigaEvPrev = righe[0]; foreach (DS_applicazione.EventListRow riga in righe) { if (riga.IdxTipo == idxEvento2del && rigaEvPrev.IdxTipo == idxEventoPre && riga.CodArticolo == rigaEvPrev.CodArticolo) { if (riga.InizioStato != rigaEvPrev.InizioStato) { taEventi.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } else { rigaEvPrev = riga; } } } /// /// effettua primo step /// * se 13,4,17 --> (da lavora a cambioPallet) pulizia righe tab elenco stati x caber 1 e 2 /// (cambio pallet "instabile" su lavorazione) /// /// /// /// /// public void ripulisciStepOne(string idxMacchina, int idxStatoFrom, int idxStatoTo, int idxEventoTo) { // recupero SOLO le righe delle caber,1 alla volta... DS_applicazione.DiarioDiBordoDataTable tabella = taStati.GetShortChanging(idxMacchina, 1, idxStatoFrom); // prendo solo le lavorazioni... foreach (DS_applicazione.DiarioDiBordoRow riga in tabella) { // modifico lavorazione in cambiopallet... taStati.UpdateStato(idxStatoTo, riga.IdxMacchina, riga.InizioStato); taEventi.UpdateTipo(idxEventoTo, riga.IdxMacchina, riga.InizioStato); } } /// /// effettua terzo step (eliminazione e ricalcolo durate) pulizia righe tab elenco eventi /// * 17 --> x caber 1 e 2 (cambio pallet "instabile" su lavorazione) /// /// /// public void ripulisciStepThree(string idxMacchina, int idxEvento2del) { // adesso svuoto i duplicati dalla tab eventi... DS_applicazione.EventListRow[] righe = (DS_applicazione.EventListRow[])taEventi.GetDataFiltered(idxMacchina, new DateTime(1999, 1, 1), new DateTime(9999, 1, 1)).Select("", "InizioStato ASC"); DS_applicazione.EventListRow rigaEvPrev = righe[0]; foreach (DS_applicazione.EventListRow riga in righe) { if (riga.IdxTipo == idxEvento2del && rigaEvPrev.IdxTipo == idxEvento2del && riga.CodArticolo == rigaEvPrev.CodArticolo) { if (riga.InizioStato != rigaEvPrev.InizioStato) { taEventi.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } else { rigaEvPrev = riga; } } } /// /// effettua secondo step (eliminazione e ricalcolo durate) pulizia righe tab elenco stati /// * 14 --> x caber 1 e 2 (cambio pallet "instabile" su lavorazione) /// /// /// public void ripulisciStepTwo(string idxMacchina, int idxStato2reduce) { DS_applicazione.DiarioDiBordoDataTable tabella = taStati.GetData(); // inizializzo riga... DS_applicazione.DiarioDiBordoRow rigaCumulo = (DS_applicazione.DiarioDiBordoRow)tabella.Rows[0]; // controllo ogni riga, salvo i valori cumsum e start dalla prima, cancello corrente ed // infine inserisco riga di sunto delle contigue... double durata; foreach (DS_applicazione.DiarioDiBordoRow riga in tabella) { // verifico se sia identica alla precedente... if (rigaCumulo.IdxStato == idxStato2reduce && riga.IdxStato == idxStato2reduce && rigaCumulo.CodArticolo == riga.CodArticolo) { if (riga.InizioStato != rigaCumulo.InizioStato) { durata = riga.FineStato.Subtract(rigaCumulo.InizioStato).TotalMinutes; taStati.UpdateFineDurata(riga.FineStato, (float)durata, rigaCumulo.IdxMacchina, rigaCumulo.InizioStato); // cancello riga duplicata taStati.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } else { rigaCumulo = riga; } } } #endregion Public Methods #region Protected Constructors protected utility() { initTA(); setupConnectionStringBase(); } #endregion Protected Constructors #region Protected Methods /// /// init dei table adapters /// protected void initTA() { // istanzio oggetto taStati = new MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter(); taEventi = new MapoDb.DS_applicazioneTableAdapters.EventListTableAdapter(); taSM = new MapoDb.DS_UtilityTableAdapters.StatoMacchineTableAdapter(); } /// /// effettua setup dei connection strings da web.config delal singola applicazione /// protected virtual void setupConnectionStringBase() { // connections del db string _connectionString = memLayer.ML.confReadString("MoonProConnectionString"); taStati.Connection.ConnectionString = _connectionString; taEventi.Connection.ConnectionString = _connectionString; taSM.Connection.ConnectionString = _connectionString; } #endregion Protected Methods #region Private Fields private MapoDb.DS_applicazioneTableAdapters.EventListTableAdapter taEventi; private MapoDb.DS_UtilityTableAdapters.StatoMacchineTableAdapter taSM; private MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taStati; #endregion Private Fields }