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