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_labAssStampaUdc : SteamWare.ApplicationUserControl
    {
        #region area da NON modificare

        #region area protected

        /// <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

        #region public

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


        #endregion

        #endregion

        #region area codice variabile

        protected override void traduciObj()
        {
            base.traduciObj();
            btnReloadDataRQL.Text = traduci("btnReloadDataRQL");
            lblNote.Text = traduci("lblNote");
        }

        /// <summary>
        /// carico le tabelle
        /// </summary>
        private void caricaTabelle()
        {
        }
        /// <summary>
        /// elenco colonne del datagrid
        /// </summary>
        /// <returns></returns>
        protected DataColumnCollection colonneObj()
        {
            DS_magazzino.V_MagazziniOverviewDataTable tabella = new DS_magazzino.V_MagazziniOverviewDataTable();
            DataColumnCollection colonne = tabella.Columns;
            return colonne;
        }
        /// <summary>
        /// inizializzazione valori di default
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            if (!Page.IsPostBack)
            {
                pnlStampa.Visible = false;
                checkFixOds();
                txtNoteUdc.Text = "";
                calcolaPostazione();
            }
        }
        /// <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
            { }
            // mostro warning se postazione non configurata...
            lblWarning.Visible = (postazione_printer == "n.d.");
        }
        /// <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);
            }
        }
        /// <summary>
        /// fix tipo delibera
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void mod_filtroDelibera_eh_selValore(object sender, EventArgs e)
        {
            // chiamo procedura che aggiorna ods principale
            checkFixOds();
        }
        /// <summary>
        /// segnalo nuovo valore filtro attivo...
        /// </summary>
        private void checkFixOds()
        {
        }
        /// <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)
        {
            // salvo in session il valore selezionato...
            string numRappQualUdc = grView.SelectedDataKey["nRapQual"].ToString();
            int UdcAssoc = Convert.ToInt32(grView.SelectedDataKey["UdcAssoc"]);
            string benestare = grView.SelectedDataKey["BenesQual"].ToString();
            string legaScaric = grView.SelectedDataKey["LegaScaric"].ToString();
            string note = "";
            // controllo il benestare...
            if (((benestare.ToUpper() == "S") || (benestare.ToUpper() == "N")) && (legaScaric.ToUpper() == "N")) // benestare S o N = è possibile prendere in carico... se lega scaricata = 'N'
            {
                pnlStampa.Visible = true;
                // cerco eventuali note preesistenti
                try
                {
                    note = DataProxy.obj.taRQN.getByNRapQual(Convert.ToInt32(numRappQualUdc))[0].Note;
                }
                catch
                { }
                txtNoteUdc.Text = note;
                // sistemo traduzione...
                bool udc2Create = false;
                try
                {
                    udc2Create = (UdcAssoc == 0);
                }
                catch
                { }
                if (udc2Create)
                {
                    btnDelibera.Text = traduci("btnStampaUdc");
                    btnDelibera.OnClientClick = SteamWare.jsUtils.getCBE("cbeBtnStampaUdc");
                }
                else
                {
                    btnDelibera.Text = traduci("btnRiStampaUdc");
                    btnDelibera.OnClientClick = SteamWare.jsUtils.getCBE("cbeBtnRiStampaUdc");
                }
            }
            else
            {
                pnlStampa.Visible = false;
            }
        }
        /// <summary>
        /// seleziona/deseleziona le righe indicate...
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSelAll_Click(object sender, EventArgs e)
        {
            // seleziono tutti i valori visibili nel datagrid
            CheckBox chkbox = ((CheckBox)sender);
            bool isChecked = chkbox.Checked;
            if (!isChecked)
            {
                chkbox.ToolTip = traduci("btnSelAll");
            }
            else
            {
                chkbox.ToolTip = traduci("btnDeselAll");
            }
            foreach (GridViewRow riga in grView.Rows)
            {
                ((CheckBox)riga.FindControl("chkSelect")).Checked = isChecked;
            }
        }
        /// <summary>
        /// resetta la selezione dei valori in caso di modifiche su altri controlli
        /// </summary>
        public void resetSelezione()
        {
            pnlStampa.Visible = false;
            grView.SelectedIndex = -1;
            grView.DataBind();
            lblWarning.Visible = false;
            if (eh_resetSelezione != null)
            {
                eh_resetSelezione(this, new EventArgs());
            }
        }
        /// <summary>
        /// effettua delibera per gli UDC selezionati
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDelibera_Click(object sender, EventArgs e)
        {
            bool fatto = false;
            // salvo in session il valore selezionato...
            int numRappQualUdc = Convert.ToInt32(grView.SelectedDataKey["nRapQual"]);
            int UdcAssoc = Convert.ToInt32(grView.SelectedDataKey["UdcAssoc"]);
            string note = "";
            // sistemo traduzione...
            bool udc2Create = false;
            try
            {
                udc2Create = (UdcAssoc == 0);
            }
            catch
            { }
            try
            {
                note = txtNoteUdc.Text.Trim();
            }
            catch
            { }
            if (udc2Create)
            {
                fatto = MagClass.magazzino.creaUdcDaRappQualita(numRappQualUdc, note, true, postazione_printer, Request.UserHostName);
                // aggiorno note
                MagClass.magazzino.updateNoteRDQ(numRappQualUdc, note);
                // resetto!
                txtNoteUdc.Text = "";
            }
            else
            {
                // aggiorno note
                MagClass.magazzino.updateNoteRDQ(numRappQualUdc, note);
                // stampo!
                fatto = MagClass.magazzino.stampaUdcDaRappQualita(numRappQualUdc, postazione_printer);
            }
            grView.DataBind();
        }
        /// <summary>
        /// forza il ricaricamento da AS400 i dati per il numero di giorni richiesto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnReloadDataRQL_Click(object sender, EventArgs e)
        {
            int numGgPassati = memLayer.ML.confReadInt("numGgToReloadRQ");
            // stored 1 : ricarico da AS400
            utils.obj.taSTP.stp_batch_RapQual_S01(DateTime.Now.AddDays(-numGgPassati));
            // stored 2 aggiorno tabella
            string codMagMp = memLayer.ML.confReadString("CodMagMP");
            string codMagMpNa = memLayer.ML.confReadString("CodMagMP_NA");
            string CodStatoMp = memLayer.ML.confReadString("CodStatoMP");
            string CodStatoMpNa = memLayer.ML.confReadString("CodStatoMP-NA");
            utils.obj.taSTP.stp_batch_RapQual_S02(codMagMpNa, codMagMp, CodStatoMpNa, CodStatoMp);
            // update 
            resetSelezione();
        }
        /// <summary>
        /// determina se sia eliminabile la lista di UDC associata ad un rapQual ed al suo benestare
        /// </summary>
        /// <param name="BenesQual"></param>
        /// <returns></returns>
        public bool delEnabled(object BenesQual)
        {
            bool answ = false;
            try
            {
                string benestare = BenesQual.ToString();
                answ = ((benestare == "A") || (benestare == "N"));
            }
            catch
            { }
            return answ;
        }
        /// <summary>
        /// intercetto delete x annullarlo e chiamare stored di delete degli UDC dei numRapQual
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void grView_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            // chiamo stored x eliminazione UDC collegati
            DataProxy.obj.taCartellini.stp_UDC_delete_byRdQ(Convert.ToInt32(e.Keys["nRapQual"]), true);
            // annullo delete
            e.Cancel = true;
            // reset!
            resetSelezione();
        }

        #endregion
    }
}