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_smartList : System.Web.UI.UserControl
    {
        /// <summary>
        /// wrapper traduzione termini
        /// </summary>
        /// <param name="lemma"></param>
        /// <returns></returns>
        public string traduci(string lemma)
        {
            return user_std.UtSn.Traduci(lemma);
        }
        /// <summary>
        /// chiamata principale
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            updatePackListStatus();
            // resetto!
            resetAndUpdate();
        }
        /// <summary>
        /// aggiorna lo stato della packing list corrente
        /// </summary>
        private void updatePackListStatus()
        {
            // recupero barcode e controllo sia valido
            string barcode = memLayer.ML.StringSessionObj("UDC_sel");
            string particolare = "";
            bool barcodeOk = MagClass.magazzino.checkUDC(barcode);
            bool checkUDC_mov = MagClass.magazzino.checkUDC_mov(barcode); //2013.07.24 aggiunto controllo x movimentabile poiché NON in LDP scaricata
            bool udcIsConsumabile = MagClass.magazzino.IdxPosizioneUdc(barcode) >= 0; //2013.07.24 aggiunto controllo x sapere se sia consumabile (idxPosizione > 0)
            bool udcPrelevabile = (MagClass.magazzino.taRigheListePrelievo.getPrelevateByUdc(barcode).Rows.Count == 0);
            if (barcodeOk && checkUDC_mov && udcIsConsumabile && udcPrelevabile)
            {
                try
                {
                    // calcolo particolare
                    particolare = MagClass.magazzino.getParticolareByUDC(barcode);
                }
                catch
                { }
                if (particolare != "")
                {
                    /* ***************************************************
                     * Ricalcola e salva:
                     * - elenco UDC
                     * - elenco particolari
                     * - crea LDP e relative righe x ogni UDC
                     * ***************************************************/

                    // lista di prelievo
                    string currLDP = "";
                    // cerco la LDP dato utente, tipo e particolare...
                    try
                    {
                        currLDP = MagClass.magazzino.taElencoListePrelievo.getOpenByUserTipoPart(MagClass.magazzino.CodSoggCurrUser, "00-Smart", particolare)[0].CodLista;
                    }
                    catch
                    { }
                    // controllo se vada aggiunto particolare
                    if (currLDP == "")
                    {
                        // creo nuova LDP smart
                        currLDP = MagClass.magazzino.creaListaPrelievoSmart(memLayer.ML.confReadString("CodCS"), "00-Smart", particolare, "*", "*", 1, "*", "", "");
                        // imposto ad iniziata
                        MagClass.magazzino.attivaListaPrelievo(memLayer.ML.confReadString("CodCS"), currLDP, MagClass.magazzino.CodSoggCurrUser);
                        MagClass.magazzino.iniziaListaPrelievo(memLayer.ML.confReadString("CodCS"), currLDP, MagClass.magazzino.CodSoggCurrUser);
                    }
                    // controllo se vada aggiunto UDC: lo cerco nelle RLP prelevate
                    if (MagClass.magazzino.taRigheListePrelievo.getPrelevateByUdc(barcode).Rows.Count < 1)
                    {
                        if (currLDP != "")
                        {
                            // aggiungo particolare a LDP Smart esistente
                            MagClass.magazzino.confermaUdcPrelevatoPerLista(currLDP, barcode);
                        }
                        lblErrore.Visible = false;
                    }
                    else
                    {
                        // indico barcode già caricato
                        lblErrore.Visible = true;
                        lblErrore.Text = string.Format("{0}: {1}", barcode, traduci("udcGiaPrelevato"));
                    }
                }
            }
            else
            {
                if (barcode != "")
                {
                    lblErrore.Visible = true;
                    if (!udcIsConsumabile)
                    {
                        lblErrore.Text = string.Format("{0}: {1}", barcode, traduci("udcConsumato"));
                    }
                    else if (!checkUDC_mov)
                    {
                        lblErrore.Text = string.Format("{0}: {1}", barcode, traduci("udcInLdpScaricata"));
                    }
                    else
                    {
                        // indico barcode già caricato
                        lblErrore.Text = string.Format("{0}: {1}", barcode, traduci("udcGiaPrelevato"));
                    }
                }
            }
            /* ***************************************************
             * update visualizzazione, aggiorna:
             * - tot UDC
             * - tot particolari
             * ***************************************************/
            lblGeneraListe.Text = traduci("lblGeneraListe");
            lblResetListe.Text = traduci("lblResetListe");
            lblTotColli.Text = traduci("lblTotColli");
            lblNumColli.Text = string.Format("{0} UDC", MagClass.magazzino.taRigheListePrelievo.getOpenByUserTipo(MagClass.magazzino.CodSoggCurrUser, "00-Smart").Rows.Count);
            lblParticolari.Text = traduci("lblParticolari");
            lblNumPart.Text = string.Format("{0} {1}", MagClass.magazzino.taElencoListePrelievo.getOpenByUserTipo(MagClass.magazzino.CodSoggCurrUser, "00-Smart").Rows.Count, traduci("Particolari"));
        }
        /// <summary>
        /// Generazione delle liste di prelievo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGeneraListe_Click(object sender, EventArgs e)
        {
            // prendo le liste smart e le completo
            foreach (DS_magazzino.ElencoListePrelievoRow riga in MagClass.magazzino.taElencoListePrelievo.getOpenByUserTipo(MagClass.magazzino.CodSoggCurrUser, "00-Smart"))
            {
                try
                {
                    // indico completata
                    MagClass.magazzino.completaListaPrelievo(memLayer.ML.confReadString("CodCS"), riga.CodLista, MagClass.magazzino.CodSoggCurrUser, Request.UserHostName);
                }
                catch
                { }
            }
            resetAndUpdate();
        }
        /// <summary>
        /// aggiorna visualizzazioni e resetta
        /// </summary>
        private void resetAndUpdate()
        {
            //memLayer.ML.emptySessionVal("UDC_sel");
            GMW_data.TermClass.Ter.resetScanBarcode(true, false, false);
            // aggiorno visualizzazione
            updatePackListStatus();
            //lblErrore.Visible = false;
        }
        /// <summary>
        /// reset UDC x le liste di prelievo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnResetListe_Click(object sender, EventArgs e)
        {
            // prendo le liste smart e le completo
            foreach (DS_magazzino.ElencoListePrelievoRow riga in MagClass.magazzino.taElencoListePrelievo.getOpenByUserTipo(MagClass.magazzino.CodSoggCurrUser, "00-Smart"))
            {
                try
                {
                    // elimino righe
                    MagClass.magazzino.taRigheListePrelievo.stp_RLP_deleteFromCodLista(riga.CodLista);
                    // elimino lista
                    MagClass.magazzino.taElencoListePrelievo.DeleteQuery(riga.CodLista);
                    // elimino task attivo e cod lista attuale
                    memLayer.ML.emptySessionVal("CodListaAttiva");
                    memLayer.ML.emptySessionVal("activeTask");
                    lblErrore.Visible = false;
                }
                catch
                { }
            }
            resetAndUpdate();
        }
        /// <summary>
        /// fornisce verifica se l'udc sia già stato prelevato altrove...
        /// </summary>
        /// <param name="udc"></param>
        /// <returns></returns>
        public bool udcPrelevato(object udc)
        {
            return GMW_data.MagClass.magazzino.taRigheListePrelievo.getPrelevateByUdc(udc.ToString()).Rows.Count > 0;
        }

    }
}