using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;

namespace LLNet.Tienda.MainForms.Forms.Ecommerce
{
    public partial class FrmListaEcom : Form
    {
        public static bool procesar = false;
        DataSet vFacturas, ds_filtros, vDs_Filtros = new DataSet();

        public FrmListaEcom()
        {
            InitializeComponent();
        }     

        #region ClausFiltro
        /// <summary>
        /// Obtiene la clausula where del filtro
        /// </summary>
        /// <returns>Clausula where</returns>
        private string ClausFiltro()
        {
            string condic = "";//condición, ejemplo WHERE ESTADO = 'ANULADO'

            if (ds_filtros.Tables.Count > 0 && ds_filtros.Tables[0].Rows.Count > 0)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("MODULE", "EnviosListadoPos");

                DataTable dt = ds_filtros.Tables[0];
                if (this.tscbxFiltro.Items[this.tscbxFiltro.SelectedIndex].ToString() == "")
                    qp.AddReplaceParam("FILTER", "BLANCO");
                else
                {
                    DataRow[] dr = dt.Select("FILTER_NAME = '" + this.tscbxFiltro.Items[this.tscbxFiltro.SelectedIndex] + "'");
                    foreach (DataRow fila in dr)
                        condic = fila[1].ToString();
                    qp.AddReplaceParam("FILTER", this.tscbxFiltro.Items[this.tscbxFiltro.SelectedIndex].ToString());
                }

                GUI.CApp.bll.ExecuteSql("ModifFiltro", qp, "PDV");
            }

            return condic;
        }
        #endregion

        #region LlenarGrid
        /// <summary>
        /// Llena el grid con los dañados de la base de datos
        /// </summary>
        private void LlenarGrid()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (this.tscbxFiltro.SelectedIndex >= 0)
                qp.AddReplaceParam("FILTRO", ClausFiltro());
            else
                qp.AddReplaceParam("FILTRO", "");

            

