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_Term.WebUserControls { public partial class mod_execUdc : System.Web.UI.UserControl { #region variabili globali controllo /// /// codice company/sito in sessione /// protected string _CodCS { get { return memLayer.ML.StringSessionObj("CodCS"); } } /// /// UDC correntemente selezionato /// protected string _UDC { get { return memLayer.ML.StringSessionObj("UDC_sel"); } set { memLayer.ML.setSessionVal("UDC_sel", value); } } /// /// CodLista della lsita di prelievo correntemente attiva /// protected string _CodLista { get { return memLayer.ML.StringSessionObj("CodListaAttiva"); } set { memLayer.ML.setSessionVal("CodListaAttiva", value); } } /// /// Particolare dell'UDC correntemente selezionato /// protected string _PartUdc { get { string answ = ""; try { answ = MagClass.magazzino.taDettUDC.getByFullUdc(_UDC, _CodCS)[0].Particolare; } catch { } return answ; } } /// /// Indica se l'UDC correntemente selezionato sia disponibile x prelievo /// protected bool _UdcDisp { get { bool answ = false; try { answ = (MagClass.magazzino.taRigheListePrelievo.getPrelevateByUdc(_UDC).Rows.Count == 0); } catch { } return answ; } } /// /// Indica se la cella DI DESTINAZIONE dell'azione sia da indicare come piena /// protected bool _cellaPiena { get { return memLayer.ML.BoolSessionObj("cellaPiena"); } set { memLayer.ML.setSessionVal("cellaPiena", value); } } /// /// Particolare della Lista di Prelievo correntemente attiva /// protected string _PartLdP { get { string answ = ""; if (_CodLista != "") { try { answ = MagClass.magazzino.taElencoListePrelievo.getByCodLista(_CodLista)[0].Particolare; } catch { } } return answ; } } /// /// valore della scansione barcode /// public string valoreScanUdc { get { return memLayer.ML.StringSessionObj("scannedValueUdc"); } set { memLayer.ML.setSessionVal("scannedValueUdc", value, false); } } /// /// tipologia di edit attivo (in session...) /// protected tipoEditUdc editAttivo { get { tipoEditUdc answ = tipoEditUdc.nd; try { answ = (tipoEditUdc)memLayer.ML.objSessionObj("EditAttivo"); } catch { } return answ; } set { memLayer.ML.setSessionVal("EditAttivo", value, false); } } #endregion #region setup modulo /// /// caricamento pagina /// /// /// protected void Page_Load(object sender, EventArgs e) { mod_btnUdc1.eh_btnPressed += new EventHandler(mod_btnUdc1_eh_btnPressed); } /// /// premuto un bottone, di conseguenza adatta grafica e/o funzionalità /// /// /// void mod_btnUdc1_eh_btnPressed(object sender, EventArgs e) { switch (editAttivo) { case tipoEditUdc.nd: break; case tipoEditUdc.deliberaFusi: deliberaUdc(); break; case tipoEditUdc.deliberaWipPost: deliberaUdc(); break; case tipoEditUdc.deliberaWipPre: deliberaUdc(); break; case tipoEditUdc.deposito: depositaUdc(_cellaPiena); break; case tipoEditUdc.prelievo: break; case tipoEditUdc.rettifica: frmView.ChangeMode(FormViewMode.Edit); break; case tipoEditUdc.spostamento: spostaUdc(_cellaPiena); break; default: break; } } /// /// wrapper traduzione termini /// /// /// public string traduci(string lemma) { return user_std.UtSn.Traduci(lemma); } #endregion #region metodi operativi interni /// /// effattua al delibera dell'UDC indicato /// private void deliberaUdc() { string tipoDelibera = ""; switch (editAttivo) { case tipoEditUdc.deliberaFusi: tipoDelibera = "DelibFusi"; break; case tipoEditUdc.deliberaWipPost: tipoDelibera = "DelibWipPost"; break; case tipoEditUdc.deliberaWipPre: tipoDelibera = "DelibWipPre"; break; default: break; } if (tipoDelibera != "") { // chiamo stored x fare delibera con state machine string CodEvento = tipoDelibera; try { CodEvento = StateMachine.SM.taATD.getByKey(tipoDelibera)[0].CodEvento; } catch { } StateMachine.SM.deliberaUdc(_UDC, tipoDelibera, CodEvento, Request.UserHostName); } // resetto buttons mod_btnUdc1.doReset(); // aggiorna dati frmView.DataBind(); } /// /// effettua salvataggio, mostra cella updated, eventuale set piena della cella /// /// private void depositaUdc(bool setCellaPiena) { // controllo UDC sia spostabile (ovvero NON in RLP bloccata) if (MagClass.magazzino.checkUDC_mov(_UDC)) { // cerco id della cella... int idxCella = MagClass.magazzino.IdxCellaByCodCella(_CodCS, valoreScanUdc); // salva le info facendo caricamento MagClass.magazzino.spostaUDC(_CodCS, _UDC, idxCella, memLayer.ML.confReadBool("spostaUdcResettaLdp"), Request.UserHostName); if (setCellaPiena) { MagClass.magazzino.taCelle.stp_celle_updPiena(idxCella, true); } } // resetto buttons mod_btnUdc1.doReset(); // aggiorna dati frmView.DataBind(); } /// /// chiama lo spostamento dell'UDC tra la cella attuale e la nuova... /// /// private void spostaUdc(bool setCellaPiena) { // controllo UDC sia spostabile (ovvero NON in RLP bloccata) if (MagClass.magazzino.checkUDC_mov(_UDC)) { // cerco id delle celle... int idxCellaFrom = MagClass.magazzino.taDettUDC.getByFullUdc(_UDC, _CodCS)[0].IdxCella; int idxCellaTo = MagClass.magazzino.IdxCellaByCodCella(_CodCS, valoreScanUdc); // salva le info facendo caricamento MagClass.magazzino.spostaUDC(_CodCS, _UDC, idxCellaTo, memLayer.ML.confReadBool("spostaUdcResettaLdp"), Request.UserHostName); // dopo aver spostato UDC sistemo eventuali Righe di Prelievo x lo stesso UDC pending... MagClass.magazzino.taRigheListePrelievo.stp_RLP_sbloccaNonPrelevate("ND", _UDC); // metto "ND" perché voglio sbloccare tutti gli impieghi di quell'UDC // la cella di partenza la indico come disponibile (comunque ho tolto un UDC...) MagClass.magazzino.taCelle.stp_celle_updPiena(idxCellaFrom, false); if (setCellaPiena) { MagClass.magazzino.taCelle.stp_celle_updPiena(idxCellaTo, true); } } // resetto buttons mod_btnUdc1.doReset(); // aggiorna dati frmView.DataBind(); } #endregion #region gestione interazione (buttons & update...) #region area frmView & co /// /// eseguo alla chiusura della fase di update /// /// /// protected void frmView_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { //fixBtnPostUpdateQta(); } /// /// mostra di nuovo buttons post fase di editing /// private void fixBtnPostUpdateQta() { // aggiorno frmView frmView.DataBind(); mod_btnUdc1.doReset(); } /// /// alla chiusura fase di editing /// /// /// protected void frmView_ModeChanged(object sender, EventArgs e) { // se sono in item mode mostro di nuovo i buttons... if (frmView.CurrentMode == FormViewMode.ReadOnly) { fixBtnPostUpdateQta(); } } /// /// evento on update /// /// /// protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e) { // controllo UDC sia modificabile qta if (MagClass.magazzino.checkUDC_qty(_UDC)) { decimal qta = Convert.ToDecimal(e.InputParameters["Qta"]); // intercetto l'evento e chiamo una stored ad hoc! MagClass.magazzino.taCartellini.updateQty(_UDC, MagClass.magazzino.CodSoggCurrUser, "U", "UDC_QTY", qta); // aggiorno anche eventuali righe inliste prelievo MagClass.magazzino.taRigheListePrelievo.stp_RLP_updateQty(_UDC, qta); } // annullo update! e.Cancel = true; } #endregion #endregion } } /// /// enumerazione tipo di editing effettuato su UDC /// public enum tipoEditUdc { nd, deliberaFusi, deliberaWipPost, deliberaWipPre, deposito, prelievo, rettifica, spostamento }