using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_General;
using Exferia_Mythos._3_Vistas.Controladoras;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;
using System.Linq;

namespace Exferia_Mythos._3_Vistas
{
    public partial class P_Liquidacion : Exferia_Formularios.P_Base_Mantenimientos
    {
        #region Variables Generales
        private P_Liquidacion_Controladora g_obj_Controladora;
        private bool g_bol_ContructorPantalla_Terminado_Correctamente = true;
        public PRV_OpcionesDetalle g_mdl_PRV_OpcionesDetalle = null;

        internal List<INTERNO_Permisos_Modelo> g_lst_INTERNO_Permisos_Modelo = null;

        private bool g_bol_Calculando_Datos = false;

        //Variables paginador
        public Funciones_Paginador g_obj_Funciones_Paginador;
        private Timer g_timer_Paginar = new Timer();
        #endregion

        #region Objetos en Pantalla

        //Exferia_FechaSeleccion
        internal Exferia_FechaSeleccion Exferia_FechaSeleccion_Fecha_Inicial { get { return ex_usc_P_Liquidacion_Fecha_Inicial; } }
        internal Exferia_FechaSeleccion Exferia_FechaSeleccion_Fecha_Final { get { return ex_usc_P_Liquidacion_Fecha_Final; } }

        //Exferia_F3
        internal Exferia_F3 Exferia_F3_Tecnico { get { return ex_usc_F3_P_Liquidacion_Tecnico; } }
        internal Exferia_F3 Exferia_F3_Terminal { get { return ex_usc_F3_P_Liquidacion_Terminal; } }

        //Exferia_Label
        internal Exferia_Label Exferia_Label_Cierre_500 { get { return ex_lbl_P_Liquidacion_Cierre_500; } }
        internal Exferia_Label Exferia_Label_Cierre_200 { get { return ex_lbl_P_Liquidacion_Cierre_200; } }
        internal Exferia_Label Exferia_Label_Cierre_100 { get { return ex_lbl_P_Liquidacion_Cierre_100; } }
        internal Exferia_Label Exferia_Label_Cierre_50 { get { return ex_lbl_P_Liquidacion_Cierre_50; } }
        internal Exferia_Label Exferia_Label_Cierre_20 { get { return ex_lbl_P_Liquidacion_Cierre_20; } }
        internal Exferia_Label Exferia_Label_Cierre_10 { get { return ex_lbl_P_Liquidacion_Cierre_10; } }
        internal Exferia_Label Exferia_Label_Cierre_5 { get { return ex_lbl_P_Liquidacion_Cierre_5; } }
        internal Exferia_Label Exferia_Label_Cierre_2 { get { return ex_lbl_P_Liquidacion_Cierre_2; } }
        internal Exferia_Label Exferia_Label_Cierre_1 { get { return ex_lbl_P_Liquidacion_Cierre_1; } }
        internal Exferia_Label Exferia_Label_Cierre_050 { get { return ex_lbl_P_Liquidacion_Cierre_050; } }
        internal Exferia_Label Exferia_Label_Cierre_020 { get { return ex_lbl_P_Liquidacion_Cierre_020; } }
        internal Exferia_Label Exferia_Label_Cierre_010 { get { return ex_lbl_P_Liquidacion_Cierre_010; } }
        internal Exferia_Label Exferia_Label_Cierre_005 { get { return ex_lbl_P_Liquidacion_Cierre_005; } }
        internal Exferia_Label Exferia_Label_Cierre_002 { get { return ex_lbl_P_Liquidacion_Cierre_002; } }
        internal Exferia_Label Exferia_Label_Cierre_001 { get { return ex_lbl_P_Liquidacion_Cierre_001; } }

