using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Formularios;
using Exferia_General._0_Modelos;
using Exferia_General._1_Datos;
using Exferia_General._3_Vistas.Listados;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_General._3_Vistas.Controladoras
{
    public class P_Visor_SeguimientoSincronizacion_Controladora
    {
        #region Variables Generales
        private P_Visor_SeguimientoSincronizacion g_frm_P_Visor_SeguimientoSincronizacion = null;//Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando = null;

        //Clases
        private GEN_Terminales_Datos g_obj_GEN_Terminales_Datos = new GEN_Terminales_Datos();
        private SNC_SincronizacionSeguimiento_Datos g_obj_SNC_SincronizacionSeguimiento_Datos = new SNC_SincronizacionSeguimiento_Datos();

        #region Terminales

        //Tarea Asincrona para Rellenar los listado de Terminales en memoria
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos_Continua_Terminales = null;
        private bool g_bol_TareaAsincrona_CargarDatos_Continua_Terminales_EJECUTANDOSE = false;

        private INTERNO_OrdenarDataGridView_Columnas g_obj_INTERNO_OrdenarDataGridView_Columnas_Terminales = null;

        //Tarea Asincrona para la Rellenar DataGridView de Terminales
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales = null;
        private bool g_bol_TareaAsincrona_Rellenar_DataGrid_Terminales_CANCELAR = false;

        //Listado de Terminales
        public List<INTERNO_GEN_Terminales_Listado_Modelo> g_lst_INTERNO_GEN_Terminales_Listado_Modelo = null;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Terminales_Columnas;

        //Para el filtrado del listado de Terminales
        public ABS_Listado_GEN_Terminales_P_Visor_SeguimientoSincronizacion g_obj_ABS_Listado_GEN_Terminales_P_Visor_SeguimientoSincronizacion = new ABS_Listado_GEN_Terminales_P_Visor_SeguimientoSincronizacion();
        private int g_int_TotalRegistrosInsertados_Terminales = 0;
        private int g_int_TotalRegistros_Terminales = 0;

        #endregion

        #region Seguimiento
        //Tarea Asincrona para Rellenar los listado de Seguimiento en memoria
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento = null;
        private bool g_bol_TareaAsincrona_CargarDatos_Continua_Seguimiento_EJECUTANDOSE = false;

        private INTERNO_OrdenarDataGridView_Columnas g_obj_INTERNO_OrdenarDataGridView_Columnas_Seguimiento = null;

        private List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo> g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo = null;

        //Tarea Asincrona para la Rellenar DataGridView de Seguimiento
        private BackgroundWorker g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento;
        public bool g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = false;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Seguimiento_Columnas;

        //Filtrado del Listado 
        public List<string> g_lst_ColumnasAMostrar_Seguimiento = new List<string>();
        public ABS_Listado_SNC_SincronizacionSeguimiento_P_Visor_SeguimientoSincronizacion g_obj_ABS_Listado_SNC_SincronizacionSeguimiento_P_Visor_SeguimientoSincronizacion = new ABS_Listado_SNC_SincronizacionSeguimiento_P_Visor_SeguimientoSincronizacion();
        public Dictionary<string, object> g_dct_ListadoFiltros_Seguimiento = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_Seguimiento = 0;
        private int g_int_TotalRegistros_Seguimiento = 0;
        public List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_Filtros_Seguimiento = new List<INTERNO_ComboBox_Modelo>();
        #endregion

        #endregion

        #region Constructor
        public P_Visor_SeguimientoSincronizacion_Controladora(P_Visor_SeguimientoSincronizacion _frm_P_Visor_SeguimientoSincronizacion)
        {
            g_frm_P_Visor_SeguimientoSincronizacion = _frm_P_Visor_SeguimientoSincronizacion;

            //Ordenacion del datagridView Terminales
            g_obj_INTERNO_OrdenarDataGridView_Columnas_Terminales = new INTERNO_OrdenarDataGridView_Columnas(1,
                                                                                                            SortOrder.Ascending,
                                                                                                            2,
                                                                                                            SortOrder.Ascending);

            //Suguimiento orden
            g_obj_INTERNO_OrdenarDataGridView_Columnas_Seguimiento = new INTERNO_OrdenarDataGridView_Columnas(1,
                                                                                                           SortOrder.Descending,
                                                                                                           0,
                                                                                                           SortOrder.Ascending);
            
        }
        #endregion

        #region CARGAR DATOS INICIAL
        public void CargarDatos_Inicial()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que se termine
                g_frm_P_Visor_SeguimientoSincronizacion.Enabled = false;
                g_frm_P_Visor_SeguimientoSincronizacion.g_bol_BloquearPorCargaInicial_SEGUIMIENTO = true;

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

                BackgroundWorker obj_TareaAsincrona_CargarDatos_Inicial = new BackgroundWorker();
                obj_TareaAsincrona_CargarDatos_Inicial.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_Inicial_DoWork);
                obj_TareaAsincrona_CargarDatos_Inicial.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Inicial_Completed);
                obj_TareaAsincrona_CargarDatos_Inicial.WorkerReportsProgress = false;


                //Tarea Asincrona cargar datos###############################################################
                obj_TareaAsincrona_CargarDatos_Inicial.RunWorkerAsync();
                //###########################################################################################

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

                throw new Control_Errores("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(CargarDatos_Inicial), true);
            }
        }

        private void TareaAsincrona_CargarDatos_Inicial_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Obtener Terminales
                g_lst_INTERNO_GEN_Terminales_Listado_Modelo = g_obj_GEN_Terminales_Datos.Obtener_Registros_Para_Listado();

                //Obtener Seguimiento
                g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo = g_obj_SNC_SincronizacionSeguimiento_Datos.Obtener_Para_VisorSeguimientoSincronizacion(-1);

            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Inicial_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Inicial_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_Inicial_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_Visor_SeguimientoSincronizacion.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);
                        g_frm_P_Visor_SeguimientoSincronizacion.Salir_P_Base();
                    }
                }
                else
                {
                    //Rellenar DataGridView Terminales
                    Rellenar_DataGrid_Terminales("");

                    //CargarDatos_Continua_Terminales
                    g_frm_P_Visor_SeguimientoSincronizacion.g_timer_CargarDatos_Continua_Terminales.Start();

                    //CargarDatos_Continua_PartesNoAsignados
                    g_frm_P_Visor_SeguimientoSincronizacion.g_timer_CargarDatos_Continua_SEGUIMIENTO.Start();

                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Inicial_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Visor_SeguimientoSincronizacion.Salir_P_Base();
            }
            finally
            {
                g_frm_P_Visor_SeguimientoSincronizacion.g_bol_BloquearPorCargaInicial_SEGUIMIENTO = false;
            }
        }
        #endregion

        #region TERMINALES
        #region Cargar Datos Continua Terminales
        public void CargarDatos_Continua_Terminales(string _str_Buscar)
        {
            try
            {
                if (g_bol_TareaAsincrona_CargarDatos_Continua_Terminales_EJECUTANDOSE == false)
                {
                    g_bol_TareaAsincrona_CargarDatos_Continua_Terminales_EJECUTANDOSE = true;

                    if (g_obj_TareaAsincrona_CargarDatos_Continua_Terminales == null)
                    {
                        g_obj_TareaAsincrona_CargarDatos_Continua_Terminales = new BackgroundWorker();
                        g_obj_TareaAsincrona_CargarDatos_Continua_Terminales.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_Continua_Terminales_DoWork);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Terminales.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_Continua_Terminales_ProgressChanged);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Terminales.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Continua_Terminales_Completed);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Terminales.WorkerReportsProgress = true;
                    }

                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(_str_Buscar);
                    lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Terminales_PalabraCompleta.Checked);
                    lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Terminales_MayusculasMinusculas.Checked);

                    //Tarea Asincrona ###############################################################
                    g_obj_TareaAsincrona_CargarDatos_Continua_Terminales.RunWorkerAsync(lst_Argumentos);
                    //###########################################################################################
                }
            }
            catch (Exception ex)
            {
                g_bol_TareaAsincrona_CargarDatos_Continua_Terminales_EJECUTANDOSE = false;
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(CargarDatos_Continua_Terminales));
            }
        }

        private void TareaAsincrona_CargarDatos_Continua_Terminales_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_Ordenar_DataGridView = false;

            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];


                //Obtener Listado Terminales
                List<INTERNO_GEN_Terminales_Listado_Modelo> lst_INTERNO_GEN_Terminales_Listado_Modelo = g_obj_GEN_Terminales_Datos.Obtener_Registros_Para_Listado();
                if (lst_INTERNO_GEN_Terminales_Listado_Modelo == null)
                {
                    lst_INTERNO_GEN_Terminales_Listado_Modelo = new List<INTERNO_GEN_Terminales_Listado_Modelo>();
                }

                #region Terminales a Borrar
                if (g_lst_INTERNO_GEN_Terminales_Listado_Modelo != null && g_lst_INTERNO_GEN_Terminales_Listado_Modelo.Count > 0)
                {
                    List<long> lst_idTerminal_ABorrar = g_lst_INTERNO_GEN_Terminales_Listado_Modelo.Where(m => !lst_INTERNO_GEN_Terminales_Listado_Modelo.Select(x => x.id).ToList().Contains(m.id)).Select(a => a.id).ToList();

                    if (lst_idTerminal_ABorrar != null && lst_idTerminal_ABorrar.Count > 0)
                    {
                        //Borrar del Listado General
                        g_lst_INTERNO_GEN_Terminales_Listado_Modelo.RemoveAll(m => lst_idTerminal_ABorrar.Contains(m.id));

                        //Borrar del DataGridView
                        List<DataGridViewRow> lst_DataGridViewRow = g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows
                                                                                            .Cast<DataGridViewRow>()
                                                                                            .Where(r => lst_idTerminal_ABorrar.Contains(long.Parse(r.Cells[nameof(INTERNO_GEN_Terminales_Listado_Modelo.id)].Value.ToString()))).ToList();

                        if (lst_DataGridViewRow != null && lst_DataGridViewRow.Count > 0)
                        {
                            //Borrar del Grid
                            foreach (DataGridViewRow dgvr_Borrar in lst_DataGridViewRow)
                            {
                                //Borrar del DataGridView
                                ((BackgroundWorker)sender).ReportProgress(1, dgvr_Borrar);
                            }

                            //Barra de Progreso
                            g_int_TotalRegistros_Terminales -= lst_DataGridViewRow.Count;
                            g_int_TotalRegistrosInsertados_Terminales -= lst_DataGridViewRow.Count;

                            //Actualizar barra de Progreso
                            ((BackgroundWorker)sender).ReportProgress(4);
                        }
                    }
                }
                #endregion

                List<INTERNO_GEN_Terminales_Listado_Modelo> lst_Terminales_ActualizarOInsertar_DataGridView = new List<INTERNO_GEN_Terminales_Listado_Modelo>();
                #region Terminales a Insertar
                if (lst_INTERNO_GEN_Terminales_Listado_Modelo != null && lst_INTERNO_GEN_Terminales_Listado_Modelo.Count > 0)
                {
                    if (g_lst_INTERNO_GEN_Terminales_Listado_Modelo == null)
                    {
                        g_lst_INTERNO_GEN_Terminales_Listado_Modelo = new List<INTERNO_GEN_Terminales_Listado_Modelo>();
                    }

                    //Insertar los que no existan
                    List<INTERNO_GEN_Terminales_Listado_Modelo> lst_idTerminales_AInsertar = lst_INTERNO_GEN_Terminales_Listado_Modelo.Where(m => !g_lst_INTERNO_GEN_Terminales_Listado_Modelo.Select(x => x.id).ToList().Contains(m.id)).ToList();
                    if (lst_idTerminales_AInsertar != null && lst_idTerminales_AInsertar.Count > 0)
                    {
                        //Insertar en el listado general
                        g_lst_INTERNO_GEN_Terminales_Listado_Modelo.AddRange(lst_idTerminales_AInsertar);

                        //Añadir al listado final
                        lst_Terminales_ActualizarOInsertar_DataGridView.AddRange(lst_idTerminales_AInsertar);
                    }
                }
                #endregion

                #region Terminales a Actualizar
                if (lst_INTERNO_GEN_Terminales_Listado_Modelo != null && lst_INTERNO_GEN_Terminales_Listado_Modelo.Count > 0)
                {
                    foreach (INTERNO_GEN_Terminales_Listado_Modelo mdl_INTERNO_GEN_Terminales_Listado_Modelo_ACTUALIZAR in lst_INTERNO_GEN_Terminales_Listado_Modelo)
                    {
                        INTERNO_GEN_Terminales_Listado_Modelo mdl_INTERNO_GEN_Terminales_Listado_Modelo = g_lst_INTERNO_GEN_Terminales_Listado_Modelo.Where(m => m.id == mdl_INTERNO_GEN_Terminales_Listado_Modelo_ACTUALIZAR.id).FirstOrDefault();

                        //Nombre Diferente
                        if (mdl_INTERNO_GEN_Terminales_Listado_Modelo != null &&
                            !mdl_INTERNO_GEN_Terminales_Listado_Modelo.descripcion.Equals(mdl_INTERNO_GEN_Terminales_Listado_Modelo_ACTUALIZAR.descripcion))
                        {
                            g_lst_INTERNO_GEN_Terminales_Listado_Modelo[g_lst_INTERNO_GEN_Terminales_Listado_Modelo.IndexOf(mdl_INTERNO_GEN_Terminales_Listado_Modelo)] = mdl_INTERNO_GEN_Terminales_Listado_Modelo_ACTUALIZAR;

                            //Añadir al listado final
                            lst_Terminales_ActualizarOInsertar_DataGridView.Add(mdl_INTERNO_GEN_Terminales_Listado_Modelo_ACTUALIZAR);
                        }
                    }
                }
                #endregion

                #region Terminales Actualizar DataGridView
                if (lst_Terminales_ActualizarOInsertar_DataGridView != null &&
                    lst_Terminales_ActualizarOInsertar_DataGridView.Count > 0)
                {
                    bol_Ordenar_DataGridView = true;

                    //FILTRAR
                    lst_Terminales_ActualizarOInsertar_DataGridView = Terminales_Filtrar(lst_Terminales_ActualizarOInsertar_DataGridView, str_Buscar, bol_PalabraCompleta, bol_MayusculasMinusculas);

                    if (lst_Terminales_ActualizarOInsertar_DataGridView != null &&
                        lst_Terminales_ActualizarOInsertar_DataGridView.Count > 0)
                    {
                        foreach (INTERNO_GEN_Terminales_Listado_Modelo mdl_INTERNO_GEN_Terminales_Listado_Modelo in lst_Terminales_ActualizarOInsertar_DataGridView)
                        {

                            //Borrar del DataGridView
                            DataGridViewRow dgv_Fila = g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows
                                                                                                .Cast<DataGridViewRow>()
                                                                                                .Where(r => mdl_INTERNO_GEN_Terminales_Listado_Modelo.id == (long.Parse(r.Cells[nameof(INTERNO_GEN_Terminales_Listado_Modelo.id)].Value.ToString()))).FirstOrDefault();

                            //Actualizar
                            if (dgv_Fila != null)
                            {
                                //Añadir al DataGridView
                                Transformar_Modelo_A_Row_Terminales(mdl_INTERNO_GEN_Terminales_Listado_Modelo, dgv_Fila);
                            }
                            //Insertar
                            else
                            {
                                //Añadir al DataGridView
                                ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Terminales(mdl_INTERNO_GEN_Terminales_Listado_Modelo, null));

                                //Añadir al DataGridView
                                g_int_TotalRegistros_Terminales += 1;
                                g_int_TotalRegistrosInsertados_Terminales += 1;

                                //Actualizar barra de Progreso
                                ((BackgroundWorker)sender).ReportProgress(4);
                            }
                        }
                    }
                }
                #endregion

            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Continua_Terminales_DoWork));
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Continua_Terminales_DoWork));
            }
            e.Result = bol_Ordenar_DataGridView;
        }
        private void TareaAsincrona_CargarDatos_Continua_Terminales_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_Visor_SeguimientoSincronizacion.IsDisposed)
                {
                    //Borrar Registro DataGridView
                    if (e.ProgressPercentage == 1)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows.Remove((DataGridViewRow)e.UserState);
                    }
                    //Insertar Registro DataGridView
                    else if (e.ProgressPercentage == 2)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows.Add((DataGridViewRow)e.UserState);
                    }
                    //Actualizar Barra de Progreso
                    else if (e.ProgressPercentage == 4)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Terminales;
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Terminales;
                    }
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_CargarDatos_Continua_Terminales_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                //ordenar el Listado de Terminales
                if (e.Result != null &&
                    ((bool)e.Result))
                {
                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Sort(g_obj_INTERNO_OrdenarDataGridView_Columnas_Terminales);

                }
            }
            catch (Exception)
            { }
            finally
            {
                g_bol_TareaAsincrona_CargarDatos_Continua_Terminales_EJECUTANDOSE = false;
            }

        }
        #endregion

        #region Rellenar DataGrid Terminales
        public void Rellenar_DataGrid_Terminales(string _str_Buscar)
        {
            try
            {
                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales != null)
                {
                    g_bol_TareaAsincrona_Rellenar_DataGrid_Terminales_CANCELAR = true;
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Terminales_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Terminales_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Terminales_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.WorkerSupportsCancellation = true;
                }

                g_bol_TareaAsincrona_Rellenar_DataGrid_Terminales_CANCELAR = false;

                //Vaciar el Listado
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows.Clear();
                g_int_TotalRegistrosInsertados_Terminales = 0;
                g_int_TotalRegistros_Terminales = 0;
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Terminales;
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Terminales;

                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_Buscar);
                lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Terminales_PalabraCompleta.Checked);
                lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Terminales_MayusculasMinusculas.Checked);

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_Rellenar_DataGrid_Terminales.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(Rellenar_DataGrid_Terminales));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_Terminales_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumentos
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Buscar = (string)lst_Argumentos[0];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[1];
                bool bol_MayusculasMinusculas = (bool)lst_Argumentos[2];

                List<INTERNO_GEN_Terminales_Listado_Modelo> lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = new List<INTERNO_GEN_Terminales_Listado_Modelo>();

                #region Agregar Todos
                INTERNO_GEN_Terminales_Listado_Modelo mdl_INTERNO_GEN_Terminales_Listado_Modelo_TODOS = new INTERNO_GEN_Terminales_Listado_Modelo();
                mdl_INTERNO_GEN_Terminales_Listado_Modelo_TODOS.id = -1;
                mdl_INTERNO_GEN_Terminales_Listado_Modelo_TODOS.Tipo_AUX = 0;
                mdl_INTERNO_GEN_Terminales_Listado_Modelo_TODOS.descripcion = "TODOS";
                lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Add(mdl_INTERNO_GEN_Terminales_Listado_Modelo_TODOS);
                #endregion

                List<INTERNO_GEN_Terminales_Listado_Modelo> lst_INTERNO_GEN_Terminales_Listado_Modelo_Clonada = g_lst_INTERNO_GEN_Terminales_Listado_Modelo.AsQueryable().ToList();
                if (lst_INTERNO_GEN_Terminales_Listado_Modelo_Clonada != null && lst_INTERNO_GEN_Terminales_Listado_Modelo_Clonada.Count > 0)
                {
                    lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.AddRange(lst_INTERNO_GEN_Terminales_Listado_Modelo_Clonada.OrderBy(m => m.descripcion));
                }

                if (lst_INTERNO_GEN_Terminales_Listado_Modelo_Final != null && lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Count > 0)
                {
                    //FILTRAR
                    lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = Terminales_Filtrar(lst_INTERNO_GEN_Terminales_Listado_Modelo_Final, str_Buscar, bol_PalabraCompleta, bol_MayusculasMinusculas);

                    if (lst_INTERNO_GEN_Terminales_Listado_Modelo_Final != null && lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Count > 0)
                    {
                        g_int_TotalRegistros_Terminales = lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Count;

                        foreach (INTERNO_GEN_Terminales_Listado_Modelo mdl_INTERNO_GEN_Terminales_Listado_Modelo in lst_INTERNO_GEN_Terminales_Listado_Modelo_Final)
                        {
                            //Se Cancelo la tarea asincrona #########################
                            if (g_bol_TareaAsincrona_Rellenar_DataGrid_Terminales_CANCELAR)
                            {
                                return;
                            }

                            //Progreso
                            g_int_TotalRegistrosInsertados_Terminales += 1;


                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Terminales(mdl_INTERNO_GEN_Terminales_Listado_Modelo, null));

                            //Esperar un poco
                            Thread.Sleep(1);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Terminales_DoWork));
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Terminales_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Terminales_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de Terminales
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Terminales;
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Terminales.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Terminales;

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Terminales_Completed(object sender, RunWorkerCompletedEventArgs e)
        { }

        public DataGridViewRow Transformar_Modelo_A_Row_Terminales(INTERNO_GEN_Terminales_Listado_Modelo _mdl_INTERNO_GEN_Terminales_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Terminales_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                    if (dcm_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                    if (int_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = int_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                {
                    string str_Valor = (string)_mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_GEN_Terminales_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_GEN_Terminales_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        private List<INTERNO_GEN_Terminales_Listado_Modelo> Terminales_Filtrar(List<INTERNO_GEN_Terminales_Listado_Modelo> _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final, string _str_Buscar, bool _bol_PalabraCompleta, bool _bol_MayusculasMinusculas)
        {

            try
            {
                //Tiene Filtro
                if (_str_Buscar.Trim().Length > 0)
                {
                    //Palabra Completa
                    if (_bol_PalabraCompleta)
                    {
                        //Sencible a mayusculas y minusculas
                        if (_bol_MayusculasMinusculas)
                        {
                            _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Where(m => m.descripcion == _str_Buscar).ToList();
                        }
                        //No tiene en cuenta las mayusculas y las minusculas
                        else
                        {
                            _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Where(m => m.descripcion.ToUpper() == _str_Buscar.ToUpper()).ToList();
                        }
                    }
                    //Por Contenido
                    else
                    {
                        //Sencible a mayusculas y minusculas
                        if (_bol_MayusculasMinusculas)
                        {
                            _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Where(m => m.descripcion.Contains(_str_Buscar)).ToList();
                        }
                        //No tiene en cuenta las mayusculas y las minusculas
                        else
                        {
                            _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final = _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final.Where(m => m.descripcion.ToUpper().Contains(_str_Buscar.ToUpper())).ToList();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(Terminales_Filtrar));
            }

            return _lst_INTERNO_GEN_Terminales_Listado_Modelo_Final;
        }

        #endregion
        #endregion

        #region SEGUIMIENTO
        #region Cargar Datos Continua Seguimiento
        public void CargarDatos_Continua_Seguimiento(string _str_Buscar)
        {
            try
            {
                if (g_bol_TareaAsincrona_CargarDatos_Continua_Seguimiento_EJECUTANDOSE == false)
                {
                    g_bol_TareaAsincrona_CargarDatos_Continua_Seguimiento_EJECUTANDOSE = true;

                    if (g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento == null)
                    {
                        g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento = new BackgroundWorker();
                        g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_Continua_Seguimiento_DoWork);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_Continua_Seguimiento_ProgressChanged);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Continua_Seguimiento_Completed);
                        g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento.WorkerReportsProgress = true;
                    }

                    //parametros para Filtrar
                    List<object> lst_Argumentos = new List<object>();
                    lst_Argumentos.Add(_str_Buscar);
                    lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Visor_SeguimientoSincronizacion.Exferia_ComboBox_Seguimiento_Filtros.SelectedItem);
                    lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Seguimiento_MayusculasMinusculas.Checked);
                    lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Seguimiento_PalabraCompleta.Checked);

                    //Tarea Asincrona ###############################################################
                    g_obj_TareaAsincrona_CargarDatos_Continua_Seguimiento.RunWorkerAsync(lst_Argumentos);
                    //###########################################################################################
                }
            }
            catch (Exception ex)
            {
                g_bol_TareaAsincrona_CargarDatos_Continua_Seguimiento_EJECUTANDOSE = false;
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(CargarDatos_Continua_Seguimiento));
            }
        }

        private void TareaAsincrona_CargarDatos_Continua_Seguimiento_DoWork(object sender, DoWorkEventArgs e)
        {
            bool bol_Ordenar_DataGridView = false;

            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];


                //Obtener Listado Seguimiento
                long lng_UltimoId = -1;
                if (g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo!=null &&
                    g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Count>0)
                {
                    lng_UltimoId=g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Max(m => m.id);
                }
                List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo> lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo = g_obj_SNC_SincronizacionSeguimiento_Datos.Obtener_Para_VisorSeguimientoSincronizacion(lng_UltimoId);
                if (lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo == null)
                {
                    lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo = new List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo>();
                }

                List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo> lst_Seguimiento_ActualizarOInsertar_DataGridView = new List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo>();
                #region Seguimiento a Insertar
                if (lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo != null && lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Count > 0)
                {
                    if (g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo == null)
                    {
                        g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo = new List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo>();
                    }

                    //Insertar los que no existan
                    List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo> lst_Seguimiento_AInsertar = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Where(m => !g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Select(x => x.id).ToList().Contains(m.id)).ToList();
                    if (lst_Seguimiento_AInsertar != null && lst_Seguimiento_AInsertar.Count > 0)
                    {
                        //Insertar en el listado general
                        g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.AddRange(lst_Seguimiento_AInsertar);

                        //Añadir al listado final
                        lst_Seguimiento_ActualizarOInsertar_DataGridView.AddRange(lst_Seguimiento_AInsertar);
                    }
                }
                #endregion

                #region Seguimiento Actualizar DataGridView
                if (lst_Seguimiento_ActualizarOInsertar_DataGridView != null &&
                    lst_Seguimiento_ActualizarOInsertar_DataGridView.Count > 0)
                {
                    bol_Ordenar_DataGridView = true;

                    //FILTRAR
                    List<dynamic> lst_Filtrado = Seguimiento_Filtrar(str_Busqueda,
                                                                                            bol_PalabraCompleta,
                                                                                            bol_SensibilidadMayusMin,
                                                                                            mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado,
                                                                                            lst_Seguimiento_ActualizarOInsertar_DataGridView);


                    if (lst_Filtrado != null &&
                        lst_Filtrado.Count > 0)
                    {
                        foreach (dynamic dnm_Seguimiento in lst_Filtrado)
                        {
                            //Añadir al DataGridView
                            ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_Seguimiento(dnm_Seguimiento, null));

                            //Añadir al DataGridView
                            g_int_TotalRegistros_Seguimiento += 1;
                            g_int_TotalRegistrosInsertados_Seguimiento += 1;

                            //Actualizar barra de Progreso
                            ((BackgroundWorker)sender).ReportProgress(4);
                        }
                    }
                }
                #endregion

            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Continua_Seguimiento_DoWork));
            }
            catch (Control_Errores)
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Continua_Seguimiento_DoWork));
            }
            e.Result = bol_Ordenar_DataGridView;
        }
        private void TareaAsincrona_CargarDatos_Continua_Seguimiento_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_Visor_SeguimientoSincronizacion.IsDisposed)
                {
                    //Borrar Registro DataGridView
                    if (e.ProgressPercentage == 1)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Rows.Remove((DataGridViewRow)e.UserState);
                    }
                    //Insertar Registro DataGridView
                    else if (e.ProgressPercentage == 2)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Rows.Add((DataGridViewRow)e.UserState);
                    }
                    //Actualizar Barra de Progreso
                    else if (e.ProgressPercentage == 4)
                    {
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Seguimiento;
                        g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Seguimiento;
                    }
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_CargarDatos_Continua_Seguimiento_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                //ordenar el Listado de Seguimiento
                if (e.Result != null &&
                    ((bool)e.Result))
                {
                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Sort(g_obj_INTERNO_OrdenarDataGridView_Columnas_Seguimiento);

                }
            }
            catch (Exception)
            { }
            finally
            {
                g_bol_TareaAsincrona_CargarDatos_Continua_Seguimiento_EJECUTANDOSE = false;
            }

        }
        #endregion

        #region Rellenar DataGridView Seguimiento

        public void Rellenar_DataGrid_Seguimiento(string _str_filtro)
        {
            try
            {

                if (g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento != null)
                {
                    g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = true;
                    while (g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.IsBusy)
                    {
                        Application.DoEvents();
                    }
                    g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = false;
                }
                else
                {
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento = new BackgroundWorker();
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_Seguimiento_DoWork);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_Seguimiento_ProgressChanged);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_Seguimiento_Completed);
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.WorkerReportsProgress = true;
                    g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Rows.Clear();
                g_int_TotalRegistrosInsertados_Seguimiento = 0;
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Total = 0;
                g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Actualizar = 0;

                //parametros para Filtrar
                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_str_filtro);
                lst_Argumentos.Add((INTERNO_ComboBox_Modelo)g_frm_P_Visor_SeguimientoSincronizacion.Exferia_ComboBox_Seguimiento_Filtros.SelectedItem);
                lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Seguimiento_MayusculasMinusculas.Checked);
                lst_Argumentos.Add(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_CheckBox_Seguimiento_PalabraCompleta.Checked);

                //Llamar a la tarea asincrona
                g_obj_TareaAsincrona_Rellenar_DataGrid_Seguimiento.RunWorkerAsync(lst_Argumentos);
            }
            catch (Control_Errores ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(Rellenar_DataGrid_Seguimiento));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(Rellenar_DataGrid_Seguimiento));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSLISTADO());
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Seguimiento_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Datos Recibidos ..................................................
                List<object> lst_Argumentos = (List<object>)e.Argument;
                string str_Busqueda = (string)lst_Argumentos[0];
                INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado = (INTERNO_ComboBox_Modelo)lst_Argumentos[1];
                bool bol_SensibilidadMayusMin = (bool)lst_Argumentos[2];
                bool bol_PalabraCompleta = (bool)lst_Argumentos[3];

                //Listado de la tabla
                List<dynamic> lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = Seguimiento_Filtrar(str_Busqueda,
                                                                                bol_PalabraCompleta,
                                                                                bol_SensibilidadMayusMin,
                                                                                mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado,
                                                                                g_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo);

                if (lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS != null &&
                    lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Count > 0)
                {
                    //Ordenar
                    lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.OrderByDescending(m => m.GetType().GetProperty(nameof(INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.id)).GetValue(m, null)).ToList();

                    g_int_TotalRegistros_Seguimiento = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Count;

                    foreach (dynamic obj_Dinamico in lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS)
                    {
                        //Se Cancelo la tarea asincrona ---------------------------
                        if (g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento)
                        {
                            return;
                        }

                        //Llamar al Progress
                        g_int_TotalRegistrosInsertados_Seguimiento += 1;

                        ((BackgroundWorker)sender).ReportProgress(1, Transformar_Modelo_A_Row_Seguimiento(obj_Dinamico, null));

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

                }
            }
            catch (ThreadAbortException ex)
            {
                g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Seguimiento_DoWork));
            }
            catch (Control_Errores ex)
            {
                g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Seguimiento_DoWork));
            }
            catch (Exception ex)
            {
                g_bol_Cancelar_TareaAsincrona_Rellenar_DataGrid_Seguimiento = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Visor_SeguimientoSincronizacion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_Seguimiento_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Seguimiento_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (!g_frm_P_Visor_SeguimientoSincronizacion.IsDisposed)
                {
                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Rows.Add((DataGridViewRow)e.UserState);

                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Total = g_int_TotalRegistros_Seguimiento;
                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_BarraProgreso_Seguimiento.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_Seguimiento;
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_Seguimiento_Completed(object sender, RunWorkerCompletedEventArgs e)
        {

            try
            {
                //ordenar el Listado de Seguimiento
                if (e.Result != null &&
                    ((bool)e.Result))
                {
                    g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.Sort(g_obj_INTERNO_OrdenarDataGridView_Columnas_Seguimiento);

                }
            }
            catch (Exception)
            { }
        }

        private List<dynamic> Seguimiento_Filtrar(string _str_Busqueda,
                                                bool _bol_PalabraCompleta,
                                                bool _bol_SensibilidadMayusMin,
                                                INTERNO_ComboBox_Modelo _mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado,
                                                List<INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo> _lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo)
        {
            List<dynamic> lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = null;

            try
            {
                if (_lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo != null && _lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Count > 0)
                {
                    //Filtrar #############################################
                    if (_str_Busqueda.Trim().Length > 0 || g_dct_ListadoFiltros_Seguimiento.Count > 0)
                    {
                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = _lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Cast<dynamic>().ToList();

                        //Hay algo Escrito en busqueda -------------------------------------------------------------------------------------------------------------------
                        if (_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado != null && _str_Busqueda.Trim().Length > 0)
                        {
                            //Todos
                            if (_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador.Equals("-1"))
                            {
                                List<dynamic> lst_TodosFiltrado = new List<dynamic>();
                                foreach (INTERNO_ComboBox_Modelo mdl_INTERNO_ComboBox_Modelo_Filtros in g_lst_INTERNO_ComboBox_Modelo_Filtros_Seguimiento)
                                {
                                    //Palabra Completa
                                    if (_bol_PalabraCompleta)
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (_bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null).ToString() == _str_Busqueda).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null).ToString().ToUpper() == _str_Busqueda.ToUpper()).ToList());
                                        }
                                    }
                                    //Por Contenido
                                    else
                                    {
                                        //Sencible a mayusculas y minusculas
                                        if (_bol_SensibilidadMayusMin)
                                        {
                                            lst_TodosFiltrado.AddRange(lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null).ToString().Contains(_str_Busqueda)).ToList());
                                        }
                                        //No tiene en cuenta las mayusculas y las minusculas
                                        else
                                        {
                                            lst_TodosFiltrado.AddRange(lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(mdl_INTERNO_ComboBox_Modelo_Filtros.Identificador).GetValue(m, null).ToString().ToUpper().Contains(_str_Busqueda.ToUpper())).ToList());
                                        }
                                    }
                                }
                                //Añadir al Listado Final
                                lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_TodosFiltrado.Distinct().ToList();
                            }
                            //Campo seleccionado
                            else
                            {
                                //Palabra Completa
                                if (_bol_PalabraCompleta)
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (_bol_SensibilidadMayusMin)
                                    {
                                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null).ToString() == _str_Busqueda).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null).ToString().ToUpper() == _str_Busqueda.ToUpper()).ToList();
                                    }
                                }
                                //Por Contenido
                                else
                                {
                                    //Sencible a mayusculas y minusculas
                                    if (_bol_SensibilidadMayusMin)
                                    {
                                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null).ToString().Contains(_str_Busqueda)).ToList();
                                    }
                                    //No tiene en cuenta las mayusculas y las minusculas
                                    else
                                    {
                                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null) != null && m.GetType().GetProperty(_mdl_INTERNO_ComboBox_Modelo_FiltrosSeleccionado.Identificador).GetValue(m, null).ToString().ToUpper().Contains(_str_Busqueda.ToUpper())).ToList();
                                    }
                                }
                            }
                        }

                        //Filtros Avanzados
                        if (g_dct_ListadoFiltros_Seguimiento != null && g_dct_ListadoFiltros_Seguimiento.Count > 0)
                        {
                            lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = Funciones_Listado.Filtrar_Listado(lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS, g_obj_ABS_Listado_SNC_SincronizacionSeguimiento_P_Visor_SeguimientoSincronizacion, g_dct_ListadoFiltros_Seguimiento);
                        }
                    }
                    else
                    {
                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = _lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.Cast<dynamic>().ToList();
                    }

                    //Filtrar por Tecnico
                    if (lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS != null &&
                        lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Count > 0)
                    {
                        long lng_idTerminalSeleccionado = 0;
                        if (g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows != null &&
                            g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.Rows.Count > 0 &&
                            g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.SelectedRows != null &&
                            g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.SelectedRows.Count > 0)
                        {
                            lng_idTerminalSeleccionado = long.Parse(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Terminales.SelectedRows[0].Cells[nameof(INTERNO_GEN_Terminales_Listado_Modelo.id)].Value.ToString());
                        }

                        if (lng_idTerminalSeleccionado != -1)
                        {
                            lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS = lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS.Where(m => m.GetType().GetProperty(nameof(INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.idTerminal)).GetValue(m, null) != null && m.GetType().GetProperty(nameof(INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.idTerminal)).GetValue(m, null).ToString() == (lng_idTerminalSeleccionado.ToString())).ToList();
                        }
                    }
                }
            }
            catch (Exception)
            { }

            return lst_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo_FILTRADOS;
        }
        #endregion

        public DataGridViewRow Transformar_Modelo_A_Row_Seguimiento(INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo _mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Visor_SeguimientoSincronizacion.Exferia_DataGridView_Seguimiento);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Seguimiento_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                    if (dcm_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                    if (int_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = int_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                {
                    string str_Valor = (string)_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_SNC_SincronizacionSeguimiento_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        #endregion

    }
}
