using GPW_data;
using SteamWare;
using System;
using System.Web.UI;
namespace GPW.WebUserControls
{
public partial class mod_bCodeTimb : System.Web.UI.UserControl
{
///
/// salva il dato se il prox sia entrata...
///
protected bool nextIsEntrata
{
get
{
return memLayer.ML.BoolSessionObj("nextIsEntrata");
}
set
{
memLayer.ML.setSessionVal("nextIsEntrata", value);
}
}
///
/// dataora associata all'evento scansioen BCode
///
protected DateTime orarioBCode
{
get
{
return (DateTime)memLayer.ML.objSessionObj("dataOraBCode");
}
set
{
memLayer.ML.setSessionVal("dataOraBCode", value);
}
}
///
/// indica i secondi di countdown rimasti x auto-commit
///
protected int countDown
{
get
{
return memLayer.ML.IntSessionObj("countDownBCode");
}
set
{
memLayer.ML.setSessionVal("countDownBCode", value);
}
}
///
/// pagina corrente
///
protected string paginaCorrente
{
get
{
string answ = "";
Uri MyUrl = Request.Url;
string delimStr = "/";
char[] delimiter = delimStr.ToCharArray();
string[] finalUrl = MyUrl.LocalPath.ToString().Split(delimiter);
int n = finalUrl.Length;
answ = finalUrl[n - 1].ToString();
return answ;
}
}
///
/// prox messaggio utente (da mostrare)
///
protected string nextUsrMsg
{
get
{
string answ = "";
try
{
answ = memLayer.ML.StringSessionObj("nextUsrMsg");
}
catch
{ }
if (string.IsNullOrEmpty(answ))
{
answ = "...waiting...";
}
return answ;
}
set
{
memLayer.ML.setSessionVal("nextUsrMsg", value);
}
}
///
/// caricamento pagina
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
chekIpPostazione();
if (!Page.IsPostBack)
{
DataProxy.idxDipendente = -1;
bool visibile = false;
setCtrlState(visibile);
checkBarcode();
}
timerConf.Tick += new EventHandler(timerConf_Tick);
lblDipendenteAttivo.Text = nextUsrMsg;
txtBarcode.Focus();
}
///
/// verifica IP della postazione chiamante, se non è tra quelli permessi (o non è indicato "*") rimanda a pagina precedente...
///
private void chekIpPostazione()
{
// recupero IP
string IPv4 = Request.UserHostName;
// controllo se IP locale = approvata...
if (!memLayer.ML.confReadString("ipv4StazBCode").Contains(IPv4) && memLayer.ML.confReadString("ipv4StazBCode") != "*")
{
Response.Redirect("~/Default.aspx");
}
}
///
/// allo scadere del timer controllo countdown!
///
///
///
void timerConf_Tick(object sender, EventArgs e)
{
contatorePag = 0;
if (countDown > 1)
{
countDown = countDown - 1;
lblCountDown.Text = countDown.ToString();
txtBarcode.Focus();
}
else
{
// salvo operazione di default!
registraTimbratura(nextIsEntrata);
// reset visualizzazione
setCtrlState(false);
timerConf.Enabled = false;
// reset valori
Response.Redirect(paginaCorrente);
}
}
///
/// imposta lo stato visibile dei controlli
///
///
private void setCtrlState(bool visibile)
{
pnlTimer.Visible = visibile;
//imgRun.Visible = visibile;
if (DataProxy.idxDipendente > 0)
{
grView.Visible = true;
}
else
{
grView.Visible = visibile;
}
}
///
/// verifica in che stato debbano essere i buttons (se barcode utente valido)
///
private void checkButtons()
{
// controllo se il prox comando DOVREBBE essere entrata o uscita
nextIsEntrata = true;
// controllo dipendente
if (DataProxy.idxDipendente > 0)
{
// ricavo ultima timbratura..
nextIsEntrata = timbratrice.nextIsEntrata(DataProxy.idxDipendente);
string tipoTimb = "uscita";
// di conseguenza cambio abilitazione ad un buttons
if (nextIsEntrata)
{
btnEntrata.CssClass = "btnPreferred";
btnUscita.CssClass = "btnStd";
tipoTimb = "ENTRATA";
}
else
{
btnEntrata.CssClass = "btnStd";
btnUscita.CssClass = "btnPreferred";
tipoTimb = "USCITA";
}
lblNextTimbr.Text = string.Format("Allo scadere del timer verrà registrata una timbratura di {0}", tipoTimb);
}
else
{
btnEntrata.CssClass = "btnStd";
btnUscita.CssClass = "btnStd";
lblNextTimbr.Text = "";
}
}
///
/// controlla se ci sia un barcode valido, tra:
/// - idxDipendente (INT, eventuale padding di zero...)
/// - matr dipendente
/// - cf dipendente
///
private void checkBarcode()
{
if (!string.IsNullOrEmpty(barcodeIn))
{
// mostro i buttons enabled
btnEntrata.Enabled = true;
btnUscita.Enabled = true;
lblMessaggi.Text = "Barcode";
switch (tipoBCode)
{
case tipoCodiceBarcode.idxDipendente:
// calcolo idxOperatore...
int idxOper = 0;
try
{
idxOper = Convert.ToInt32(barcodeIn.ToLowerInvariant().Replace("idx", ""));
}
catch
{ }
// controllo esista il codice idxDipendente scansionato
if (DataProxy.DP.taDipendenti.getByIdx(idxOper).Rows.Count == 0)
{
setCtrlState(false);
DataProxy.idxDipendente = 0;
orarioBCode = DateTime.Now;
timerConf.Enabled = false;
nextUsrMsg = "...waiting...";
lblMessaggi.Text += " - codice non valido / non trovato.";
pnlAll.CssClass = "stileComandoKo";
}
else
{
setCtrlState(true);
DataProxy.idxDipendente = idxOper;
orarioBCode = DateTime.Now;
DS_Applicazione.DipendentiRow rigaDip = DataProxy.DP.taDipendenti.getByIdx(idxOper)[0];
nextUsrMsg = string.Format("{0} {1} - {2: HH:mm:ss}", rigaDip.Cognome, rigaDip.Nome, orarioBCode);
lblMessaggi.Text += " - impostato dipendente!";
pnlAll.CssClass = "stileComandoOk";
// faccio partire countdown
countDown = SteamWare.memLayer.ML.confReadInt("secTimeoutBCode");
lblCountDown.Text = countDown.ToString();
timerConf.Enabled = true;
}
txtBarcode.Focus();
break;
case tipoCodiceBarcode.matrDipendente:
// fare!!!
txtBarcode.Focus();
break;
case tipoCodiceBarcode.cfDipendente:
// fare!!!
txtBarcode.Focus();
break;
case tipoCodiceBarcode.Comando:
// procedo SOLO se ho cod dipendente
if (DataProxy.DP.taDipendenti.getByIdx(DataProxy.idxDipendente).Rows.Count > 0)
{
timerConf.Enabled = false;
setCtrlState(false);
}
nextUsrMsg = "...waiting...";
// controlla se sia entra/esci (IN/OUT)
if (barcodeIn.ToUpperInvariant() == "CMDIN")
{
// registro ingresso!
registraTimbratura(true);
Response.Redirect(paginaCorrente);
}
else if (barcodeIn.ToUpperInvariant() == "CMDOUT")
{
// registro uscita!
registraTimbratura(false);
Response.Redirect(paginaCorrente);
}
//else if (barcodeIn.ToUpperInvariant() == "CMD")
//{
// Response.Redirect(paginaCorrente);
//}
//DataProxy.idxDipendente = -1;
txtBarcode.Focus();
break;
default:
txtBarcode.Focus();
break;
}
barcodeIn = "";
}
else
{
lblMessaggi.Text = "...attesa barcode...";
}
grView.DataBind();
checkButtons();
txtBarcode.Focus();
}
///
/// valore barcode
///
public string barcodeIn
{
get
{
return txtBarcode.Text.Trim();
}
set
{
txtBarcode.Text = value;
}
}
///
/// salvo entrata
///
///
///
protected void btnEntrata_Click(object sender, EventArgs e)
{
// salvo entrata...
registraTimbratura(true);
Response.Redirect(paginaCorrente);
}
///
/// salvo uscita
///
///
///
protected void btnUscita_Click(object sender, EventArgs e)
{
// salvo uscita
registraTimbratura(false);
Response.Redirect(paginaCorrente);
}
///
/// registro timbratura
///
///
///
private void registraTimbratura(bool isEntrata)
{
// salvo evento entrata...
string IPv4 = Request.UserHostName;
// auto-approvazione da web.config
bool approvata = memLayer.ML.confReadBool("barcodeAutoApprove");
if (DataProxy.idxDipendente > 0)
{
string CognomeNome = "";
if (memLayer.ML.confReadBool("showNameAfterCmd"))
{
CognomeNome = DataProxy.DP.cognomeNomeByIdx(DataProxy.idxDipendente);
}
if (nextIsEntrata)
{
nextUsrMsg = string.Format("{1} ENTRATA {0:HH:mm:ss}", orarioBCode, CognomeNome);
}
else
{
nextUsrMsg = string.Format("{1} USCITA {0:HH:mm:ss}", orarioBCode, CognomeNome);
}
timbratrice.registraTimbratura(DataProxy.idxDipendente, orarioBCode, isEntrata, IPv4, "Web", approvata);
//aggiorno timbrature visualizzate
setButtons();
grView.DataBind();
}
else
{
lblMessaggi.Text = "IdxDipendente non trovato! timbratura impossibile";
pnlAll.CssClass = "stileComandoND";
}
}
///
/// imposta i buttons secondo i valori in sessione...
///
private void setButtons()
{
// mostrare e abilitare secondo condizioni al contorno
}
///
/// decodifica il tipo barcode acquisito
///
public tipoCodiceBarcode tipoBCode
{
get
{
tipoCodiceBarcode answ = tipoCodiceBarcode.ND;
// controllo non si tratti di un comando...
string preCmd = memLayer.ML.confReadString("prefComandi");
if (barcodeIn.StartsWith(preCmd, StringComparison.InvariantCultureIgnoreCase))
{
answ = tipoCodiceBarcode.Comando;
}
// controllo se sia un codice "idx"
else if (barcodeIn.StartsWith("idx", StringComparison.InvariantCultureIgnoreCase))
{
answ = tipoCodiceBarcode.idxDipendente;
}
// controllo se sia un codice "matr"
else if (barcodeIn.StartsWith("matr", StringComparison.InvariantCultureIgnoreCase))
{
answ = tipoCodiceBarcode.matrDipendente;
}
// controllo se sia un codice "cf"
else if (barcodeIn.StartsWith("cf", StringComparison.InvariantCultureIgnoreCase))
{
answ = tipoCodiceBarcode.cfDipendente;
}
return answ;
}
}
///
/// inverte valore booleano
///
///
///
public bool invBool(object valore)
{
bool answ = true;
try
{
answ = !Convert.ToBoolean(valore);
}
catch
{ }
return answ;
}
///
/// evento cambio testo
///
///
///
protected void txtBarcode_TextChanged(object sender, EventArgs e)
{
// solo se ho ALMENO 3 char...
if (barcodeIn.Length >= 3)
{
contatorePag = 0;
checkBarcode();
}
}
///
/// variabile che conta numero di refresh parziali prima di fare reload completo
///
protected int contatorePag
{
get
{
return memLayer.ML.IntSessionObj("numChiamatePaginaBCode");
}
set
{
memLayer.ML.setSessionVal("numChiamatePaginaBCode", value);
}
}
}
}