using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_Controles;
using Exferia_General.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Aplicacion.Modelos_Generales;

namespace Exferia_General._3_Vistas.ControlesPersonalizados_DentroPaneles
{
    public partial class CTU_P_Retenciones : UserControl
    {

        #region Propiedades Privadas
        private List<INTERNO_ComboBox_Modelo> g_lst_Retencion_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        private int g_intNumerObjeto;
        private GEN_Retenciones g_mdl_GEN_Retenciones;
        private List<INTERNO_GEN_RetencionesTipos_Listado_Modelo> g_lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo = null;
        #endregion

        #region Eventos Publicos

        public event EventHandler<INTERNO_EventArgs> Boton_P_Retenciones_Delete_Click;
        public event EventHandler ComboBox_P_Retenciones_RetencionTipo_SelectedIndexChanged;
        public event EventHandler CTU_P_Retenciones_Changed;
        #endregion

        #region Propiedades Publicas
        public Exferia_ComboBox Exferia_ComboBox_TipoRetencion { get { return ex_cbo_TipoRetencion; } }
        
        public Exferia_RadioButton Exferia_RadioButton_AplicarSobre_BaseImponible { get { return ex_rdb_AplicarSobre_BaseImponible; } }
        public Exferia_RadioButton Exferia_RadioButton_AplicarSobre_Total { get { return ex_rdb_AplicarSobre_Total; } }

        public Exferia_FechaSeleccion Exferia_FechaSeleccion_FechaDesde { get { return usc_FechaDesde; } }
        public Exferia_FechaSeleccion Exferia_FechaSeleccion_FechaHasta { get { return usc_FechaHasta; } }

        public Exferia_F3 Exferia_F3_Mayor_Ventas { get { return usc_F3_CTU_P_Retenciones_Ventas; } }
        public Exferia_F3 Exferia_F3_Mayor_Compras { get { return usc_F3_CTU_P_Retenciones_Compras; } }
        public Exferia_F3 Exferia_F3_Mayor_BaseRetencionCompras { get { return usc_F3_CTU_P_Retenciones_BaseRetencionCompras; } }
        public Exferia_F3 Exferia_F3_Mayor_BaseRetencionVentas { get { return usc_F3_CTU_P_Retenciones_BaseRetencionVentas; } }

        public Exferia_TextBox Exferia_TextBox_Retencion { get { return ex_txt_Retencion; } }

        public List<string> lst_Nombre_Objetos_Pantalla = new List<string>();


        public long CTU_P_Retenciones_id
        {
            get
            {
                long lng_id = -1;
                if(g_mdl_GEN_Retenciones != null)
                {
                    lng_id = g_mdl_GEN_Retenciones.id;
                }
                return lng_id;
            }
        }

        public string CTU_P_Retenciones_TipoRetencion_TITULO
        {
            get
            {
                return ex_lbl_CTU_P_Retenciones_TipoRetencion.Text;
            }
        }
        public long CTU_P_Retenciones_TipoRetencion
        {
            get
            {
                long lng_ValorDevuelto = -1;
                if (ex_cbo_TipoRetencion.Items.Count == 0 || ex_cbo_TipoRetencion.SelectedItem == null || long.Parse(((INTERNO_ComboBox_Modelo)ex_cbo_TipoRetencion.SelectedItem).Identificador) != 0)
                {
                    lng_ValorDevuelto = long.Parse(((INTERNO_ComboBox_Modelo)ex_cbo_TipoRetencion.SelectedItem).Identificador);
                }

                return lng_ValorDevuelto;
            }
        }

        public decimal CTU_P_Retenciones_Retencion
        {
            get
            {
                decimal dcm_Retencion = 0;
                if (ex_txt_Retencion.Text.Trim().Length > 0 && Funciones.IsNumeric(ex_txt_Retencion.Text.Trim()))
                {
                    dcm_Retencion = decimal.Parse(ex_txt_Retencion.Text.Trim().Replace(".", ","));
                }
                return dcm_Retencion;
            }
        }

        public int CTU_P_Retenciones_AplicarSobre
        {
            get
            {
                int int_ValorDevuelto = 1;
                if (ex_rdb_AplicarSobre_Total.Checked)
                {
                    int_ValorDevuelto = 2;
                }
                return int_ValorDevuelto;
            }
        }

        public string CTU_P_Retenciones_FechaDesde_TITULO
        {
            get
            {
                return usc_FechaDesde.Exferia_FechaSeleccion_Descripcion;
            }
        }
        public string CTU_P_Retenciones_FechaDesde
        {
            get
            {
                return usc_FechaDesde.Exferia_FechaSeleccion_Fecha;
            }
        }

        public string CTU_P_Retenciones_FechaHasta_TITULO
        {
            get
            {
                return usc_FechaHasta.Exferia_FechaSeleccion_Descripcion;
            }
        }
        public string CTU_P_Retenciones_FechaHasta
        {
            get
            {
                return usc_FechaHasta.Exferia_FechaSeleccion_Fecha;
            }
        }

