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;
using System.Text.RegularExpressions;

namespace LLNet.Tienda.MainForms.Forms.FacturaElect
{
    public partial class FrmExoneracion : Form
    {
        private string vIdentificacion = String.Empty;
        private string vIVA = string.Empty;

        //
        Regex vExpresion_Ced = new Regex(@"^\d-\d{4,4}-\d{4,4}$");//Expresión regular para el número de cédula

        public FrmExoneracion()
        {
            InitializeComponent();
        }

        #region Propiedades

        #region mIdentificacion
        /// <summary>
        /// Identificacion
        /// </summary>
        public string mIdentificacion
        {
            get
            {
                return vIdentificacion;
            }
        }
        #endregion

        #region mIVA
        public string mIVA
        {
            get
            {
                return vIVA;
            }
        }
        #endregion
        #endregion

        #region mDatosReceptor
        /// <summary>
        /// Este método busca los datos del receptor, si están, y los muestra
        /// </summary>
        private void mDatosReceptor()
        {
            QueryParams vParametro = new QueryParams();
            vParametro.AddReplaceParam("pIDENTIFICACION", mtbIdentificacion.Text.Replace("-", ""));

            using (DataSet vDatos = CApp.bll.getDataSet("PDV", "FE_V_RECEPTORES", vParametro))
            {
                // Verifica si tiene datos
                if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                {
                    if (!String.IsNullOrEmpty(vDatos.Tables[0].Rows[0].ItemArray[8].ToString()))
                    {
                        cboTiposIdentif.SelectedValue = vDatos.Tables[0].Rows[0].ItemArray[8].ToString();
                    }
                    //
                    mtbIdentificacion.Text = vDatos.Tables[0].Rows[0].ItemArray[0].ToString();
                    txtNombre.Text = vDatos.Tables[0].Rows[0].ItemArray[1].ToString();
                }
                else
                {
                    using (FacturaElect.FrmBuscarCliente vForm = new FacturaElect.FrmBuscarCliente())
                    {
                        vForm.ShowDialog();

                        if (!String.IsNullOrEmpty(vForm.mIdentificacion))
                        {
                            cboTiposIdentif.SelectedValue = vForm.mTipo_Identificacion;
                            mtbIdentificacion.Text = vForm.mIdentificacion;
                            txtNombre.Text = vForm.mNombre;
                        }
                    }
                }
            }
        }
        #endregion

        #region mImpuestoSocio
        private void mImpuestoSocio(int pivanew)
        {
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pCIDENTIFICACION", mtbIdentificacion.Text.Replace("-", ""));
            vParametros.AddReplaceParam("pIMPUESTO", pivanew.ToString());

            GUI.CApp.bll.ExecuteSql("EX_SP_IVA_VARIABLE", vParametros, "PDV");
        }
        #endregion

        #region mRegistrarExoneracion
        /// <summary>
        /// Registra los  la exoneración
        /// </summary>
        private void mRegistrarExoneracion()
        {
            int nivanew;

            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pNDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            vParametros.AddReplaceParam("pCTIPO_DOCUMENTO", cboTipoDoc.SelectedValue.ToString());
            vParametros.AddReplaceParam("pCNUMERO_DOCUMENTO", txtDocumentoN.Text);
            vParametros.AddReplaceParam("pCIDENTIFICACION", mtbIdentificacion.Text.Replace("-", ""));
            vParametros.AddReplaceParam("pDFECHA_EMISION", dtpFechaDoc.Value.ToString());
            vParametros.AddReplaceParam("pUSUARIO", CApp.usuario);

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

            if (!cbx_IVANew.Checked)
            {
                vIVA = "S";
            }
            else
            {
                vIVA = "D";
                nivanew = Convert.ToInt16(cbonewIVA.SelectedValue);
                mImpuestoSocio(nivanew);
            }

            vIdentificacion = mtbIdentificacion.Text.Replace("-", "");
            CApp.ShowMessage("¡Datos registrados con éxito!", "Exoneración", true);
            this.Dispose();
        }
        #endregion

        #region mTiposDocumentoExon
        /// <summary>
        /// Obtiene y carga los tipos de documento/autorización para exoneración
        /// </summary>
        private void mTiposDocumentoExon()
        {
            cboTipoDoc.DataSource = null;

            using (DataSet vTipoDoc = CApp.bll.getDataSet("PDV", "FE_V_TIPO_DOC_EXONERACION"))
            {
                // Verifica si tiene datos
                if (vTipoDoc.Tables.Count > 0 && vTipoDoc.Tables[0].Rows.Count > 0)
                {
                    cboTipoDoc.DataSource = vTipoDoc.Tables[0];
                    cboTipoDoc.DisplayMember = "TIPO";
                    cboTipoDoc.ValueMember = "ID_TIPO";
                }
            }
        }
        #endregion

        #region mTiposIdentificacion
        /// <summary>
        /// Este método obtiene y carga en el combobox los tipos de identicación
        /// </summary>
        private void mTiposIdentificacion()
        {
            cboTiposIdentif.DataSource = null;
            cboTiposIdentif.SelectedValueChanged -= cboTiposIdentif_SelectedValueChanged;

            using (DataSet vTipoIdentif = CApp.bll.getDataSet("PDV", "FE_V_TIPO_IDENTIFICACION"))
            {
                // Verifica si tiene datos
                if (vTipoIdentif.Tables.Count > 0 && vTipoIdentif.Tables[0].Rows.Count > 0)
                {
                    cboTiposIdentif.DataSource = vTipoIdentif.Tables[0];
                    cboTiposIdentif.DisplayMember = "TIPO";
                    cboTiposIdentif.ValueMember = "ID_TIPO";
                }
            }

            cboTiposIdentif.SelectedValueChanged += cboTiposIdentif_SelectedValueChanged;
        }
        #endregion

