diff --git a/WebSites/WebGIM/App_Code/DS_applicazione.xsd b/WebSites/WebGIM/App_Code/DS_applicazione.xsd
index d1396e4..7692c12 100644
--- a/WebSites/WebGIM/App_Code/DS_applicazione.xsd
+++ b/WebSites/WebGIM/App_Code/DS_applicazione.xsd
@@ -374,6 +374,18 @@ where idxImpianto=@idxImpianto
+
+
+
+ SELECT idxMacchina, idxImpianto, codMacchina, nomeMacchina, modello, matricola, anno, kgPeso, kwConsumo, funzDal, funzAl, descrImpianto
+FROM v_macchine
+WHERE idxMacchina=@idxMacchina
+
+
+
+
+
+
@@ -905,6 +917,153 @@ FROM v_mtzProgExp
+
+
+
+
+
+ DELETE FROM [dbo].[MtzProgPending] WHERE (([idxPending] = @Original_idxPending))
+
+
+
+
+
+
+
+ INSERT INTO [dbo].[MtzProgPending] ([idxIntPro], [idxMacchina], [data], [descrizione], [idxPriorita], [isFermo], [idxTipo]) VALUES (@idxIntPro, @idxMacchina, @data, @descrizione, @idxPriorita, @isFermo, @idxTipo)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT idxPending, idxIntPro, idxMacchina, data, descrizione, idxPriorita, isFermo, idxTipo FROM dbo.MtzProgPending
+
+
+
+
+
+ UPDATE [dbo].[MtzProgPending] SET [idxIntPro] = @idxIntPro, [idxMacchina] = @idxMacchina, [data] = @data, [descrizione] = @descrizione, [idxPriorita] = @idxPriorita, [isFermo] = @isFermo, [idxTipo] = @idxTipo WHERE (([idxPending] = @Original_idxPending))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT idxPending, idxIntPro, idxMacchina, data, descrizione, idxPriorita, isFermo, idxTipo FROM dbo.MtzProgPending WHERE data < @dataScadenza
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DELETE FROM [dbo].[MtzProgrammata] WHERE (([idxIntPro] = @Original_idxIntPro))
+
+
+
+
+
+
+
+ INSERT INTO [dbo].[MtzProgrammata] ([idxMacchina], [inizio], [codFrequenza], [cadenza], [descrizione], [idxPriorita], [isFermo], [idxTipo]) VALUES (@idxMacchina, @inizio, @codFrequenza, @cadenza, @descrizione, @idxPriorita, @isFermo, @idxTipo)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT idxIntPro, idxMacchina, inizio, codFrequenza, cadenza, descrizione, idxPriorita, isFermo, idxTipo FROM dbo.MtzProgrammata
+
+
+
+
+
+ UPDATE [dbo].[MtzProgrammata] SET [idxMacchina] = @idxMacchina, [inizio] = @inizio, [codFrequenza] = @codFrequenza, [cadenza] = @cadenza, [descrizione] = @descrizione, [idxPriorita] = @idxPriorita, [isFermo] = @isFermo, [idxTipo] = @idxTipo WHERE (([idxIntPro] = @Original_idxIntPro))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT MtzProgrammata.idxIntPro, MtzProgrammata.idxMacchina, MtzProgrammata.inizio, MtzProgrammata.codFrequenza, MtzProgrammata.cadenza,
+ MtzProgrammata.descrizione, MtzProgrammata.idxPriorita, MtzProgrammata.isFermo, MtzProgrammata.idxTipo
+FROM MtzProgrammata LEFT OUTER JOIN
+ MtzProgPending ON MtzProgrammata.idxIntPro = MtzProgPending.idxIntPro
+WHERE (MtzProgPending.idxPending IS NULL)
+
+
+
+
+
+
@@ -916,16 +1075,16 @@ FROM v_mtzProgExp
-
-
+
+
-
-
+
+
@@ -938,186 +1097,7 @@ FROM v_mtzProgExp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -1125,83 +1105,6 @@ FROM v_mtzProgExp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1212,22 +1115,360 @@ FROM v_mtzProgExp
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1251,41 +1492,6 @@ FROM v_mtzProgExp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1341,6 +1547,14 @@ FROM v_mtzProgExp
+
+
+
+
+
+
+
+
@@ -1352,6 +1566,7 @@ FROM v_mtzProgExp
+
\ No newline at end of file
diff --git a/WebSites/WebGIM/App_Code/DS_applicazione.xss b/WebSites/WebGIM/App_Code/DS_applicazione.xss
index 61b71fc..80ffa8a 100644
--- a/WebSites/WebGIM/App_Code/DS_applicazione.xss
+++ b/WebSites/WebGIM/App_Code/DS_applicazione.xss
@@ -4,23 +4,25 @@
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
-->
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
1034
@@ -32,7 +34,7 @@
-
+
1187
@@ -44,7 +46,7 @@
-
+
937
@@ -56,7 +58,7 @@
-
+
511
@@ -68,7 +70,7 @@
-
+
810
@@ -80,7 +82,7 @@
-
+
364
@@ -92,7 +94,7 @@
-
+
297
@@ -104,15 +106,27 @@
-
+
686
- 722
+ 648
- 790
- 722
+ 793
+ 648
+
+
+
+
+
+
+ 1141
+ 846
+
+
+ 1051
+ 846
diff --git a/WebSites/WebGIM/App_Code/mtzProgr.cs b/WebSites/WebGIM/App_Code/mtzProgr.cs
new file mode 100644
index 0000000..5dc31ea
--- /dev/null
+++ b/WebSites/WebGIM/App_Code/mtzProgr.cs
@@ -0,0 +1,170 @@
+using System;
+using System.Collections.Generic;
+using System.Web;
+using SteamWare;
+
+///
+/// Metodi di gestione della manutenzione programmata
+///
+public class mtzProgr
+{
+ #region table adapters
+
+ protected DS_applicazioneTableAdapters.MtzProgrammataTableAdapter taMtzProg;
+ protected DS_applicazioneTableAdapters.MtzProgPendingTableAdapter taMtzPend;
+
+ #endregion
+
+ ///
+ /// avvio componente
+ ///
+ protected mtzProgr()
+ {
+ taMtzPend = new DS_applicazioneTableAdapters.MtzProgPendingTableAdapter();
+ taMtzProg = new DS_applicazioneTableAdapters.MtzProgrammataTableAdapter();
+ }
+ ///
+ /// 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 (DS_applicazione.MtzProgPendingRow rigaMtz in taMtzPend.getByDataScad(DateTime.Now))
+ {
+ 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);
+ }
+ }
+ }
+ ///
+ /// 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 (DS_applicazione.MtzProgrammataRow rigaMtz in taMtzProg.getNotScheduled())
+ {
+ 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);
+ }
+ }
+ ///
+ /// inserisce l'intervento della riga indicata tra quelli "pending"
+ ///
+ ///
+ protected void insMtzPend(DS_applicazione.MtzProgrammataRow riga)
+ {
+ mtzProgr.obj.taMtzPend.Insert(riga.idxIntPro, riga.idxMacchina, riga.inizio, riga.descrizione, riga.idxPriorita, riga.isFermo, riga.idxTipo);
+ }
+ ///
+ /// genera la richiesta di manutenzione dalla richeista pending associata
+ ///
+ ///
+ ///
+ protected int insRich(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).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 amcchina {0}, eccezione {1}", riga.idxMacchina,e), tipoLog.EXCEPTION);
+ }
+ // inserisco
+ TA_app.obj.taInterventiMtz.sp_insRichiesta(adesso, adesso.AddHours(-shift), turno, "PROG", riga.data, idxAmbito, riga.idxPriorita, riga.isFermo, riga.idxTipo, idxImpianto, riga.idxMacchina, riga.descrizione, ref answ);
+ return (int)answ;
+ }
+}
diff --git a/WebSites/WebGIM/login.aspx.cs b/WebSites/WebGIM/login.aspx.cs
index 8fcc748..77a56da 100644
--- a/WebSites/WebGIM/login.aspx.cs
+++ b/WebSites/WebGIM/login.aspx.cs
@@ -43,6 +43,15 @@ public partial class login : System.Web.UI.Page
void Mod_login1_Login_ok(object sender, EventArgs e)
{
+ // verifico se devo generare degli interventi di MTZ programmata..
+ try
+ {
+ mtzProgr.obj.processaCodaMtzPro();
+ }
+ catch(Exception errore)
+ {
+ SteamWare.logger.lg.scriviLog(string.Format("Non sono riuscito ad accodare gli interventi di mtz preventiva pending, errore:\r\n {0}", errore), SteamWare.tipoLog.EXCEPTION);
+ }
Response.Redirect(_nextPage);
}
protected override void OnUnload(EventArgs e)
diff --git a/WebSites/WebGIM/mod_elencoMtzProg.ascx b/WebSites/WebGIM/mod_elencoMtzProg.ascx
index 710a246..d42e082 100644
--- a/WebSites/WebGIM/mod_elencoMtzProg.ascx
+++ b/WebSites/WebGIM/mod_elencoMtzProg.ascx
@@ -65,6 +65,8 @@
+
@@ -97,6 +99,8 @@
TargetControlID="imgDelete">
+
+
diff --git a/WebSites/WebGIM/mod_elencoMtzProg.ascx.cs b/WebSites/WebGIM/mod_elencoMtzProg.ascx.cs
index 318a645..fe6f97d 100644
--- a/WebSites/WebGIM/mod_elencoMtzProg.ascx.cs
+++ b/WebSites/WebGIM/mod_elencoMtzProg.ascx.cs
@@ -232,9 +232,6 @@ public partial class mod_elencoMtzProg : ApplicationUserControl
private void checkFixOds()
{
ods.FilterExpression = "( codMacchina LIKE '%{0}%' OR nomeMacchina LIKE '%{0}%' OR descrizione LIKE '%{0}%' )";
- //ods.FilterParameters.Clear();
- //SessionParameter ricerca = new SessionParameter("ricerca","valoreCercato");
- //ods.FilterParameters.Add(ricerca);
if (mod_filtroTipo.valoreInt != 0)
{
ods.FilterExpression += " AND (idxTipo = {1})";
diff --git a/WebSites/WebGIM/mod_insertRichiesta.ascx.cs b/WebSites/WebGIM/mod_insertRichiesta.ascx.cs
index 4924c73..0bac358 100644
--- a/WebSites/WebGIM/mod_insertRichiesta.ascx.cs
+++ b/WebSites/WebGIM/mod_insertRichiesta.ascx.cs
@@ -55,7 +55,7 @@ public partial class mod_insertRichiesta : System.Web.UI.UserControl
int delay = memLayer.ML.confReadint("defaultDelay");
// inserisco valori di default
txtDataOra.Text = string.Format("{0:ddd dd/MM/yyyy HH:mm}", DateTime.Now);
- txtDataLav.Text = string.Format("{0:dd/MM/yyyy}", DateTime.Now.AddHours(-6));
+ txtDataLav.Text = string.Format("{0:dd/MM/yyyy}", DateTime.Now.AddHours(-shift));
txtTurnoLav.Text = turno.ToString();
mod_dataOra1.valore = DateTime.Now.AddMinutes(-delay);
chkImpFermo.Checked = true;
@@ -143,7 +143,7 @@ public partial class mod_insertRichiesta : System.Web.UI.UserControl
// stored inserimento!
TA_app.obj.taInterventiMtz.sp_insRichiesta(richiesta, dataLav, turno, matr, inizioGuasto, idxAmbito, idxPrior, isFermo, idxTipo, idxImpianto, idxMacchina, descrizione, ref numReq);
}
- catch(Exception exc)
+ catch (Exception exc)
{
logger.lg.scriviLog("Errore inserimento nuova richiesta!", tipoLog.ERROR);
logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION);