Files
MoonPro.net/MP-TAB/WebUserControls/mod_confProd.ascx.cs
T
Samuele E. Locatelli 6054dda82a typo vari (if false)
2019-10-11 12:18:56 +02:00

507 lines
12 KiB
C#

using MapoDb;
using SteamWare;
using System;
using System.Web.UI;
namespace MoonProTablet.WebUserControls
{
public partial class mod_confProd : System.Web.UI.UserControl
{
/// <summary>
/// registrato nuovo valore
/// </summary>
public event EventHandler eh_inserting;
/// <summary>
/// registrato nuovo valore
/// </summary>
public event EventHandler eh_newVal;
/// <summary>
/// registrato nuovo valore
/// </summary>
public event EventHandler eh_reset;
/// <summary>
/// Data-Ora ultimo update valori produzione
/// </summary>
public DateTime dtReqUpdate
{
get
{
DateTime answ = DateTime.Now;
DateTime.TryParse(memLayer.ML.StringSessionObj("dtReqUpdate"), out answ);
return answ;
}
set
{
memLayer.ML.setSessionVal("dtReqUpdate", value);
}
}
/// <summary>
/// Dati produzioen rilevati
/// </summary>
public DS_ProdTempi.StatoProdRow datiProdAct;
/// <summary>
/// caricamento pagina
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
checkAll();
if (isMulti)
{
// sollevo evento!
if (eh_reset != null)
{
eh_reset(this, new EventArgs());
}
}
}
}
/// <summary>
/// Reset parametri x calcolo pezzi (no pezzi lasciati, dataora attuale...)
/// </summary>
private void resetParam()
{
dtReqUpdate = DateTime.Now;
numPzLasciati = 0;
}
/// <summary>
/// Aggiorno valori produzione alla data richiesta...
/// </summary>
/// <param name="newDate"></param>
public void doUpdate()
{
datiProdAct = DataLayer.obj.taStatoProd.GetData(idxMacchina, dtReqUpdate)[0];
// aggiorno visualizzazione...
numPzProdotti = datiProdAct.PzTotODL;
numPz2Rec = datiProdAct.Pz2RecTot;
numPzScaConf = datiProdAct.PzConfScarto;
numPzBuoniConf = datiProdAct.PzConfBuoni;
numPzProdotti2Rec = datiProdAct.Pz2RecTot;
numPzScarto2Rec = datiProdAct.Pz2RecScarto;
}
/// <summary>
/// Numero pezzi PRODOTTI GLOBALI
/// </summary>
protected int numPzProdotti
{
set
{
lblPzTotODL.Text = value.ToString();
}
}
/// <summary>
/// Numero pezzi da LASCIARE non dichiarati
/// </summary>
protected int numPzLasciati
{
set
{
txtNumLasciati.Text = value.ToString();
}
get
{
int answ = 0;
try
{
answ = Convert.ToInt32(txtNumLasciati.Text);
}
catch
{ }
return answ;
}
}
/// <summary>
/// Numero pezzi PRODOTTI da ultima conferma
/// </summary>
protected int numPz2Rec
{
set
{
lblPz2RecTot.Text = value.ToString();
}
}
/// <summary>
/// Numero pezzi SCARTO già confermati
/// </summary>
protected int numPzScaConf
{
set
{
lblPzConfScarto.Text = value.ToString();
}
}
/// <summary>
/// Numero pezzi BUONI già confermati
/// </summary>
protected int numPzBuoniConf
{
set
{
lblPzConfBuoni.Text = value.ToString();
}
}
/// <summary>
/// Numero pezzi PRODOTTI da registrare
/// </summary> da ultima conferma
protected int numPzProdotti2Rec
{
set
{
txtNumPezzi.Text = value.ToString();
}
get
{
int answ = 0;
try
{
answ = Convert.ToInt32(txtNumPezzi.Text);
}
catch
{ }
return answ;
}
}
/// <summary>
/// Numero pezzi SCARTATI da registrare
/// </summary>
protected int numPzScarto2Rec
{
set
{
lblPz2RecScarto.Text = value.ToString();
memLayer.ML.setSessionVal("lblPz2RecScarto", value);
}
get
{
int answ = 0;
try
{
answ = memLayer.ML.IntSessionObj("lblPz2RecScarto");
}
catch
{ }
return answ;
}
}
/// <summary>
/// Numero pezzi confermati (buoni - scarto)
/// </summary>
protected int numPzConfermati
{
get
{
return numPzProdotti2Rec - numPzScarto2Rec;
}
}
private void checkAll()
{
checkConfig();
fixSelMacc();
checkOdl();
lblOut.Text = "";
switchBtnConferma(false);
lbtShowConfProd.Visible = odlOk;
lblConfProd.Visible = !odlOk;
}
/// <summary>
/// verifica config x modalità permesse
/// </summary>
private void checkConfig()
{
// verifico SE sia permesso gestire i "Pezzi lasciati" in macchina...
lblNumLasciati.Visible = memLayer.ML.cdvb("enablePzProdLasciati");
txtNumLasciati.Visible = memLayer.ML.cdvb("enablePzProdLasciati");
}
/// <summary>
/// Verifica se abbia un ODL ATTIVO
/// </summary>
private void checkOdl()
{
lbtShowConfProd.Visible = odlOk;
lblConfProd.Visible = !odlOk;
lblMancaODL.Visible = !odlOk;
}
/// <summary>
/// Verifica se la macchina MAIN sia MULTI (da DatiMacchina / redis...)
/// </summary>
protected bool isMulti
{
get
{
return DataLayer.isMulti(idxMacchinaSession);
}
}
/// <summary>
/// Se la machcina è MULTI --> mostro selettore
/// </summary>
private void fixSelMacc()
{
divSelMacc.Visible = isMulti;
if (isMulti)
{
// salvo selezione submacc
ddlSubMacc.DataBind();
subMaccSel = ddlSubMacc.SelectedValue;
}
}
/// <summary>
/// restituisce css disabled SE odl NON OK...
/// </summary>
public string cssBtnConf
{
get
{
return odlOk ? "" : "disabled";
}
}
/// <summary>
/// Verifica ODL OK (ovvero caricato x macchina...)
/// </summary>
public bool odlOk
{
get
{
bool answ = true;
// se ODL > 0 è ok!!!
answ = (idxOdl > 0);
return answ;
}
}
/// <summary>
/// ODL correntemente sulla macchina
/// - cerca in Redis (TTL 5 sec)
/// - altrimenti recupera da DB...
/// </summary>
protected int idxOdl
{
get
{
// userò ODL del turno
int answ = 0;
// cerco da redis...
int.TryParse(DataLayer.currODL(idxMacchina, true), out answ);
return answ;
}
}
/// <summary>
/// idx macchina selezionata
/// </summary>
public string idxMacchina
{
get
{
string answ = memLayer.ML.StringSessionObj("IdxMacchina");
// verifoc: se multi uso selettore tendina...
if (isMulti)
{
if (ddlSubMacc.SelectedValue == "")
{
ddlSubMacc.DataBind();
}
if (ddlSubMacc.SelectedValue != "")
{
answ = ddlSubMacc.SelectedValue;
}
}
return answ;
}
set
{
memLayer.ML.setSessionVal("IdxMacchina", value);
}
}
/// <summary>
/// idx macchina selezionata
/// </summary>
public string idxMacchinaSession
{
get
{
return memLayer.ML.StringSessionObj("IdxMacchina");
}
set
{
memLayer.ML.setSessionVal("IdxMacchina", value);
}
}
/// <summary>
/// cambio stato visibilità pannello e testo button
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtShowConfProd_Click(object sender, EventArgs e)
{
switchBtnConferma(!divInnovazioni.Visible);
}
/// <summary>
/// determina comportamento btn conferma
/// </summary>
private void switchBtnConferma(bool showConf)
{
// aggiorno valori rilevati
resetParam();
doUpdate();
divInnovazioni.Visible = showConf;
if (showConf)
{
// continuo update
lbtSalva.Visible = showConf;
try
{
updatePzBuoni();
// sollevo evento!
if (eh_inserting != null)
{
eh_inserting(this, new EventArgs());
}
}
catch
{
txtNumPezzi.Text = "0";
logger.lg.scriviLog(string.Format("Errore recupero pezzi da confermare per la macchina {0}", idxMacchina), tipoLog.ERROR);
}
}
if (showConf)
{
lblShowConfProd.Text = "Nascondi Conferma";
}
else
{
lblShowConfProd.Text = "Mostra Conferma";
// sollevo evento!
if (eh_reset != null)
{
eh_reset(this, new EventArgs());
}
}
}
/// <summary>
/// salvo produzione
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtSalva_Click(object sender, EventArgs e)
{
if (memLayer.ML.CRI("modoConfProd") == 2)
{
confermaPerTurni();
}
else
{
confermaPerGiorni();
}
// refresh tabella dati tablet...
DataLayer.obj.taMSE.forceRecalc(0, idxMacchina);
// mostro output
lblOut.Text = string.Format("Confermata la produzione per {0} pezzi! (+{1} pz scarto) alle {2:yyyy-MM-dd HH:mm:ss}", numPzConfermati, numPzScarto2Rec, dtReqUpdate);
// cambio button conferma...
switchBtnConferma(!txtNumPezzi.Enabled);
// sollevo evento!
if (eh_newVal != null)
{
eh_newVal(this, new EventArgs());
}
doUpdate();
}
/// <summary>
/// effettua conferma per giorni della produzione
/// </summary>
private void confermaPerGiorni()
{
DataLayer.obj.confermaProdMacchina(idxMacchina, memLayer.ML.CRI("modoConfProd"), numPzConfermati, numPzScarto2Rec, dtReqUpdate);
}
/// <summary>
/// effettua conferma per turni della produzione
/// </summary>
private void confermaPerTurni()
{
DataLayer.obj.confermaProdMacchina(idxMacchina, memLayer.ML.CRI("modoConfProd"), numPzConfermati, numPzScarto2Rec, dtReqUpdate);
}
/// <summary>
/// update post modifica pz buoni
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtNumPezzi_TextChanged(object sender, EventArgs e)
{
lblOut.Text = "";
updatePzBuoni();
}
/// <summary>
/// aggiorna visualizzazione pz buoni /prodotti - scarti)
/// </summary>
private void updatePzBuoni()
{
// se ho dei pezzi lasciati RICALCOLO la data...
if (numPzLasciati > 0)
{
// calcolo la data..
DS_ProdTempi.TempiCicloRilevatiDataTable tab = DataLayer.obj.taTempiCicloRilevati.getLastPzByMaccQta(idxMacchina, DateTime.Now, numPzLasciati);
if (tab.Rows.Count > 0)
{
dtReqUpdate = tab[0].DataOraRif.AddSeconds(1);
}
// aggiorno
doUpdate();
}
// aggiorno la data calcolo + pezzi buoni...
lblDtRec.Text = dtReqUpdate.ToString();
lblPz2RecBuoni.Text = numPzConfermati.ToString();
}
/// <summary>
/// Update pz lasciati --> aggiorno!
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtNumLasciati_TextChanged(object sender, EventArgs e)
{
lblOut.Text = "";
updatePzBuoni();
}
protected void ddlSubMacc_SelectedIndexChanged(object sender, EventArgs e)
{
subMaccSel = ddlSubMacc.SelectedValue;
checkAll();
}
protected void ddlSubMacc_DataBound(object sender, EventArgs e)
{
// se ho in memoria un valore LO REIMPOSTO...
if (subMaccSel != "")
{
// provo a preselezionare...
try
{
ddlSubMacc.SelectedValue = subMaccSel;
}
catch
{ }
}
}
/// <summary>
/// Sotto sistema (macchina) selezionato
/// </summary>
public string subMaccSel
{
get
{
return memLayer.ML.StringSessionObj("subMaccSel");
}
set
{
memLayer.ML.setSessionVal("subMaccSel", value);
}
}
}
}