diff --git a/GIM_dataLayer/mtzProgr.cs b/GIM_dataLayer/mtzProgr.cs index 7e9c545..0926f9e 100644 --- a/GIM_dataLayer/mtzProgr.cs +++ b/GIM_dataLayer/mtzProgr.cs @@ -8,180 +8,195 @@ using SteamWare; /// public class mtzProgr { - #region table adapters + #region table adapters - public GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgrammataTableAdapter taMtzProg; - public GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgPendingTableAdapter taMtzPend; + public GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgrammataTableAdapter taMtzProg; + public GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgPendingTableAdapter taMtzPend; - #endregion + #endregion - /// - /// avvio componente - /// - protected mtzProgr() - { - initTA(); - setupConnectionString(); - } + /// + /// avvio componente + /// + protected mtzProgr() + { + initTA(); + setupConnectionString(); + } - private void initTA() + private void initTA() + { + taMtzPend = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgPendingTableAdapter(); + taMtzProg = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgrammataTableAdapter(); + } + /// + /// effettua setup dei connection strings da web.config della singola applicazione + /// + protected virtual void setupConnectionString() + { + // connections del db + string connString = memLayer.ML.confReadString("AppConnectionString"); + taMtzPend.Connection.ConnectionString = connString; + taMtzProg.Connection.ConnectionString = connString; + } + /// + /// singleton accesso ai metodi di manutenzione programmata + /// + public static mtzProgr obj = new mtzProgr(); + /// + /// anticipa l'intervneto indicato e genera il successivo a scadenza normale + /// + public void anticipaIntervento(int numIntMtzPend) + { + DateTime nextDate = DateTime.Now; + // genero l'intervento + + logger.lg.scriviLog(string.Format("Anticipata la richiesta di manutenzione (programmata) num {0}", numIntMtzPend), tipoLog.INFO); + + // modifico intervento pending portando avanti secondo schedulazione... + + nextDate = nextDate.AddDays(1); + logger.lg.scriviLog(string.Format("Generata nuova scadenza di manutenzione (programmata) num {0} alla data {1}", numIntMtzPend, nextDate), tipoLog.INFO); + } + /// + /// verifica se ci siano interventi pending ed eventualmente li accoda + /// + public void processaCodaMtzPro() + { + // cerco eventuali interventi scaduti + insertPending(); + // metto in coda tutte le ricorrenze non presenti... + rebuildPending(); + } + /// + /// inserisce nelle richieste attuali gli interventi programmati scaduti + /// + private void insertPending() + { + int richInserted = 0; + //recupero solo gli interventi già "scaduti" + foreach (GIM_dataLayer.DS_applicazione.MtzProgPendingRow rigaMtz in taMtzPend.getByDataScad(DateTime.Now)) { - taMtzPend = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgPendingTableAdapter(); - taMtzProg = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgrammataTableAdapter(); + richInserted = insRich(rigaMtz); + // inserisco trasformandoli in richieste ... + if (richInserted != 0) // se va a buon fine + { + logger.lg.scriviLog(string.Format("Accodata la richiesta di manutenzione (programmata) num {0}", richInserted), tipoLog.INFO); + // ...e li tolgo dall'elenco pending + taMtzPend.Delete(rigaMtz.idxPending); + } + else + { + logger.lg.scriviLog(string.Format("Non è stato possibile accodare la richiesta di manutenzione programmata cod {0} relativa alla macchina {1}", rigaMtz.idxIntPro, rigaMtz.idxMacchina), tipoLog.ERROR); + } } - /// - /// effettua setup dei connection strings da web.config della singola applicazione - /// - protected virtual void setupConnectionString() + } + /// + /// ricostruisce la coda degli intervneti pending + /// + private void rebuildPending() + { + int multiplo = 0; + int stimaIniz = 0; + double ggEquiv = 0; + TimeSpan distDate; + DateTime adesso = DateTime.Now; + DateTime dataProp; + foreach (GIM_dataLayer.DS_applicazione.MtzProgrammataRow rigaMtz in taMtzProg.getNotScheduled()) { - // connections del db - string connString = memLayer.ML.confReadString("AppConnectionString"); - taMtzPend.Connection.ConnectionString = connString; - taMtzProg.Connection.ConnectionString = connString; - } - /// - /// singleton accesso ai metodi di manutenzione programmata - /// - public static mtzProgr obj = new mtzProgr(); - /// - /// verifica se ci siano interventi pending ed eventualmente li accoda - /// - public void processaCodaMtzPro() - { - // cerco eventuali interventi scaduti - insertPending(); - // metto in coda tutte le ricorrenze non presenti... - rebuildPending(); - } - /// - /// inserisce nelle richieste attuali gli interventi programmati scaduti - /// - private void insertPending() - { - int richInserted = 0; - //recupero solo gli interventi già "scaduti" - foreach (GIM_dataLayer.DS_applicazione.MtzProgPendingRow rigaMtz in taMtzPend.getByDataScad(DateTime.Now)) + dataProp = rigaMtz.inizio; + // proseguo SOLO se inizio interventi <= data odierna...) + if (rigaMtz.inizio < adesso) + { + //calcolo l'intervallo timeSpan tra inizio interventi e data odierna + distDate = adesso.Subtract(rigaMtz.inizio); + // in base al tipo di intervallo faccio un calcolo grezzo del periodo trascorso... + ggEquiv = distDate.TotalDays; + switch (rigaMtz.codFrequenza) { - richInserted = insRich(rigaMtz); - // inserisco trasformandoli in richieste ... - if (richInserted != 0) // se va a buon fine - { - logger.lg.scriviLog(string.Format("Accodata la richiesta di manutenzione (programmata) num {0}", richInserted), tipoLog.INFO); - // ...e li tolgo dall'elenco pending - taMtzPend.Delete(rigaMtz.idxPending); - } - else - { - logger.lg.scriviLog(string.Format("Non è stato possibile accodare la richiesta di manutenzione programmata cod {0} relativa alla macchina {1}", rigaMtz.idxIntPro, rigaMtz.idxMacchina), tipoLog.ERROR); - } + case "dd": + stimaIniz = (int)Math.Floor(ggEquiv / rigaMtz.cadenza); + break; + case "ww": + stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 7)); + break; + case "MM": + stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 30)); + break; + case "yy": + stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 365)); + break; } - } - /// - /// ricostruisce la coda degli intervneti pending - /// - private void rebuildPending() - { - int multiplo = 0; - int stimaIniz = 0; - double ggEquiv = 0; - TimeSpan distDate; - DateTime adesso = DateTime.Now; - DateTime dataProp; - foreach (GIM_dataLayer.DS_applicazione.MtzProgrammataRow rigaMtz in taMtzProg.getNotScheduled()) + // parto con la stima iniziale decrementata (se >0...) + if (stimaIniz == 0) { - dataProp = rigaMtz.inizio; - // proseguo SOLO se inizio interventi <= data odierna...) - if (rigaMtz.inizio < adesso) - { - //calcolo l'intervallo timeSpan tra inizio interventi e data odierna - distDate = adesso.Subtract(rigaMtz.inizio); - // in base al tipo di intervallo faccio un calcolo grezzo del periodo trascorso... - ggEquiv = distDate.TotalDays; - switch (rigaMtz.codFrequenza) - { - case "dd": - stimaIniz = (int)Math.Floor(ggEquiv / rigaMtz.cadenza); - break; - case "ww": - stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 7)); - break; - case "MM": - stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 30)); - break; - case "yy": - stimaIniz = (int)Math.Floor(ggEquiv / (rigaMtz.cadenza * 365)); - break; - } - // parto con la stima iniziale decrementata (se >0...) - if (stimaIniz == 0) - { - multiplo = 0; - } - else - { - multiplo = stimaIniz - 1; - } - // ciclo fino a quando la data indicata non è successiva all'adesso... - while (dataProp < adesso) - { - // aggiorno la data di riferimento - switch (rigaMtz.codFrequenza) - { - case "dd": - dataProp = rigaMtz.inizio.AddDays(rigaMtz.cadenza * multiplo); - break; - case "ww": - dataProp = rigaMtz.inizio.AddDays(rigaMtz.cadenza * 7 * multiplo); - break; - case "MM": - dataProp = rigaMtz.inizio.AddMonths(rigaMtz.cadenza * multiplo); - break; - case "yy": - dataProp = rigaMtz.inizio.AddYears(rigaMtz.cadenza * multiplo); - break; - } - multiplo++; - } - // salvo la data trovata... - rigaMtz.inizio = dataProp; - } - // infine inserisco intervento... - insMtzPend(rigaMtz); + multiplo = 0; } - } - /// - /// inserisce l'intervento della riga indicata tra quelli "pending" - /// - /// - protected void insMtzPend(GIM_dataLayer.DS_applicazione.MtzProgrammataRow riga) - { - mtzProgr.obj.taMtzPend.Insert(riga.idxIntPro, riga.idxMacchina, riga.inizio, riga.descrizione, riga.idxPriorita, riga.isFermo, riga.idxTipo, riga.idxCausale); - } - /// - /// genera la richiesta di manutenzione dalla richiesta pending associata - /// - /// - /// - protected int insRich(GIM_dataLayer.DS_applicazione.MtzProgPendingRow riga) - { - int? answ = 0; - // calcolo date riferimento... - DateTime adesso = DateTime.Now; - int shift = memLayer.ML.confReadInt("shiftTurno"); - int durataTurno = memLayer.ML.confReadInt("durataTurno"); - int turno = Convert.ToInt32(Math.Ceiling((double)Convert.ToDouble(DateTime.Now.AddHours(-shift + 1).Hour) / durataTurno)); - int idxAmbito = 7; //mtz programmata... - int idxImpianto = 0; - try + else { - idxImpianto = TA_app.obj.taMacchine.getByIdxMacchina(riga.idxMacchina)[0].idxImpianto; + multiplo = stimaIniz - 1; } - catch (Exception e) + // ciclo fino a quando la data indicata non è successiva all'adesso... + while (dataProp < adesso) { - logger.lg.scriviLog(string.Format("Errore nel recuperare impianto relativo alla macchina {0}, eccezione {1}", riga.idxMacchina, e), tipoLog.EXCEPTION); + // aggiorno la data di riferimento + switch (rigaMtz.codFrequenza) + { + case "dd": + dataProp = rigaMtz.inizio.AddDays(rigaMtz.cadenza * multiplo); + break; + case "ww": + dataProp = rigaMtz.inizio.AddDays(rigaMtz.cadenza * 7 * multiplo); + break; + case "MM": + dataProp = rigaMtz.inizio.AddMonths(rigaMtz.cadenza * multiplo); + break; + case "yy": + dataProp = rigaMtz.inizio.AddYears(rigaMtz.cadenza * multiplo); + break; + } + multiplo++; } - // inserisco - TA_app.obj.taInterventiMtz.sp_insRichiesta(adesso, adesso.AddHours(-shift + 1), turno, "PROG", riga.data, idxAmbito, riga.idxPriorita, riga.isFermo, riga.idxTipo, idxImpianto, riga.idxMacchina, riga.descrizione, riga.idxCausale, true, ref answ); - return (int)answ; + // salvo la data trovata... + rigaMtz.inizio = dataProp; + } + // infine inserisco intervento... + insMtzPend(rigaMtz); } + } + /// + /// inserisce l'intervento della riga indicata tra quelli "pending" + /// + /// + protected void insMtzPend(GIM_dataLayer.DS_applicazione.MtzProgrammataRow riga) + { + mtzProgr.obj.taMtzPend.Insert(riga.idxIntPro, riga.idxMacchina, riga.inizio, riga.descrizione, riga.idxPriorita, riga.isFermo, riga.idxTipo, riga.idxCausale); + } + /// + /// genera la richiesta di manutenzione dalla richiesta pending associata + /// + /// + /// + protected int insRich(GIM_dataLayer.DS_applicazione.MtzProgPendingRow riga) + { + int? answ = 0; + // calcolo date riferimento... + DateTime adesso = DateTime.Now; + int shift = memLayer.ML.confReadInt("shiftTurno"); + int durataTurno = memLayer.ML.confReadInt("durataTurno"); + int turno = Convert.ToInt32(Math.Ceiling((double)Convert.ToDouble(DateTime.Now.AddHours(-shift + 1).Hour) / durataTurno)); + int idxAmbito = 7; //mtz programmata... + int idxImpianto = 0; + try + { + idxImpianto = TA_app.obj.taMacchine.getByIdxMacchina(riga.idxMacchina)[0].idxImpianto; + } + catch (Exception e) + { + logger.lg.scriviLog(string.Format("Errore nel recuperare impianto relativo alla macchina {0}, eccezione {1}", riga.idxMacchina, e), tipoLog.EXCEPTION); + } + // inserisco + TA_app.obj.taInterventiMtz.sp_insRichiesta(adesso, adesso.AddHours(-shift + 1), turno, "PROG", riga.data, idxAmbito, riga.idxPriorita, riga.isFermo, riga.idxTipo, idxImpianto, riga.idxMacchina, riga.descrizione, riga.idxCausale, true, ref answ); + return (int)answ; + } } diff --git a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx index f02cb3d..faf6428 100644 --- a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx +++ b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx @@ -2,17 +2,16 @@ <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
-
+
-
+
+
-
+
-<%--
-
--%>
diff --git a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.cs b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.cs index 20d26fa..885e815 100644 --- a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.cs +++ b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.cs @@ -42,6 +42,7 @@ public partial class mod_mtzPrevPending : ApplicationUserControl if (!Page.IsPostBack) { chkAnticipaEnabled.DataBind(); + btnCreateInt.DataBind(); hlExportExcel.Text = traduci("hlExportExcel"); hlExportExcel.NavigateUrl = "~/ExcelExportMtzPrevPending"; // verifico se devo generare degli interventi di MTZ programmata.. @@ -104,12 +105,17 @@ public partial class mod_mtzPrevPending : ApplicationUserControl ((CheckBox)riga.FindControl("chkSelect")).Checked = isChecked; } } - + /// + /// Gestione click pulsante "abilita anticipo" + /// + /// + /// protected void chkAnticipaEnabled_CheckedChanged(object sender, EventArgs e) { // seleziono tutti i valori visibili nel datagrid CheckBox chkbox = ((CheckBox)sender); bool isChecked = chkbox.Checked; + btnCreateInt.Visible = isChecked; if (!isChecked) { chkbox.Text = traduci("AbilitaAnticipo"); @@ -121,4 +127,31 @@ public partial class mod_mtzPrevPending : ApplicationUserControl // aggiorno il gridview... grView.DataBind(); } + /// + /// Richiesta generazione anticipo interventi selezionati + /// + /// + /// + protected void btnCreateInt_Click(object sender, EventArgs e) + { + int idxIntervento = 0; + foreach (GridViewRow riga in grView.Rows) + { + if (((CheckBox)riga.FindControl("chkSelect")).Checked) + { + try + { + idxIntervento = Convert.ToInt32(((Label)riga.FindControl("lblidxPending")).Text); + } + catch + { } + if (idxIntervento > 0) + { + // genero intervento selezionato e predispongo NUOVA schedulazione.. + mtzProgr.obj.anticipaIntervento(idxIntervento); + } + } + } + grView.DataBind(); + } } \ No newline at end of file diff --git a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.designer.cs b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.designer.cs index 3a82a29..32180c4 100644 --- a/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.designer.cs +++ b/GIM_site/WebUserControls/mod_mtzPrevPending.ascx.designer.cs @@ -20,6 +20,15 @@ public partial class mod_mtzPrevPending { /// protected global::System.Web.UI.WebControls.CheckBox chkAnticipaEnabled; + /// + /// Controllo btnCreateInt. + /// + /// + /// Campo generato automaticamente. + /// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind. + /// + protected global::System.Web.UI.WebControls.Button btnCreateInt; + /// /// Controllo hlExportExcel. /// diff --git a/GIM_site/bin/SteamWare.dll b/GIM_site/bin/SteamWare.dll index 4f53207..7e07c42 100644 Binary files a/GIM_site/bin/SteamWare.dll and b/GIM_site/bin/SteamWare.dll differ