Files
MoonPro.net/MP-Tablet/WebUserControls/mod_dichiarazione.ascx.cs
T
2017-04-14 14:01:32 +02:00

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