190 lines
7.7 KiB
C#
190 lines
7.7 KiB
C#
using MapoDb;
|
|
using SteamWare;
|
|
using System;
|
|
using System.Web.UI.WebControls;
|
|
|
|
namespace MoonProTablet.WebUserControls
|
|
{
|
|
public partial class mod_dichiarazione : System.Web.UI.UserControl
|
|
{
|
|
/// <summary>
|
|
/// classe MapoDB x uso locale
|
|
/// </summary>
|
|
protected MapoDb.MapoDb controllerMapo = new MapoDb.MapoDb();
|
|
/// <summary>
|
|
/// registrato nuovo valore
|
|
/// </summary>
|
|
public event EventHandler eh_newVal;
|
|
/// <summary>
|
|
/// idx macchina selezionata
|
|
/// </summary>
|
|
public int idxMacchina
|
|
{
|
|
get
|
|
{
|
|
return memLayer.ML.IntSessionObj("IdxMacchina");
|
|
}
|
|
set
|
|
{
|
|
memLayer.ML.setSessionVal("IdxMacchina", value);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// caricamento principale
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
repLI.DataBind();
|
|
}
|
|
/// <summary>
|
|
/// rimanda alla pagina di dettaglio della macchina scelta
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void hlEvento_Click(object sender, EventArgs e)
|
|
{
|
|
LinkButton lnkbtn = (LinkButton)sender;
|
|
int idxEvento = 0;
|
|
try
|
|
{
|
|
idxEvento = Convert.ToInt32(lnkbtn.CommandArgument);
|
|
}
|
|
catch
|
|
{ }
|
|
if (idxEvento > 0)
|
|
{
|
|
DS_applicazione.AnagraficaEventiRow rigaEvento = DataLayer.obj.taAnagEventi.GetByIdx(idxEvento)[0];
|
|
if (rigaEvento != null)
|
|
{
|
|
DS_applicazione.StatoMacchineRow rigaStato = DataLayer.obj.taStatoMacchine.GetDataByIdxMacchina(idxMacchina.ToString())[0];
|
|
// processo evento...
|
|
if (insRealtime)
|
|
{
|
|
// se realtime
|
|
controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), idxEvento, rigaStato.CodArticolo, "DRT", DataLayer.MatrOpr, rigaStato.pallet);
|
|
}
|
|
else
|
|
{
|
|
// in primis disabilito insert...
|
|
DataLayer.obj.taStatoMacchine.setInsEnabled(idxMacchina.ToString(), false);
|
|
// calcolo evento
|
|
string evento = idxEvento.ToString();
|
|
string commento = "";
|
|
try
|
|
{
|
|
evento = DataLayer.obj.taAnagEventi.GetByIdx(idxEvento)[0].Nome.Replace("Barcode - ", "");
|
|
}
|
|
catch
|
|
{ }
|
|
// genero stringa pseudo-univoca
|
|
string codRich = string.Format("{0:yyMMddHHmmss}-{1}", DateTime.Now, idxEvento);
|
|
// x prima cosa scrivo un evento tipo "1" x chiudere la durata appena prima dell'evento successivo
|
|
try
|
|
{
|
|
// cerco da 1 sec DOPO evento...
|
|
DS_applicazione.DiarioDiBordoDataTable tabNext = controllerMapo.nextEventoImpiantoFrom(idxMacchina.ToString(), dataOraEv.AddSeconds(1));
|
|
|
|
DateTime nextEvDT = DateTime.Now;
|
|
if (tabNext.Rows.Count > 0)
|
|
{
|
|
nextEvDT = tabNext[0].InizioStato;
|
|
}
|
|
// se non trovo chiusura evento inserisco a 1 minuto prima di adesso la chiusura...
|
|
else
|
|
{
|
|
nextEvDT = DateTime.Now.AddMinutes(-1);
|
|
}
|
|
// fix salvo la dichiarazione di chiusura
|
|
commento = string.Format("999 - M.Lav EndEvt: {0} [{1}]", evento, codRich);
|
|
controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), 1, rigaStato.CodArticolo, commento, DataLayer.MatrOpr, rigaStato.pallet, nextEvDT.AddSeconds(-1), DateTime.Now); // 1 hard-coded x resettare
|
|
}
|
|
catch
|
|
{ }
|
|
// update commento!
|
|
commento = string.Format("999 - Dich StartEvt: {0} [{1}]", evento, codRich);
|
|
// recupero data/ora evento da inserire (quella selezionata) ed AGGIUNGO 1 sec!!! così rimane traccia
|
|
controllerMapo.scriviRigaEventoBarcode(idxMacchina.ToString(), idxEvento, rigaStato.CodArticolo, commento, DataLayer.MatrOpr, rigaStato.pallet, dataOraEv.AddSeconds(1), DateTime.Now);
|
|
// eseguo ricalcolo!
|
|
DateTime startRicalcolo = dataOraEv.AddMinutes(memLayer.ML.confReadInt("minAnticipoRicalcolo"));
|
|
DataLayer.obj.taComm.stp_ricalcolaDatiMacchinaFromDate(idxMacchina.ToString(), startRicalcolo, 1); // nella stored imposto macchina OFFline e poi ONline, parto da "minAnticipoRicalcolo" minuti prima...
|
|
// aggiorno data evento x insert eventuale commento (5 sec...)
|
|
dataOraEv = dataOraEv.AddSeconds(5);
|
|
// riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente...
|
|
DataLayer.obj.taStatoMacchine.setInsEnabled(idxMacchina.ToString(), true);
|
|
}
|
|
// mostro esito
|
|
lblOut.Text = "Registrata dichiarazione fermata";
|
|
}
|
|
else
|
|
{
|
|
lblOut.Text = string.Format("Codice evento non valido! {0}", idxEvento);
|
|
}
|
|
}
|
|
repLI.DataBind();
|
|
// sollevo evento!
|
|
if (eh_newVal != null)
|
|
{
|
|
eh_newVal(this, new EventArgs());
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// url completo immagine
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <returns></returns>
|
|
public string ImgUrl(object url)
|
|
{
|
|
return string.Format("./images/iconDic/{0}.png", url);
|
|
}
|
|
/// <summary>
|
|
/// update (resetta testo)
|
|
/// </summary>
|
|
public void doUpdate()
|
|
{
|
|
lblOut.Text = "";
|
|
}
|
|
/// <summary>
|
|
/// determina se insert sia realtime o dataOra (in base a diff tra dataora sel ed evento, se superiore ad X minuto NON è realtime)
|
|
/// </summary>
|
|
public bool insRealtime
|
|
{
|
|
get
|
|
{
|
|
bool answ = true;
|
|
try
|
|
{
|
|
if (Math.Abs(dataOraEv.Subtract(DateTime.Now).TotalMinutes) > memLayer.ML.confReadInt("dltMinRealtime"))
|
|
{
|
|
answ = false;
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// data-ora selezionata
|
|
/// </summary>
|
|
protected DateTime dataOraEv
|
|
{
|
|
set
|
|
{
|
|
memLayer.ML.setSessionVal("dataOraEv", value);
|
|
}
|
|
get
|
|
{
|
|
DateTime answ = DateTime.Now;
|
|
try
|
|
{
|
|
answ = Convert.ToDateTime(memLayer.ML.objSessionObj("dataOraEv"));
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
}
|
|
}
|
|
} |