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
{
    public partial class FrmBusquedaPagos : Form
    {
        /// <summary>
        /// Indica si se permite el cambio de una línea del pago o no
        /// </summary>
        private bool vCambiar = false;
        /// <summary>
        /// Emisor
        /// </summary>
        private int vEmisor = 0;
        /// <summary>
        /// Número de grid en donde se mostraran los datos
        /// </summary>
        private int vNumGrid = 0;
        /// <summary>
        /// Número de rubro del cierre consolidado
        /// </summary>
        private string vNumRubro = String.Empty;
        /// <summary>
        /// Nombre del tipo de pago
        /// </summary>
        private string vPago = String.Empty;
        /// <summary>
        /// Tipo de pago asociado al tipo de rubro del cierre consolidado
        /// </summary>
        private int vTipoPago = 0;       

        public FrmBusquedaPagos()
        {
            InitializeComponent();
        }

        #region Propiedades

        public bool Cambiar
        {
            set
            {
                this.vCambiar = value;
            }
        }

        public int Emisor
        {
            set
            {
                this.vEmisor = value;
            }
        }

        public int NumGrid
        {
            set
            {
                this.vNumGrid = value;
            }
        }

        public string NumRubro
        {
            set
            {
                this.vNumRubro = value;
            }
        }

        public string Pago
        {
            set
            {
                this.vPago = value;
            }
        }

        public int TipoPago
        {
            set
            {
                this.vTipoPago = value;
            }
        }

        #endregion

        #region mCargarDatos
        /// <summary>
        /// Carga las facturas y recibos en el grid, cuyo tipo de pago sea igual al indicado en vTipoPago
        /// </summary>
        private void mCargarDatos()
        {
            Utils.QueryParams vParametros = new QueryParams();
            DevExpress.XtraGrid.GridControl vGridC = new DevExpress.XtraGrid.GridControl();
            decimal vMonto = 0;
            string vTextoBusq = String.Empty;

            if (rbtnAproxMonto.Checked)
            {
                vMonto = decimal.Parse(mtxtMonto.Text);
                vTextoBusq = " AND MONTO BETWEEN " + (vMonto - 100) + " AND "
                    + (vMonto + 100);
            }

            vParametros.AddReplaceParam("JORNADA", Program.Jornada.ToString() + vTextoBusq);

            vGridC = mObtenerGridControl();
            vGridC.DataSource = null;

            // Obtiene los recibos y facturas del tipo de pago
            using (DataSet vdatos = GUI.CApp.bll.getDataSet("PDV", vNumRubro, vParametros))
            {
                // Verifica que tenga datos
                if (vdatos.Tables.Count > 0 && vdatos.Tables[0].Rows.Count > 0)
                {
                    // Agrega los datos al grid activo
                    vGridC.DataSource = vdatos.Tables[0];
                }
            }
        }
        #endregion

        #region mMostrarGrid
        /// <summary>
        /// Muestra el grid, dependiendo del tipo de pago seleccionado en la pantalla FrmIngresoTotales
        /// </summary>
        private void mMostrarGrid()
        {
            switch (vNumGrid)
            {
                case 0:
                    gcFacturas5.Visible = true;
                    break;
                case 1:
                    gcFacturas.Visible = true;
                    break;
                case 2:
                    gcFacturas2.Visible = true;
                    break;
                case 3:
                    gcFacturas3.Visible = true;
                    break;
                case 4:
                    gcFacturas4.Visible = true;
                    break;
                case 5:
                    gcFacturas5.Visible = true;
                    break;
            }
        }
        #endregion

        #region ObtenerGridControl
        /// <summary>
        /// Obtiene el gridcontrol activo
        /// </summary>
        /// <returns>GridControl</returns>
        private DevExpress.XtraGrid.GridControl mObtenerGridControl()
        {
            DevExpress.XtraGrid.GridControl vGridC = new DevExpress.XtraGrid.GridControl();

            if (gcFacturas.Visible)
            {
                vGridC = gcFacturas;
            }
            else if (gcFacturas2.Visible)
            {
                vGridC = gcFacturas2;
            }
            else if (gcFacturas3.Visible)
            {
                vGridC = gcFacturas3;
            }
            else if (gcFacturas4.Visible)
            {
                vGridC = gcFacturas4;
            }
            else if (gcFacturas5.Visible)
            {
                vGridC = gcFacturas5;
            }

            return vGridC;
        }
        #endregion

        #region mObtenerGridView
        /// <summary>
        /// Obtiene el gridview activo
        /// </summary>
        /// <returns>GridView</returns>
        private DevExpress.XtraGrid.Views.Grid.GridView mObtenerGridView()
        {
            DevExpress.XtraGrid.Views.Grid.GridView vGridV = new DevExpress.XtraGrid.Views.Grid.GridView();

            if (gcFacturas.Visible)
            {
                vGridV = gvFacturas;
            }
            else if (gcFacturas2.Visible)
            {
                vGridV = gvFacturas2;
            }
            else if (gcFacturas3.Visible)
            {
                vGridV = gvFacturas3;
            }
            else if (gcFacturas4.Visible)
            {
                vGridV = gvFacturas4;
            }
            else if (gcFacturas5.Visible)
            {
                vGridV = gvFacturas5;
            }

            return vGridV;
        }
        #endregion

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

        #region btnAceptar_Click
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                DevExpress.XtraGrid.Views.Grid.GridView vGridV = new DevExpress.XtraGrid.Views.Grid.GridView();
                vGridV = mObtenerGridView();

                // Verifica que se haya seleccionado un documento
                if (vGridV.FocusedRowHandle >= 0)
                {
                    if (GUI.CApp.ValidateAccess("CambioPagoCC", "Cambiar Forma de Pago"))
                    {
                        using (FrmCambioPago vform = new FrmCambioPago())
                        {
                            // Documento
                            vform.Documento = Convert.ToDecimal(vGridV.GetRowCellValue(vGridV.FocusedRowHandle,
                            gcFacturas.Visible == true ? colDOCUMENTO : (gcFacturas2.Visible == true ? colDOCUMENTO2 :
                            (gcFacturas3.Visible == true ? colDOCUMENTO3 : colDOCUMENTO4))));

                            // Emisor
                            vform.Emisor = vEmisor;

                            // Factura
                            vform.Factura = Convert.ToString(vGridV.GetRowCellValue(vGridV.FocusedRowHandle,
                            gcFacturas.Visible == true ? colFACTURA : (gcFacturas2.Visible == true ? colFACTURA2 :
                            (gcFacturas3.Visible == true ? colFACTURA3 : colFACTURA4))));

                            // Línea
                            vform.Linea = Convert.ToInt32(vGridV.GetRowCellValue(vGridV.FocusedRowHandle,
                            gcFacturas.Visible == true ? colLINEA : (gcFacturas2.Visible == true ? colLINEA2 :
                            (gcFacturas3.Visible == true ? colLINEA3 : colLINEA4))));

                            // Monto
                            vform.Monto = Convert.ToDecimal(vGridV.GetRowCellValue(vGridV.FocusedRowHandle,
                            gcFacturas.Visible == true ? colMONTO : (gcFacturas2.Visible == true ? colMONTO2 :
                            (gcFacturas3.Visible == true ? colMONTO3 : colMONTO4))));

                            // Pago
                            vform.Pago = this.vPago;

                            // Rubro
                            vform.Rubro = vNumRubro;

                            // Tipo pago
                            vform.TipoPago = vTipoPago;

                            // Usuario
                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                            {
                                vform.Usuario = GUI.CApp.Sup;
                            }
                            else
                            {
                                vform.Usuario = GUI.CApp.usuario;
                            }

                            vform.ShowDialog();
                            mCargarDatos();
                        }
                    }                    
                }
                else
                {
                    CApp.ShowMessage("No hay datos para hacer el cambio", "Búsqueda de Pagos", true);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Búsqueda de Pagos", true);
            }
        }
        #endregion

        #region rbtn_CheckedChanged
        private void rbtn_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (this.ActiveControl.Name == rbtnAproxMonto.Name)
                {
                    mtxtMonto.Visible = true;
                    sbtnBuscarDocs.Visible = true;                    

                    rbtnTodos.Checked = false;
                    mtxtMonto.Focus();
                }
                else if(this.ActiveControl.Name == rbtnTodos.Name)
                {
                    mtxtMonto.Text = String.Empty;
                    mtxtMonto.Visible = false;
                    sbtnBuscarDocs.Visible = false;

                    rbtnAproxMonto.Checked = false;

                    mCargarDatos();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Búsqueda de Pagos", true);
            }
        }
        #endregion

        #region FrmBusquedaPagos_Load
        private void FrmBusquedaPagos_Load(object sender, EventArgs e)
        {
            try
            {
                btnAceptar.Visible = vCambiar;

                mMostrarGrid();
                mCargarDatos();
                this.lblTitulo.Text = "Búsqueda Por " + vPago + ":";
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Búsqueda de Pagos", true);
            }
        }
        #endregion

        #region sbtnBuscarDocs_Click
        private void sbtnBuscarDocs_Click(object sender, EventArgs e)
        {
            try
            {
                mCargarDatos();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Búsqueda de Pagos", true);
            }
        }
        #endregion

        #region FrmBusquedaPagos_KeyDown
        private void FrmBusquedaPagos_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                switch (e.KeyCode)
                {
                    case Keys.F2:
                        if (sbtnBuscarDocs.Visible)
                        {
                            sbtnBuscarDocs_Click(null, null);
                        }
                        break;
                    case Keys.F12:
                        if (btnAceptar.Visible)
                        {
                            btnAceptar_Click(null, null);
                        }
                        break;
                    case Keys.Escape:
                        btnSalir_Click(null, null);
                        break;
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Búsqueda de Pagos", true);
            }
        }
        #endregion
    }
}