Files
C.TRACK/C-TRACK/barcode.aspx.cs

716 lines
25 KiB
C#

using AppData;
using Newtonsoft.Json;
using SteamWare;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Web.UI;
namespace C_TRACK
{
public partial class barcode : BasePage
{
/// <summary>
/// idxRec della fase attiva
/// </summary>
public int idxRecCurr
{
get
{
return memLayer.ML.IntSessionObj("idxRecCurr");
}
}
/// <summary>
/// Qta della fase attiva
/// </summary>
public int QtaFaseCurr
{
get
{
return memLayer.ML.IntSessionObj("QtaFaseCurr");
}
}
/// <summary>
/// Codice TASK corrente
/// </summary>
public string CurrNumTask
{
get
{
return memLayer.ML.StringSessionObj("CurrNumTask");
}
set
{
memLayer.ML.setSessionVal("CurrNumTask", value);
// cerco articolo e lo salvo...
string CurrCodArt = "";
try
{
CurrCodArt = DLMan.taTL.getByKey(value)[0].CodArt;
}
catch
{ }
memLayer.ML.setSessionVal("CurrCodArt", CurrCodArt);
}
}
/// <summary>
/// Codice TAG corrente
/// </summary>
public string CurrCodTag
{
get
{
// se è visibile il modulo restituisco val selezionato altrimenti vuoto...
return mod_selTag.Visible ? mod_selTag.CodTag : "";
}
set
{
mod_selTag.CodTag = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
// Crea stopwatch.
Stopwatch stopwatch = new Stopwatch();
// Avvio...
stopwatch.Start();
checkVisib();
if (!Page.IsPostBack)
{
traduciObj();
numDD = memLayer.ML.CRI("numDD");
cacheValSec = memLayer.ML.CRI("cacheValSec");
divReload.Visible = devicesAuthProxy.stObj.userHasRight("CT_userStart");
setTipoTaskSel();
}
checkRequisiti();
// effettuo load valori...
setupComandiBarcode();
setupValoriBarcode();
// a seconda di pagina singola o multi determino come procedere con comani / dati grezzi...
if (mUtils.postIsMulti)
{
// gestiosco segnali "grezzi"
mod_barcode1.eh_dataRead += Mod_barcode_eh_dataRead;
mod_postMulti.eh_reqUpdate += Mod_postMulti_eh_reqUpdate;
// SE fosse un reset ESEGUO comando!!!
if (mod_barcode1.comandoRegistrato.prevCmdIn == mUtils.reCmdResetOper)
{
eseguiComando();
}
}
else
{
// registro eventi
mod_barcode1.eh_comandoRegistrato += new EventHandler(Mod_barcode_eh_comandoRegistrato);
mod_btnComandi1.eh_clickComando += new EventHandler(mod_btnComandi1_eh_clickComando);
}
mod_selTask.eh_dataSel += Mod_selTask_eh_dataSel;
// registro
stopwatch.Stop();
lastUpdDuration = stopwatch.Elapsed;
}
private void Mod_postMulti_eh_reqUpdate(object sender, EventArgs e)
{
setTipoTaskSel();
// aggiorna eleco task...
mod_taskRec.doUpdate();
}
private void setTipoTaskSel()
{
// in base al tipo di postazione è per user o per post multi
if (mUtils.postIsMulti)
{
mod_taskRec.tipoSelezione = WebUserControls.selType.byPostMulti;
}
else
{
mod_taskRec.tipoSelezione = WebUserControls.selType.byUser;
}
}
private void Mod_selTask_eh_dataSel(object sender, EventArgs e)
{
// selezione commessa --> chiamo metodo caricamento comandi in modulo barcode...
mod_barcode1.loadBtnClickComando();
// refresh master...
((WebMasterPages.Bootstrap)this.Master).doUpdate();
}
/// <summary>
/// Verifica visibilità componenti bcode e selettore...
/// </summary>
private void checkVisib()
{
mod_barcode1.Visible = mUtils.OptUseBCode;
mod_selTask.Visible = mUtils.OptUseSelTask;
// per i tags NON DEVE essere una post multi e DEVE esserci una comemssa...
mod_selTag.Visible = mUtils.OptUseSelTag && !mUtils.postIsMulti && CurrNumTask != "";
// se ho in pancia la selezione di un opzione ed è visibile tag --> seleziono!
if (mUtils.OptBCodePrepDo && mod_selTag.Visible)
{
// SE HO in memoria...
if (mUtils.optValueBC != "")
{
try
{
// seleziono
mod_selTag.PrevCodTag = mUtils.optValueBC;
}
catch
{ }
//...e tolgo valore preselezione
mUtils.optValueBC = "";
}
}
}
/// <summary>
/// Verifica i requisiti (operatore e postazione) per operare
/// </summary>
private void checkRequisiti()
{
mod_btnComandi1.Visible = (mUtils.CodOpr != "" && mUtils.CodPost != "");
// ora controllo SE SIA una postazione multi e di conseguenza imposto div relativi...
showMulti = mUtils.postIsMulti;
}
protected bool showMulti
{
set
{
divMulti.Visible = value;
mod_postMulti.Visible = value;
divMain.Attributes.Remove("class");
divMain.Attributes.Add("class", value ? "col-12 col-xl-9" : "col-12");
}
}
/// <summary>
/// Numero comandi ammessi caricati
/// </summary>
public int nComandi
{
get
{
return comandiAmmessiBCode.Count;
}
}
/// <summary>
/// Numero record BCode caricati
/// </summary>
public int nBCodeRec
{
get
{
return valoriAmmessiBCode.Count;
}
}
/// <summary>
/// Memorizzo durata ultimo update (lettura record...) come timespan
/// </summary>
public TimeSpan lastUpdDuration
{
get
{
return (TimeSpan)memLayer.ML.objSessionObj("lastUpdDuration");
}
set
{
memLayer.ML.setSessionVal("lastUpdDuration", value);
}
}
/// <summary>
/// inviato un comando dai link buttons
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void mod_btnComandi1_eh_clickComando(object sender, EventArgs e)
{
// chiamo metodo caricamento comandi in modulo barcode...
mod_barcode1.loadBtnClickComando();
}
private void traduciObj()
{
}
/// <summary>
/// imposta/recupera valore num gg da rileggere...
/// </summary>
public int numDD
{
get
{
int answ = 85;
try
{
answ = Convert.ToInt32(txtNumDD.Text.Trim());
}
catch
{ }
return answ;
}
set
{
txtNumDD.Text = value.ToString();
}
}
/// <summary>
/// logLevel impostato...
/// </summary>
public int logLevel
{
get
{
int answ = 1;
try
{
answ = memLayer.ML.CRI("_logLevel");
}
catch
{ }
return answ;
}
}
/// <summary>
/// imposta/recupera valore num sec validità cache...
/// </summary>
public int cacheValSec
{
get
{
int answ = 55;
try
{
answ = Convert.ToInt32(txtCacheSec.Text.Trim());
}
catch
{ }
return answ;
}
set
{
txtCacheSec.Text = value.ToString();
}
}
/// <summary>
/// Variabile x controllo scadenza valori in cache
/// </summary>
protected DateTime lastDataRefresh
{
get
{
DateTime answ = DateTime.Now.AddDays(-1);
try
{
answ = Convert.ToDateTime(memLayer.ML.objCacheObj("lastBCodeDataRead"));
}
catch
{ }
return answ;
}
set
{
// registro che i valori in cache sono scaduti...
memLayer.ML.setCacheVal("lastBCodeDataRead", value);
if (logLevel > 5)
{
logger.lg.scriviLog("impostata validita cache");
}
}
}
protected bool cacheValida
{
get
{
bool answ = false;
try
{
if (DateTime.Now.Subtract(lastDataRefresh).TotalSeconds < cacheValSec)
{
answ = true;
}
}
catch
{ }
return answ;
}
}
/// <summary>
/// Elenco (da cache) dei valori ammessi x BCode
/// </summary>
protected Dictionary<string, string> valoriAmmessiBCode
{
get
{
Dictionary<string, string> answ = new Dictionary<string, string>();
bool valIncache = memLayer.ML.isInCacheObject("valoriAmmessiBCode");
if (valIncache && cacheValida)
{
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(memLayer.ML.objCacheObj("valoriAmmessiBCode").ToString());
}
return answ;
}
set
{
string serVal = JsonConvert.SerializeObject(value);
memLayer.ML.setCacheVal("valoriAmmessiBCode", serVal);
lastDataRefresh = DateTime.Now;
}
}
/// <summary>
/// Elenco (da cache) dei comandi ammessi x BCode
/// </summary>
protected Dictionary<string, string> comandiAmmessiBCode
{
get
{
Dictionary<string, string> answ = new Dictionary<string, string>();
if (memLayer.ML.isInCacheObject("comandiAmmessiBCode"))
{
try
{
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(memLayer.ML.objCacheObj("comandiAmmessiBCode").ToString());
}
catch
{
answ = new Dictionary<string, string>();
}
}
return answ;
}
set
{
string serVal = JsonConvert.SerializeObject(value);
memLayer.ML.setCacheVal("comandiAmmessiBCode", serVal);
lastDataRefresh = DateTime.Now;
}
}
/// <summary>
/// effettuo il setup dei valori ammessi x il barcode...
/// </summary>
private void setupValoriBarcode()
{
if (valoriAmmessiBCode.Count > 0)
{
// assegno valori al barcode...
mod_barcode1.tabValori = valoriAmmessiBCode;
if (logLevel > 5)
{
logger.lg.scriviLog("Letti da cache VALORI Barcode", tipoLog.INFO);
}
}
else
{
// Crea stopwatch.
Stopwatch stopwatch = new Stopwatch();
// Avvio...
stopwatch.Start();
// carico dati!
if (logLevel > 5)
{
logger.lg.scriviLog("Inizio setup valori Barcode", tipoLog.INFO);
}
Dictionary<string, string> valori = new Dictionary<string, string>();
// aggiungo i COD OPERATORE
var tabOpr = DLMan.taAO.GetData();
foreach (var rigaOpr in tabOpr)
{
valori.Add(rigaOpr.CodOpr, string.Format("{0} {1}", rigaOpr.Cognome, rigaOpr.Nome));
}
if (logLevel > 5)
{
logger.lg.scriviLog("Caricato OPERATORI per Barcode", tipoLog.INFO);
}
// aggiungo le POSTAZIONI
var tabPost = DLMan.taAP.GetData();
foreach (var rigaPost in tabPost)
{
valori.Add(rigaPost.CodPost, rigaPost.Descrizione);
}
if (logLevel > 5)
{
logger.lg.scriviLog("Caricato POSTAZIONI per Barcode", tipoLog.INFO);
}
// aggiungo le commesse...
var tabTask = DLMan.taTL.getLastNumDD(numDD);
foreach (var rigaTask in tabTask)
{
valori.Add(rigaTask.NumTask, string.Format("Comm. {0} | Art. {1} | Qta {2}", rigaTask.NumTask, rigaTask.CodArt, rigaTask.QtaRic));
}
if (logLevel > 5)
{
logger.lg.scriviLog("Caricato TaskList per Barcode", tipoLog.INFO);
}
// assegno valori al barcode...
mod_barcode1.tabValori = valori;
valoriAmmessiBCode = valori;
lastDataRefresh = DateTime.Now;
logger.lg.scriviLog("Letti da DB VALORI Barcode", tipoLog.INFO);
stopwatch.Start();
lastUpdDuration = stopwatch.Elapsed;
}
}
/// <summary>
/// carico da tab i comandi ammessi per il barcode...
/// </summary>
private void setupComandiBarcode()
{
if (comandiAmmessiBCode.Count > 0)
{
// assegno valori al barcode...
mod_barcode1.comandiAmmessi = comandiAmmessiBCode;
if (logLevel > 5)
{
logger.lg.scriviLog("Letti da cache COMANDI Barcode", tipoLog.INFO);
}
}
else
{
Dictionary<string, string> comandi = new Dictionary<string, string>();
// !!!FARE!!! togliere...
var tabCmd = DLMan.taTE2S.getByMappa("E_BC");
foreach (var rigaCmd in tabCmd)
{
comandi.Add(rigaCmd.CodEvento.ToUpper(), devicesAuthProxy.stObj.traduci(rigaCmd.text2show));
}
var tabFasi = DLMan.taAF.GetData();
foreach (var rigaFase in tabFasi)
{
comandi.Add(rigaFase.CodFase, rigaFase.DescrFase);
}
// impongo i comandi al barcode...
mod_barcode1.comandiAmmessi = comandi;
comandiAmmessiBCode = comandi;
logger.lg.scriviLog("Letti da DB COMANDI Barcode", tipoLog.INFO);
}
}
/// <summary>
/// il barcode ha registrato un evento...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Mod_barcode_eh_dataRead(object sender, EventArgs e)
{
// passo il processing al modulo postMulti...
mod_postMulti.processInput(mod_barcode1.rawInput);
}
/// <summary>
/// il barcode ha registrato un evento...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Mod_barcode_eh_comandoRegistrato(object sender, EventArgs e)
{
switch (stateMachine.st.azioneComando(mod_barcode1.comandoRegistrato))
{
case tipoAzione.annulla:
mod_barcode1.resetMe();
break;
case tipoAzione.conferma:
// se input completo eseguo...
if (mod_barcode1.comandoRegistrato.currCmdIn != "" && mod_barcode1.comandoRegistrato.valore != "")
{
eseguiComando();
}
else // altrimenti warning... e rimetto valori precedenti
{
mod_barcode1.txtRich2show = user_std.UtSn.Traduci("codObjUnknown");
mod_barcode1.comandoRegistrato.currCmdIn = mod_barcode1.comandoRegistrato.prevCmdIn;
mod_barcode1.comandoRegistrato.descrComando = mod_barcode1.comandoRegistrato.descrComandoPrev;
mod_barcode1.txtInput2show = mod_barcode1.comandoRegistrato.descrComandoPrev;
}
break;
case tipoAzione.esegui:
// se ho auto conferma eseguo!
if (memLayer.ML.CRB("autoConfCmd"))
{
mod_barcode1.comandoRegistrato.prevCmdIn = mod_barcode1.comandoRegistrato.currCmdIn;
mod_barcode1.comandoRegistrato.currCmdIn = "ok";
eseguiComando();
}
else
{
if (mod_barcode1.comandoRegistrato.valore != "")
{
mod_barcode1.txtRich2show = user_std.UtSn.Traduci("pleaseConfirm");
}
else
{
mod_barcode1.txtRich2show = user_std.UtSn.Traduci("codObjUnknown");
}
}
break;
case tipoAzione.noAct:
break;
default:
break;
}
mod_btnComandi1.updateBtn();
}
/// <summary>
/// eseguo il comando
/// </summary>
private void eseguiComando()
{
// in primis: sono in esecuzione, x cui il comando è valido...
string msg2show = "";
Match testNumTask = Regex.Match(mod_barcode1.comandoRegistrato.valore, mUtils.reNumTask);
Match testOper = Regex.Match(mod_barcode1.comandoRegistrato.valore, mUtils.reCodOper);
Match testPost = Regex.Match(mod_barcode1.comandoRegistrato.valore, mUtils.reCodPost);
// verifico se cmd setup utente...
if (mod_barcode1.comandoRegistrato.prevCmdIn == mUtils.reCmdResetOper)
{
// rimuovo OPR da POST occupate
DLMan.taAP.resetOpr(mUtils.CodOpr);
// rimuovo OPR da sessione
mUtils.CodOpr = "";
// rimuovo post corrente...
mUtils.CodPost = "";
// rimuovo MULTI
mUtils.postIsMulti = false;
// rimuovo COMMESSA
CurrNumTask = "";
// rimuovo eventuale val opzionale
mUtils.optValueBC = "";
// torno a pagina base...
Response.Redirect("~/barcode");
}
else if (mod_barcode1.comandoRegistrato.prevCmdIn == mUtils.reCmdResetNumTask)
{
// rimuovo COMMESSA
CurrNumTask = "";
// rimuovo eventuale val opzionale
mUtils.optValueBC = "";
// torno a pagina base...
Response.Redirect("~/barcode");
}
//else if (mod_barcode1.comandoRegistrato.valore.Contains("OPR."))
else if (testOper.Success)
{
// imposto operatore
mUtils.CodOpr = mod_barcode1.comandoRegistrato.valore;
// SE HO postazione...
if (mUtils.CodPost != "")
{
// ...e SE la postazione è libera associo e registro
var tabPost = DLMan.taAP.getByKey(mUtils.CodPost);
if (tabPost.Rows.Count == 1)
{
var rigaPost = tabPost[0];
if (rigaPost.CodOpr == mUtils.CodOpr || rigaPost.CodOpr == "")
{
DLMan.taAP.setOpr(mUtils.CodPost, mUtils.CodOpr);
}
else
{
// tolgo postazione (è occupata...)
mUtils.CodPost = "";
}
}
}
Response.Redirect("~/barcode");
}
else if (testPost.Success)
{
// SE HO operatore ...
if (mUtils.CodOpr != "")
{
// ...e SE la postazione è libera o c'è lui associo e registro
var tabPost = DLMan.taAP.getByKey(mod_barcode1.comandoRegistrato.valore);
if (tabPost.Rows.Count == 1)
{
var rigaPost = tabPost[0];
if (rigaPost.CodOpr == mUtils.CodOpr || rigaPost.CodOpr == "")
{
mUtils.CodPost = mod_barcode1.comandoRegistrato.valore;
DLMan.taAP.setOpr(mUtils.CodPost, mUtils.CodOpr);
// svuoto vallori
}
}
}
Response.Redirect("~/barcode");
}
else if (testNumTask.Success)
{
CurrNumTask = mod_barcode1.comandoRegistrato.valore;
Response.Redirect("~/barcode");
}
else if (mod_barcode1.comandoRegistrato.prevCmdIn == mUtils.reCmdPause)
{
// registro chiusura con qta 0 (pausa)
DLMan.taTR.updateQuery(idxRecCurr, DateTime.Now, 0);
Response.Redirect("~/barcode");
}
else if (mod_barcode1.comandoRegistrato.prevCmdIn == mUtils.reCmdClose)
{
// registro chiusura con la qta indicata
DLMan.taTR.updateQuery(idxRecCurr, DateTime.Now, QtaFaseCurr);
Response.Redirect("~/barcode");
}
else if (DLMan.taAF.getByKey(mod_barcode1.comandoRegistrato.prevCmdIn).Rows.Count > 0)
{
// se è un comando di fase --> registro INIZIO!
DLMan.taTR.insertQuery(mUtils.CodOpr, mUtils.CodPost, CurrNumTask, CurrCodTag, mod_barcode1.comandoRegistrato.prevCmdIn, DateTime.Now);
// controllo se sia fase di CHIUSURA DEFINITIVA registro con INIZIO e FINE insieme e CHIUDO commessa...
var rigaFase = DLMan.taAF.getByKey(mod_barcode1.comandoRegistrato.prevCmdIn)[0];
if (rigaFase.CloseTask)
{
// chiudo direttamente SIA fase che il TASK principale...
DLMan.taTL.updateClose(CurrNumTask, true);
// se è abilitato PODL indico chiuso anche li... IdxOdl = -10
// tolgo comm corrente...
CurrNumTask = "";
// rimuovo eventuale val opzionale
mUtils.optValueBC = "";
}
Response.Redirect("~/barcode");
}
// reset e mostro output...
mod_barcode1.resetMe();
if (msg2show != "")
{
mod_barcode1.txtInput2show = msg2show;
}
}
protected void btnReload_Click(object sender, EventArgs e)
{
resetCache();
}
private void resetCache()
{
// resetto tutto!
comandiAmmessiBCode = new Dictionary<string, string>();
valoriAmmessiBCode = new Dictionary<string, string>();
lastDataRefresh = DateTime.Now.AddDays(-1);
}
protected void txtCacheSec_TextChanged(object sender, EventArgs e)
{
resetCache();
}
protected void txtNumDD_TextChanged(object sender, EventArgs e)
{
resetCache();
}
}
}