using GMW_data;
using SteamWare;
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GMW.WebUserControls
{
    public partial class mod_viewOdette : SteamWare.ApplicationUserControl
    {
        #region area da NON modificare

        #region area protected

        protected string _idxGridView;
        protected string _idxGridViewExt;
        protected string _tabCache;

        /// <summary>
        /// aggiorna controlli datagrid e numero righe in pagina
        /// </summary>
        protected override void aggiornaControlliDataGL()
        {
            base.aggiornaControlliDataGL();
            grView.PageSize = _righeDataGridMed;
        }
        /// <summary>
        /// traduce gli header delle colonne
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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 = "";
            }
        }
        /// <summary>
        /// reset della selezione
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnReset_Click(object sender, EventArgs e)
        {
            resetSelezione();
        }


        /// <summary>
        /// collega i controlli
        /// </summary>
        protected override void bindControlli()
        {
            base.bindControlli();
            caricaTabelle();
        }

        #endregion

        #region gestione eventi

        public event EventHandler eh_resetSelezione;
        public event EventHandler eh_nuovoValore;
        public event EventHandler eh_selValore;

        #endregion

        #endregion

        #region area codice variabile

        /// <summary>
        /// effettua update del modulo
        /// </summary>
        public void doUpdate()
        {
            resetSelezione();
        }

        /// <summary>
        /// carico le tabelle
        /// </summary>
        private void caricaTabelle()
        {
        }
        /// <summary>
        /// elenco colonne del datagrid
        /// </summary>
        /// <returns></returns>
        protected DataColumnCollection colonneObj()
        {
            DS_magazzino.V_DettMagPartDataTable tabella = new DS_magazzino.V_DettMagPartDataTable();
            DataColumnCollection colonne = tabella.Columns;
            return colonne;
        }
        /// <summary>
        /// inizializzazione valori di default
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                btnRistampaOdette.Text = traduci("RistampaOdette");
                calcolaPostazione();
            }
            base.OnInit(e);
        }

        /// <summary>
        /// segnalo nuovo valore filtro attivo...
        /// </summary>
        private void checkFixOds()
        {
            grView.DataBind();
        }
        /// <summary>
        /// aggiorno visualizzazione
        /// </summary>
        private void updateOdsDaFiltro()
        {
            grView.DataBind();
        }
        /// <summary>
        /// chiamata post page change gridview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_PageIndexChanged(object sender, EventArgs e)
        {
            // sistemazione dell'ods post evento cambio pagina
            checkFixOds();
        }
        /// <summary>
        /// chiamata post sort gridview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_Sorted(object sender, EventArgs e)
        {
            // sistemazione dell'ods post evento sort
            checkFixOds();
        }
        /// <summary>
        /// gestione cambio selezione valore
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_SelectedIndexChanged(object sender, EventArgs e)
        {
            // sollevo evento nuovo valore...
            if (eh_selValore != null)
            {
                eh_selValore(this, new EventArgs());
            }
        }

        /// <summary>
        /// resetta la selezione dei valori in caso di modifiche su altri controlli
        /// </summary>
        public void resetSelezione()
        {
            // controlla stato lista e tipo lista x decidere se mostrare pulsante ristampa odette
            if (odetteVisible)
            {
                btnRistampaOdette.Visible = true;
            }
            else
            {
                btnRistampaOdette.Visible = false;
            }
            grView.SelectedIndex = -1;
            grView.DataBind();
            lblWarning.Visible = false;
            if (eh_resetSelezione != null)
            {
                eh_resetSelezione(this, new EventArgs());
            }
        }

        /// <summary>
        /// in caso di aggiornamento verifico se sia salvato un comando inizia o completa lista prelievo...
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            // carico l'idx dell'oggetto
            string UDC = e.Keys["CampoUDC"].ToString();
            // quale comando?
            string _comando = "";
            if (SteamWare.memLayer.ML.isInSessionObject("nextObjCommand"))
            {
                _comando = SteamWare.memLayer.ML.StringSessionObj("nextObjCommand");
                SteamWare.memLayer.ML.emptySessionVal("nextObjCommand");
            }
            // verifico il tipo di richiesta (up/down level, clona o update normale
            switch (_comando)
            {
                case "stampaOdette":
                    // lancia una singola etichetta odette
                    Odette.mgr.stampaEtichettaOdette(UDC, postazione_printer);
                    // blocco update!
                    e.Cancel = true;
                    break;
                default:
                    // faccio update!
                    break;
            }
        }
        /// <summary>
        /// post update...
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ods_Updated(object sender, ObjectDataSourceStatusEventArgs e)
        {
            // sollevo evento nuovo valore...
            if (eh_nuovoValore != null)
            {
                eh_nuovoValore(this, new EventArgs());
            }
            grView.DataBind();
        }
        /// <summary>
        /// registra lo stato della lista di prelievo (x controllo visibilità valori)
        /// </summary>
        public int intStatoLista { get; set; }
        /// <summary>
        /// registra il tipo della lista di prelievo (x controllo visibilità valori)
        /// </summary>
        public string codTipoLista { get; set; }
        /// <summary>
        /// salvo parametri x selettore ajax
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_RowEditing(object sender, GridViewEditEventArgs e)
        {
            grView.SelectedIndex = e.NewEditIndex;
            // salvo anche dato x filtraggio udcByPart
            string UDC = "";
            string particolare = "";
            string codLista = "";
            string codTipoLista = "";
            try
            {
                UDC = grView.SelectedDataKey["UDC"].ToString();
                particolare = MagClass.magazzino.taDettUDC.getByFullUdc(UDC, memLayer.ML.StringSessionObj("CodCS"))[0].Particolare;
                codLista = grView.SelectedDataKey["CodLista"].ToString();
                codTipoLista = MagClass.magazzino.taElencoListePrelievo.getByCodLista(codLista)[0].CodTipoLista;
            }
            catch
            { }
            memLayer.ML.setSessionVal("UdcByPart_Particolare", particolare);
            memLayer.ML.setSessionVal("UdcByPart_CodLista", codTipoLista);
        }
        /// <summary>
        /// ridisegno x cancel editing
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            // sollevo evento nuovo valore...
            if (eh_nuovoValore != null)
            {
                eh_nuovoValore(this, new EventArgs());
            }
        }
        /// <summary>
        /// ridisegno x eliminazione...
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {
            // sollevo evento nuovo valore...
            if (eh_nuovoValore != null)
            {
                eh_nuovoValore(this, new EventArgs());
            }
        }
        /// <summary>
        /// determina se siano visibili i pulsanti x ristampa odette
        /// </summary>
        /// <returns></returns>
        public bool odetteVisible
        {
            get
            {
                return Odette.mgr.listaHasOdette(CodListaOdetteCurr);
            }
        }
        /// <summary>
        /// restituisce URL x chiamata stampa report odette
        /// </summary>
        /// <param name="_udc"></param>
        /// <returns></returns>
        public string formattaUrlOdette(object _udc)
        {
            return _udc.ToString();
        }
        /// <summary>
        /// salvo in session il prox comando
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void img_Click(object sender, ImageClickEventArgs e)
        {
            SteamWare.memLayer.ML.setSessionVal("nextObjCommand", ((ImageButton)sender).CommandArgument);
        }
        /// <summary>
        /// (ri)stampa tutte le etichette della packing list
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnRistampaOdette_Click(object sender, EventArgs e)
        {
            Odette.mgr.stampaOdettePackingList(CodListaOdetteCurr, postazione_printer);
        }
        /// <summary>
        /// elimina tutte le odette
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEmptyOdette_Click(object sender, EventArgs e)
        {
            Odette.mgr.taOdette.deleteByLDP(CodListaOdetteCurr);
            // sollevo evento nuovo valore...
            if (eh_nuovoValore != null)
            {
                eh_nuovoValore(this, new EventArgs());
            }
        }
        /// <summary>
        /// lista odette correntemente selezionata
        /// </summary>
        public string CodListaOdetteCurr
        {
            get
            {
                return memLayer.ML.StringSessionObj("CodListaOd_sel");
            }
        }
        /// <summary>
        /// calcola postazione corrente (ip, name, printer)
        /// </summary>
        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
            { }
        }
        /// <summary>
        /// indica name della postazione corrente
        /// </summary>
        protected string postazione_name
        {
            get
            {
                return memLayer.ML.StringSessionObj("postazione_name");
            }
            set
            {
                memLayer.ML.setSessionVal("postazione_name", value);
            }
        }
        /// <summary>
        /// indica ip della postazione corrente
        /// </summary>
        protected string postazione_IP
        {
            get
            {
                return memLayer.ML.StringSessionObj("postazione_IP");
            }
            set
            {
                memLayer.ML.setSessionVal("postazione_IP", value);
            }
        }
        /// <summary>
        /// indica stampante associata alla postazione corrente
        /// </summary>
        protected string postazione_printer
        {
            get
            {
                return memLayer.ML.StringSessionObj("postazione_printer");
            }
            set
            {
                memLayer.ML.setSessionVal("postazione_printer", value);
            }
        }

        #endregion
    }
}