        private bool g_bol_EsControlDinamico = false;
        public bool EsControlDinamico
        {
            get
            {
                return g_bol_EsControlDinamico;
            }
            set
            {
                g_bol_EsControlDinamico = value;
                Invalidate();
            }
        }
        #endregion

        #region Constructor
        public CTU_P_Retenciones()
        {
            InitializeComponent();

            lst_Nombre_Objetos_Pantalla.Add(ex_cbo_TipoRetencion.Name);
            lst_Nombre_Objetos_Pantalla.Add(ex_rdb_AplicarSobre_BaseImponible.Name);
            lst_Nombre_Objetos_Pantalla.Add(ex_rdb_AplicarSobre_Total.Name);
            lst_Nombre_Objetos_Pantalla.Add(ex_txt_Retencion.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_FechaHasta.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_FechaDesde.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_F3_CTU_P_Retenciones_Compras.Name);
            lst_Nombre_Objetos_Pantalla.Add(usc_F3_CTU_P_Retenciones_Ventas.Name);
            
        }

        public CTU_P_Retenciones(P_Base _frm_Pantalla_DeDondeHereda, 
                                           int _intNumerObjeto, 
                                           GEN_Retenciones _mdl_GEN_Retenciones,
                                           List<INTERNO_GEN_RetencionesTipos_Listado_Modelo> _lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo,
                                           DateTime _dtt_FechaFiltro)
        {
            InitializeComponent();

            Repintar.Empezar(this);

            g_mdl_GEN_Retenciones = _mdl_GEN_Retenciones;
            g_intNumerObjeto = _intNumerObjeto;


            #region Rellenar Listado de Combo
            g_lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo = _lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo;

            g_lst_Retencion_INTERNO_ComboBox_Modelo.Add(new INTERNO_ComboBox_Modelo("-1", "", null));

            if (g_lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo != null && g_lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo.Count > 0)
            {
                //Filtrar fecha borrado
                List<INTERNO_GEN_RetencionesTipos_Listado_Modelo> lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo_ARECORRER = g_lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo.Where(m => m.fechaBorrado == null || (m.fechaBorrado != null && m.fechaBorrado >= _dtt_FechaFiltro)).ToList();

                if (lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo_ARECORRER != null && lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo_ARECORRER.Count > 0)
                {
                    foreach (INTERNO_GEN_RetencionesTipos_Listado_Modelo mdl_INTERNO_GEN_RetencionesTipos_Listado_Modelo in lst_INTERNO_GEN_RetencionesTipos_Listado_Modelo_ARECORRER)
                    {
                        g_lst_Retencion_INTERNO_ComboBox_Modelo.Add(new INTERNO_ComboBox_Modelo(mdl_INTERNO_GEN_RetencionesTipos_Listado_Modelo.id.ToString(), mdl_INTERNO_GEN_RetencionesTipos_Listado_Modelo.descripcion, mdl_INTERNO_GEN_RetencionesTipos_Listado_Modelo.fechaBorrado));
                    }
                }
            }
            #endregion

            //Rellenar el ComboBox
            if (g_lst_Retencion_INTERNO_ComboBox_Modelo != null && g_lst_Retencion_INTERNO_ComboBox_Modelo.Count > 0)
            {
                ex_cbo_TipoRetencion.Items.Clear();
                ex_cbo_TipoRetencion.DataSource = g_lst_Retencion_INTERNO_ComboBox_Modelo;
                ex_cbo_TipoRetencion.SelectedIndex = 0;

            }

            //Rellenar para los F3....................................................
            usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_PantallaContenedora = _frm_Pantalla_DeDondeHereda;
            usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_CTA_MAYOR;
            usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_PRINCIPAL_BUSCARTITULO = false;
            
            usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_PantallaContenedora = _frm_Pantalla_DeDondeHereda;
            usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_CTA_MAYOR;
            usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_PRINCIPAL_BUSCARTITULO = false;

            usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_PantallaContenedora = _frm_Pantalla_DeDondeHereda;
            usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_CTA_MAYOR;
            usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_PRINCIPAL_BUSCARTITULO = false;

            usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_PantallaContenedora = _frm_Pantalla_DeDondeHereda;
            usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_CTA_MAYOR;
            usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_PRINCIPAL_BUSCARTITULO = false;
            
            //Cargar Datos
            if(g_mdl_GEN_Retenciones != null)
            {
                //ComboBox RetencionTipos
                ex_cbo_TipoRetencion.SelectedItem = g_lst_Retencion_INTERNO_ComboBox_Modelo.Where(m => m.Identificador.Equals(g_mdl_GEN_Retenciones.idRetencionTipo.ToString())).FirstOrDefault();

                //Aplicar retencion
                if (g_mdl_GEN_Retenciones.aplicar_BaseImponible_O_Total==2)
                {
                    ex_rdb_AplicarSobre_Total.Checked = true;
                }
                else
                {
                    ex_rdb_AplicarSobre_BaseImponible.Checked = true;
                }

                //retencion
                ex_txt_Retencion.Text = g_mdl_GEN_Retenciones.retencion.ToString();

                //Fecha Desde
                usc_FechaDesde.Exferia_FechaSeleccion_Fecha = g_mdl_GEN_Retenciones.fechaDesde != null ? g_mdl_GEN_Retenciones.fechaDesde.Value.ToString("dd/MM/yyyy") : "";

                //Fecha Hasta
                usc_FechaHasta.Exferia_FechaSeleccion_Fecha = g_mdl_GEN_Retenciones.fechaHasta != null ? g_mdl_GEN_Retenciones.fechaHasta.Value.ToString("dd/MM/yyyy") : "";

                //Retencion Ventas
                if (g_mdl_GEN_Retenciones.CTA_Mayor != null)
                {
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Id = g_mdl_GEN_Retenciones.CTA_Mayor.id;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Codigo = g_mdl_GEN_Retenciones.CTA_Mayor.codigo;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Descripcion = g_mdl_GEN_Retenciones.CTA_Mayor.descripcion;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_FechaBorrado = g_mdl_GEN_Retenciones.CTA_Mayor.fechaBorrado;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_IdEjercicio_Baja = g_mdl_GEN_Retenciones.CTA_Mayor.idEjercicio_Baja;
                }
                else
                {
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Id = -1;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Codigo = String.Empty;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_Descripcion = String.Empty;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_FechaBorrado = null;
                    usc_F3_CTU_P_Retenciones_Ventas.Exferia_F3_IdEjercicio_Baja = null;
                }

                //Retencion Compras
                if (g_mdl_GEN_Retenciones.CTA_Mayor1 != null)
                {
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Id = g_mdl_GEN_Retenciones.CTA_Mayor1.id;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Codigo = g_mdl_GEN_Retenciones.CTA_Mayor1.codigo;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Descripcion = g_mdl_GEN_Retenciones.CTA_Mayor1.descripcion;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_FechaBorrado = g_mdl_GEN_Retenciones.CTA_Mayor1.fechaBorrado;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_IdEjercicio_Baja = g_mdl_GEN_Retenciones.CTA_Mayor1.idEjercicio_Baja;
                }
                else
                {
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Id = -1;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Codigo = String.Empty;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_Descripcion = String.Empty;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_FechaBorrado = null;
                    usc_F3_CTU_P_Retenciones_Compras.Exferia_F3_IdEjercicio_Baja = null;
                }

                //BaseRetencion Ventas
                if (g_mdl_GEN_Retenciones.CTA_Mayor2 != null)
                {
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Id = g_mdl_GEN_Retenciones.CTA_Mayor2.id;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Codigo = g_mdl_GEN_Retenciones.CTA_Mayor2.codigo;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Descripcion = g_mdl_GEN_Retenciones.CTA_Mayor2.descripcion;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_FechaBorrado = g_mdl_GEN_Retenciones.CTA_Mayor2.fechaBorrado;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_IdEjercicio_Baja = g_mdl_GEN_Retenciones.CTA_Mayor2.idEjercicio_Baja;
                }
                else
                {
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Id = -1;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Codigo = String.Empty;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_Descripcion = String.Empty;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_FechaBorrado = null;
                    usc_F3_CTU_P_Retenciones_BaseRetencionVentas.Exferia_F3_IdEjercicio_Baja = null;
                }

                //BaseRetencionCompras
                if (g_mdl_GEN_Retenciones.CTA_Mayor3 != null)
                {
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Id = g_mdl_GEN_Retenciones.CTA_Mayor3.id;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Codigo = g_mdl_GEN_Retenciones.CTA_Mayor3.codigo;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Descripcion = g_mdl_GEN_Retenciones.CTA_Mayor3.descripcion;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_FechaBorrado = g_mdl_GEN_Retenciones.CTA_Mayor3.fechaBorrado;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_IdEjercicio_Baja = g_mdl_GEN_Retenciones.CTA_Mayor3.idEjercicio_Baja;
                }
                else
                {
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Id = -1;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Codigo = String.Empty;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_Descripcion = String.Empty;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_FechaBorrado = null;
                    usc_F3_CTU_P_Retenciones_BaseRetencionCompras.Exferia_F3_IdEjercicio_Baja = null;
                }
            }
        }
        
        #endregion

        private void ex_btn_CTU_P_Retenciones_Borrar_Click (object sender, EventArgs e)
        {
            //Para que salte el evento en el otro lado
            EventHandler<INTERNO_EventArgs> temp = Boton_P_Retenciones_Delete_Click;
            if (temp != null)
                temp(sender, new INTERNO_EventArgs(g_intNumerObjeto));
        }

        private void ex_cbo_CTU_P_Retenciones_TiposRetencion_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Para que salte el evento en el otro lado
            EventHandler temp = ComboBox_P_Retenciones_RetencionTipo_SelectedIndexChanged;
            if (temp != null)
                temp(sender, e);

            //Para que salte el evento en el otro lado
            EventHandler temp2 = CTU_P_Retenciones_Changed;
            if (temp2 != null)
                temp2(sender, e);
        }

        private void ex_F3_CTU_P_Retenciones_TextChanged(object sender, EventArgs e)
        {
            //Para que salte el evento en el otro lado
            EventHandler temp2 = CTU_P_Retenciones_Changed;
            if (temp2 != null)
                temp2(sender, e);
        }

    }
}