        //Exferia_Label_Total
        internal Exferia_Label_Total Exferia_Label_Total_Cierre_ImporteEntregado_Metalico { get { return ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Metalico; } }
        internal Exferia_Label_Total Exferia_Label_Total_Cierre_CajaInicial_Total { get { return ex_lbl_P_Liquidacion_Cierre_CajaInicial_Total; } }
        internal Exferia_Label_Total Exferia_Label_Total_Cierre_ImporteAEntregar_Total { get { return ex_lbl_P_Liquidacion_Cierre_ImporteAEntregar_Total; } }
        internal Exferia_Label_Total Exferia_Label_Total_Cierre_Gastos_Total { get { return ex_lbl_P_Liquidacion_Cierre_Gastos_Total; } }
        internal Exferia_Label_Total Exferia_Label_Total_Cierre_ImporteEntregado_Total { get { return ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Total; } }

        //Exferia_Label_SinColor
        internal Exferia_Label_SinColor Exferia_Label_SinColor_Cierre_Deuda_Total { get { return ex_lbl_P_Liquidacion_Cierre_Deuda_Total; } }

        //Exferia_Paginador
        internal Exferia_Paginador Exferia_Paginador_Liquidacion { get { return ex_P_Liquidacion_Paginador; } }

        //Exferia_TextBox
        internal Exferia_TextBox Exferia_TextBox_Cierre_CajaInicial_Metalico { get { return ex_txt_P_Liquidacion_Cierre_CajaInicial_Metalico; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_ImporteAEntregar_Metalico { get { return ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Metalico; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_ImporteAEntregar_Talon { get { return ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Talon; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_Gastos_Metalico { get { return ex_txt_P_Liquidacion_Cierre_Gastos_Metalico; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_ImporteEntregado_Talon { get { return ex_txt_P_Liquidacion_Cierre_ImporteEntregado_Talon; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_500 { get { return ex_txt_P_Liquidacion_Cierre_500; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_200 { get { return ex_txt_P_Liquidacion_Cierre_200; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_100 { get { return ex_txt_P_Liquidacion_Cierre_100; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_50 { get { return ex_txt_P_Liquidacion_Cierre_50; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_20 { get { return ex_txt_P_Liquidacion_Cierre_20; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_10 { get { return ex_txt_P_Liquidacion_Cierre_10; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_5 { get { return ex_txt_P_Liquidacion_Cierre_5; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_2 { get { return ex_txt_P_Liquidacion_Cierre_2; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_1 { get { return ex_txt_P_Liquidacion_Cierre_1; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_050 { get { return ex_txt_P_Liquidacion_Cierre_050; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_020 { get { return ex_txt_P_Liquidacion_Cierre_020; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_010 { get { return ex_txt_P_Liquidacion_Cierre_010; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_005 { get { return ex_txt_P_Liquidacion_Cierre_005; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_002 { get { return ex_txt_P_Liquidacion_Cierre_002; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_001 { get { return ex_txt_P_Liquidacion_Cierre_001; } }
        internal Exferia_TextBox Exferia_TextBox_Cierre_Total { get { return ex_txt_P_Liquidacion_Cierre_Total; } }
        internal Exferia_TextBox Exferia_TextBox_Partes_Pendientes { get { return ex_txt_P_Liquidacion_Partes_Pendientes; } }
        internal Exferia_TextBox Exferia_TextBox_Partes_Aplazados { get { return ex_txt_P_Liquidacion_Partes_Aplazados; } }
        internal Exferia_TextBox Exferia_TextBox_Partes_Transferidos { get { return ex_txt_P_Liquidacion_Partes_Transferidos; } }
        internal Exferia_TextBox Exferia_TextBox_Partes_Terminados { get { return ex_txt_P_Liquidacion_Partes_Terminados; } }
        internal Exferia_TextBox Exferia_TextBox_Partes_TerminadosConIncidencias { get { return ex_txt_P_Liquidacion_Partes_TerminadosConIncidencias; } }
        internal Exferia_TextBox Exferia_TextBox_Observaciones { get { return ex_tx_P_Liquidacion_Observaciones; } }
        internal Exferia_TextBox Exferia_TextBox_ObservacionesFirma { get { return ex_txt_P_Liquidacion_ObservacionesFirma; } }

        //Exferia_TextBox_ConMascara
        internal Exferia_TextBox_ConMascara Exferia_TextBox_ConMascara_Hora_Inicial { get { return ex_txt_P_Liquidacion_Hora_Inicial; } }
        internal Exferia_TextBox_ConMascara Exferia_TextBox_ConMascara_Hora_Final { get { return ex_txt_P_Liquidacion_Hora_Final; } }

        //Panel
        internal Panel Panel_VehiculosAsociados { get { return pnl_P_Liquidacion_VehiculosAsociados; } }

        //PictureBox
        internal PictureBox PictureBox_Firma { get { return pcb_P_Liquidacion_Firma; } }

        #endregion

        #region Constructor
        public P_Liquidacion(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle)
        {
            InitializeComponent();

            try
            {
                Repintar.Empezar(this);

                CheckForIllegalCrossThreadCalls = false;

                //Empezar seleccionada y fecha de trabajo.............................................................
                P_Base_ValoresGenerales = _mdl_INTERNO_ValoresGenerales_Modelo;
                P_Base_FechaTrabajo = _dtt_FechaTrabajo;

                //Instanciar Controladora
                g_obj_Controladora = new P_Liquidacion_Controladora(this);

                //Datos de Opcion Detalle
                g_mdl_PRV_OpcionesDetalle = _mdl_PRV_OpcionesDetalle;

                //Buscar los permisos
                g_lst_INTERNO_Permisos_Modelo = Datos_Generales.Permisos_Buscar(g_mdl_PRV_OpcionesDetalle.opcion);

                //Poner los botones que no se pueden poner bloqueados o de solo lectura
                ex_btn_P_Liquidacion_Borrar.Exferia_Button_Bloqueable = false;
                ex_btn_P_Liquidacion_Grabar.Exferia_Button_Bloqueable = false;

                //mirar si hay que bloquear los controles, si solo puede ver los datos
                if ((P_Base_TipoAperturaPantalla != 0 && Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Modificar, false)) == false)
                {
                    //Bloqueo los controles
                    SoloLectura.Empezar(this, true);
                }

                //Titulo de la pantalla.............................................................
                P_Base_TituloPantalla = _mdl_PRV_OpcionesDetalle.descripcion_TituloMantenimiento;
                //..................................................................................

                // Label con Empresa Seleccionada .....................................................
                if (P_Base_ValoresGenerales != null)
                {
                    try
                    {
                        P_Base_Mantenimientos_InformacionEmpresaSeleccionada = P_Base_ValoresGenerales.str_Empresa_Descripcion + " - " +
                                                                "(" + P_Base_FechaTrabajo.ToString("dd/MM/yyyy") + ")";
                    }
                    catch (Exception ex)
                    {
                        //No se muestra mensaje pero se guarda en el log
                        Control_Errores.Errores_Log("", ex, nameof(P_Liquidacion) + "/" + nameof(P_Liquidacion));
                    }
                }
                //.....................................................................................

                //Bloquear pantalla hasta que termine la carga por defecto .....
                Enabled = false;
                //..............................................................

                //F3
                //TECNICO
                ex_usc_F3_P_Liquidacion_Tecnico.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_MYT_TECNICOS;
                ex_usc_F3_P_Liquidacion_Tecnico.Exferia_F3_PantallaContenedora = this;

                //TERMINAL
                ex_usc_F3_P_Liquidacion_Terminal.Exferia_F3_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_GEN_TERMINALES;
                ex_usc_F3_P_Liquidacion_Terminal.Exferia_F3_PantallaContenedora = this;

                g_obj_Funciones_Paginador = new Funciones_Paginador();
            }
            catch (Control_Errores)
            {
                g_bol_ContructorPantalla_Terminado_Correctamente = false;
            }
            catch (Exception ex)
            {
                g_bol_ContructorPantalla_Terminado_Correctamente = false;

                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_Liquidacion) + "/" + nameof(P_Liquidacion));
            }
            finally
            {
                //Bloquear pantalla hasta que termine la carga por defecto.............................
                Enabled = true;
                //.....................................................................................
            }

        }

        #endregion

        #region Inicio de pantalla
        private void P_Liquidacion_Load(object sender, EventArgs e)
        {
            try
            {
                #region TIMER PAGINACION
                g_timer_Paginar.Interval = 1000;
                g_timer_Paginar.Tick += delegate (object s, EventArgs ee)
                {
                    g_timer_Paginar.Stop();
                    try
                    {
                        g_obj_Controladora.RecargarDatos();
                    }
                    catch (Control_Errores)
                    {
                        Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                        Salir_P_Base();
                    }
                };
                #endregion

            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_Liquidacion) + "/" + nameof(P_Liquidacion_Load));
                g_bol_ContructorPantalla_Terminado_Correctamente = false;
            }
        }

        private void P_Liquidacion_Shown(object sender, EventArgs e)
        {
            try
            {
                if (g_bol_ContructorPantalla_Terminado_Correctamente)
                {
                    if (P_Base_TipoAperturaPantalla == 0)
                    {
                        P_Base_TituloPantalla = P_Base_TituloPantalla + " - Añadir";

                        ActivarBotones(false);
                    }
                    //Modificar
                    else
                    {
                        ActivarBotones(true);

                        //Paginacion
                        if (P_Base_PantallaOrigen != null &&
                           P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                           P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                        {
                            g_obj_Funciones_Paginador.Listado_ARecorrer(P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.ToList(), 1);

                            //Asignado las paginas totales
                            Exferia_Paginador_Liquidacion.PaginasTotales = g_obj_Funciones_Paginador.Numero_Paginas_Totales;
                        }
                        else
                        {
                            Exferia_Paginador_Liquidacion.Visible = false;
                        }

                        g_obj_Controladora.RecargarDatos();
                    }
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                    Salir_P_Base();
                }
            }
            catch (Control_Errores)
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_Liquidacion) + "/" + nameof(P_Liquidacion_Shown));

                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
        }
        public void ActivarBotones(bool _bol_Activar)
        {
            if (Exferia_Paginador_Liquidacion.Visible)
            {
                Exferia_Paginador_Liquidacion.Visible = _bol_Activar;
            }

            if (ex_btn_P_Liquidacion_Borrar.Enabled)
            {
                ex_btn_P_Liquidacion_Borrar.Enabled = _bol_Activar;
            }
        }

        #endregion

        #region Arqueo
        private void ex_txt_P_Liquidacion_Cierre_500_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_500.Text.Trim().Length>0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_500.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_500.Text = (int_Valor * 500).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_200_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_200.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_200.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_200.Text = (int_Valor * 200).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_100_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_100.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_100.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_100.Text = (int_Valor * 100).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_50_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_50.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_50.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_50.Text = (int_Valor * 50).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_20_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_20.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_20.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_20.Text = (int_Valor * 20).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_10_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_10.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_10.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_10.Text = (int_Valor * 10).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_5_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_5.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_5.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_5.Text = (int_Valor * 5).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_2_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_2.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_2.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_2.Text = (int_Valor * 2).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_1_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    int int_Valor = 0;
                    if (ex_txt_P_Liquidacion_Cierre_1.Text.Trim().Length > 0)
                    {
                        int_Valor = int.Parse(ex_txt_P_Liquidacion_Cierre_1.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_1.Text = (int_Valor * 1).ToString();

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_050_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_050.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_050.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_050.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.50m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_020_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_020.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_020.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_020.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.20m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_010_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_010.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_010.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_010.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.10m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_005_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_005.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_005.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_005.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.05m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_002_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_002.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_002.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_002.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.02m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }
        private void ex_txt_P_Liquidacion_Cierre_001_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_001.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_001.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_001.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal((dcm_Valor * 0.01m), 2));

                    //recalcular el Arqueo
                    ArqueoTotal_Recalcular();

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ex_txt_P_Liquidacion_Cierre_Total_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    decimal dcm_Valor = 0m;
                    if (ex_txt_P_Liquidacion_Cierre_Total.Text.Trim().Length > 0)
                    {
                        dcm_Valor = decimal.Parse(ex_txt_P_Liquidacion_Cierre_Total.Text);
                    }
                    ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Metalico.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_Valor, 2));

                    //Vaciar Arqueo
                    Exferia_TextBox_Cierre_500.Text = "0";
                    Exferia_TextBox_Cierre_200.Text = "0";
                    Exferia_TextBox_Cierre_100.Text = "0";
                    Exferia_TextBox_Cierre_50.Text = "0";
                    Exferia_TextBox_Cierre_20.Text = "0";
                    Exferia_TextBox_Cierre_10.Text = "0";
                    Exferia_TextBox_Cierre_5.Text = "0";
                    Exferia_TextBox_Cierre_2.Text = "0";
                    Exferia_TextBox_Cierre_1.Text = "0";
                    Exferia_TextBox_Cierre_050.Text = "0";
                    Exferia_TextBox_Cierre_020.Text = "0";
                    Exferia_TextBox_Cierre_010.Text = "0";
                    Exferia_TextBox_Cierre_005.Text = "0";
                    Exferia_TextBox_Cierre_002.Text = "0";
                    Exferia_TextBox_Cierre_001.Text = "0";

                    Exferia_Label_Cierre_500.Text = "0";
                    Exferia_Label_Cierre_200.Text = "0";
                    Exferia_Label_Cierre_100.Text = "0";
                    Exferia_Label_Cierre_50.Text = "0";
                    Exferia_Label_Cierre_20.Text = "0";
                    Exferia_Label_Cierre_10.Text = "0";
                    Exferia_Label_Cierre_5.Text = "0";
                    Exferia_Label_Cierre_2.Text = "0";
                    Exferia_Label_Cierre_1.Text = "0";
                    Exferia_Label_Cierre_050.Text = "0,00";
                    Exferia_Label_Cierre_020.Text = "0,00";
                    Exferia_Label_Cierre_010.Text = "0,00";
                    Exferia_Label_Cierre_005.Text = "0,00";
                    Exferia_Label_Cierre_002.Text = "0,00";
                    Exferia_Label_Cierre_001.Text = "0,00";

                    //Recalcular el Cierre
                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ArqueoTotal_Recalcular()
        {
            try
            {
                decimal dcm_Total = 0;

                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_500.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_200.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_100.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_50.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_20.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_10.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_5.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_2.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_1.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_050.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_020.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_010.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_005.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_002.Text);
                dcm_Total += decimal.Parse(ex_lbl_P_Liquidacion_Cierre_001.Text);

                ex_txt_P_Liquidacion_Cierre_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_Total, 2));
                ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Metalico.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_Total, 2));
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Cierre
        private void ex_txt_P_Liquidacion_Cierre_CajaInicial_Metalico_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Metalico_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Talon_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ex_txt_P_Liquidacion_Cierre_Gastos_Metalico_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void ex_txt_P_Liquidacion_Cierre_ImporteEntregado_Talon_Exferia_TextBox_Evento_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino && g_bol_Calculando_Datos == false)
                {
                    g_bol_Calculando_Datos = true;

                    Cierre_Recalcular();

                    g_bol_Calculando_Datos = false;

                    Controlar_Modificaciones();
                }
            }
            catch (Exception)
            { g_bol_Calculando_Datos = false; }
        }

        private void Cierre_Recalcular()
        {
            try
            {
                //Caja Inicial ...............................................
                decimal dcm_CajaInicial_Metalico = 0;
                decimal dcm_CajaInicial_Total = 0;
                if (ex_txt_P_Liquidacion_Cierre_CajaInicial_Metalico.Text.Trim().Length>0)
                {
                    dcm_CajaInicial_Metalico = decimal.Parse(ex_txt_P_Liquidacion_Cierre_CajaInicial_Metalico.Text.Trim());
                }

                dcm_CajaInicial_Total = dcm_CajaInicial_Metalico;
                ex_lbl_P_Liquidacion_Cierre_CajaInicial_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_CajaInicial_Total, 2));

                //Importe a Entregar ...........................................
                decimal dcm_ImporteAEntregar_Metalico = 0;
                decimal dcm_ImporteAEntregar_Talon = 0;
                decimal dcm_ImporteAEntregar_Total = 0;
                if (ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Metalico.Text.Trim().Length > 0)
                {
                    dcm_ImporteAEntregar_Metalico = decimal.Parse(ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Metalico.Text.Trim());
                }
                if (ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Talon.Text.Trim().Length > 0)
                {
                    dcm_ImporteAEntregar_Talon = decimal.Parse(ex_txt_P_Liquidacion_Cierre_ImporteAEntregar_Talon.Text.Trim());
                }

                dcm_ImporteAEntregar_Total = dcm_ImporteAEntregar_Metalico + dcm_ImporteAEntregar_Talon;
                ex_lbl_P_Liquidacion_Cierre_ImporteAEntregar_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_ImporteAEntregar_Total, 2));

                //Gastos ...............................................
                decimal dcm_Gastos_Metalico = 0;
                decimal dcm_Gastos_Total = 0;
                if (ex_txt_P_Liquidacion_Cierre_Gastos_Metalico.Text.Trim().Length > 0)
                {
                    dcm_Gastos_Metalico = decimal.Parse(ex_txt_P_Liquidacion_Cierre_Gastos_Metalico.Text.Trim());
                }

                dcm_Gastos_Total = dcm_Gastos_Metalico;
                ex_lbl_P_Liquidacion_Cierre_Gastos_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_Gastos_Total, 2));

                //Importe Entregado
                decimal dcm_ImporteEntregado_Metalico = 0;
                decimal dcm_ImporteEntregado_Talon = 0;
                decimal dcm_ImporteEntregado_Total = 0;
                if (ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Metalico.Text.Trim().Length > 0)
                {
                    dcm_ImporteEntregado_Metalico = decimal.Parse(ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Metalico.Text.Trim());
                }
                if (ex_txt_P_Liquidacion_Cierre_ImporteEntregado_Talon.Text.Trim().Length > 0)
                {
                    dcm_ImporteEntregado_Talon = decimal.Parse(ex_txt_P_Liquidacion_Cierre_ImporteEntregado_Talon.Text.Trim());
                }

                dcm_ImporteEntregado_Total = dcm_ImporteEntregado_Metalico + dcm_ImporteEntregado_Talon;
                ex_lbl_P_Liquidacion_Cierre_ImporteEntregado_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_ImporteEntregado_Total, 2));

                //Deuda ......................................................................
                decimal dcm_Deuda_Metalico = ((dcm_CajaInicial_Total + dcm_ImporteAEntregar_Total) - dcm_Gastos_Total) - dcm_ImporteEntregado_Total;
                ex_lbl_P_Liquidacion_Cierre_Deuda_Total.Text = string.Format("{0:0.00}", Funciones.RedondearDecimal(dcm_Deuda_Metalico, 2));
            }
            catch (Exception)
            { }
        }

        #endregion

        #region Firma
        private void ex_btn_P_Liquidacion_Buscar_Firma_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog obj_OpenFileDialog = new OpenFileDialog();
                obj_OpenFileDialog.Filter = "Archivos de Imagen JPG|*.jpg|Archivos de Imagen PNG|*.png|Todos los tipos|*.*";
                obj_OpenFileDialog.FileName = "";
                obj_OpenFileDialog.Title = "Buscar Imagen ";
                obj_OpenFileDialog.InitialDirectory = "C:\\";

                if (obj_OpenFileDialog.ShowDialog() == DialogResult.OK)
                {
                    if (pcb_P_Liquidacion_Firma.Image != null)
                    { pcb_P_Liquidacion_Firma.Image.Dispose(); }

                    g_obj_Controladora.g_img_Firma_Real = Image.FromFile(obj_OpenFileDialog.FileName);

                    pcb_P_Liquidacion_Firma.Image = g_obj_Controladora.g_img_Firma_Real;
                    pcb_P_Liquidacion_Firma.Tag = obj_OpenFileDialog.FileName;

                    Funciones.PictureBox_RedimencionarImagen(pcb_P_Liquidacion_Firma, pcb_P_Liquidacion_Firma.Image);
                }
            }
            catch (Exception ex)
            {
                Mensajes.MostrarMensaje(ex.Message);
            }
        }
        private void ex_btn_P_Liquidacion_CargarImagenAntigua_Firma_Click(object sender, EventArgs e)
        {
            try
            {

                if (g_obj_Controladora.g_arr_Firma_Inicial != null)
                {
                    g_obj_Controladora.g_img_Firma_Real = Funciones.Convertir_Arraybytes_Image(g_obj_Controladora.g_arr_Firma_Inicial);

                    pcb_P_Liquidacion_Firma.Image = g_obj_Controladora.g_img_Firma_Real;

                    Funciones.PictureBox_RedimencionarImagen(pcb_P_Liquidacion_Firma, pcb_P_Liquidacion_Firma.Image);
                }

            }
            catch (Exception ex)
            {
                Mensajes.MostrarMensaje(ex.Message);
            }
        }

        private void ex_btn_P_Liquidacion_BorrarImagen_Firma_Click(object sender, EventArgs e)
        {
            pcb_P_Liquidacion_Firma.Image = null;
            pcb_P_Liquidacion_Firma.Tag = "";
            g_obj_Controladora.g_img_Firma_Real = null;
        }
        #endregion

        #region Vehiculos Asociados
        private void ex_btn_P_Liquidacion_VehiculosAsociados_Add_Click(object sender, EventArgs e)
        {
            g_obj_Controladora.VehiculosAsociados_CrearLinea(null);
        }
        #endregion

        #region Botones Grabar, Borrar
        private void ex_btn_P_Liquidacion_Grabar_Click(object sender, EventArgs e)
        {
            Grabar();
        }
        private void Grabar()
        {
            if (g_obj_Controladora.g_mdl_INTERNO_MYT_Liquidaciones_Modelo!=null &&
                g_obj_Controladora.g_mdl_INTERNO_MYT_Liquidaciones_Modelo.fechaHora_Fin==null)
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_LIQUIDACION_VALIDACION_NOTERMINADO());
            }
            else
            {
                if (//Añadir
                    (P_Base_TipoAperturaPantalla == 0 && Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Anadir, true)) ||
                    //Modificar
                    (P_Base_TipoAperturaPantalla != 0 && Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Modificar, true)))
                {
                    g_obj_Controladora.GrabarDatos(true);
                }
            }
        }
        private void ex_btn_P_Liquidacion_Borrar_Click(object sender, EventArgs e)
        {
            Borrar();
        }
        private void Borrar()
        {
            if (g_obj_Controladora.g_mdl_INTERNO_MYT_Liquidaciones_Modelo != null &&
                 g_obj_Controladora.g_mdl_INTERNO_MYT_Liquidaciones_Modelo.fechaHora_Fin == null)
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_LIQUIDACION_VALIDACION_NOTERMINADO());
            }
            else
            {
                if (Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Borrar, true))
                {
                    g_obj_Controladora.BorrarDatos(true);
                }
            }

        }
        #endregion

        #region Controlar si se modifica algo
        private void Controlar_Modificaciones_TextBox_TextChanged(object sender, EventArgs e)
        {
            Controlar_Modificaciones();
        }
        private void Controlar_Modificaciones_Exferia_FechaSeleccion_TextChanged(object sender, EventArgs e)
        {
            Controlar_Modificaciones();
        }
        private void Controlar_Modificaciones()
        {
            if (Enabled && g_obj_Controladora != null && g_obj_Controladora.g_bol_TareaAsincrona_CargarDatos_Termino)
            {
                P_Base_SeModificoDatosPantalla = true;
            }
        }

        #endregion

        #region Eventos del Paginador
        protected void ctu_Paginacion_Primera_Click(object sender, EventArgs e)
        {
            if (g_obj_Controladora.ComprobarCambios()) // Si no han habido contratiempos pasamos a la pagina indicada
            {
                if (g_obj_Funciones_Paginador.Primera())
                {
                    // Asignando al control la pagina actual.
                    Exferia_Paginador_Liquidacion.PaginaActual = g_obj_Funciones_Paginador.GetPaginaActual();

                    // Refrescamos el listado a mostrar en el form.
                    P_Base_id = g_obj_Funciones_Paginador.Objeto_Devuelto.FirstOrDefault().ID;

                    g_timer_Paginar.Stop();
                    g_timer_Paginar.Start();
                }
            }
        }
        protected void ctu_Paginacion_Anterior_Click(object sender, EventArgs e)
        {
            if (g_obj_Controladora.ComprobarCambios()) // Si no han habido contratiempos pasamos a la pagina indicada
            {
                if (g_obj_Funciones_Paginador.Anterior())
                {
                    // Asignando al control la pagina actual.
                    Exferia_Paginador_Liquidacion.PaginaActual = g_obj_Funciones_Paginador.GetPaginaActual();

                    // Refrescamos el listado a mostrar en el form.
                    P_Base_id = g_obj_Funciones_Paginador.Objeto_Devuelto.FirstOrDefault().ID;

                    g_timer_Paginar.Stop();
                    g_timer_Paginar.Start();
                }
            }
        }
        protected void ctu_Paginacion_Siguiente_Click(object sender, EventArgs e)
        {
            if (g_obj_Controladora.ComprobarCambios()) // Si no han habido contratiempos pasamos a la pagina indicada
            {
                if (g_obj_Funciones_Paginador.Siguiente())
                {
                    // Asignando al control la pagina actual.
                    Exferia_Paginador_Liquidacion.PaginaActual = g_obj_Funciones_Paginador.GetPaginaActual();

                    // Refrescamos el listado a mostrar en el form.
                    P_Base_id = g_obj_Funciones_Paginador.Objeto_Devuelto.FirstOrDefault().ID;

                    g_timer_Paginar.Stop();
                    g_timer_Paginar.Start();
                }
            }
        }
        protected void ctu_Paginacion_Ultima_Click(object sender, EventArgs e)
        {
            if (g_obj_Controladora.ComprobarCambios()) // Si no han habido contratiempos pasamos a la pagina indicada
            {

                if (g_obj_Funciones_Paginador.Ultima())
                {
                    // Asignando al control la pagina actual.
                    Exferia_Paginador_Liquidacion.PaginaActual = g_obj_Funciones_Paginador.GetPaginaActual();

                    // Refrescamos el listado a mostrar en el form.
                    P_Base_id = g_obj_Funciones_Paginador.Objeto_Devuelto.FirstOrDefault().ID;

                    g_timer_Paginar.Stop();
                    g_timer_Paginar.Start();
                }
            }
        }
        protected void txt_PaginaActual_KeyPress(object sender, KeyPressEventArgs e)
        {
            // Si pulsamos Enter.
            if (e.KeyChar.Equals('\r'))
            {
                if (g_obj_Controladora.ComprobarCambios()) // Si no han habido contratiempos pasamos a la pagina indicada
                {
                    // Asignamos a la paginacion el valor del textbox
                    g_obj_Funciones_Paginador.SetPaginaActual(Exferia_Paginador_Liquidacion.txt_ValorPaginaActual - 1);

                    // Asignando al control la pagina actual.
                    Exferia_Paginador_Liquidacion.PaginaActual = g_obj_Funciones_Paginador.GetPaginaActual();

                    // Refrescamos el listado a mostrar en el form.
                    P_Base_id = g_obj_Funciones_Paginador.Objeto_Devuelto.FirstOrDefault().ID;

                    g_timer_Paginar.Stop();

                    g_obj_Controladora.RecargarDatos();
                }
            }
        }

        #endregion

        #region Teclas de acceso rapido

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Salir sin Seleccionar
            if (keyData == Keys.F10)
            {
                Salir_P_Base();
                return true;
            }
            // Grabar
            else if (keyData == Keys.F2)
            {
                Grabar();
                return true;
            }
            // Borrar
            else if (keyData == Keys.F5)
            {
                Borrar();
                return true;
            }

            return base.ProcessCmdKey(ref msg, keyData);
        }

        #endregion

       
    }
}
