using System; using MapoDb; using SteamWare; /// /// Summary description for utility /// public class utility { MapoDb.DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taStati; MapoDb.DS_applicazioneTableAdapters.EventListTableAdapter taEventi; MapoDb.DS_UtilityTableAdapters.StatoMacchineTableAdapter taSM; /// /// 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, (float)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 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.KanbanCode == riga.KanbanCode && rigaCumulo.MatricolaKanban == riga.MatricolaKanban) { if (riga.InizioStato != rigaCumulo.InizioStato) { durata = ((TimeSpan)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; } } } /// /// 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 = (DS_applicazione.EventListRow)righe[0]; foreach (DS_applicazione.EventListRow riga in righe) { if (riga.IdxTipo == idxEvento2del && rigaEvPrev.IdxTipo == idxEvento2del && riga.MatricolaKanban == rigaEvPrev.MatricolaKanban) { if (riga.InizioStato != rigaEvPrev.InizioStato) { taEventi.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } else { rigaEvPrev = 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 = (DS_applicazione.EventListRow)righe[0]; foreach (DS_applicazione.EventListRow riga in righe) { if (riga.IdxTipo == idxEvento2del && rigaEvPrev.IdxTipo == idxEventoPre && riga.MatricolaKanban == rigaEvPrev.MatricolaKanban) { if (riga.InizioStato != rigaEvPrev.InizioStato) { taEventi.DeleteQuery(riga.IdxMacchina, riga.InizioStato); } } else { rigaEvPrev = riga; } } } /// /// 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 = (DS_applicazione.EventListRow)righe[0]; DS_applicazione.EventListRow rigaMenoDue = (DS_applicazione.EventListRow)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 reset del db /// public void resetDb() { taSM.stp_ZZZ_riallineaDateDb(); } /// /// restituisce stringa formattata in HH:mm:ss /// /// /// public static string durataEventoHMS(double durataMinuti) { string durataFormattata = ""; try { DateTime tempo = new DateTime(); tempo = tempo.AddMinutes((double)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; } #region Inizializzazione /// /// 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 taStati.Connection.ConnectionString = memLayer.ML.confReadString("MoonProConnectionString"); taEventi.Connection.ConnectionString = memLayer.ML.confReadString("MoonProConnectionString"); taSM.Connection.ConnectionString = memLayer.ML.confReadString("MoonProConnectionString"); } protected utility() { initTA(); setupConnectionStringBase(); } /// /// oggetto static per fare chiamate sul magazzino /// public static utility obj = new utility(); #endregion } public enum tipoBarcode { /// /// tipo non riconosciuto /// nd, /// /// identifica una matricola operatore nel formato OPxxxxx (xxxxx č un intero che rappresenta la matricola, std fino a 8 cifre) /// matrOperatore, /// /// identifica un cartellino di tipo KANBAN /// kanban, /// /// identifica un codice per le attivitā di inizio/fine attrezzaggio e inizio/fine produzione /// attrezzaggio, /// /// identifica un codice per le attivitā di conferma produzione/fermi /// confermaProduzione, /// /// identifica un cartellino di dichiarazione fermata nel formato FExxxx dove xxxx č idxEvento dichiarato... /// dichiaraFermata, /// /// indentifica un codice di modifica turno /// modificaTurno } /// /// tipologia di evento (generico) segnalato /// public enum tipoEvento { /// /// evento di reset /// reset, /// /// richiesta editing /// edit, /// /// nuova selezione /// selection, /// /// eliminazione record(s) /// delete }