            vFacturas = GUI.CApp.bll.getDataSet("PDV", "FacturasEcom", qp);
            if (vFacturas.Tables.Count > 0 && this.vFacturas.Tables[0].Rows.Count > 0)
            {
                this.gcFacturas.DataSource = vFacturas;
                this.gcFacturas.DataMember = vFacturas.Tables[0].ToString();
            }
            else
            {
                this.gcFacturas.DataSource = null;
                this.gcFacturas.DataMember = null;
            }
           
        }
        #endregion

        #region Filtros
        /// <summary>
        /// Obtiene los filtros
        /// </summary>
        private void Filtros()
        {
            ds_filtros = new DataSet();
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("MODULE", "EnviosListadoPos");
            ds_filtros = GUI.CApp.bll.getDataSet("PDV", "Filtros", qp);
            int cont = 1, index = 0;
            //
            //object gfiltro = null;//Filtro usado la última vez
            //gfiltro = Convert.ToInt16(GUI.CApp.bll.GetSingleValue("FiltroUsado", qp, "PVD"));
            
            //----------------------------------------
            this.tscbxFiltro.Items.Clear();

            if (ds_filtros.Tables.Count > 0 && ds_filtros.Tables[0].Rows.Count > 0)
            {
                this.tscbxFiltro.Enabled = true;

                this.tscbxFiltro.Items.Add("");
                foreach (DataRow filtro in ds_filtros.Tables[0].Rows)
                {
                    this.tscbxFiltro.Items.Add(filtro.ItemArray[0]);

            //        if (gfiltro != null)
            //        {
            //            if (filtro.ItemArray[0].ToString() == gfiltro.ToString())
            //                index = cont;
            //            else
            //                cont++;
            //        }
                }

            //    if (gfiltro != null)
                 this.tscbxFiltro.SelectedIndex = index;
            }
            else
                  this.tscbxFiltro.Enabled = false;
        }
        #endregion

        #region mBuscarNumOrden
        /// <summary>
        /// Se realiza la búsqueda de la factura del cliente por la opción escogida por el usuario
        /// </summary>
        private void mBuscarNumOrden()
        {
            Utils.QueryParams vQP = new LLNet.Utils.QueryParams();
            if (this.cbxOpcionesBusqueda.SelectedIndex >= 0)
            {
                string vCondicion = mClausFiltroCombo();
                vCondicion = vCondicion.Replace("@", txtBusqueda.Text);

                vQP.AddReplaceParam("FILTRO", vCondicion);
            }
            else
            {
                vQP.AddReplaceParam("FILTRO", "");
            }

            vFacturas = GUI.CApp.bll.getDataSet("PDV", "FacturasEcom", vQP);
            if (vFacturas.Tables.Count > 0 && this.vFacturas.Tables[0].Rows.Count > 0)
            {
                this.gcFacturas.DataSource = vFacturas;
                this.gcFacturas.DataMember = vFacturas.Tables[0].ToString();
            }
            else
            {
                this.gcFacturas.DataSource = null;
                this.gcFacturas.DataMember = null;
            }
        }
        #endregion

        #region mClausFiltroCombo
        /// <summary>
        /// Obtiene la claúsula del filtro para la búsqueda
        /// </summary>
        /// <returns>Condición para filtrar la información</returns>
        private string mClausFiltroCombo()
        {
            string vCondic = "";//condición, ejemplo WHERE ESTADO = 'ANULADO'

            if (vDs_Filtros.Tables.Count > 0 && vDs_Filtros.Tables[0].Rows.Count > 0)
            {
                Utils.QueryParams vQP = new LLNet.Utils.QueryParams();
                vQP.AddReplaceParam("MODULE", "EnviosListado_Combo");

                DataTable dt = vDs_Filtros.Tables[0];
                if (this.cbxOpcionesBusqueda.Items[this.cbxOpcionesBusqueda.SelectedIndex].ToString() == "")
                {
                    vQP.AddReplaceParam("FILTER", "BLANCO");
                }
                else
                {
                    DataRow[] vDR = dt.Select("FILTER_NAME = '" + this.cbxOpcionesBusqueda.Items[this.cbxOpcionesBusqueda.SelectedIndex] + "'");
                    foreach (DataRow vFila in vDR)
                    {
                        vCondic = vFila[1].ToString();
                    }
                }
            }

            return vCondic;
        }
        #endregion

        #region mFiltrosBusqueda
        /// <summary>
        /// Obtiene los filtros para la búsqueda de órdenes a través de los datos ingresados por el usuario
        /// </summary>
        private void mFiltrosBusqueda()
        {
            Utils.QueryParams vQP = new LLNet.Utils.QueryParams();
            vQP.AddReplaceParam("MODULE", "EnviosListado_Combo");

            vDs_Filtros = GUI.CApp.bll.getDataSet("PDV", "Filtros", vQP);
            this.cbxOpcionesBusqueda.Items.Clear();

            if (vDs_Filtros.Tables.Count > 0 && vDs_Filtros.Tables[0].Rows.Count > 0)
            {
                this.cbxOpcionesBusqueda.Enabled = true;
                //
                this.cbxOpcionesBusqueda.Items.Add("");

                foreach (DataRow vFiltro in vDs_Filtros.Tables[0].Rows)
                {
                    this.cbxOpcionesBusqueda.Items.Add(vFiltro.ItemArray[0]);
                }
                //
                this.cbxOpcionesBusqueda.SelectedIndex = 0;
            }
            else
            {
                this.cbxOpcionesBusqueda.Enabled = false;
            }
        }
        #endregion

        #region mReversarEntrega
        /// <summary>
        /// Reversa la entrega del producto al cliente
        /// </summary>
        private void mReversarEntrega()
        {
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pCNUM_ORDEN", 
                Convert.ToString(gvFacturas.GetRowCellValue(gvFacturas.FocusedRowHandle, "CNUM_ORDEN")));

            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                vParametros.AddReplaceParam("pUSUARIO", GUI.CApp.Sup);
            else
                vParametros.AddReplaceParam("pUSUARIO", GUI.CApp.usuario);

            GUI.CApp.bll.ExecuteSql("EC_P_REVERSAR_ENTREGA", vParametros, "PDV");

             CApp.ShowMessage("Reversión realizada con éxito", "Facturas Ecommerce", true);

            tsbtnRefrescar.PerformClick();
        }
        #endregion

        #region FrmListaEcom_Load
        private void FrmListaEcom_Load(object sender, EventArgs e)
        {
            try
            {
                Filtros();
                LlenarGrid();
                mFiltrosBusqueda();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region tsbtnRefrescar_Click
        private void tsbtnRefrescar_Click(object sender, EventArgs e)
        {
            try
            {
                LlenarGrid();

            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region tsbtnExportar_Click
        private void tsbtnExportar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.sfdExportar.ShowDialog() == DialogResult.OK)
                {
                    //Exporta a excel los datos del detalle de la devolución
                    this.gvFacturas.ExportToXls(this.sfdExportar.FileName);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region gcFacturas_DoubleClick
        private void gcFacturas_DoubleClick(object sender, EventArgs e)
        {
            if (gvFacturas.FocusedRowHandle >= 0)
            {
                string numorden = Convert.ToString(gvFacturas.GetRowCellValue(gvFacturas.FocusedRowHandle, "CNUM_ORDEN"));
                string estado = Convert.ToString(gvFacturas.GetRowCellValue(gvFacturas.FocusedRowHandle, "CCOD_ESTADO"));
                FrmDetalleEcom.numorden = numorden;
                FrmDetalleEcom.estado = estado;
                MainForms.Forms.Ecommerce.FrmDetalleEcom fde = new MainForms.Forms.Ecommerce.FrmDetalleEcom();
                fde.ShowDialog();
                LlenarGrid();
            }
        }
        #endregion

        #region tscbxFiltro_SelectedIndexChanged
        private void tscbxFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                LlenarGrid();

            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

      
        
        #region btnCancelar_Click
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion

        #region FrmListaEcom_KeyDown
        private void FrmListaEcom_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers != Keys.Alt)
            {
                switch (e.KeyCode)
                {

                    case Keys.Escape: // asistencia
                        btnCancelar_Click(null, null);
                        break;
                }
            }
        }
        #endregion 

        #region txtBusqueda_KeyDown
        private void txtBusqueda_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    btnBuscar.PerformClick();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region btnBuscar_Click
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                if (cbxOpcionesBusqueda.Text != String.Empty && txtBusqueda.Text == String.Empty)
                {
                    CApp.ShowMessage("Favor ingrese un valor para hacer la búsqueda", "Facturas Ecommerce", true);
                    txtBusqueda.Focus(); 
                }
                else
                {
                    mBuscarNumOrden();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region btnReversar_Click
        private void btnReversar_Click(object sender, EventArgs e)
        {
            try
            {
                string vEstado = String.Empty, vFactura = String.Empty;

                if (GUI.CApp.ValidateAccess("ECOM_Reversion_Entrega", "Facturas Ecommerce"))
                {
                    if (gvFacturas.FocusedRowHandle >= 0)
                    {
                        vEstado = Convert.ToString(gvFacturas.GetRowCellValue(gvFacturas.FocusedRowHandle, "CCOD_ESTADO"));
                        vFactura = Convert.ToString(gvFacturas.GetRowCellValue(gvFacturas.FocusedRowHandle, "CFACTURA"));

                        if (vEstado == "EC")
                        {
                            if (GUI.CApp.ShowMessage("¿Está seguro de reversar la entrega a cliente de la factura " + vFactura +
                        "?", "Facturas Ecommerce", true, true) == System.Windows.Forms.DialogResult.OK)
                            {
                                mReversarEntrega();
                            }
                        }
                        else
                        {
                            CApp.ShowMessage("No se puede reversar la entrega, pues la factura no está entregada al cliente", "Facturas Ecommerce", true);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        #region cbxOpcionesBusqueda_SelectedIndexChanged
        private void cbxOpcionesBusqueda_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbxOpcionesBusqueda.Text == String.Empty)
                {
                    txtBusqueda.Text = String.Empty;
                    mBuscarNumOrden();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Facturas Ecommerce", true);
            }
        }
        #endregion

        private void btnInmediato_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ECOM_Entrega_Inmediata", "Facturas Ecommerce"))
            {
                FrmEntregaInmediata frmentrega = new FrmEntregaInmediata();
                frmentrega.ShowDialog();
            }
        }
    }
}
