Files
GMW/GMW/WebUserControls/mod_PostLiq_DT.ascx.cs
T

668 lines
23 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SteamWare;
using GMW_data;
namespace GMW.WebUserControls
{
public partial class mod_PostLiq_DT : System.Web.UI.UserControl
{
/// <summary>
/// stringa UID univoca
/// </summary>
public string uid
{
get
{
return this.UniqueID.Replace("$", "_").Replace("-", "_");
}
}
/// <summary>
/// flusso associato (hard coded) a LI (finiti)
/// </summary>
protected string flusso = "FI";
/// <summary>
/// flusso associato (hard coded) ad ancestor TT (Trattati)
/// </summary>
protected string flussoAnc = "TT";
/// <summary>
/// stato associato (hard coded) a UDC in OUT: Finito
/// </summary>
protected string statoUdcOut = "Fin";
/// <summary>
/// stato associato (hard coded) a UDC in IN: Trattato da travaso AL
/// </summary>
protected string statoUdcIn = "Tratt";
/// <summary>
/// codice evento dell'UDC definitivo (OUT) che si crea
/// </summary>
protected string codEventoUdcOut = "UDC_TL_DT";
/// <summary>
/// codice evento dell'UDC temporaneo (IN) che si crea
/// </summary>
protected string codEventoUdcIn = "UDC_TRATT";
public event EventHandler eh_reqUpdate;
/// <summary>
/// Codice AL sulla linea...
/// </summary>
protected string currAL
{
get
{
string answ = "";
try
{
answ = MagClass.magazzino.taAL.getByKey(Postazione.currCodLinea)[0].CurrVal;
}
catch
{ }
return answ;
}
set
{
MagClass.magazzino.taAL.updateCurrVal(Postazione.currCodLinea, value);
}
}
/// <summary>
/// Codice AL in carico
/// </summary>
protected string sourceAL
{
get
{
return lblAL.Text.Trim();
}
set
{
lblAL.Text = value;
}
}
/// <summary>
/// Codice AL della cella corrente
/// </summary>
protected string destAL
{
get
{
return lblDestAL.Text.Trim();
}
set
{
lblDestAL.Text = value;
}
}
/// <summary>
/// Codice AL associato alla cella corrente...
/// </summary>
protected string AlByCella
{
get
{
string answ = "";
try
{
answ = string.Format("ALF00{0}", Postazione.currCodCella);
// controllo se esista AL sennò lo creo...
if (MagClass.magazzino.taEA.getByAL(answ).Rows.Count == 0)
{
MagClass.magazzino.taEA.Insert(answ, true, DateTime.Now, MagClass.magazzino.CodSoggCurrUser, "", "");
}
}
catch
{ }
return answ;
}
}
/// <summary>
/// indica il codice articolo correntemente selezionato
/// </summary>
protected string currParticolare
{
get
{
return memLayer.ML.StringSessionObj(string.Format("currParticolare_{0}", uid));
}
set
{
memLayer.ML.setSessionVal(string.Format("currParticolare_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel"));
}
}
/// <summary>
/// indica UDC correntemente selezionato
/// </summary>
protected string currUDC
{
get
{
return memLayer.ML.StringSessionObj(string.Format("UDC_{0}", uid));
}
set
{
memLayer.ML.setSessionVal(string.Format("UDC_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel"));
}
}
/// <summary>
/// num pezzi dell'ultimo UDC di uguale aprticoalre e stato fatto...
/// </summary>
public int pezziUdc
{
get
{
int answ = 0;
try
{
answ = (int)MagClass.magazzino.taCartellini.getLastByParticolareStato(memLayer.ML.StringSessionObj("CodCS"), currParticolare, statoUdcOut)[0].Qta;
}
catch
{ }
return answ;
}
}
/// <summary>
/// qta pezzi x UDC
/// </summary>
public int qta
{
get
{
int qta = 0;
try
{
qta = Convert.ToInt32(txtQta.Text.Trim());
}
catch
{ }
return qta;
}
set
{
txtQta.Text = value.ToString();
}
}
/// <summary>
/// wrapper traduzione
/// </summary>
/// <param name="lemma"></param>
/// <returns></returns>
public string traduci(object lemma)
{
return user_std.UtSn.Traduci(lemma.ToString());
}
/// <summary>
/// indica se i caratteri vadano forzati a maiuscoli
/// </summary>
public bool forceUppercase
{
get
{
return memLayer.ML.confReadBool("forceUppercase");
}
}
/// <summary>
/// valore barcode
/// </summary>
public string barcodeIn
{
get
{
return txtBarcode.Text.Trim();
}
set
{
txtBarcode.Text = value;
}
}
/// <summary>
/// caricamento pagina
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
sourceAL = currAL;
destAL = AlByCella;
qta = 0;
currUDC = "";
}
setVisibility();
checkBarcode();
}
/// <summary>
/// Sistema css del panel AL
/// </summary>
/// <param name="tipoPanel"></param>
private void fixCssAL(string tipoPanel)
{
divAL.Attributes.Remove("class");
divAL.Attributes.Add("class", string.Format("panel panel-{0} panel-sm", tipoPanel));
}
/// <summary>
/// sistema modalità input
/// </summary>
private void setVisibility()
{
bool showBtn = false;
if (sourceAL != "" && currAL == "")
{
showBtn = true;
fixCssAL("warning");
}
else
{
fixCssAL("success");
}
lbtPrendeCaricoAL.Visible = showBtn;
showBtn = false;
if (grViewDest.SelectedIndex >= 0)
{
showBtn = true;
}
divQta.Visible = showBtn;
}
/// <summary>
/// reset maschera...
/// </summary>
protected void doReset()
{
fixCssAL("warning");
// resetta
Postazione.messaggiText = "";
Postazione.warningText = "";
Postazione.CssClass = "stileAttesa";
doUpdate();
}
/// <summary>
/// Verifica l'AL se sia ok x procedere:
/// - Tipo "T"
/// - Attivo
/// </summary>
/// <param name="AL"></param>
/// <returns></returns>
protected bool checkAL(string AL)
{
bool answ = false;
try
{
answ = MagClass.magazzino.taEA.getByAL_TipoAttivo(AL, "T").Rows.Count > 0;
}
catch
{ }
if (!answ)
{
Postazione.warningText = traduci("ErroreAlNonTtAttivo");
Postazione.CssClass = "stileComandoKo";
}
else
{
Postazione.warningText = "";
Postazione.CssClass = "stileComandoOk";
}
return answ;
}
/// <summary>
/// controlla se ci sia un barcode e cosa farne...
/// </summary>
private void checkBarcode()
{
if (barcodeIn != "")
{
Postazione.messaggiText = string.Format("{0}: {1}", traduci("BCodeIns"), barcodeIn);
switch (MagClass.tipoBCode(barcodeIn))
{
case tipoCodiceBarcode.Comando:
// se è reset cancello tutto!
if (barcodeIn == memLayer.ML.confReadString("cmdReset"))
{
doReset();
}
else if (barcodeIn == memLayer.ML.confReadString("cmdCloseAL"))
{
// !!!FARE!!!
// chiude AL vecchio (attivo = 0)
// sposta eventuali anomalie in UDC/posizioni dovute (?!?!? lasciare UDC aperti?!?!?)
// resetta!
doReset();
}
break;
case tipoCodiceBarcode.AL:
// se linea libera...
if (currAL == "")
{
// verifico barcode valido
if (checkAL(barcodeIn))
{
// controllo: se avevo già letto lo steso AL è conferma presa in carico...
if (sourceAL == barcodeIn)
{
presaCaricoAL();
}
else
{
// mostro AL sorgente
sourceAL = barcodeIn;
fixCssAL("warning");
// sistemo grafica
Postazione.messaggiText = traduci("ConfermareAL");
Postazione.warningText = "";
Postazione.CssClass = "stileComandoOk";
}
}
else
{
Postazione.messaggiText = "";
Postazione.warningText = traduci("ErroreAlNonValido");
Postazione.CssClass = "stileComandoKo";
}
}
else
{
Postazione.messaggiText = "";
Postazione.warningText = traduci("ErroreAlInCarico");
Postazione.CssClass = "stileComandoKo";
}
break;
case tipoCodiceBarcode.DataMatrix:
// verifico DTX sia in quelli dell'AL sorgente
if (DataMatrix.mgr.taDtx2UDC.getByDtxAl(sourceAL, barcodeIn).Rows.Count > 0)
{
// nuova gestione con AL di destinazione...
// cerco se ci sia UDC di destinazione
string OldUDC = "";
int IdxPosizione = 0;
string NewUDC = "";
string particolare = "";
DateTime adesso = DateTime.Now;
try
{
OldUDC = DataMatrix.mgr.taDtx2UDC.getByDtxAl(sourceAL, barcodeIn)[0].UDC;
IdxPosizione = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].IdxPosizione;
particolare = MagClass.magazzino.taCartellini.getByUdc(OldUDC)[0].Particolare;
}
catch
{
NewUDC = "";
}
if (particolare != "")
{
try
{
NewUDC = MagClass.magazzino.taCartellini.getByParticolareAL(particolare, destAL)[0].UDC;
}
catch
{
NewUDC = "";
}
if (NewUDC == "")
{
// oppure lo creo...
NewUDC = MagClass.magazzino.creaUdc(flusso, "", particolare, "", "", "", "", "", 0, memLayer.ML.confReadString("CodImballoFiniti"), "U", MagClass.magazzino.CodSoggCurrUser, 0, 0, 0, adesso, 0, statoUdcOut, memLayer.ML.confReadInt("IdxPosizioneFinTemp"), "IdxPosizioneFinTemp", codEventoUdcOut, "", "", adesso.Year, Request.UserHostName);
// lo associo all'AL!
MagClass.magazzino.taAL2UDC.Insert(destAL, NewUDC, adesso, MagClass.magazzino.CodSoggCurrUser);
}
// se lo trovo chiamo procedura di spostamento Dtx tra UDC sorgente --> dest (con eventuale creazione dest)
DataMatrix.mgr.taDtx2UDC.UpdateUDC(NewUDC, barcodeIn, statoUdcOut, DateTime.Now, MagClass.magazzino.CodSoggCurrUser);
}
else
{
Postazione.messaggiText = barcodeIn;
Postazione.warningText = traduci("UdcNonTrovato");
Postazione.CssClass = "stileComandoKo";
}
}
// se non lo trovo --> errore!
else
{
Postazione.messaggiText = barcodeIn;
Postazione.warningText = traduci("DtxNonTrovato");
Postazione.CssClass = "stileComandoKo";
}
break;
default:
Postazione.warningText = traduci("CodNonRicon");
Postazione.CssClass = "stileComandoND";
break;
}
barcodeIn = "";
}
else
{
Postazione.messaggiText = traduci("AttesaBCode");
Postazione.CssClass = "stileAttesa";
}
doUpdate();
}
/// <summary>
/// prende in carico AL indicato...
/// </summary>
private void presaCaricoAL()
{
// salvo presa in carico AL
string AL = MagClass.magazzino.creaAssociaAlTL(sourceAL, tipoAL.AL_LI, MagClass.magazzino.CodSoggCurrUser);
if (AL != "NA")
{
// salva ed indica nuovo AL selezionato...
sourceAL = AL;
currAL = sourceAL;
// nascondo elenco UDC dell'AL
fixCssAL("success");
// sistemo grafica
Postazione.messaggiText = traduci("CaricatoAL");
Postazione.warningText = "";
Postazione.CssClass = "stileAttesa";
}
else
{
// sistemo grafica
Postazione.messaggiText = "";
Postazione.warningText = traduci("ErroreCreazioneAL_TL");
Postazione.CssClass = "stileComandoKo";
}
}
/// <summary>
/// aggiorna tabella + focus a barcode
/// </summary>
public void doUpdate()
{
grViewSource.DataBind();
grViewDest.DataBind();
// raise dell'evento
if (eh_reqUpdate != null)
{
eh_reqUpdate(this, new EventArgs());
}
verificaBtnStampa();
txtBarcode.Focus();
}
/// <summary>
/// evento selezione grView destinazione: ricarico dati!
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void grViewDest_SelectedIndexChanged(object sender, EventArgs e)
{
// ricarico dati dell'UDC come particolare e quantità...
currUDC = grViewDest.SelectedDataKey["UDC"].ToString();
if (MagClass.magazzino.checkUDC(currUDC))
{
currParticolare = DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Particolare;
qta = Convert.ToInt32(DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Qta);
}
Postazione.messaggiText = traduci("partSelected");
Postazione.warningText = "";
Postazione.CssClass = "stileComandoOk";
setVisibility();
doUpdate();
// fisso focus su note!
txtNote.Focus();
}
/// <summary>
/// check dopo cancellazione
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ods_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
{
#if false
// aggiorno le qta!
qta = pezziUdc;
#endif
}
/// <summary>
/// prende in carico AL selezionato
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtPrendeCaricoAL_Click(object sender, EventArgs e)
{
presaCaricoAL();
doUpdate();
}
/// <summary>
/// reset della selezione
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnReset_Click(object sender, EventArgs e)
{
grViewDest.SelectedIndex = -1;
qta = 0;
currUDC = "";
setVisibility();
doUpdate();
}
/// <summary>
/// update Qty x UDC selezionato...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtUpdQty_Click(object sender, EventArgs e)
{
MagClass.magazzino.taCartellini.updateQty(currUDC, MagClass.magazzino.CodSoggCurrUser, "U", codEventoUdcOut, qta);
doUpdate();
}
/// <summary>
/// richiesta (ri)stampa UDC
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void ristampa()
{
MagClass.magazzino.stampaUdc(udcReq, Postazione.printer, tipoCartellino.cartFiniti, Request.UserHostName);
// registro ri-stampa UDC
MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, udcReq, "", "stampaUDC", string.Format("Ri-Stampato UDC Dtx {0} su linea {1}", currUDC, Postazione.currCodLinea));
}
/// <summary>
/// verifica visibilità btn stampa UDC
/// </summary>
private void verificaBtnStampa()
{
bool showBtnStampa = false;
// se ho selezionato udc...
if (currUDC != "")
{
DS_magazzino.v_A2U2DRow riga;
int qtaUDC = 0;
int qtaDtx = 0;
try
{
riga = MagClass.magazzino.taA2U2D.getByUDC(currUDC)[0];
qtaUDC = Convert.ToInt32(riga.Qta);
qtaDtx = riga.QtaDtx;
}
catch
{ }
if (qtaUDC > 0)
{
// se le qta voluta e dtx sono uguali...
if (qtaUDC == qtaDtx)
{
showBtnStampa = true;
}
}
}
divNote.Visible = showBtnStampa;
}
/// <summary>
/// fornisce in output la corretta classe css x icona
/// </summary>
/// <param name="qta"></param>
/// <param name="qtaDtx"></param>
/// <returns></returns>
public string cssGlyphByQty(object _qta, object _qtaDtx)
{
string answ = "glyphicon glyphicon-pencil btn-lg";
int qtaUDC = 0;
int qtaDtx = -1;
try
{
qtaUDC = Convert.ToInt32(_qta);
}
catch { }
try
{
qtaDtx = Convert.ToInt32(_qtaDtx);
}
catch { }
if (qtaUDC == qtaDtx)
{
answ = "glyphicon glyphicon-print btn-lg";
}
return answ;
}
/// <summary>
/// effettua processo di sistemazione UDC e stampa
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtStampaUDC_Click(object sender, EventArgs e)
{
// in base ad AL sorgente e destinazione, fa le operazioni di update x UDC e poi lo stampa
bool fatto = false;
string noteTrim = txtNote.Text.Trim();
try
{
// update UDC!
fatto = MagClass.magazzino.liquidiFullUpdate(sourceAL, flussoAnc, currUDC, noteTrim, MagClass.magazzino.CodSoggCurrUser);
}
catch
{ }
if (fatto)
{
// lancio stampa
MagClass.magazzino.stampaUdc(currUDC, Postazione.printer, tipoCartellino.cartFiniti, Request.UserHostName);
// registro creazione AL
MagClass.magazzino.taSAO.insertQuery(DateTime.Now, MagClass.magazzino.CodSoggCurrUser, Postazione.name, Postazione.IP, currUDC, currParticolare, "stampaUDC", string.Format("Stampato UDC Dtx {0} su linea {1}, note: {2} ", currUDC, Postazione.currCodLinea, noteTrim));
Postazione.CssClass = "stileAttesa";
Postazione.warningText = "";
Postazione.messaggiText = traduci("cartAlStampato");
// resetto...
grViewDest.SelectedIndex = -1;
qta = 0;
currUDC = "";
}
doUpdate();
}
/// <summary>
/// udc da stampare
/// </summary>
protected string udcReq
{
get
{
return memLayer.ML.StringSessionObj("udcSelSAO");
}
}
}
}