From 3c8d4dbc3d3214c3ae176bfd2b68e7656d345124 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 10 Feb 2014 14:03:14 +0100 Subject: [PATCH] lav mecc IN (ok) lav mecc OUT (2 complete) --- GMW/Web.config | 2 +- GMW/WebUserControls/mod_SterrTagIN.ascx | 2 +- GMW/WebUserControls/mod_SterrTagIN.ascx.cs | 6 +- GMW/WebUserControls/mod_SterrTagOUT.ascx | 2 +- GMW/WebUserControls/mod_SterrTagOUT.ascx.cs | 58 +- GMW/WebUserControls/mod_lavMeccIN.ascx | 152 +++ GMW/WebUserControls/mod_lavMeccIN.ascx.cs | 665 ++++++++++ .../mod_lavMeccIN.ascx.designer.cs | 237 +++- GMW/WebUserControls/mod_lavMeccOUT.ascx | 184 +++ GMW/WebUserControls/mod_lavMeccOUT.ascx.cs | 1103 +++++++++++++++++ .../mod_lavMeccOUT.ascx.designer.cs | 300 ++++- GMW/bin/GMW.dll | Bin 385536 -> 391680 bytes 12 files changed, 2667 insertions(+), 44 deletions(-) diff --git a/GMW/Web.config b/GMW/Web.config index 5a6d9096..78e818f4 100644 --- a/GMW/Web.config +++ b/GMW/Web.config @@ -66,7 +66,7 @@ - + diff --git a/GMW/WebUserControls/mod_SterrTagIN.ascx b/GMW/WebUserControls/mod_SterrTagIN.ascx index 6abb3ef2..bab224df 100644 --- a/GMW/WebUserControls/mod_SterrTagIN.ascx +++ b/GMW/WebUserControls/mod_SterrTagIN.ascx @@ -131,7 +131,7 @@ SelectMethod="getUdcDetailByIdxCella" TypeName="GMW_data.DS_magazzinoTableAdapters.v_UdcDetailTableAdapter" OnDataBinding="ods_DataBinding" FilterExpression="UDC LIKE '%{0}%' OR PARTICOLARE LIKE '%{0}%'"> - + diff --git a/GMW/WebUserControls/mod_SterrTagOUT.ascx b/GMW/WebUserControls/mod_SterrTagOUT.ascx index 2837db17..a4e47bd7 100644 --- a/GMW/WebUserControls/mod_SterrTagOUT.ascx +++ b/GMW/WebUserControls/mod_SterrTagOUT.ascx @@ -143,7 +143,7 @@ SelectMethod="getUdcDetailByIdxCella" TypeName="GMW_data.DS_magazzinoTableAdapters.v_UdcDetailTableAdapter" OnDataBinding="ods_DataBinding" FilterExpression="UDC LIKE '%{0}%' OR PARTICOLARE LIKE '%{0}%'"> - + 0) - { - txtQta.Text = pezziUdc.ToString(); - } - else // rimette default - { - txtQta.Text = memLayer.ML.confReadString("QtaImballoSterr"); - } + impostaParticolare(); break; case tipoCodiceBarcode.UDC: // procedo solo se UDC esistente @@ -466,6 +446,9 @@ namespace GMW.WebUserControls udcSelP = udcSelP.Replace(string.Format("#{0}#", barcodeIn), ""); } updFiltroPart(newPart); + // imposto particolare! + currParticolare = newPart; + impostaParticolare(); } break; @@ -484,6 +467,33 @@ namespace GMW.WebUserControls txtBarcode.Focus(); } /// + /// imposto i dati dal aprticolare corrente + /// + private void impostaParticolare() + { + // controllo esista il particolare scansionato + if (DataProxy.obj.taAnagParticolari.getByParticolare(currParticolare).Rows.Count == 0) + { + currParticolare = ""; + lblMessaggi.Text += " - codice particolare non valido / non trovato in RILPRO."; + pnlAll.CssClass = "stileComandoKo"; + } + else + { + lblMessaggi.Text += " - impostato particolare!"; + pnlAll.CssClass = "stileComandoOk"; + } + // leggo la qta dell'ultimo UDC del particolare, SE C'E', e la imposto... + if (pezziUdc > 0) + { + txtQta.Text = pezziUdc.ToString(); + } + else // rimette default + { + txtQta.Text = memLayer.ML.confReadString("QtaImballoSterr"); + } + } + /// /// update del filtro su particolare x grview UDC caricati in linea /// /// @@ -914,15 +924,15 @@ namespace GMW.WebUserControls get { int answ = 0; - if (memLayer.ML.isInSessionObject("IdxCellaLineaOUT")) + if (memLayer.ML.isInSessionObject("IdxCellaLineaST_OUT")) { - answ = memLayer.ML.IntSessionObj("IdxCellaLineaOUT"); + answ = memLayer.ML.IntSessionObj("IdxCellaLineaST_OUT"); } return answ; } set { - memLayer.ML.setSessionVal("IdxCellaLineaOUT", value); + memLayer.ML.setSessionVal("IdxCellaLineaST_OUT", value); } } /// diff --git a/GMW/WebUserControls/mod_lavMeccIN.ascx b/GMW/WebUserControls/mod_lavMeccIN.ascx index c6f9e15d..52cb9afb 100644 --- a/GMW/WebUserControls/mod_lavMeccIN.ascx +++ b/GMW/WebUserControls/mod_lavMeccIN.ascx @@ -1 +1,153 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="mod_lavMeccIN.ascx.cs" Inherits="GMW.WebUserControls.mod_lavMeccIN" %> +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> +<%@ Register Src="mod_storicoAzioniOperatore.ascx" TagName="mod_storicoAzioniOperatore" TagPrefix="uc1" %> +<% if (false) + { %> + +<% } %> + + +
+
+
+
+ +
+ + +
+
+ +
+   +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+ + + + + + +
+
+
+ +
+
+ +   + +
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + <%-- + + + + + + + --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ +
+
+
+
+
diff --git a/GMW/WebUserControls/mod_lavMeccIN.ascx.cs b/GMW/WebUserControls/mod_lavMeccIN.ascx.cs index a76ea3f5..efdc4bba 100644 --- a/GMW/WebUserControls/mod_lavMeccIN.ascx.cs +++ b/GMW/WebUserControls/mod_lavMeccIN.ascx.cs @@ -4,14 +4,679 @@ using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; +using System.Net; +using SteamWare; +using GMW_data; namespace GMW.WebUserControls { public partial class mod_lavMeccIN : System.Web.UI.UserControl { + public event EventHandler eh_nuovaRicerca; + /// + /// stringa UID univoca + /// + public string uid + { + get + { + return this.UniqueID.Replace("$", "_").Replace("-", "_"); + } + } + /// + /// caricamento pagina + /// + /// + /// protected void Page_Load(object sender, EventArgs e) { + if (!Page.IsPostBack) + { + fixRicercaUdc(); + calcolaPostazione(); + traduciObj(); + storicoVisibile = false; + fixStorico(); + // imposto pos abilitata x cancellazione + mod_storicoAzioniOperatore1.idxPosizione2del = memLayer.ML.confReadInt("IdxPosizioneFiniti"); + // se c'è imposto linea da sessione + if (currCodLinea != "") + { + checkSelDDL(currCodLinea, false); + } + } + doChecks(); + mod_storicoAzioniOperatore1.eh_stampa += new EventHandler(mod_storicoAzioniOperatore1_eh_stampa); + } + /// + /// verifica se si debab mostrare un campo ricerca UDC attivo... + /// + private void fixRicercaUdc() + { + if (memLayer.ML.isInSessionObject("valoreCercatoLMI")) + { + testoRicerca = memLayer.ML.StringSessionObj("valoreCercatoLMI"); + } + } + /// + /// richiesta (ri)stampa UDC + /// + /// + /// + void mod_storicoAzioniOperatore1_eh_stampa(object sender, EventArgs e) + { + MagClass.magazzino.stampaUdc(udcReq, postazione_printer, tipoCartellino.cartFiniti, Request.UserHostName); + // registro ri-stampa UDC + DateTime adesso = DateTime.Now; + // calcolo particolare... + DS_magazzino.ElencoCartelliniRow rigaUDC; + string particolare = ""; + try + { + rigaUDC = MagClass.magazzino.taCartellini.getByUdc(udcReq)[0]; + particolare = rigaUDC.Particolare; + } + catch + { + logger.lg.scriviLog(string.Format("Errore recupero particolare UDC Finito LM IN {0}", udcReq), tipoLog.EXCEPTION); + } + MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, postazione_name, postazione_IP, udcReq, particolare, "stampaUDC", "Ri-Stampato UDC Finito LM IN"); + } + /// + /// udc da stampare + /// + protected string udcReq + { + get + { + return memLayer.ML.StringSessionObj("udcSelSAO"); + } + } + /// + /// effettua controlli visibilità + /// + private void doChecks() + { + checkBarcode(); + } + /// + /// sistemo labels oggetti + /// + private void traduciObj() + { + // labels + lblPostazione.Text = string.Format("{2}: {0} ({1})", postazione_name, postazione_IP, traduci("postazione")); + lblPrinter.Text = string.Format("{1}: {0}", postazione_printer, traduci("stampante")); + lblCurrentPage.Text = traduci(PagCorrente); + btnCerca.Text = traduci("btnSearch"); + // fix storico + fixStorico(); + } + /// + /// restituisce il nome della pagina corrente + /// + protected string PagCorrente + { + 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(); + DataLayer_AnagGen.PermessiRow riga = (DataLayer_AnagGen.PermessiRow)user_std.UtSn.permessi.Select(string.Format("URL = '{0}'", answ))[0]; + answ = riga.NOME; + return answ; + } + } + /// + /// wrapper traduzione + /// + /// + /// + public string traduci(object lemma) + { + return user_std.UtSn.Traduci(lemma.ToString()); + } + /// + /// calcola postazione corrente (ip, name, printer) + /// + private void calcolaPostazione() + { + postazione_IP = Request.UserHostName; + postazione_name = dnsUtils.DetermineCompName(postazione_IP); + // cerco stampante x postazione + postazione_printer = "n.d."; + try + { + DS_Applicazione.ElencoPostazioniDataTable tabPost = DataProxy.obj.taElPost.getByCod(postazione_name); + if (tabPost.Rows.Count > 0) + { + postazione_printer = tabPost[0].stampante; + } + else + { + tabPost = DataProxy.obj.taElPost.getByCod("default"); + postazione_printer = tabPost[0].stampante; + } + } + catch + { } + // mostro warning se postazione non configurata... + lblWarning.Visible = (postazione_printer == "n.d."); + } + /// + /// indica name della postazione corrente + /// + protected string postazione_name + { + get + { + return memLayer.ML.StringSessionObj("postazione_name"); + } + set + { + memLayer.ML.setSessionVal("postazione_name", value); + } + } + /// + /// indica ip della postazione corrente + /// + protected string postazione_IP + { + get + { + return memLayer.ML.StringSessionObj("postazione_IP"); + } + set + { + memLayer.ML.setSessionVal("postazione_IP", value); + } + } + /// + /// indica stampante associata alla postazione corrente + /// + protected string postazione_printer + { + get + { + return memLayer.ML.StringSessionObj("postazione_printer"); + } + set + { + memLayer.ML.setSessionVal("postazione_printer", value); + } + } + /// + /// indica se i caratteri vadano forzati a maiuscoli + /// + public bool forceUppercase + { + get + { + return memLayer.ML.confReadBool("forceUppercase"); + } + } + /// + /// decodifica il tipo barcode acquisito + /// + public tipoCodiceBarcode tipoBCode + { + get + { + tipoCodiceBarcode answ = tipoCodiceBarcode.ND; + int trovati = 0; + // controllo non si tratti di un comando... + string preCmd = memLayer.ML.confReadString("prefComandi"); + if (barcodeIn.StartsWith(preCmd)) + { + answ = tipoCodiceBarcode.Comando; + } + else if ((TermClass.Ter.riconosciBarcode(barcodeIn) == tipoCodiceBarcode.Particolare) && TermClass.Ter.isAnima(barcodeIn)) // è un particolare... ed un anima... + { + answ = tipoCodiceBarcode.Particolare; + } + else + { + try + { + // cerco tra gitterbox (UDC)... + trovati = MagClass.magazzino.taCartellini.getByUdc(barcodeIn).Rows.Count; + if (trovati > 0) + { + answ = tipoCodiceBarcode.UDC; + } + } + catch + { + } + } + return answ; + } + } + /// + /// valore barcode + /// + public string barcodeIn + { + get + { + return txtBarcode.Text.Trim(); + } + set + { + txtBarcode.Text = value; + } + } + /// + /// controlla se ci sia un barcode + /// + private void checkBarcode() + { + if (barcodeIn != "") + { + lblMessaggi.Text = string.Format("Barcode digitato: {0}", barcodeIn); + switch (tipoBCode) + { + case tipoCodiceBarcode.Comando: + // verifico se il comando sia di tipo "seleziona linea" + string cmdSelLine = memLayer.ML.confReadString("cmdSelLine"); + pnlAll.CssClass = "stileComandoOk"; + if (barcodeIn.StartsWith(cmdSelLine)) + { + // allora provo ad impostare la linea! + checkSelDDL(barcodeIn.Replace(cmdSelLine, ""), true); + } + break; + case tipoCodiceBarcode.UDC: + // se linea non selezionata ERRORE!!! + if (ddlLinea.SelectedValue == "W2000") // HARD CODED + { + lblMessaggi.Text += " - Attenzione, IMPOSTARE LINEA!"; + pnlAll.CssClass = "stileComandoKo"; + } + else + { + // procedo solo se UDC esistente + if (MagClass.magazzino.checkUDC(barcodeIn)) + { + // controllo idxPosizione dell'UDC e confronto con posizione in webconfig x trattati (pre lavorazioni meccaniche) + int idxPosizione = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].IdxPosizione; + if (idxPosizione == memLayer.ML.confReadInt("IdxPosizioneTrattati")) + { + int idxCellaCurr = 0; + try + { + idxCellaCurr = MagClass.magazzino.taPosUdcCorr.getByUDC(barcodeIn)[0].IdxCella; + } + catch + { } + // controllo se UDC non sia già stato spostato in posizione... ds magazzino, posiz udc corrente, get By udc + if (idxCellaCurr == idxCella) + { + lblMessaggi.Text += " - Attenzione, UDC già caricato!"; + pnlAll.CssClass = "stileComandoKo"; + } + else + { + // altrimenti procedo... + string codSogg = ""; + string particolare = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].Particolare; + decimal qta = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].Qta; + string noteTrim = ""; + try + { + codSogg = MagClass.magazzino.CodSoggCurrUser; + } + catch + { } + try + { + noteTrim = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].Note.Trim(); + } + catch + { + noteTrim = ""; + } + DateTime adesso = DateTime.Now; + // se ho cod cella sposto! + MagClass.magazzino.spostaUDC(memLayer.ML.StringSessionObj("CodCS"), barcodeIn, idxCella, memLayer.ML.confReadBool("spostaUdcResettaLdp"), Request.UserHostName); + // registro sposstamento UDC + MagClass.magazzino.taSAO.insertQuery(adesso, codSogg, postazione_name, postazione_IP, barcodeIn, particolare, "spostaUDC", string.Format("Caricato UDC Trattati su linea {2}, qta: {0} {1} ", qta, noteTrim, currCodLinea)); + pnlAll.CssClass = "stileComandoOk"; + } + } + else + { + // udc NON corretto, mostro errore... + lblMessaggi.Text += " - Attenzione, UDC NON VALIDO!"; + pnlAll.CssClass = "stileComandoKo"; + } + } + } + break; + default: + lblMessaggi.Text += " - codice non riconosciuto!"; + pnlAll.CssClass = "stileComandoND"; + break; + } + barcodeIn = ""; + } + else + { + lblMessaggi.Text = "...attesa barcode..."; + } + doUpdate(); + } + /// + /// aggiorna tabella + focus a barcode + /// + private void doUpdate() + { + grView.DataBind(); + mod_storicoAzioniOperatore1.doUpdate(); + txtBarcode.Focus(); + } + /// + /// wrapper per log con salvataggio dell'IP del chiamante + /// + /// + /// + public bool httpLog(string _testoPre) + { + bool answ = false; + string postazione_IP = ""; + try + { + postazione_IP = string.Format(" | {0} | ", Request.UserHostName); + } + catch + { } + logger.lg.scriviLog(postazione_IP + _testoPre); + return answ; + } + /// + /// wrapper per log con salvataggio dell'IP del chiamante + /// + /// + /// + public bool httpLog(string testoLog, tipoLog tipo) + { + bool answ = false; + string postazione_IP = ""; + try + { + postazione_IP = string.Format(" | {0} | ", Request.UserHostName); + } + catch + { } + logger.lg.scriviLog(postazione_IP + testoLog, tipo); + return answ; + } + /// + /// effettua reset dati + /// + private void doResetData() + { + // resetto i dati QtaTot e particolare... + doChecks(); + } + /// + /// toggle controllo storico + /// + private void fixStorico() + { + pnlSAO.Visible = storicoVisibile; + if (storicoVisibile) + { + btnShowHideStorico.Text = traduci("btnHideStorico"); + } + else + { + btnShowHideStorico.Text = traduci("btnShowStorico"); + } + } + /// + /// imposto visibilità pannelo storico + /// + protected bool storicoVisibile + { + get + { + return memLayer.ML.BoolSessionObj(string.Format("showHist_{0}", this.ID)); + } + set + { + memLayer.ML.setSessionVal(string.Format("showHist_{0}", this.ID), value); + } + } + /// + /// gestisco evento show/hide storico + /// + /// + /// + protected void btnShowHideStorico_Click(object sender, EventArgs e) + { + storicoVisibile = !storicoVisibile; + fixStorico(); + } + /// + /// passo alla modalità OUT + /// + /// + /// + protected void btnOut_Click(object sender, EventArgs e) + { + Response.Redirect("LavorMeccOUT.aspx"); + } + /// + /// selezione di una linea da elenco DropDownList + /// + /// + /// + protected void ddlLinea_SelectedIndexChanged(object sender, EventArgs e) + { + checkSelDDL(ddlLinea.SelectedValue, true); + } + /// + /// tenta di selezionare la linea indicata + /// + /// + private void checkSelDDL(string codLinea, bool doSave) + { + //...aggiorno ddl + try + { + ddlLinea.SelectedValue = codLinea; + pnlAll.CssClass = "stileAttesa"; + } + catch + { + // mostro errore + lblMessaggi.Text = string.Format("Errore selezione linea: codice {0} non trovato!", codLinea); + pnlAll.CssClass = "stileComandoKo"; + } + if (doSave) + { + currCodLinea = codLinea; + } + // salvo codice cella! + try + { + codCella = MagClass.magazzino.taAL.getByKey(currCodLinea)[0].CodCella; + idxCella = MagClass.magazzino.taCelle.getByCodCella(codCella)[0].IdxCella; + } + catch + { + codCella = ""; + idxCella = 0; + } + doUpdate(); + } + /// + /// CODICE cella associata alla linea corrente + /// + protected string codCella + { + get + { + string answ = ""; + if (memLayer.ML.isInSessionObject("codCella")) + { + answ = memLayer.ML.StringSessionObj("codCella"); + } + return answ; + } + set + { + memLayer.ML.setSessionVal("codCella", value); + } + } + /// + /// IDX cella associata alla linea corrente + /// + protected int idxCella + { + get + { + int answ = 0; + if (memLayer.ML.isInSessionObject("IdxCellaLineaLM_IN")) + { + answ = memLayer.ML.IntSessionObj("IdxCellaLineaLM_IN"); + } + return answ; + } + set + { + memLayer.ML.setSessionVal("IdxCellaLineaLM_IN", value); + } + } + /// + /// codice della linea corrente + /// + protected string currCodLinea + { + get + { + string answ = ""; + if (memLayer.ML.isInSessionObject(string.Format("LineaIn-{0}", uid))) + { + answ = memLayer.ML.StringSessionObj(string.Format("LineaIn-{0}", uid)); + } + return answ; + } + set + { + memLayer.ML.setSessionVal(string.Format("LineaIn-{0}", uid), value); + } + } + /// + /// cambiato valore in ricerca + /// + /// + /// + protected void txtCerca_TextChanged(object sender, EventArgs e) + { + salvaCerca(); + } + /// + /// pressione del button di ricerca + /// + /// + /// + protected void btnCerca_Click(object sender, EventArgs e) + { + salvaCerca(); + } + + /// + /// testo ricerca trimmato da spazi + /// + protected string testoRicerca + { + get + { + return txtCerca.Text.Trim(); + } + set + { + txtCerca.Text = value; + } + } + protected void salvaCerca() + { + if (testoRicerca == "") + { + SteamWare.memLayer.ML.emptySessionVal("valoreCercatoLMI"); + } + else + { + SteamWare.memLayer.ML.setSessionVal("valoreCercatoLMI", testoRicerca); + } + // raise dell'evento + if (eh_nuovaRicerca != null) + { + eh_nuovaRicerca(this, new EventArgs()); + } + doUpdate(); + } + protected void grView_PageIndexChanged(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + protected void grView_Sorted(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + /// + /// aggiorno ods al binding.. + /// + /// + /// + protected void ods_DataBinding(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + /// + /// verifica se attivo filtro company e imposta ods di conseguenza... + /// + private void checkFixOds() + { + } + /// + /// traduce gli header delle colonne + /// + /// + /// + protected void grView_DataBound(object sender, EventArgs e) + { + if (grView.Rows.Count > 0) + { + LinkButton lb; + // aggiorno gli headers + foreach (TableCell cella in grView.HeaderRow.Cells) + { + try + { + lb = (LinkButton)cella.Controls[0]; + lb.Text = traduci(lb.Text); + } + catch + { } + } + int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1); + lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord); + } + else + { + lblNumRec.Text = ""; + } } } } \ No newline at end of file diff --git a/GMW/WebUserControls/mod_lavMeccIN.ascx.designer.cs b/GMW/WebUserControls/mod_lavMeccIN.ascx.designer.cs index 2613116a..c4578e46 100644 --- a/GMW/WebUserControls/mod_lavMeccIN.ascx.designer.cs +++ b/GMW/WebUserControls/mod_lavMeccIN.ascx.designer.cs @@ -3,15 +3,238 @@ // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ -namespace GMW.WebUserControls -{ - - - public partial class mod_lavMeccIN - { +namespace GMW.WebUserControls { + + + public partial class mod_lavMeccIN { + + /// + /// pnlAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel pnlAll; + + /// + /// lblPostazione control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPostazione; + + /// + /// btnRefresh control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnRefresh; + + /// + /// btnShowHideStorico control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnShowHideStorico; + + /// + /// lblPrinter control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPrinter; + + /// + /// lblCurrentPage control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblCurrentPage; + + /// + /// hlMenu control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink hlMenu; + + /// + /// pnlSAO control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel pnlSAO; + + /// + /// mod_storicoAzioniOperatore1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::GMW.WebUserControls.mod_storicoAzioniOperatore mod_storicoAzioniOperatore1; + + /// + /// btnIn control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnIn; + + /// + /// btnOut control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnOut; + + /// + /// ddlLinea control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlLinea; + + /// + /// odsLinea control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsLinea; + + /// + /// lblParticolareAttivo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblParticolareAttivo; + + /// + /// lblDescrAttivo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDescrAttivo; + + /// + /// lblDisegno control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDisegno; + + /// + /// lblMessaggi control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblMessaggi; + + /// + /// lblWarning control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblWarning; + + /// + /// txtCerca control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtCerca; + + /// + /// btnCerca control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnCerca; + + /// + /// grView control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.GridView grView; + + /// + /// ods control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource ods; + + /// + /// lblNumRec control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblNumRec; + + /// + /// lblBarcode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblBarcode; + + /// + /// txtBarcode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtBarcode; } } diff --git a/GMW/WebUserControls/mod_lavMeccOUT.ascx b/GMW/WebUserControls/mod_lavMeccOUT.ascx index 5938f187..a67da90a 100644 --- a/GMW/WebUserControls/mod_lavMeccOUT.ascx +++ b/GMW/WebUserControls/mod_lavMeccOUT.ascx @@ -1 +1,185 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="mod_lavMeccOUT.ascx.cs" Inherits="GMW.WebUserControls.mod_lavMeccOUT" %> +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> +<%@ Register Src="mod_storicoAzioniOperatore.ascx" TagName="mod_storicoAzioniOperatore" TagPrefix="uc1" %> +<% if (false) + { %> + +<% } %> + + +
+
+
+
+ +
+ + +
+
+ +
+   +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+ + + + + + +
+
+
+ +
+
+ +   + +
+
+ +
+ +
+
+
+
+
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + <%-- + + + + + + + --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + P | C + <%----%> + + + + + + + + + + + + + + +
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ +
+ + +
+
+ +
+ +
+
+ +
+
+
+
+
diff --git a/GMW/WebUserControls/mod_lavMeccOUT.ascx.cs b/GMW/WebUserControls/mod_lavMeccOUT.ascx.cs index 2e51f15b..32ff530f 100644 --- a/GMW/WebUserControls/mod_lavMeccOUT.ascx.cs +++ b/GMW/WebUserControls/mod_lavMeccOUT.ascx.cs @@ -4,14 +4,1117 @@ 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_lavMeccOUT : System.Web.UI.UserControl { + /// + /// flusso associato (hard coded) a FUSI + /// + protected string flusso = "LM"; + /// + /// stato associato (hard coded) a FUSI + /// + protected string statoUDC = "Fin"; + /// + /// tipo di evento associato alla creazione dell'UDC + /// + protected string eventoUDC = "UDC_FINITO"; + /// + /// stringa degli UDC selezionati per consumo COMPLETO (nel formato #UDC1##UDC2#) + /// + protected string udcSelC + { + get + { + return memLayer.ML.StringSessionObj(string.Format("UdcSelC_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("UdcSelC_{0}", uid), value); + } + } + /// + /// stringa degli UDC selezionati per consumo PARZIALE (nel formato #UDC1##UDC2#) + /// + protected string udcSelP + { + get + { + return memLayer.ML.StringSessionObj(string.Format("UdcSelP_{0}", uid)); + } + set + { + memLayer.ML.setSessionVal(string.Format("UdcSelP_{0}", uid), value); + } + } + public event EventHandler eh_nuovaRicerca; + /// + /// stringa UID univoca + /// + public string uid + { + get + { + return this.UniqueID.Replace("$", "_").Replace("-", "_"); + } + } + /// + /// caricamento pagina + /// + /// + /// protected void Page_Load(object sender, EventArgs e) + { + if (!Page.IsPostBack) + { + fixRicercaUdc(); + calcolaPostazione(); + traduciObj(); + storicoVisibile = false; + fixStorico(); + // imposto pos abilitata x cancellazione + mod_storicoAzioniOperatore1.idxPosizione2del = memLayer.ML.confReadInt("IdxPosizioneFiniti"); + // se c'è imposto linea da sessione + if (currCodLinea != "") + { + checkSelDDL(currCodLinea, false); + MagClass.magazzino.taAL.updatePost(currCodLinea, postazione_name); + } + else + { + // resetto uso postazione... + MagClass.magazzino.taAL.resetPost(postazione_name); + } + } + doChecks(); + mod_storicoAzioniOperatore1.eh_stampa += new EventHandler(mod_storicoAzioniOperatore1_eh_stampa); + } + /// + /// verifica se si debba mostrare un campo ricerca attivo... + /// + private void fixRicercaUdc() + { + if (memLayer.ML.isInSessionObject("valoreCercatoSTO")) + { + testoRicerca = memLayer.ML.StringSessionObj("valoreCercatoSTO"); + } + + } + /// + /// richiesta (ri)stampa UDC + /// + /// + /// + void mod_storicoAzioniOperatore1_eh_stampa(object sender, EventArgs e) + { + MagClass.magazzino.stampaUdc(udcReq, postazione_printer, tipoCartellino.cartSterr, Request.UserHostName); + // registro ri-stampa UDC + DateTime adesso = DateTime.Now; + // calcolo particolare... + DS_magazzino.ElencoCartelliniRow rigaUDC; + string particolare = ""; + try + { + rigaUDC = MagClass.magazzino.taCartellini.getByUdc(udcReq)[0]; + particolare = rigaUDC.Particolare; + } + catch + { + logger.lg.scriviLog(string.Format("Errore recupero particolare UDC Sterratura OUT {0}", udcReq), tipoLog.EXCEPTION); + } + MagClass.magazzino.taSAO.insertQuery(adesso, MagClass.magazzino.CodSoggCurrUser, postazione_name, postazione_IP, udcReq, particolare, "stampaUDC", "Ri-Stampato UDC Sterratura OUT"); + } + /// + /// udc da stampare + /// + protected string udcReq + { + get + { + return memLayer.ML.StringSessionObj("udcSelSAO"); + } + } + /// + /// controlla particolare selezionato + /// + private void checkParticolare() + { + if (currParticolare != "") + { + lblParticolareAttivo.Text = string.Format("Particolare selezionato {0}", currParticolare); + // aggiungo descrizione del particolare + string descr = ""; + string disegno = ""; + try + { + DS_magazzino.AnagParticolariRow riga = MagClass.magazzino.taAnagPart.likeSearch(currParticolare, memLayer.ML.StringSessionObj("CodCS"))[0]; + descr = riga.DescParticolare; + disegno = string.Format("( {0} )", riga.DisegnoGrezzo); + } + catch + { } + lblDescrAttivo.Text = descr; + lblDisegno.Text = disegno; + } + else + { + lblParticolareAttivo.Text = "..."; + lblDescrAttivo.Text = ""; + lblDisegno.Text = ""; + } + } + /// + /// effettua controlli visibilità + /// + private void doChecks() + { + checkBarcode(); + checkStampa(); + checkParticolare(); + } + /// + /// sistemo labels oggetti + /// + private void traduciObj() + { + // labels + lblPostazione.Text = string.Format("{2}: {0} ({1})", postazione_name, postazione_IP, traduci("postazione")); + lblPrinter.Text = string.Format("{1}: {0}", postazione_printer, traduci("stampante")); + lblQta.Text = traduci("lblQuantitaTotale"); + lblNote.Text = traduci("lblNote"); + lblCurrentPage.Text = traduci(PagCorrente); + btnCerca.Text = traduci("btnSearch"); + //txtBox + txtQta.Text = memLayer.ML.confReadString("QtaImballoSterr"); + // buttons + btnStampa.Text = traduci("btnStampa"); + btnEmptyNote.Text = traduci("btnEmptyNote"); + // fix storico + fixStorico(); + } + /// + /// restituisce il nome della pagina corrente + /// + protected string PagCorrente + { + 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(); + DataLayer_AnagGen.PermessiRow riga = (DataLayer_AnagGen.PermessiRow)user_std.UtSn.permessi.Select(string.Format("URL = '{0}'", answ))[0]; + answ = riga.NOME; + return answ; + } + } + /// + /// wrapper traduzione + /// + /// + /// + public string traduci(object lemma) + { + return user_std.UtSn.Traduci(lemma.ToString()); + } + /// + /// calcola postazione corrente (ip, name, printer) + /// + private void calcolaPostazione() + { + postazione_IP = Request.UserHostName; + postazione_name = dnsUtils.DetermineCompName(postazione_IP); + // cerco stampante x postazione + postazione_printer = "n.d."; + try + { + DS_Applicazione.ElencoPostazioniDataTable tabPost = DataProxy.obj.taElPost.getByCod(postazione_name); + if (tabPost.Rows.Count > 0) + { + postazione_printer = tabPost[0].stampante; + } + else + { + tabPost = DataProxy.obj.taElPost.getByCod("default"); + postazione_printer = tabPost[0].stampante; + } + } + catch + { } + // mostro warning se postazione non configurata... + lblWarning.Visible = (postazione_printer == "n.d."); + } + /// + /// indica name della postazione corrente + /// + protected string postazione_name + { + get + { + return memLayer.ML.StringSessionObj("postazione_name"); + } + set + { + memLayer.ML.setSessionVal("postazione_name", value); + } + } + /// + /// indica ip della postazione corrente + /// + protected string postazione_IP + { + get + { + return memLayer.ML.StringSessionObj("postazione_IP"); + } + set + { + memLayer.ML.setSessionVal("postazione_IP", value); + } + } + /// + /// indica stampante associata alla postazione corrente + /// + protected string postazione_printer + { + get + { + return memLayer.ML.StringSessionObj("postazione_printer"); + } + set + { + memLayer.ML.setSessionVal("postazione_printer", value); + } + } + /// + /// indica il codice articolo correntemente selezionato + /// + 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")); + } + } + /// + /// indica se i caratteri vadano forzati a maiuscoli + /// + public bool forceUppercase + { + get + { + return memLayer.ML.confReadBool("forceUppercase"); + } + } + /// + /// num pezzi dell'ultimo UDC del particolare generato + /// + public int pezziUdc + { + get + { + int answ = 0; + try + { + answ = (int)MagClass.magazzino.taCartellini.getLastByParticolareStato(memLayer.ML.StringSessionObj("CodCS"), currParticolare, statoUDC)[0].Qta; + } + catch + { } + return answ; + } + } + /// + /// decodifica il tipo barcode acquisito + /// + public tipoCodiceBarcode tipoBCode + { + get + { + tipoCodiceBarcode answ = tipoCodiceBarcode.ND; + int trovati = 0; + // controllo non si tratti di un comando... + string preCmd = memLayer.ML.confReadString("prefComandi"); + if (barcodeIn.StartsWith(preCmd)) + { + answ = tipoCodiceBarcode.Comando; + } + else if ((TermClass.Ter.riconosciBarcode(barcodeIn) == tipoCodiceBarcode.Particolare)) // è un particolare... + { + answ = tipoCodiceBarcode.Particolare; + } + else + { + try + { + // cerco tra gitterbox (UDC)... + trovati = MagClass.magazzino.taCartellini.getByUdc(barcodeIn).Rows.Count; + if (trovati > 0) + { + answ = tipoCodiceBarcode.UDC; + } + } + catch + { + } + } + return answ; + } + } + /// + /// valore barcode + /// + public string barcodeIn + { + get + { + return txtBarcode.Text.Trim(); + } + set + { + txtBarcode.Text = value; + } + } + /// + /// qta pezzi TOTALE + /// + public int qta + { + get + { + int qta = 0; + try + { + qta = Convert.ToInt32(txtQta.Text.Trim()); + } + catch + { } + return qta; + } + set + { + txtQta.Text = value.ToString(); + } + } + /// + /// controlla se ci sia un barcode + /// + private void checkBarcode() + { + if (barcodeIn != "") + { + lblMessaggi.Text = string.Format("Barcode digitato: {0}", barcodeIn); + switch (tipoBCode) + { + case tipoCodiceBarcode.Comando: + // verifico se il comando sia di tipo "seleziona linea" + string cmdSelLine = memLayer.ML.confReadString("cmdSelLine"); + pnlAll.CssClass = "stileComandoOk"; + if (barcodeIn.StartsWith(cmdSelLine)) + { + // allora provo ad impostare la linea! + checkSelDDL(barcodeIn.Replace(cmdSelLine, ""), true); + } + break; + case tipoCodiceBarcode.Particolare: + // imposto il particolare corrente + currParticolare = barcodeIn; + impostaParticolare(); + break; + case tipoCodiceBarcode.UDC: + // procedo solo se UDC esistente + if (MagClass.magazzino.checkUDC(barcodeIn)) + { + // calcolo nuovo particolare + string newPart = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0].Particolare; + if (testoRicerca != newPart) + { + // resetto precedente ricerca e deseleziono TUTTI gli UDC elencati SE è cambiato il particolare + udcSelC = string.Format("#{0}#", barcodeIn); + } + else + { + udcSelC = string.Format("{0}#{1}#", udcSelC, barcodeIn); + // se era presente in elenco "P" lo elimino + udcSelP = udcSelP.Replace(string.Format("#{0}#", barcodeIn), ""); + } + updFiltroPart(newPart); + // imposto particolare! + currParticolare = newPart; + impostaParticolare(); + } + + break; + default: + lblMessaggi.Text += " - codice non riconosciuto!"; + pnlAll.CssClass = "stileComandoND"; + break; + } + barcodeIn = ""; + } + else + { + lblMessaggi.Text = "...attesa barcode..."; + } + //grView.DataBind(); + txtBarcode.Focus(); + } + /// + /// imposto i dati dal aprticolare corrente + /// + private void impostaParticolare() + { + // controllo esista il particolare scansionato + if (DataProxy.obj.taAnagParticolari.getByParticolare(currParticolare).Rows.Count == 0) + { + currParticolare = ""; + lblMessaggi.Text += " - codice particolare non valido / non trovato in RILPRO."; + pnlAll.CssClass = "stileComandoKo"; + } + else + { + lblMessaggi.Text += " - impostato particolare!"; + pnlAll.CssClass = "stileComandoOk"; + } + // leggo la qta dell'ultimo UDC del particolare, SE C'E', e la imposto... + if (pezziUdc > 0) + { + txtQta.Text = pezziUdc.ToString(); + } + else // rimette default + { + txtQta.Text = memLayer.ML.confReadString("QtaImballoSterr"); + } + } + /// + /// update del filtro su particolare x grview UDC caricati in linea + /// + /// + private void updFiltroPart(string newPart) + { + if (testoRicerca != newPart) + { + // imposto filtraggio x particoalre nell'elenco degli UDC della linea... + testoRicerca = newPart; + // salvo UDC da selezionare come consumo COMPLETO + salvaCerca(); + } + else + { + doUpdate(); + } + } + /// + /// aggiorna tabella + focus a barcode + /// + private void doUpdate() + { + checkStampa(); + grView.DataBind(); + mod_storicoAzioniOperatore1.doUpdate(); + txtBarcode.Focus(); + } + /// + /// controllo l'abilitazioen alla stampa UDC: + /// - particolare ok + /// - qta > 0 + /// - almeno 1 trattamento + /// altrimenti disabilito btn stampa + /// + private void checkStampa() + { + bool stampaOk = false; + //controllo siano inseriti valori qta + if (qta > 0) + { + // controllo ci siano particolare e ci sia selezionato almeno un UDC + if (currParticolare != "" && ((udcSelC.Replace("#", "").Length > 1) || (udcSelP.Replace("#", "").Length > 1))) + { + stampaOk = true; + } + } + btnStampa.Enabled = stampaOk; + } + /// + /// genera i barcode di + /// - trattamenti + /// - nuovo x pezzi liquidi + /// e lancia la relativa stampa + /// + /// + /// + protected void btnStampa_Click(object sender, EventArgs e) + { + + // calcolo postazione + calcolaPostazione(); + // verifico postazione x procedere... + if (postazione_printer != "n.d.") + { + string newUdcChild = ""; + int qta = memLayer.ML.confReadInt("QtaImballoSterr"); + string noteTrim = txtNote.Text.Trim(); + try + { + qta = Convert.ToInt32(txtQta.Text); + } + catch + { } + // effettuo controlli che cod_soggetto e cod particolare siano disponibili... + string codSogg = ""; + string particolare = ""; + try + { + codSogg = MagClass.magazzino.CodSoggCurrUser; + particolare = currParticolare; + } + catch + { + } + if (codSogg != "" && particolare != "") + { + // genero cartellino + DateTime adesso = DateTime.Now; + string[] stringSeparators = new string[] { "#" }; + try + { + // creo nuovo UDC sterrato OUT multiple + newUdcChild = MagClass.magazzino.creaUdc(flusso, "", currParticolare, "", "", "", "", "", 0, memLayer.ML.confReadString("CodImballoSterr"), "U", MagClass.magazzino.CodSoggCurrUser, qta, 0, 0, adesso, 0, statoUDC, memLayer.ML.confReadInt("IdxPosizioneSterrati"), "IdxPosizioneSterrati", eventoUDC, noteTrim, "", adesso.Year, Request.UserHostName); + // registro creazione nuovo UDC + MagClass.magazzino.taSAO.insertQuery(adesso, codSogg, postazione_name, postazione_IP, newUdcChild, particolare, "creaUDC", string.Format("Creato nuovo UDC Sterrato, qta: {0} {1}", qta, noteTrim)); + } + catch (Exception exc) + { + httpLog(string.Format("Errore creazione UDC Sterrato: {0}", exc), tipoLog.EXCEPTION); + } + // devo gestire associazione e consumo cartellini FUSI + if (newUdcChild != "") + { + string[] UDC_P; + // ASSOCIO tutti gli UDC consumati sia Parziali che Completi al nuovo UDC + if (udcSelP.Replace("#", "").Length > 1) + { + // associo + UDC_P = udcSelP.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); + //UDC_P = SteamWare.StringSplitter.CSplitter.Split(udcSelP, "#", false, 0, SteamWare.StringSplitter.ComparisonMethod.Text); + associaUdc(newUdcChild, UDC_P); + } + if (udcSelC.Replace("#", "").Length > 1) + { + // associo + UDC_P = udcSelC.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); + //UDC_P = SteamWare.StringSplitter.CSplitter.Split(udcSelC, "#", false, 0, SteamWare.StringSplitter.ComparisonMethod.Text); + associaUdc(newUdcChild, UDC_P); + // consumo gli UDC indicati come "C" + consumaUdc(UDC_P); + } + + // ora stampo il nuovo cartellino!!! + MagClass.magazzino.stampaUdc(newUdcChild, postazione_printer, tipoCartellino.cartSterr, Request.UserHostName); + // incremento timing... + adesso = DateTime.Now; + adesso = adesso.AddSeconds(2); + // registro stampa nuovo UDC + MagClass.magazzino.taSAO.insertQuery(adesso, codSogg, postazione_name, postazione_IP, newUdcChild, particolare, "stampaUDC", "Stampato UDC Sterrato"); + } + // resetto + doResetData(); + } + else + { + httpLog(string.Format("STERRATI OUT, Errore persi utente/particolare, ricarico!"), tipoLog.ERROR); + Response.Redirect("~/login.aspx"); + } + mod_storicoAzioniOperatore1.doUpdate(); + } + else + { + Response.Redirect("~/menu.aspx"); + } + doRefreshBloccoPost(); + } + /// + /// effettua il consumo di tutti gli UDC inviati come array di stringhe + /// + /// + private void consumaUdc(string[] UDC_P) + { + if (UDC_P.Length > 0) + { + // ciclo + foreach (string udc_p in UDC_P) + { + // se UDC è NON vuoto ed esiste + if (udc_p != "" && MagClass.magazzino.checkUDC(udc_p)) + { + // se è consumabile (idxPosizione > 0)... + if (MagClass.magazzino.udcMpIsConsumabile(udc_p)) + { + // consumo UDC + MagClass.magazzino.scaricaUdcMpWip(udc_p, Request.UserHostName); + // sposta UDC da posizione corrente a nessuna... + } + } + } + } + } + /// + ///associa nuovo UDC ad elenco UDC + /// + /// UDC da associare come child + /// vettorei di UDC da associare come parent + private void associaUdc(string newUdcChild, string[] UDC_P) + { + if (UDC_P.Length > 0) + { + // ciclo + foreach (string udc_p in UDC_P) + { + // se UDC è NON vuoto ed esiste + if (udc_p != "" && MagClass.magazzino.checkUDC(udc_p)) + { + MagClass.magazzino.associaUdcParent(newUdcChild, udc_p); + } + } + } + } + /// + /// wrapper per log con salvataggio dell'IP del chiamante + /// + /// + /// + public bool httpLog(string _testoPre) + { + bool answ = false; + string postazione_IP = ""; + try + { + postazione_IP = string.Format(" | {0} | ", Request.UserHostName); + } + catch + { } + logger.lg.scriviLog(postazione_IP + _testoPre); + return answ; + } + /// + /// wrapper per log con salvataggio dell'IP del chiamante + /// + /// + /// + public bool httpLog(string testoLog, tipoLog tipo) + { + bool answ = false; + string postazione_IP = ""; + try + { + postazione_IP = string.Format(" | {0} | ", Request.UserHostName); + } + catch + { } + logger.lg.scriviLog(postazione_IP + testoLog, tipo); + return answ; + } + /// + /// effettua reset dati + /// + private void doResetData() + { + // resetto i dati QtaTot e particolare... + qta = 0; + currParticolare = ""; + txtQta.Text = ""; + testoRicerca = ""; + salvaCerca(); + doChecks(); + } + /// + /// svuoto le note + /// + /// + /// + protected void btnEmptyNote_Click(object sender, EventArgs e) + { + txtNote.Text = ""; + } + /// + /// toggle controllo storico + /// + private void fixStorico() + { + pnlSAO.Visible = storicoVisibile; + if (storicoVisibile) + { + btnShowHideStorico.Text = traduci("btnHideStorico"); + } + else + { + btnShowHideStorico.Text = traduci("btnShowStorico"); + } + } + /// + /// imposto visibilità pannelo storico + /// + protected bool storicoVisibile + { + get + { + return memLayer.ML.BoolSessionObj(string.Format("showHist_{0}", this.ID)); + } + set + { + memLayer.ML.setSessionVal(string.Format("showHist_{0}", this.ID), value); + } + } + /// + /// gestisco evento show/hide storico + /// + /// + /// + protected void btnShowHideStorico_Click(object sender, EventArgs e) + { + storicoVisibile = !storicoVisibile; + fixStorico(); + } + /// + /// passo alla modalità IN + /// + /// + /// + protected void btnIn_Click(object sender, EventArgs e) + { + Response.Redirect("SterrTaglioIN.aspx"); + } + + /// + /// selezione di una linea da elenco DropDownList + /// + /// + /// + protected void ddlLinea_SelectedIndexChanged(object sender, EventArgs e) + { + checkSelDDL(ddlLinea.SelectedValue, true); + } + /// + /// tenta di selezionare la linea indicata + /// + /// + private void checkSelDDL(string codLinea, bool doSave) + { + /******************************************************* + * controllo se la linea sia libera .. OVVERO: + * - nessuna postazione la occupa + * - è bloccata da + di "minutiBloccoLinea" (e quindi sovrascrivo) + * + *******************************************************/ + bool lineaLibera = false; + try + { + DS_magazzino.AnagLineeRow riga = MagClass.magazzino.taAL.getByKey(codLinea)[0]; + if (riga.codPostazione == "" || riga.codPostazione == postazione_name) + { + lineaLibera = true; + } + else + { + // controllo se è bloccata da tempo > minutiBloccoLinea --> ignoro blocco! + if (DateTime.Now >= riga.dtAccess.AddMinutes(memLayer.ML.confReadInt("minutiBloccoLinea"))) + { + lineaLibera = true; + } + } + } + catch + { } + if (lineaLibera) + { + //...aggiorno ddl + try + { + ddlLinea.SelectedValue = codLinea; + pnlAll.CssClass = "stileAttesa"; + } + catch + { + // mostro errore + lblMessaggi.Text = string.Format("Errore selezione linea: codice {0} non trovato!", codLinea); + pnlAll.CssClass = "stileComandoKo"; + } + if (doSave) + { + refreshBloccoPost(codLinea); + // continuo + currCodLinea = codLinea; + testoRicerca = ""; + grView.DataBind(); + salvaCerca(); + } + // salvo codice cella! + try + { + codCella = MagClass.magazzino.taAL.getByKey(currCodLinea)[0].CodCella; + idxCella = MagClass.magazzino.taCelle.getByCodCella(codCella)[0].IdxCella; + } + catch + { + codCella = ""; + idxCella = 0; + } + doUpdate(); + } + else + { + codCella = ""; + idxCella = 0; + MagClass.magazzino.taAL.resetPost(postazione_name); + // mostro errore + lblMessaggi.Text = string.Format("Errore: linea {0} già impegnata, sbloccare postazione o attendere timeout!", codLinea); + pnlAll.CssClass = "stileComandoKo"; + ddlLinea.DataBind(); + ddlLinea.SelectedIndex = 0; + } + } + /// + /// effettua refresh (su db) del blocco postazione + /// + /// + private void refreshBloccoPost(string codLinea) + { + // resetto usi linee precedenti.. + MagClass.magazzino.taAL.resetPost(postazione_name); + // se la linea non è "base" = "Sel linea", finisce x "0" + if (codLinea.Substring(codLinea.Length - 1) != "0") + { + // salvo su DB che sto occupando linea... + MagClass.magazzino.taAL.updatePost(codLinea, postazione_name); + } + // ricarico elenco postazioni... + ddlLinea.DataBind(); + } + /// + /// CODICE cella associata alla linea corrente + /// + protected string codCella + { + get + { + string answ = ""; + if (memLayer.ML.isInSessionObject("codCella")) + { + answ = memLayer.ML.StringSessionObj("codCella"); + } + return answ; + } + set + { + memLayer.ML.setSessionVal("codCella", value); + } + } + /// + /// IDX cella associata alla linea corrente + /// + protected int idxCella + { + get + { + int answ = 0; + if (memLayer.ML.isInSessionObject("IdxCellaLineaST_OUT")) + { + answ = memLayer.ML.IntSessionObj("IdxCellaLineaST_OUT"); + } + return answ; + } + set + { + memLayer.ML.setSessionVal("IdxCellaLineaST_OUT", value); + } + } + /// + /// codice della linea corrente + /// + protected string currCodLinea + { + get + { + string answ = ""; + if (memLayer.ML.isInSessionObject(string.Format("LineaOut-{0}", uid))) + { + answ = memLayer.ML.StringSessionObj(string.Format("LineaOut-{0}", uid)); + } + return answ; + } + set + { + memLayer.ML.setSessionVal(string.Format("LineaOut-{0}", uid), value); + } + } + /// + /// cambiato valore in ricerca + /// + /// + /// + protected void txtCerca_TextChanged(object sender, EventArgs e) + { + // se è nuovo il testo resetto + if (testoRicerca != SteamWare.memLayer.ML.StringSessionObj("valoreCercatoSTO")) + { + udcSelC = ""; + udcSelP = ""; + } + salvaCerca(); + } + /// + /// pressione del button di ricerca + /// + /// + /// + protected void btnCerca_Click(object sender, EventArgs e) + { + salvaCerca(); + } + + /// + /// testo ricerca trimmato da spazi + /// + protected string testoRicerca + { + get + { + return txtCerca.Text.Trim(); + } + set + { + txtCerca.Text = value; + } + } + protected void salvaCerca() + { + if (testoRicerca == "") + { + SteamWare.memLayer.ML.emptySessionVal("valoreCercatoSTO"); + udcSelC = ""; + udcSelP = ""; + } + else + { + SteamWare.memLayer.ML.setSessionVal("valoreCercatoSTO", testoRicerca); + } + // raise dell'evento + if (eh_nuovaRicerca != null) + { + eh_nuovaRicerca(this, new EventArgs()); + } + doUpdate(); + } + protected void grView_PageIndexChanged(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + protected void grView_Sorted(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + /// + /// aggiorno ods al binding.. + /// + /// + /// + protected void ods_DataBinding(object sender, EventArgs e) + { + // fix dell'ODS + checkFixOds(); + } + /// + /// verifica se attivo filtro company e imposta ods di conseguenza... + /// + private void checkFixOds() + { + } + /// + /// traduce gli header delle colonne + /// + /// + /// + protected void grView_DataBound(object sender, EventArgs e) + { + if (grView.Rows.Count > 0) + { + LinkButton lb; + // aggiorno gli headers + foreach (TableCell cella in grView.HeaderRow.Cells) + { + try + { + lb = (LinkButton)cella.Controls[0]; + lb.Text = traduci(lb.Text); + } + catch + { } + } + int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1); + lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord); + } + else + { + lblNumRec.Text = ""; + } + } + + protected void rbl_DataBinding(object sender, EventArgs e) + { + RadioButtonList rbl = (RadioButtonList)sender; + if (udcSelC.IndexOf(rbl.ToolTip) >= 0) + { + rbl.SelectedValue = "C"; + } + else if (udcSelP.IndexOf(rbl.ToolTip) >= 0) + { + rbl.SelectedValue = "P"; + } + } + + protected void rbl_DataBound(object sender, EventArgs e) { } + + protected void rbl_SelectedIndexChanged(object sender, EventArgs e) + { + RadioButtonList rbl = (RadioButtonList)sender; + if (rbl.SelectedValue == "C") + { + udcSelC = string.Format("{0}#{1}#", udcSelC, rbl.ToolTip); + // se era presente in elenco "P" lo elimino + udcSelP = udcSelP.Replace(string.Format("#{0}#", rbl.ToolTip), ""); + } + else + { + udcSelP = string.Format("{0}#{1}#", udcSelP, rbl.ToolTip); + // se era presente in elenco "C" lo elimino + udcSelC = udcSelC.Replace(string.Format("#{0}#", rbl.ToolTip), ""); + } + // calcolo il particolare da selezionare... + string newPart = DataProxy.obj.taCartellini.stp_getByUdc(rbl.ToolTip)[0].Particolare; + //testoRicerca = newPart; + updFiltroPart(newPart); + } + /// + /// fa su richiesta un refresh (aggiornando dataOra di blocco x cella/posizione ad esempio) + /// + public void doRefreshBloccoPost() + { + refreshBloccoPost(currCodLinea); + } } } \ No newline at end of file diff --git a/GMW/WebUserControls/mod_lavMeccOUT.ascx.designer.cs b/GMW/WebUserControls/mod_lavMeccOUT.ascx.designer.cs index 79420003..342269c4 100644 --- a/GMW/WebUserControls/mod_lavMeccOUT.ascx.designer.cs +++ b/GMW/WebUserControls/mod_lavMeccOUT.ascx.designer.cs @@ -3,15 +3,301 @@ // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ -namespace GMW.WebUserControls -{ - - - public partial class mod_lavMeccOUT - { +namespace GMW.WebUserControls { + + + public partial class mod_lavMeccOUT { + + /// + /// pnlAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel pnlAll; + + /// + /// lblPostazione control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPostazione; + + /// + /// btnRefresh control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnRefresh; + + /// + /// btnShowHideStorico control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnShowHideStorico; + + /// + /// lblPrinter control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPrinter; + + /// + /// lblCurrentPage control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblCurrentPage; + + /// + /// hlMenu control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink hlMenu; + + /// + /// pnlSAO control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel pnlSAO; + + /// + /// mod_storicoAzioniOperatore1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::GMW.WebUserControls.mod_storicoAzioniOperatore mod_storicoAzioniOperatore1; + + /// + /// btnIn control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnIn; + + /// + /// btnOut control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnOut; + + /// + /// ddlLinea control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlLinea; + + /// + /// odsLinea control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsLinea; + + /// + /// lblParticolareAttivo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblParticolareAttivo; + + /// + /// lblDescrAttivo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDescrAttivo; + + /// + /// lblDisegno control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDisegno; + + /// + /// lblMessaggi control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblMessaggi; + + /// + /// lblWarning control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblWarning; + + /// + /// txtCerca control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtCerca; + + /// + /// btnCerca control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnCerca; + + /// + /// grView control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.GridView grView; + + /// + /// ods control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource ods; + + /// + /// lblNumRec control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblNumRec; + + /// + /// lblQta control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblQta; + + /// + /// txtQta control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtQta; + + /// + /// btnStampa control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnStampa; + + /// + /// lblBarcode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblBarcode; + + /// + /// txtBarcode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtBarcode; + + /// + /// aceParticolare control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::AjaxControlToolkit.AutoCompleteExtender aceParticolare; + + /// + /// lblNote control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblNote; + + /// + /// txtNote control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtNote; + + /// + /// btnEmptyNote control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnEmptyNote; } } diff --git a/GMW/bin/GMW.dll b/GMW/bin/GMW.dll index 0b1931cbb96779a94abd6e5cfb629e64d7506a51..de90b5f9af5e5288b5e6ce7e33b2940a11afd935 100644 GIT binary patch delta 84377 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 Sf;3stoBU783 t+y4i&R{RP8 delta 81228 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

*7am&_`(RCNw6mj3Zv@bL~21; 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 QMPYQ2{}p-8m>+5TKgF1ZV*mgE