668 lines
23 KiB
C#
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");
|
|
}
|
|
}
|
|
|
|
}
|
|
} |