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);