Impostata pagina x selezione interventi da anticipare (vanno davvero generati ora...)
This commit is contained in:
+175
-160
@@ -8,180 +8,195 @@ using SteamWare;
|
||||
/// </summary>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// avvio componente
|
||||
/// </summary>
|
||||
protected mtzProgr()
|
||||
{
|
||||
initTA();
|
||||
setupConnectionString();
|
||||
}
|
||||
/// <summary>
|
||||
/// avvio componente
|
||||
/// </summary>
|
||||
protected mtzProgr()
|
||||
{
|
||||
initTA();
|
||||
setupConnectionString();
|
||||
}
|
||||
|
||||
private void initTA()
|
||||
private void initTA()
|
||||
{
|
||||
taMtzPend = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgPendingTableAdapter();
|
||||
taMtzProg = new GIM_dataLayer.DS_applicazioneTableAdapters.MtzProgrammataTableAdapter();
|
||||
}
|
||||
/// <summary>
|
||||
/// effettua setup dei connection strings da web.config della singola applicazione
|
||||
/// </summary>
|
||||
protected virtual void setupConnectionString()
|
||||
{
|
||||
// connections del db
|
||||
string connString = memLayer.ML.confReadString("AppConnectionString");
|
||||
taMtzPend.Connection.ConnectionString = connString;
|
||||
taMtzProg.Connection.ConnectionString = connString;
|
||||
}
|
||||
/// <summary>
|
||||
/// singleton accesso ai metodi di manutenzione programmata
|
||||
/// </summary>
|
||||
public static mtzProgr obj = new mtzProgr();
|
||||
/// <summary>
|
||||
/// anticipa l'intervneto indicato e genera il successivo a scadenza normale
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
/// verifica se ci siano interventi pending ed eventualmente li accoda
|
||||
/// </summary>
|
||||
public void processaCodaMtzPro()
|
||||
{
|
||||
// cerco eventuali interventi scaduti
|
||||
insertPending();
|
||||
// metto in coda tutte le ricorrenze non presenti...
|
||||
rebuildPending();
|
||||
}
|
||||
/// <summary>
|
||||
/// inserisce nelle richieste attuali gli interventi programmati scaduti
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// effettua setup dei connection strings da web.config della singola applicazione
|
||||
/// </summary>
|
||||
protected virtual void setupConnectionString()
|
||||
}
|
||||
/// <summary>
|
||||
/// ricostruisce la coda degli intervneti pending
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
/// <summary>
|
||||
/// singleton accesso ai metodi di manutenzione programmata
|
||||
/// </summary>
|
||||
public static mtzProgr obj = new mtzProgr();
|
||||
/// <summary>
|
||||
/// verifica se ci siano interventi pending ed eventualmente li accoda
|
||||
/// </summary>
|
||||
public void processaCodaMtzPro()
|
||||
{
|
||||
// cerco eventuali interventi scaduti
|
||||
insertPending();
|
||||
// metto in coda tutte le ricorrenze non presenti...
|
||||
rebuildPending();
|
||||
}
|
||||
/// <summary>
|
||||
/// inserisce nelle richieste attuali gli interventi programmati scaduti
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// ricostruisce la coda degli intervneti pending
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// inserisce l'intervento della riga indicata tra quelli "pending"
|
||||
/// </summary>
|
||||
/// <param name="riga"></param>
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
/// genera la richiesta di manutenzione dalla richiesta pending associata
|
||||
/// </summary>
|
||||
/// <param name="riga"></param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// inserisce l'intervento della riga indicata tra quelli "pending"
|
||||
/// </summary>
|
||||
/// <param name="riga"></param>
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
/// genera la richiesta di manutenzione dalla richiesta pending associata
|
||||
/// </summary>
|
||||
/// <param name="riga"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,17 +2,16 @@
|
||||
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<div class="col-sm-4">
|
||||
<asp:CheckBox runat="server" ID="chkAnticipaEnabled" Text='<%# traduci("AbilitaAnticipo")%>' AutoPostBack="True" OnCheckedChanged="chkAnticipaEnabled_CheckedChanged" />
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="col-sm-4">
|
||||
<asp:Button runat="server" ID="btnCreateInt" Text='<%# traduci("getIntMtzProgSel") %>' Visible="false" CssClass="btn btn-success" Width="100%" OnClick="btnCreateInt_Click" />
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<div class="col-sm-4 text-right">
|
||||
<asp:HyperLink ID="hlExportExcel" runat="server" Target="_blank" />
|
||||
</div>
|
||||
</div>
|
||||
<%--<div style="text-align: right;">
|
||||
</div>--%>
|
||||
<div style="font-size: 8pt;">
|
||||
<asp:GridView ID="grView" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CssClass="table table-striped" DataKeyNames="idxPending" DataSourceID="ods" OnDataBound="grView_DataBound" OnPageIndexChanged="grView_PageIndexChanged">
|
||||
<PagerStyle CssClass="active GridPager" />
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gestione click pulsante "abilita anticipo"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
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();
|
||||
}
|
||||
/// <summary>
|
||||
/// Richiesta generazione anticipo interventi selezionati
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,15 @@ public partial class mod_mtzPrevPending {
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.CheckBox chkAnticipaEnabled;
|
||||
|
||||
/// <summary>
|
||||
/// Controllo btnCreateInt.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Campo generato automaticamente.
|
||||
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button btnCreateInt;
|
||||
|
||||
/// <summary>
|
||||
/// Controllo hlExportExcel.
|
||||
/// </summary>
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user