        #region mTiposdeIVA
        private void mTiposdeIVA()
        {
            cbonewIVA.DataSource = null;
            using (DataSet vtipoiva = CApp.bll.getDataSet("PDV", "EX_VW_IVA_VARIABLE"))
            {
                cbonewIVA.DataSource = vtipoiva.Tables[0];
                cbonewIVA.DisplayMember = "IVA";
                cbonewIVA.ValueMember = "IMPUESTO";
            }
        }
        #endregion

        #region FrmExoneracion_Load
        private void FrmExoneracion_Load(object sender, EventArgs e)
        {
            try
            {
                mTiposIdentificacion();                
                mTiposDocumentoExon();
                mTiposdeIVA();
                //
                cboTiposIdentif_SelectedValueChanged(null, null);
                cbonewIVA.Enabled = false;
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

        #region FrmExoneracion_KeyDown
        private void FrmExoneracion_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Modifiers == Keys.Alt)
                {
                    switch (e.KeyCode)
                    {
                        case Keys.C:
                            btnBuscar_Click(null, null);
                            break;
                        case Keys.N:
                            btnNuevo_Click(null, null);
                            break;      
                    }
                }
                else
                {
                    switch (e.KeyCode)
                    {
                        case Keys.F12:
                            btnAceptar_Click(null, null);
                            break;
                        case Keys.Escape:
                            btnSalir_Click(null, null);
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

        #region btnBuscar_Click
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                using (FacturaElect.FrmBuscarCliente vForm = new FacturaElect.FrmBuscarCliente())
                {
                    vForm.ShowDialog();

                    if (!String.IsNullOrEmpty(vForm.mIdentificacion))
                    {
                        cboTiposIdentif.SelectedValue = vForm.mTipo_Identificacion;
                        mtbIdentificacion.Text = vForm.mIdentificacion;
                        txtNombre.Text = vForm.mNombre;
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

        #region btnAceptar_Click
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());

            int valor = Convert.ToInt16(GUI.CApp.bll.GetSingleValue("Exonera_documento", vParametros, "PDV"));

            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() == "01" && !vExpresion_Ced.IsMatch(mtbIdentificacion.Text))
                {
                    CApp.ShowMessage("¡Digite/complete la cédula con el formato 0-0000-0000!", "Exoneración", true);
                    mtbIdentificacion.Focus();
                }
                else if (String.IsNullOrEmpty(txtNombre.Text))
                {
                    CApp.ShowMessage("Por favor cree un nuevo cliente o busque uno existente", "Exoneración", true);
                    mtbIdentificacion.Focus();
                }
                else if (String.IsNullOrEmpty(txtDocumentoN.Text))
                {
                    CApp.ShowMessage("Por favor ingrese el número de documento o de autorización de la exoneración", "Exoneración", true);
                    txtDocumentoN.Focus();
                }
                else if (cbx_IVANew.Checked == false)
                {
                    if (valor == 0)
                    {
                        CApp.ShowMessage("Ingerese el nuevo porcentaje para la exoneracion", "Exoneración", true);
                    }
                    else
                    {
                        mRegistrarExoneracion();
                    }
                }
                else
                {
                    mRegistrarExoneracion();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

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

        #region cboTiposIdentif_SelectedValueChanged
        private void cboTiposIdentif_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() == "01")
                {
                    mtbIdentificacion.Mask = "0-0000-0000";                    
                }
                else
                {
                    mtbIdentificacion.Mask = String.Empty;
                }

                mtbIdentificacion.Focus();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cobros y Facturación", true);
            }
        }
        #endregion

        #region btnNuevo_Click
        private void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                using (FacturaElect.FrmClienteFE vForm = new FacturaElect.FrmClienteFE())
                {
                    vForm.ShowDialog();

                    if (vForm.mCon_Datos)
                    {
                        cboTiposIdentif.SelectedValue = vForm.mTipo_Identificacion;
                        mtbIdentificacion.Text = vForm.mIdentificacion;
                        vIdentificacion = vForm.mIdentificacion;
                        txtNombre.Text = vForm.mNombre;
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

        #region mtbIdentificacion_KeyDown
        private void mtbIdentificacion_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    mDatosReceptor();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Exoneración", true);
            }
        }
        #endregion

        private void lbCaption_Click(object sender, EventArgs e)
        {

        }

        #region cbx_IVANew_CheckedChanged
        private void cbx_IVANew_CheckedChanged(object sender, EventArgs e)
        {
            if (cbx_IVANew.Checked)
            {
                cbonewIVA.Enabled = true;
                btnExoneracion.Enabled = false;
            }
            else
            {
                cbonewIVA.Enabled = false;
                btnExoneracion.Enabled = true;
            }
        }
        #endregion

        #region btnExoneracion_Click
        private void btnExoneracion_Click(object sender, EventArgs e)
        {
            FrmIVADiferenciado frm = new FrmIVADiferenciado();
            frm.ShowDialog();
        }
        #endregion

    }
}