using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_KairosPRO._2_Datos;
using Exferia_KairosPRO._4_Vistas.ControlesPersonalizados_DentroPaneles;
using Exferia_KairosPRO.General;
using Exferia_KairosPRO_EF;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_KairosPRO._4_Vistas.Controladoras
{
    public class P_Terminales_Controladora
    {
        #region Variables Generales
        private P_Terminales g_frm_P_Terminales = null;//Variables que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando;//Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc

        //Clases de Negocio necesarias para la carga de datos
        private KRS_Terminales_Datos g_obj_KRS_Terminales_Datos = new KRS_Terminales_Datos();
        private KRS_Terminales_ClavesTemporales_Datos g_obj_KRS_Terminales_ClavesTemporales_Datos = new KRS_Terminales_ClavesTemporales_Datos();
        private KRS_PausasTipos_Datos g_obj_KRS_PausasTipos_Datos = new KRS_PausasTipos_Datos();
        private KRS_Terminales_CodigosDispositivosBiometricos_Datos g_obj_KRS_Terminales_CodigosDispositivosBiometricos_Datos = new KRS_Terminales_CodigosDispositivosBiometricos_Datos();

        private KRS_Terminales g_mdl_KRS_Terminales = null;//Modelo de los datos cargados

        public bool g_bol_Termino_CargaDatos_Inicial = false;//Se utiliza para saber cuando se termina la carga de los datos estaticos

        //Tareea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;
        private bool g_bol_Cancelar_TareaAsincrona_CargarDatos = false;

        //Tareea Asincrona de grabar de datos
        private BackgroundWorker g_obj_TareaAsincrona_GrabarDatos;
        private bool g_bol_GrabarDatos_TerminoCorrectamente = true;
        private bool g_bol_GrabarDatos_VolverListado = true;

        //Tareea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;
        private bool g_bol_BorrarDatos_VolverListado = true;

        //TareaAsincrona Claves_Temporales
        private BackgroundWorker g_TareaAsincrona_Rellenar_Listado_ClavesTemporales;
        private List<KRS_Terminales_ClavesTemporales> g_lst_KRS_Terminales_ClavesTemporales = null;

        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos_ClavesTemporales;

        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_MARCA = null;
        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_MODELO = null;
        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_FIRMWARE = null;

        //Variables para la Creacion de la Lineas Codigos Pausas ############
        private int g_int_NumeroLineasCodigosPausas = 0;
        private int g_int_PosicionY_LineasCodigosPausas = 5;
        private List<int> g_Array_ListadoLineasCodigosPausas = new List<int>();
        private List<INTERNO_ComboBox_Modelo> g_lst_TiposPausas_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #region Constructor
        public P_Terminales_Controladora(P_Terminales _frm_P_Terminales)
        {
            g_frm_P_Terminales = _frm_P_Terminales;

            g_bol_Termino_CargaDatos_Inicial = true;

            Cargar_Combos();

            //(Tarea Asincrona) Cargar Listado de las Claves temporales ########################################
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales = new BackgroundWorker();
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_Listado_ClavesTemporales_DoWork);
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_Listado_ClavesTemporales_ProgressChanged);
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_Listado_ClavesTemporales_Completed);
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.WorkerReportsProgress = true;
            g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.WorkerSupportsCancellation = true;
            //#####################################################################################################
        }
        #endregion

        #region Cargar datos de los comboBox
        private void Cargar_Combos()
        {
            //Dispositivo Huella Dactilar Marca...........................................................................
            g_lst_INTERNO_ComboBox_Modelo_MARCA = ListadosEstaticos.Devolver_DispositivoHuellaDactilar_Marca();

            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.Items.Clear();
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.DataSource = g_lst_INTERNO_ComboBox_Modelo_MARCA;
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.SelectedIndex = 0;
            //............................................................................................

            //Dispositivo Huella Dactilar Modelo...........................................................................
            g_lst_INTERNO_ComboBox_Modelo_MODELO = ListadosEstaticos.Devolver_DispositivoHuellaDactilar_Modelo();

            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.Items.Clear();
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.DataSource = g_lst_INTERNO_ComboBox_Modelo_MODELO;
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.SelectedIndex = 0;
            //............................................................................................

            //Dispositivo Huella Dactilar Firmware...........................................................................
            g_lst_INTERNO_ComboBox_Modelo_FIRMWARE = ListadosEstaticos.Devolver_DispositivoHuellaDactilar_Firmware();

            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.Items.Clear();
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.DataSource = g_lst_INTERNO_ComboBox_Modelo_FIRMWARE;
            g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.SelectedIndex = 0;
            //............................................................................................

            //Tipos de Pausas...........................................................................
            List<KRS_PausasTipos> lst_KRS_PausasTipos = g_obj_KRS_PausasTipos_Datos.Obtener_ModeloListado();
            g_lst_TiposPausas_INTERNO_ComboBox_Modelo = new List<INTERNO_ComboBox_Modelo>();
            if (lst_KRS_PausasTipos!=null && lst_KRS_PausasTipos.Count>0)
            {
                foreach (KRS_PausasTipos mdl_KRS_PausasTipos in lst_KRS_PausasTipos)
                {
                    g_lst_TiposPausas_INTERNO_ComboBox_Modelo.Add(new INTERNO_ComboBox_Modelo(mdl_KRS_PausasTipos.id.ToString(), mdl_KRS_PausasTipos.descripcion, mdl_KRS_PausasTipos.fechaBorrado));
                }
            }
            //............................................................................................
        }
        #endregion

        #region Vaciar Datos
        public void VaciarDatos()
        {
            //codigo
            g_frm_P_Terminales.Exferia_TextBox_Codigo.Text = "";

            //descripcion
            g_frm_P_Terminales.Exferia_TextBox_Descripcion.Text = "";

            //tipoDispositivo
            g_frm_P_Terminales.Exferia_RadioButton_Mythos.Checked = false;
            g_frm_P_Terminales.Exferia_RadioButton_Oficina.Checked = false;

            //idDepartamento
            g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id = -1;
            g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Codigo = "";
            g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Descripcion = "";
            g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_FechaBorrado = null;

            //dispositivoHuellaDactilar_IP
            g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_IP.Text = "";

            //dispositivoHuellaDactilar_Numero
            g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_NumeroDispositivo.Text = "";

            //dispositivoHuellaDactilar
            g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar.Checked = false;

            //DispositivodeHuellaDactilar_DNS
            g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar_DNS.Checked = false;

            //dispositivoHuellaDactilar_Puerto
            g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Puerto.Text = "5010";

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
            if (g_frm_P_Terminales.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_Terminales.P_Base_TituloPantalla = (g_frm_P_Terminales.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
            }

            //Actualizar el Boton de Seleccion de pantalla ####################################################
            Variables.G_EMS_CONTROL_MENUSUPERIOR.Update_Texto_NombrePantalla(g_frm_P_Terminales.Tag.ToString());
            //#################################################################################################

            g_mdl_KRS_Terminales = null;
        }
        #endregion

        #region Buscar Codigo Siguiente
        public INTERNO_ValorDevuelto_Modelo Buscar_CodigoSiguiente()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                string str_CodigoSiguiente = Compartidas_Datos_KairosPRO.Buscar_CodigoSiguiente(nameof(KRS_Terminales),
                                                                                                nameof(KRS_Terminales.codigo),
                                                                                                true,
                                                                                                g_frm_P_Terminales.Exferia_TextBox_Codigo.Exferia_TextBox_MaxLength);
                if (!str_CodigoSiguiente.Equals("-1"))
                {
                    g_frm_P_Terminales.Exferia_TextBox_Codigo.Text = str_CodigoSiguiente;
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_CODIGOSIGUIENTE_LIMITEALCANZADO(g_frm_P_Terminales.Exferia_Label_Codigo.Text);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(Buscar_CodigoSiguiente));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Comprobacion de cambios, para  grabar o no antes de salir o cambiar de registro
        public bool ComprobarCambios()
        {
            if (g_frm_P_Terminales.P_Base_SeModificoDatosPantalla)
            {
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_GUARDARCAMBIOS()))
                {
                    GrabarDatos(false);

                    //Te quedas espernado a que termine la tarea asincrona de grabar
                    while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                        Application.DoEvents();

                    return g_bol_GrabarDatos_TerminoCorrectamente;
                }
            }
            return true;
        }
        #endregion

        #region CargarDatos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Terminales.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarDatos != null)
                {
                    g_bol_Cancelar_TareaAsincrona_CargarDatos = true;

                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();

                    //Vaciar
                    VaciarDatos();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_DoWork);
                    g_obj_TareaAsincrona_CargarDatos.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_ProgressChanged);
                    g_obj_TareaAsincrona_CargarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = true;
                }

                g_bol_Cancelar_TareaAsincrona_CargarDatos = false;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_CargarDatos.RunWorkerAsync();
                //#################################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_Terminales.Enabled = true;

                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_Terminales_Controladora) + "/" + nameof(RecargarDatos), true);
            }
        }
        private void TareaAsincrona_CargarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                // Cargar Valores
                if (CargarDatos(g_frm_P_Terminales.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
                else
                {
                    if(g_mdl_KRS_Terminales != null)
                    {

                        //CLAVES TERMINALES
                        if (g_mdl_KRS_Terminales.KRS_Terminales_ClavesTemporales != null && g_mdl_KRS_Terminales.KRS_Terminales_ClavesTemporales.Count > 0)
                        {
                            g_lst_KRS_Terminales_ClavesTemporales = g_mdl_KRS_Terminales.KRS_Terminales_ClavesTemporales.ToList();

                            DataGridViewRow obj_DataGridViewRow;
                            foreach (KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales in g_lst_KRS_Terminales_ClavesTemporales)
                            {
                                //Se cancelo la tarea asincrona #######################
                                if (g_bol_Cancelar_TareaAsincrona_CargarDatos)
                                {
                                    return;
                                }

                                //Añadir File con Columnas ...............................
                                obj_DataGridViewRow = Transformar_Modelo_A_Row_ClavesTemporales(mdl_KRS_Terminales_ClavesTemporales, null);

                                ((BackgroundWorker)sender).ReportProgress(1, obj_DataGridViewRow);

                                //Application.DoEvents();
                                Thread.Sleep(5);
                            }
                        }


                        //DISPOSTIVOSBIOMETRICOSCODIGOS
                        if (g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos != null && g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Count > 0)
                        {
                            KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos=g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Where(m => m.idPausaTipo == null).FirstOrDefault();

                            //Codigo Entrada
                            g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Entrada.Text = mdl_KRS_Terminales_CodigosDispositivosBiometricos.codigoEntrada;

                            //Codigo salida
                            g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Salida.Text = mdl_KRS_Terminales_CodigosDispositivosBiometricos.codigoSalida;


                            //Listado de las pausas
                            List<KRS_Terminales_CodigosDispositivosBiometricos> lst_KRS_Terminales_CodigosDispositivosBiometricos_AUX= g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Where(m => m.idPausaTipo != null).ToList();

                            if (lst_KRS_Terminales_CodigosDispositivosBiometricos_AUX != null && lst_KRS_Terminales_CodigosDispositivosBiometricos_AUX.Count > 0)
                            {
                                foreach (KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos_PAUSAS in lst_KRS_Terminales_CodigosDispositivosBiometricos_AUX)
                                {
                                    //Se cancelo la tarea asincrona #######################
                                    if (g_bol_Cancelar_TareaAsincrona_CargarDatos)
                                    {
                                        return;
                                    }

                                    ((BackgroundWorker)sender).ReportProgress(2, mdl_KRS_Terminales_CodigosDispositivosBiometricos_PAUSAS);

                                    //Application.DoEvents();
                                    Thread.Sleep(5);
                                }
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage == 1)
                {
                    DataGridViewRow dgvr_Fila = (DataGridViewRow)e.UserState;
                    g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows.Add(dgvr_Fila);
                }
                else if (e.ProgressPercentage == 2)
                {
                    Crear_Linea_CodigosPausa((KRS_Terminales_CodigosDispositivosBiometricos)e.UserState);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_ProgressChanged));
            }
        }
        private void TareaAsincrona_CargarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            //Desbloquear el Formulario
            g_frm_P_Terminales.Enabled = true;

            try
            {

                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)//Compruebo si el mensaje no esta vacio
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                        g_frm_P_Terminales.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Terminales.Salir_P_Base();
            }
            finally
            {
                //CheckBox
                g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar.Checked = (g_mdl_KRS_Terminales.dispositivoHuellaDactilar != null && g_mdl_KRS_Terminales.dispositivoHuellaDactilar.Value) ? g_mdl_KRS_Terminales.dispositivoHuellaDactilar.Value : false;

                //Hacemos foco al primer control.
                g_frm_P_Terminales.Exferia_TextBox_Codigo.Exferia_TextBox_Foco();

            }
        }

        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;

            try
            {
                g_mdl_KRS_Terminales = g_obj_KRS_Terminales_Datos.Obtener(_lng_id);


                //Si no es Nulo Cargo los Datos
                if(g_mdl_KRS_Terminales != null)
                {
                    //Paginador ................................................................................
                    if (g_frm_P_Terminales.P_Base_PantallaOrigen != null &&
                        g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_KRS_Terminales.id;
                        int int_PaginaDelObjeto = g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

                        g_frm_P_Terminales.g_obj_Funciones_Paginador.SetPaginaActual(int_PaginaDelObjeto);
                        // Asignando al paginador la pagina actual.
                        g_frm_P_Terminales.Exferia_Paginador_Terminales.PaginaActual = g_frm_P_Terminales.g_obj_Funciones_Paginador.GetPaginaActual();
                    }
                    //...........................................................................................

                    //codigo
                    g_frm_P_Terminales.Exferia_TextBox_Codigo.Text = g_mdl_KRS_Terminales.codigo;

                    //descripcion
                    g_frm_P_Terminales.Exferia_TextBox_Descripcion.Text = g_mdl_KRS_Terminales.descripcion;

                    //dispositivoHuellaDactilar_IP
                    g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_IP.Text = g_mdl_KRS_Terminales.dispositivoHuellaDactilar_IP;

                    //dispositivoHuellaDactilar_Numero
                    g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_NumeroDispositivo.Text = g_mdl_KRS_Terminales.dispositivoHuellaDactilar_Numero!=null ? g_mdl_KRS_Terminales.dispositivoHuellaDactilar_Numero.Value.ToString() : "" ;

                    //dispositivoHuellaDactilar_Marca
                    g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.SelectedItem = g_lst_INTERNO_ComboBox_Modelo_MARCA.Where(m => m.Descripcion.Equals(g_mdl_KRS_Terminales.dispositivoHuellaDactilar_Marca)).FirstOrDefault();

                    //dispositivoHuellaDactilarModelo
                    g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.SelectedItem = g_lst_INTERNO_ComboBox_Modelo_MODELO.Where(m => m.Descripcion.Equals(g_mdl_KRS_Terminales.dispositivoHuellaDactilarModelo)).FirstOrDefault();

                    //dispositivoHuellaDactilar_Firmware
                    g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.SelectedItem = g_lst_INTERNO_ComboBox_Modelo_FIRMWARE.Where(m => m.Descripcion.Equals(g_mdl_KRS_Terminales.dispositivoHuellaDactilar_Firmware)).FirstOrDefault();

                    //dispositivoHuellaDactilar_Puerto
                    g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Puerto.Text = g_mdl_KRS_Terminales.dispositivoHuellaDactilar_Puerto;

                    //dispositivoHuellaDactilar_DNS
                    g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar_DNS.Checked = g_mdl_KRS_Terminales.dispositivoHuellaDactilar_DNS!=null  ? g_mdl_KRS_Terminales.dispositivoHuellaDactilar_DNS.Value :false;

                    //Oficina
                    if (g_mdl_KRS_Terminales.tipoDispositivo.Equals(Variables.G_INT_TIPODISPOSITIVO_OFICINA_CODIGO))
                    {
                        g_frm_P_Terminales.Exferia_RadioButton_Oficina.Checked = true;
                    }
                    //Mythos
                    else if (g_mdl_KRS_Terminales.tipoDispositivo.Equals(Variables.G_INT_TIPODISPOSITIVO_MYTHOS_CODIGO))
                    {
                        g_frm_P_Terminales.Exferia_RadioButton_Mythos.Checked = true;
                    }

                    //Se Cancelo la carga..................................
                    if (g_bol_Cancelar_TareaAsincrona_CargarDatos)
                    {
                        return true;
                    }
                    //.....................................................

                    //Control F3
                    //Buscamos el departamento para poder añadirlo
                    //Cargamos el ensamblado #########################################################################################################################################################################
                    Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                    //Obtenemos el tipo de la clase
                    Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                    //creamos la instancia
                    var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                    //Cargamos el metodo solicitado
                    MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTADEPARTAMENTO_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                    //Obtener valores
                    object[] arr_Parametros_1 = { g_mdl_KRS_Terminales.idDepartamento };

                    //Pasamos los parametros al metodo y lo ejecutamos
                    CTA_Departamentos mdl_CTA_Departamentos = (CTA_Departamentos)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                    //##################################################################################################################################################################################################                    

                    if (mdl_CTA_Departamentos != null)
                    {
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id = mdl_CTA_Departamentos.id;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Codigo = mdl_CTA_Departamentos.codigo;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Descripcion = mdl_CTA_Departamentos.descripcion;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_FechaBorrado = mdl_CTA_Departamentos.fechaBorrado;
                    }
                    else
                    {
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id = -1;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Codigo = string.Empty;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Descripcion = string.Empty;
                        g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_FechaBorrado = null;
                    }

                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Terminales.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_Terminales.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_Terminales.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_Terminales.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Split(new Char[] { ',' });
                        string str_ValorAMostrarFinal = "";

                        string[] str_Separador = new string[] { " [" };
                        //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
                        if (g_frm_P_Terminales.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Terminales.P_Base_TituloPantalla = (g_frm_P_Terminales.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_KRS_Terminales;
                        foreach (string str_campo in arr_Campos)
                        {
                            var Valor = dnm_Objeto.GetType().GetProperty(str_campo).GetValue(dnm_Objeto, null);
                            if (Valor != null)
                            {
                                str_ValorAMostrarFinal += " " + Valor;
                            }

                            // codigo
                            if (str_campo.Equals(nameof(g_mdl_KRS_Terminales.codigo)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_KRS_Terminales.codigo;
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Terminales.P_Base_TituloPantalla += " [" + str_ValorAMostrarFinal + "] -Modificar";
                        }
                    }

                    //Actualizar el Boton de Seleccion de pantalla ####################################################
                    Variables.G_EMS_CONTROL_MENUSUPERIOR.Add_Texto_NombrePantalla_Descripciones(g_frm_P_Terminales.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(CargarDatos));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos(bool _bol_VolverAlListado)
        {
            try
            {
                g_bol_GrabarDatos_VolverListado = _bol_VolverAlListado;

                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_Terminales.Enabled = false;
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_GRABANDODATOS());

                g_obj_TareaAsincrona_GrabarDatos = new BackgroundWorker();
                g_obj_TareaAsincrona_GrabarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_GrabarDatos_DoWork);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GrabarDatos_Completed);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerAsync();

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_bol_GrabarDatos_TerminoCorrectamente = false;
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_Terminales.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(GrabarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_GrabarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_ValorDevuelto_Modelo = GrabarDatos_Final();
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GrabarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Terminales.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);

                        //Poner el Foco en el objeto que tuvoel problema en validar
                        if (mdl_ValorDevuelto_Modelo_Resultado.Objeto != null)
                        {
                            Funciones.Poner_Foco_Objeto(g_frm_P_Terminales, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

                    g_bol_GrabarDatos_TerminoCorrectamente = false;
                }
                else
                {
                    // Devolver al Listado el Row Añadido/Modificado
                    if (g_frm_P_Terminales.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Terminales.P_Base_F3Origen != null)
                    {
                        g_frm_P_Terminales.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    if (g_bol_GrabarDatos_VolverListado)
                    {
                        g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = false;
                        g_frm_P_Terminales.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));
            }
        }
        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Si el codigo esta vacio y se intenta buscar el ultimo numerico y llego al limite de base de datos
                if (g_frm_P_Terminales.Exferia_TextBox_Codigo.Text.Trim().Length == 0)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = Buscar_CodigoSiguiente();

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo.Mensaje;
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_Codigo;
                    }
                }

                //La descripcion no puede estar vacia
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_Descripcion.Text.Trim().Length == 0))
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_Descripcion.Text);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_Descripcion;
                }

                //Departamento no puede estar vacio (obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay departamento validar que es Correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                //Debe haber Algun radioButton seleccionado
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_RadioButton_Mythos.Checked == false) && (g_frm_P_Terminales.Exferia_RadioButton_Oficina.Checked == false))
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_NOSELECCIONADO(g_frm_P_Terminales.Exferia_Label_TipoTerminal.Text);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_RadioButton_Oficina;
                }

                //Si el Check de huella dactilar esta checkeado, se validan los datos
                if (g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar.Checked)
                {
                    //La IP no puede estar vacia
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_IP.Text.Trim().Length == 0))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_IP.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_IP;
                    }

                    //El numero de dispositivo no puede estar vacio
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_NumeroDispositivo.Text.Trim().Length == 0))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_NumeroDispositivo.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_NumeroDispositivo;
                    }

                    //La Marca no puede estar vacia
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.SelectedItem).Identificador.Equals("-1")))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_NOSELECCIONADO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Marca.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca;
                    }

                    //El Modelo no puede estar vacia
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.SelectedItem).Identificador.Equals("-1")))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_NOSELECCIONADO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Modelo.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo;
                    }

                    //El Firmware no puede estar vacia
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.SelectedItem == null ||
                        ((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.SelectedItem).Identificador.Equals("-1")))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_NOSELECCIONADO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Firmware.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware;
                    }

                    //El puerto no puede estar vacia
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Puerto.Text.Trim().Length == 0))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Puerto.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Puerto;
                    }

                    //El codigo de entrada no puede estar vacio
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Entrada.Text.Trim().Length == 0))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Codigos_Entrada.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Entrada;
                    }

                    //El codigo de salida no puede estar vacio
                    if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Salida.Text.Trim().Length == 0))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Terminales.Exferia_Label_DispositivodeHuellaDactilar_Codigos_Salida.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Salida;
                    }

                    //Si tiene Codigos de pausas
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        CTU_P_Terminales_Codigos_Pausas obj_CTU_P_Terminales_Codigos_Pausas = null;
                        int int_Contador_Lineas = 0;
                        List<string> lst_PausasTipos = new List<string>();
                        foreach (int int_ValorLinea in g_Array_ListadoLineasCodigosPausas)
                        {
                            obj_CTU_P_Terminales_Codigos_Pausas = (CTU_P_Terminales_Codigos_Pausas)g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Find("controlusuario_CTU_P_Terminales_Codigos_Pausas" + int_ValorLinea, true).FirstOrDefault();

                            if (obj_CTU_P_Terminales_Codigos_Pausas != null)
                            {
                                //Debe tener algo seleccionado en la pausa
                                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_VALOR.Trim().Length == 0))
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_NOSELECCIONADO(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_LABEL.Text);
                                    mdl_ValorDevuelto_Modelo.Objeto = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_COMBOBOX;
                                    break;
                                }

                                //El codigo de inicio no puede estar vacio
                                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_INICIO_TEXTBOX.Text.Trim().Length == 0))
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_INICIO_LABEL.Text);
                                    mdl_ValorDevuelto_Modelo.Objeto = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_INICIO_TEXTBOX;
                                    break;
                                }

                                //El codigo de fin no puede estar vacio
                                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_FIN_TEXTBOX.Text.Trim().Length == 0))
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_FIN_LABEL.Text);
                                    mdl_ValorDevuelto_Modelo.Objeto = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_FIN_TEXTBOX;
                                    break;
                                }

                                //Validar que no se repita los tipos de pausas
                                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) &&
                                    lst_PausasTipos.Exists(m=>m.Equals(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_VALOR)))
                                {
                                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_REPETIDA(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_LABEL.Text);
                                    mdl_ValorDevuelto_Modelo.Objeto = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_COMBOBOX;
                                    break;
                                }


                                //Añadir al listado para validacion
                                lst_PausasTipos.Add(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_VALOR);

                                int_Contador_Lineas += 1;
                                //....................................................................................................................................
                            }
                        }
                    }

                }
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(ValidarDatos));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo GrabarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    KRS_Terminales mdl_KRS_Terminales = new KRS_Terminales();
                    mdl_KRS_Terminales.id = g_mdl_KRS_Terminales != null ? g_mdl_KRS_Terminales.id : -1;

                    //codigo
                    mdl_KRS_Terminales.codigo = g_frm_P_Terminales.Exferia_TextBox_Codigo.Text.Trim();

                    //descripcion
                    mdl_KRS_Terminales.descripcion = g_frm_P_Terminales.Exferia_TextBox_Descripcion.Text.Trim();

                    //idDepartamento
                    if (g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id != -1)
                    {
                        mdl_KRS_Terminales.idDepartamento = g_frm_P_Terminales.Exferia_F3_Departamento.Exferia_F3_Id;
                    }

                    //tipoDispositivo
                    if (g_frm_P_Terminales.Exferia_RadioButton_Oficina.Checked)
                    {
                        mdl_KRS_Terminales.tipoDispositivo = Variables.G_INT_TIPODISPOSITIVO_OFICINA_CODIGO;
                    }
                    else if (g_frm_P_Terminales.Exferia_RadioButton_Mythos.Checked)
                    {
                        mdl_KRS_Terminales.tipoDispositivo = Variables.G_INT_TIPODISPOSITIVO_MYTHOS_CODIGO;
                    }

                    //Si esta Seleccionado el Check de Huella dactilar se grabar los valores
                    if (g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar.Checked)
                    {
                        //dispositivoHuellaDactilar
                        mdl_KRS_Terminales.dispositivoHuellaDactilar = true;

                        //dispositivoHuellaDactilar_IP
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_IP = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_IP.Text;

                        //dispositivoHuellaDactilar_Numero
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Numero = int.Parse(g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_NumeroDispositivo.Text);

                        //dispositivoHuellaDactilar_Marca
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Marca = (((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Marca.SelectedItem).Descripcion);

                        //dispositivoHuellaDactilarModelo
                        mdl_KRS_Terminales.dispositivoHuellaDactilarModelo = (((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Modelo.SelectedItem).Descripcion);

                        //dispositivoHuellaDactilar_Firmware
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Firmware = (((INTERNO_ComboBox_Modelo)g_frm_P_Terminales.Exferia_ComboBox_DispositivodeHuellaDactilar_Firmware.SelectedItem).Descripcion);

                        //dispositivoHuellaDactilar_Puerto
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Puerto = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Puerto.Text;

                        //dispositivoHuellaDactilar_DNS
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_DNS = g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar_DNS.Checked;

                    }
                    else
                    {
                        //dispositivoHuellaDactilar
                        mdl_KRS_Terminales.dispositivoHuellaDactilar = false;

                        //dispositivoHuellaDactilar_IP
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_IP = "";

                        //dispositivoHuellaDactilar_Numero
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Numero = 0;

                        //dispositivoHuellaDactilar_Marca
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Marca = "";

                        //dispositivoHuellaDactilarModelo
                        mdl_KRS_Terminales.dispositivoHuellaDactilarModelo = "";

                        //dispositivoHuellaDactilar_Firmware
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Firmware = "";

                        //dispositivoHuellaDactilar_Puerto
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_Puerto = "";

                        //dispositivoHuellaDactilar_DNS
                        mdl_KRS_Terminales.dispositivoHuellaDactilar_DNS =false;
                    }

                    //Se graba el modelo ya relleno
                    mdl_ValorDevuelto_Modelo = g_obj_KRS_Terminales_Datos.Grabar(mdl_KRS_Terminales);

                    if(mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        long lng_idTerminal = mdl_ValorDevuelto_Modelo.Id;

                        #region KRS_Terminales_CodigosDispositivosBiometricos
                        if (g_frm_P_Terminales.Exferia_CheckBox_DispositivodeHuellaDactilar.Checked==false)
                        {
                            //Borrar todos los codigos
                            mdl_ValorDevuelto_Modelo = g_obj_KRS_Terminales_CodigosDispositivosBiometricos_Datos.Borrar_Por_Terminal(lng_idTerminal);
                            if (mdl_ValorDevuelto_Modelo.TodoCorrecto == false)
                            {
                                transaccion_SQL.Dispose();
                                return mdl_ValorDevuelto_Modelo;
                            }
                        }
                        else
                        {
                            List<KRS_Terminales_CodigosDispositivosBiometricos> lst_KRS_Terminales_CodigosDispositivosBiometricos = Obtener_Lineas_CodigosDispositivosBiometricos(lng_idTerminal);
                           
                            #region Entrada y salida normal

                            KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA = new KRS_Terminales_CodigosDispositivosBiometricos();

                            // id
                            long lng_idCodigoDispostivoBiometrico = -1;
                            if (g_mdl_KRS_Terminales!=null && g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos!=null)
                            {
                                KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos_AUX=g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Where(m => m.idPausaTipo == null).FirstOrDefault();
                                if (mdl_KRS_Terminales_CodigosDispositivosBiometricos_AUX!=null)
                                {
                                    lng_idCodigoDispostivoBiometrico=mdl_KRS_Terminales_CodigosDispositivosBiometricos_AUX.id;
                                }
                            }
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.id = lng_idCodigoDispostivoBiometrico;

                            // idJornadaCabecera
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.idTerminal = lng_idTerminal;

                            // codigoCliente
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.codigoCliente = Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO;

                            // codigoEntrada
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.codigoEntrada = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Entrada.Text;

                            // codigoSalida
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.codigoSalida = g_frm_P_Terminales.Exferia_TextBox_DispositivodeHuellaDactilar_Codigos_Salida.Text;

                            // idPausaTipo
                            mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA.idPausaTipo = null;

                            //Añadir al Listado
                            lst_KRS_Terminales_CodigosDispositivosBiometricos.Add(mdl_KRS_Terminales_CodigosDispositivosBiometricos_ENTRADASALIDA);
  
                            #endregion


                            //Borrar los CodigosDispositivosBiometricos que estan Fuera del listado
                            if (g_mdl_KRS_Terminales != null && g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos != null && g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Count() > 0)
                            {
                                var arr_Lineasids = lst_KRS_Terminales_CodigosDispositivosBiometricos.Select(x => x.id).ToArray();
                                var var_LineasBorrar = g_mdl_KRS_Terminales.KRS_Terminales_CodigosDispositivosBiometricos.Where(m => !arr_Lineasids.Contains(m.id) && m.idTerminal.Equals(lng_idTerminal));
                                if (var_LineasBorrar != null && var_LineasBorrar.Count() > 0)
                                {
                                    INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_LineasBorrar = null;
                                    foreach (KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos in var_LineasBorrar.ToList())
                                    {
                                        mdl_ValorDevuelto_Modelo_LineasBorrar = g_obj_KRS_Terminales_CodigosDispositivosBiometricos_Datos.Borrar(mdl_KRS_Terminales_CodigosDispositivosBiometricos.id);
                                        if (mdl_ValorDevuelto_Modelo_LineasBorrar.TodoCorrecto == false)
                                        {
                                            transaccion_SQL.Dispose();
                                            return mdl_ValorDevuelto_Modelo_LineasBorrar;
                                        }
                                    }
                                }
                            }

                            //Actualizar Lineas
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_Lineas = null;
                            foreach (KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos in lst_KRS_Terminales_CodigosDispositivosBiometricos)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo_Lineas = g_obj_KRS_Terminales_CodigosDispositivosBiometricos_Datos.Grabar(mdl_KRS_Terminales_CodigosDispositivosBiometricos);
                                if (!mdl_INTERNO_ValorDevuelto_Modelo_Lineas.TodoCorrecto)
                                {
                                    transaccion_SQL.Dispose();
                                    return mdl_INTERNO_ValorDevuelto_Modelo_Lineas;
                                }
                            }
                        }
                        #endregion


                        //Termino transaccion
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();
                }
                catch (Control_Errores)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(GrabarDatos_Final));
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
            }

            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar Datos
        public void BorrarDatos(bool _bol_VolverAlListado)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_bol_BorrarDatos_VolverListado = _bol_VolverAlListado;
                    g_frm_P_Terminales.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    g_obj_TareaAsincrona_BorrarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_Completed);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerAsync();

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_Terminales.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(BorrarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Borrar 
                mdl_ValorDevuelto_Modelo = BorrarDatos_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_BorrarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Terminales.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    // Devolver al Listado el Row Borrar
                    if (g_frm_P_Terminales.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Terminales.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Terminales.P_Base_F3Origen != null)
                    {
                        g_frm_P_Terminales.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    if (g_bol_BorrarDatos_VolverListado)
                    {
                        g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = false;
                        g_frm_P_Terminales.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                mdl_ValorDevuelto_Modelo = g_obj_KRS_Terminales_Datos.Borrar(g_mdl_KRS_Terminales != null ? g_mdl_KRS_Terminales.id : -1);

                return mdl_ValorDevuelto_Modelo;
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #region Claves Temporales
        public INTERNO_ValorDevuelto_Modelo Cargar_Listado_ClavesTemporales()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.CancelAsync();

                while (g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.IsBusy)
                    Application.DoEvents();

                //Vaciar el Listado
                g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows.Clear();

                g_TareaAsincrona_Rellenar_Listado_ClavesTemporales.RunWorkerAsync();

                mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(Cargar_Listado_ClavesTemporales));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(Cargar_Listado_ClavesTemporales));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
            }
            return mdl_ValorDevuelto_Modelo;
        }
        private void TareaAsincrona_Rellenar_Listado_ClavesTemporales_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                DataGridViewRow obj_DataGridViewRow;
                foreach (KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales in g_lst_KRS_Terminales_ClavesTemporales)
                {
                    //Se Cancelo la tarea asincrona #########################
                    if (((BackgroundWorker)sender).CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    //Añadir Fila con Columnas .............................
                    obj_DataGridViewRow = Transformar_Modelo_A_Row_ClavesTemporales(mdl_KRS_Terminales_ClavesTemporales, null);

                    ((BackgroundWorker)sender).ReportProgress(1, obj_DataGridViewRow);

                    //Application.DoEvents();
                    Thread.Sleep(1);
                }
            }
            catch (ThreadAbortException)
            {
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception)
            {
                e.Cancel = true;
            }
        }
        private void TareaAsincrona_Rellenar_Listado_ClavesTemporales_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows.Add((DataGridViewRow)e.UserState);
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_Listado_ClavesTemporales_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_ClavesTemporales(KRS_Terminales_ClavesTemporales _mdl_KRS_Terminales_ClavesTemporales, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Terminales.Exferia_DataGridView_Claves.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Terminales.Exferia_DataGridView_Claves);
            }

            obj_DataGridViewRow.Cells[0].Value = _mdl_KRS_Terminales_ClavesTemporales.id;
            obj_DataGridViewRow.Cells[1].Value = _mdl_KRS_Terminales_ClavesTemporales.clave;
            obj_DataGridViewRow.Cells[2].Value = _mdl_KRS_Terminales_ClavesTemporales.fechaCreacion;
            obj_DataGridViewRow.Cells[3].Value = _mdl_KRS_Terminales_ClavesTemporales.tiempoCaducidad_Minutos;

            return obj_DataGridViewRow;
        }

        public void ClavesTemporales_Actualizar_Registro(long _lng_idClaveTemporal, G_ENUM_TIPOACCION _enum_TipoAccion)
        {
            try
            {
                //Buscar el Registro en Base de datos
                KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales = g_obj_KRS_Terminales_ClavesTemporales_Datos.Obtener(_lng_idClaveTemporal);

                if (mdl_KRS_Terminales_ClavesTemporales != null)
                {
                    //Actualizar primero el List<> General ################################################################################
                    if (g_lst_KRS_Terminales_ClavesTemporales != null && g_lst_KRS_Terminales_ClavesTemporales.Count > 0)
                    {
                        KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales_BUSQUEDA = g_lst_KRS_Terminales_ClavesTemporales.Where(m => m.id.Equals(mdl_KRS_Terminales_ClavesTemporales.id)).FirstOrDefault();
                        if (mdl_KRS_Terminales_ClavesTemporales_BUSQUEDA != null)
                        {
                            g_lst_KRS_Terminales_ClavesTemporales[g_lst_KRS_Terminales_ClavesTemporales.FindIndex(m => m.id.Equals(mdl_KRS_Terminales_ClavesTemporales.id))] = mdl_KRS_Terminales_ClavesTemporales;
                        }
                        else
                        {
                            g_lst_KRS_Terminales_ClavesTemporales.Add(mdl_KRS_Terminales_ClavesTemporales);
                        }
                    }
                    else
                    {
                        if (g_lst_KRS_Terminales_ClavesTemporales == null)
                        {
                            g_lst_KRS_Terminales_ClavesTemporales = new List<KRS_Terminales_ClavesTemporales>();
                        }

                        g_lst_KRS_Terminales_ClavesTemporales.Add(mdl_KRS_Terminales_ClavesTemporales);
                    }

                    //Actualizar el DataGridView #####################################################################################
                    //Modificar
                    if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_MODIFICAR))
                    {
                        DataGridViewRow row = g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows
                                   .Cast<DataGridViewRow>()
                                   .Where(r => r.Cells[nameof(KRS_Terminales_ClavesTemporales.id)].Value.Equals(_lng_idClaveTemporal)).FirstOrDefault();

                        if (row != null)//Modificada
                        {
                            //Actualizar el Grid
                            Transformar_Modelo_A_Row_ClavesTemporales(mdl_KRS_Terminales_ClavesTemporales, row);
                        }
                    }
                    //Insertar
                    else if (_enum_TipoAccion.Equals(G_ENUM_TIPOACCION.INT_INSERTAR))
                    {
                        g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows.Insert(0, Transformar_Modelo_A_Row_ClavesTemporales(mdl_KRS_Terminales_ClavesTemporales, null));

                    }
                }
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(ClavesTemporales_Actualizar_Registro));
            }
        }
        public void ClavesTemporales_Borrar_Registro(List<long> _lst_idClavesTemporales)
        {
            try
            {
                //Borrar primero el List<> General ################################################################################
                if (g_lst_KRS_Terminales_ClavesTemporales != null && g_lst_KRS_Terminales_ClavesTemporales.Count > 0)
                {
                    List<KRS_Terminales_ClavesTemporales> lst_KRS_Terminales_ClavesTemporales_BUSQUEDA = g_lst_KRS_Terminales_ClavesTemporales.Where(m => _lst_idClavesTemporales.Contains(m.id)).ToList();
                    if (lst_KRS_Terminales_ClavesTemporales_BUSQUEDA != null && lst_KRS_Terminales_ClavesTemporales_BUSQUEDA.Count > 0)
                    {
                        foreach (KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales in lst_KRS_Terminales_ClavesTemporales_BUSQUEDA)
                        {
                            g_lst_KRS_Terminales_ClavesTemporales.Remove(mdl_KRS_Terminales_ClavesTemporales);
                        }
                    }
                }

                //Borrar del DataGridView
                List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows
                                .Cast<DataGridViewRow>()
                                .Where(r => _lst_idClavesTemporales.Contains(long.Parse(r.Cells[nameof(KRS_Terminales_ClavesTemporales.id)].Value.ToString()))).ToList();

                if (lst_DataGridViewRow != null && lst_DataGridViewRow.Count > 0)
                {
                    //Borrar del Grid
                    foreach (DataGridViewRow dgvr_Borrar in lst_DataGridViewRow)
                    {
                        g_frm_P_Terminales.Exferia_DataGridView_Claves.Rows.Remove(dgvr_Borrar);
                    }
                }

                g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Control_Errores)
            {
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(ClavesTemporales_Borrar_Registro));
            }
        }

        #region Borrar Datos CuentasBancarias
        public void BorrarDatos_ClavesTemporales(List<long> _lst_idClavesTemporales)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_Terminales.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(_lst_idClavesTemporales);

                    g_obj_TareaAsincrona_BorrarDatos_ClavesTemporales = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos_ClavesTemporales.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos_ClavesTemporales.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_CuentasBancarias_Completed);
                    g_obj_TareaAsincrona_BorrarDatos_ClavesTemporales.RunWorkerAsync(lst_Argumentos);

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }

                g_frm_P_Terminales.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(BorrarDatos_ClavesTemporales));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    //Argumentos
                    List<object> lst_Argumentos = (List<object>)e.Argument;
                    List<long> lst_idClaveTemporal = (List<long>)lst_Argumentos[0];

                    // Borrar 
                    mdl_ValorDevuelto_Modelo = g_obj_KRS_Terminales_ClavesTemporales_Datos.Borrar(lst_idClaveTemporal.FirstOrDefault());

                    //Si esta todo Correcto cierro transaccion
                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_ValorDevuelto_Modelo.Listado_Id = lst_idClaveTemporal;
                        mdl_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_ELIMINAR;
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();
                }
                catch (ThreadAbortException ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Control_Errores)
                {
                    transaccion_SQL.Dispose();

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                catch (Exception ex)
                {
                    transaccion_SQL.Dispose();

                    Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_DoWork));

                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
                }
                finally
                {
                    e.Result = mdl_ValorDevuelto_Modelo;
                }
            }
        }
        private void TareaAsincrona_BorrarDatos_CuentasBancarias_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Terminales.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    // Devolver al Listado el Row Borrar
                    List<object> lst_obj = new List<object>();
                    lst_obj.Add(Variables.G_STR_OPCION_KRS_TERMINALES);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Listado_Id);

                    g_frm_P_Terminales.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                    g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_CuentasBancarias_Completed));
            }
        }
        #endregion
        public int Generar_ClaveTemporal()
        {
            int int_NuevaClave = 0;
            Random de = new Random();
            int_NuevaClave = de.Next(0, 999999999);

            return int_NuevaClave;
        }
        public INTERNO_ValorDevuelto_Modelo Grabar_Nueva_ClaveTemporal(int? _int_TiempoCaducidad)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Creamos el objeto a grabar
            KRS_Terminales_ClavesTemporales mdl_KRS_Terminales_ClavesTemporales = new KRS_Terminales_ClavesTemporales();

            mdl_KRS_Terminales_ClavesTemporales.idTerminal = g_frm_P_Terminales.P_Base_id;
            mdl_KRS_Terminales_ClavesTemporales.clave = Convert.ToString(Generar_ClaveTemporal());
            mdl_KRS_Terminales_ClavesTemporales.fechaCreacion = DateTime.Now;
            mdl_KRS_Terminales_ClavesTemporales.utilizada = false;
            mdl_KRS_Terminales_ClavesTemporales.tiempoCaducidad_Minutos = _int_TiempoCaducidad;

            //Grabamos el modelo relleno
            mdl_ValorDevuelto_Modelo = g_obj_KRS_Terminales_ClavesTemporales_Datos.Grabar(mdl_KRS_Terminales_ClavesTemporales);

            return mdl_ValorDevuelto_Modelo;
        }
        public void Rellenar_Listado_ClavesTemporales()
        {
            //Rellenamos el listado general de las claves temporales con todos los registros para ese Terminal en base de datos
            g_lst_KRS_Terminales_ClavesTemporales = g_obj_KRS_Terminales_ClavesTemporales_Datos.Obtener_Listado_PorTerminal(g_frm_P_Terminales.P_Base_id, true);

            if (g_lst_KRS_Terminales_ClavesTemporales != null && g_lst_KRS_Terminales_ClavesTemporales.Count > 5)
            {
                Cargar_Listado_ClavesTemporales();
            }
        }
        public void Vaciar_Listado_ClavesTemporales()
        {
            //Si hay mas de 5 claves, las ordenamos por fecha (por si se han añadido recientemente) borramos las ultimas hasta mostrar solo 5 
            if (g_lst_KRS_Terminales_ClavesTemporales != null && g_lst_KRS_Terminales_ClavesTemporales.Count > 5)
            {
                g_lst_KRS_Terminales_ClavesTemporales = g_lst_KRS_Terminales_ClavesTemporales.OrderByDescending(m => m.fechaCreacion).ToList();
                g_lst_KRS_Terminales_ClavesTemporales.RemoveRange(5, (g_lst_KRS_Terminales_ClavesTemporales.Count - 5));

                Cargar_Listado_ClavesTemporales();
            }
        }
        #endregion

        #region Codigos Pausas
        public void Crear_Linea_CodigosPausa(KRS_Terminales_CodigosDispositivosBiometricos _mdl_KRS_Terminales_CodigosDispositivosBiometricos)
        {
            try
            {
                //Añadir control creado en subproceso en el hilo principal ...............................................
                if (g_frm_P_Terminales.InvokeRequired) // Line #1
                {
                    g_frm_P_Terminales.Invoke((MethodInvoker)delegate
                    {
                        Crear_Linea_CodigosPausa(_mdl_KRS_Terminales_CodigosDispositivosBiometricos);
                    });
                    return;
                }

                g_int_NumeroLineasCodigosPausas += 1;

                //Calcular tamaño el panel #######################
                int int_AnchoPanelprincipal = 407;
                if (g_frm_P_Terminales.Panel_Codigos_Pausas.Controls != null && g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Count > 0 && g_Array_ListadoLineasCodigosPausas.Count > 0)
                {
                    int_AnchoPanelprincipal = g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Find("controlusuario_CTU_P_Terminales_Codigos_Pausas" + g_Array_ListadoLineasCodigosPausas[0], false).FirstOrDefault().Width;
                }

                //Clonar el listado
                List<INTERNO_ComboBox_Modelo> lst_TiposPausas_INTERNO_ComboBox_Modelo = Funciones.Clonar(g_lst_TiposPausas_INTERNO_ComboBox_Modelo);

                //Objeto Personalizado
                CTU_P_Terminales_Codigos_Pausas controlusuario_CTU_P_Terminales_Codigos_Pausas = new CTU_P_Terminales_Codigos_Pausas(g_frm_P_Terminales, g_int_NumeroLineasCodigosPausas, lst_TiposPausas_INTERNO_ComboBox_Modelo, _mdl_KRS_Terminales_CodigosDispositivosBiometricos);
                controlusuario_CTU_P_Terminales_Codigos_Pausas.Name = "controlusuario_CTU_P_Terminales_Codigos_Pausas" + g_int_NumeroLineasCodigosPausas;
                controlusuario_CTU_P_Terminales_Codigos_Pausas.Size = new Size(int_AnchoPanelprincipal, 25);
                controlusuario_CTU_P_Terminales_Codigos_Pausas.Location = new Point(5, g_int_PosicionY_LineasCodigosPausas);
                controlusuario_CTU_P_Terminales_Codigos_Pausas.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
                controlusuario_CTU_P_Terminales_Codigos_Pausas.Boton_CTU_P_Terminales_Codigos_Pausas_Delete_Click += new System.EventHandler<INTERNO_EventArgs>(Boton_P_Terminales_Codigos_Pausas_Delete_Click);

                //Añadir al panel Principal
                g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Add(controlusuario_CTU_P_Terminales_Codigos_Pausas);
                g_Array_ListadoLineasCodigosPausas.Add(g_int_NumeroLineasCodigosPausas);

                //Sumar Posicion
                g_int_PosicionY_LineasCodigosPausas += controlusuario_CTU_P_Terminales_Codigos_Pausas.Height + 5;
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Terminales_Controladora) + "/" + nameof(Crear_Linea_CodigosPausa));
            }

        }
        private void Boton_P_Terminales_Codigos_Pausas_Delete_Click(object sender, INTERNO_EventArgs e)
        {
            g_frm_P_Terminales.P_Base_SeModificoDatosPantalla = true;

            CTU_P_Terminales_Codigos_Pausas obj_CTU_P_Terminales_Codigos_Pausas_Borrar = (CTU_P_Terminales_Codigos_Pausas)g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Find("controlusuario_CTU_P_Terminales_Codigos_Pausas" + e.NumeroObjeto, false).FirstOrDefault();
            if (obj_CTU_P_Terminales_Codigos_Pausas_Borrar != null)
            {
                obj_CTU_P_Terminales_Codigos_Pausas_Borrar.Dispose();

                g_Array_ListadoLineasCodigosPausas.Remove(e.NumeroObjeto);

                CTU_P_Terminales_Codigos_Pausas obj_aCambiar;
                foreach (int valoresaModificarposicion in g_Array_ListadoLineasCodigosPausas.Where(m => m > e.NumeroObjeto).ToList())
                {
                    obj_aCambiar = (CTU_P_Terminales_Codigos_Pausas)g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Find("controlusuario_CTU_P_Terminales_Codigos_Pausas" + valoresaModificarposicion, false).FirstOrDefault();

                    if (obj_aCambiar != null)
                    {
                        obj_aCambiar.Location = new Point(obj_aCambiar.Location.X, obj_aCambiar.Location.Y - (25 + 5));
                    }
                }

                g_int_PosicionY_LineasCodigosPausas -= (25 + 5);
            }
        }

        private List<KRS_Terminales_CodigosDispositivosBiometricos> Obtener_Lineas_CodigosDispositivosBiometricos(long _lng_idTerminal)
        {
            List<KRS_Terminales_CodigosDispositivosBiometricos> lst_KRS_Terminales_CodigosDispositivosBiometricos = new List<KRS_Terminales_CodigosDispositivosBiometricos>();
            CTU_P_Terminales_Codigos_Pausas obj_CTU_P_Terminales_Codigos_Pausas = null;

            int int_Orden = 1;

            foreach (int int_ValorLinea in g_Array_ListadoLineasCodigosPausas)
            {
                KRS_Terminales_CodigosDispositivosBiometricos mdl_KRS_Terminales_CodigosDispositivosBiometricos = new KRS_Terminales_CodigosDispositivosBiometricos();

                obj_CTU_P_Terminales_Codigos_Pausas = (CTU_P_Terminales_Codigos_Pausas)g_frm_P_Terminales.Panel_Codigos_Pausas.Controls.Find("controlusuario_CTU_P_Terminales_Codigos_Pausas" + int_ValorLinea, true).FirstOrDefault();

                if (obj_CTU_P_Terminales_Codigos_Pausas != null)
                {
                    // id
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.id = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_ID;

                    // idJornadaCabecera
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.idTerminal = _lng_idTerminal;

                    // codigoCliente
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.codigoCliente = Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO;

                    // codigoSalida = INICIO
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.codigoSalida = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_INICIO_VALOR;

                    // codigoEntrada = FIN
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.codigoEntrada = obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_FIN_VALOR;

                      // idPausaTipo
                    mdl_KRS_Terminales_CodigosDispositivosBiometricos.idPausaTipo = long.Parse(obj_CTU_P_Terminales_Codigos_Pausas.CTU_P_Terminales_Codigos_Pausas_PAUSA_VALOR);

                    //Añadir al Listado
                    lst_KRS_Terminales_CodigosDispositivosBiometricos.Add(mdl_KRS_Terminales_CodigosDispositivosBiometricos);

                    int_Orden += 1;
                }
            }

            return lst_KRS_Terminales_CodigosDispositivosBiometricos;
        }
        #endregion

    }
}
