using Exferia_Aplicacion.General;
using Exferia_CRM._0_Modelos;
using Exferia_CRM._1_Datos;
using Exferia_CRM._3_Vistas;
using Exferia_CRM._3_Vistas.ControlesPersonalizados_DentroPanales;
using Exferia_EntityFramework;
using Exferia_Formularios;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;

namespace Exferia_CRM._3_Vistas.Controladoras
{
    public class P_Encuestas_Historico_Controladora
    {
        #region Variables Generales
        private P_Encuestas_Historico g_frm_P_Encuestas_Historico = null; //Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando;//Pantalla de Espera para cuando se ejecutan tareas pesadas como cargar, grabar...

        //Clases de Negocio Necesarias para la carga de datos
        private CRMH_Encuestas_Datos g_obj_CRMH_Encuestas_Datos = new CRMH_Encuestas_Datos();
        private CRM_Encuestas_Datos g_obj_CRM_Encuestas_Datos = new CRM_Encuestas_Datos();
        
        public List<CRMH_Encuestas> g_lst_CRMH_Encuestas = null;//Modelo de los datos del terminales potencial, cargados

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

        public string g_str_GUID_DatosRecibidos = "";
        public long g_lng_idEmpleado_DatosRecibidos = -1;
        public long? g_lng_idTerminal_DatosRecibidos = null;
        public long g_lng_idClientePotencial_DatosRecibidos = -1;
        public long g_lng_idEncuesta_DatosRecibidos = -1;
        public string g_str_FechaHora_DatosRecibidos="" ;

        //Encuestas #################################
        public string g_str_EncuestasFiltro = "";
        public int g_int_TipoBusquedaEncuestas = 0;
        public bool g_bol_EncuestasBloqueadoBusqueda = false;
        private BackgroundWorker g_obj_TareaAsincrona_Buscar_Encuestas;

        //Tarea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;

        //Tarea 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;

        //Tarea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;
        private bool g_bol_BorrarDatos_VolverListado = true;
        #endregion

        public P_Encuestas_Historico_Controladora(P_Encuestas_Historico _frm_P_Encuestas_Historico)
        {
            g_frm_P_Encuestas_Historico = _frm_P_Encuestas_Historico;

            g_bol_Termino_CargaDatos_Inicial = true;
        }

        public void VaciarDatos()
        {
            g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Id = -1;
            g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Codigo = "";
            g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Descripcion = "";
            g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_FechaBorrado = null;

            g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Id = -1;
            g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Codigo = "";
            g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Descripcion = "";
            g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_FechaBorrado = null;

            g_frm_P_Encuestas_Historico.Exferia_TextBox_ConMascara_Hora.Text = "";

            g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Clear();

            g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = "";

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
            if (g_frm_P_Encuestas_Historico.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_Encuestas_Historico.P_Base_TituloPantalla = (g_frm_P_Encuestas_Historico.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_Encuestas_Historico.Tag.ToString());
            //#################################################################################################

            g_lst_CRMH_Encuestas = null;
        }

        public bool ComprobarCambios()
        {
            if (g_frm_P_Encuestas_Historico.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;
        }

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Encuestas_Historico.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)
                {
                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();
                }
                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;
                }

                //Vaciar
                VaciarDatos();

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

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_Encuestas_Historico.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_Encuestas_Historico_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_Encuestas_Historico.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch (ThreadAbortException ex)
            {
                Thread.ResetAbort();

                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_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_Encuestas_Historico_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
            { }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_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_Encuestas_Historico.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_Encuestas_Historico.Salir_P_Base();
                    }
                }
                else
                {
                    CargarDatosAuxiliar_Encuestas(-1, g_lst_CRMH_Encuestas.First().CRM_Encuestas, g_lst_CRMH_Encuestas);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Encuestas_Historico.Salir_P_Base();
            }
            finally
            {
                //Hacemos foco en el primer control
                g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Foco_Codigo();
            }
        }

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

            g_lst_CRMH_Encuestas = g_obj_CRMH_Encuestas_Datos.Obtener_Registro(g_str_GUID_DatosRecibidos, 
                                                                                 g_lng_idClientePotencial_DatosRecibidos,
                                                                                 g_lng_idEmpleado_DatosRecibidos,
                                                                                 g_lng_idEncuesta_DatosRecibidos);

            try
            {
                if (g_lst_CRMH_Encuestas != null && g_lst_CRMH_Encuestas.Count > 0)
                {
                    //Fecha Hora 
                    g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_lst_CRMH_Encuestas[0].fechaHora.ToString("dd/MM/yyyy");
                    g_frm_P_Encuestas_Historico.Exferia_TextBox_ConMascara_Hora.Text = g_lst_CRMH_Encuestas[0].fechaHora.ToString("HH:mm");


                    //Exferia_F3_ClientePotencial
                    g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Id = g_lst_CRMH_Encuestas.First().CRM_ClientesPotenciales.id;
                    g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Codigo = g_lst_CRMH_Encuestas.First().CRM_ClientesPotenciales.codigo;
                    g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Descripcion = g_lst_CRMH_Encuestas.First().CRM_ClientesPotenciales.razonSocial;
                    g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_FechaBorrado = g_lst_CRMH_Encuestas.First().CRM_ClientesPotenciales.fechaBorrado;

                    //Exferia_F3_Encuesta
                    g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Id = g_lst_CRMH_Encuestas.First().CRM_Encuestas.id;
                    g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Codigo = g_lst_CRMH_Encuestas.First().CRM_Encuestas.codigo;
                    g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Descripcion = g_lst_CRMH_Encuestas.First().CRM_Encuestas.descripcion;
                    g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_FechaBorrado = g_lst_CRMH_Encuestas.First().CRM_Encuestas.fechaBorrado;

                    //Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle != null &&
                       g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                       g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de campos
                        string[] arr_Campos = g_frm_P_Encuestas_Historico.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_Encuestas_Historico.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Encuestas_Historico.P_Base_TituloPantalla = (g_frm_P_Encuestas_Historico.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_lst_CRMH_Encuestas;
                        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
                            CRMH_Encuestas mdl_CRMH_Encuestas_Auxiliar = g_lst_CRMH_Encuestas.First();
                            if (str_campo.Equals(nameof(mdl_CRMH_Encuestas_Auxiliar.fechaHora)))
                            {
                                str_MenuSuperior_Codigo = mdl_CRMH_Encuestas_Auxiliar.fechaHora.ToString("dd/MM/yyyy");
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Encuestas_Historico.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_Encuestas_Historico.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Encuestas_Historico.P_Base_SeModificoDatosPantalla = false;

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

            return bol_ValorDevuelto;
        }
        #endregion

        public void CargarDatosAuxiliar_Encuestas(long _lng_id, CRM_Encuestas _mdl_CRM_Encuestas, List<CRMH_Encuestas> _lst_CRMH_Encuestas)
        {
            //Vaciamos el panel
            g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Clear();

            if(_mdl_CRM_Encuestas == null)
            {
                _mdl_CRM_Encuestas = g_obj_CRM_Encuestas_Datos.Obtener_Registro(_lng_id);
            }

            try
            {
                if (_mdl_CRM_Encuestas != null)
                {
                    if (_mdl_CRM_Encuestas.CRM_EncuestasPreguntas != null)
                    {
                        int int_numeroLineas = 0;
                        int int_posicionY = 5;
                        foreach (CRM_EncuestasPreguntas mdl_CRM_EncuestasPreguntas in _mdl_CRM_Encuestas.CRM_EncuestasPreguntas.OrderBy(m => m.orden))
                        {
                            if (mdl_CRM_EncuestasPreguntas.fechaBorrado == null)
                            {
                                int_numeroLineas++;

                                //Calcular el tamaño del panel ##################################
                                int int_AnchoPanelPrincipal = (625 * g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Width) / 634;
                                if (g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Count > 0)
                                {
                                    int_AnchoPanelPrincipal = g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Find("controlusuario_CTU_P_Liquidaciones_Encuestas"+ (int_numeroLineas-1), false).FirstOrDefault().Width;
                                }

                                //Objeto Personalizado
                                int int_posicionRelativa = int_posicionY + (g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.DisplayRectangle.Y + 5);
                                CTU_P_Liquidaciones_Encuestas controlusuario_CTU_P_Liquidaciones_Encuestas = new CTU_P_Liquidaciones_Encuestas(int_numeroLineas, mdl_CRM_EncuestasPreguntas, _lst_CRMH_Encuestas, g_frm_P_Encuestas_Historico.P_Base_TipoAperturaPantalla, g_str_GUID_DatosRecibidos);
                                controlusuario_CTU_P_Liquidaciones_Encuestas.Name = "controlusuario_CTU_P_Liquidaciones_Encuestas" + int_numeroLineas;
                                controlusuario_CTU_P_Liquidaciones_Encuestas.Size = new System.Drawing.Size(int_AnchoPanelPrincipal, 180);
                                controlusuario_CTU_P_Liquidaciones_Encuestas.Location = new System.Drawing.Point(5, int_posicionRelativa);
                                controlusuario_CTU_P_Liquidaciones_Encuestas.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);

                                //Añadir al panel Principal
                                g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Add(controlusuario_CTU_P_Liquidaciones_Encuestas);

                                int_posicionY += (180 + 5);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(CargarDatosAuxiliar_Encuestas));
            }
        }

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

                g_frm_P_Encuestas_Historico.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)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_Encuestas_Historico.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_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((List<CRMH_Encuestas>)mdl_ValorDevuelto_Modelo_VALIDACION.Objeto_Auxiliar_1);
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();

            }
            catch (Control_Errores)
            {
                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_Encuestas_Historico_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)
        {
            //Quitar Pantalla de Espera
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear Formulario
            g_frm_P_Encuestas_Historico.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_Encuestas_Historico, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }
                }
                else
                {
                    if (g_frm_P_Encuestas_Historico.P_Base_PantallaOrigen != null)
                    {
                        //Devolver al Listado el Row Añadidod/Modificado
                        List<object> lst_obj = new List<object>();
                        lst_obj.Add(g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle.opcion);

                        lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Objeto);

                        g_frm_P_Encuestas_Historico.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);

                        g_frm_P_Encuestas_Historico.P_Base_SeModificoDatosPantalla = false;
                    }

                    g_frm_P_Encuestas_Historico.Close();

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }
        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {

                //El ClientePotencial no puede estar vacio (obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Codigo.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                //Si hay ClientePotencial Validar que es correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                //La encuesta no puede estar vacio (obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Codigo.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                //Si hay Encuesta Validar que es correcto
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La fecha de alta no puede estar vacia y debe ser correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha;
                    }
                }

                //Obtener el Listado de Encuestas con sus respuestas
                List<CRMH_Encuestas> lst_CRMH_Encuestas_New = Obtener_EncuestasPanel();
                if (lst_CRMH_Encuestas_New == null || lst_CRMH_Encuestas_New.Count == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_ENCUESTAHISTORICO_VALIDACION_DATOSVACIOS(g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle.descripcion_Singular);
                }
                else
                {
                    mdl_ValorDevuelto_Modelo.Objeto_Auxiliar_1 = lst_CRMH_Encuestas_New;
                }
                
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_lst_CRMH_Encuestas == null)
                    {
                        //Validamos finalmente que para ese cliente no hay mas encuestas iguales
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = g_obj_CRMH_Encuestas_Datos.Comprobar_Encuesta_Repetida(g_str_GUID_DatosRecibidos, g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Id, g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Id);

                        if (!mdl_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_VALIDACION_ENCUESTA_REPETIDA_CLIENTE();
                        }
                    }
                }
            }
            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_Encuestas_Historico_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(List<CRMH_Encuestas> _lst_CRMH_Encuestas)
        {
            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))
            {
                try
                {
                    //Borrar Registros antiguos (Se hace con un listado dentro de otro, poruqe se usa la misma funcion del borrado externo del listado y se pueden borrar varios registros a la vez)
                    List<object> lst_Objetos = new List<object>();
                    lst_Objetos.Add(g_lng_idClientePotencial_DatosRecibidos);
                    lst_Objetos.Add(g_lng_idEmpleado_DatosRecibidos);
                    lst_Objetos.Add(g_lng_idEncuesta_DatosRecibidos);
                    lst_Objetos.Add(g_str_FechaHora_DatosRecibidos);
                    lst_Objetos.Add(g_str_GUID_DatosRecibidos);

                    List<List<object>> lst_ListadoObjetos = new List<List<object>>();
                    lst_ListadoObjetos.Add(lst_Objetos);

                    //Borro
                    mdl_ValorDevuelto_Modelo = g_obj_CRMH_Encuestas_Datos.Borrar(lst_ListadoObjetos);

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        //Actualizar Preguntas
                        foreach (CRMH_Encuestas mdl_CRM_Encuestas in _lst_CRMH_Encuestas)
                        {
                            mdl_ValorDevuelto_Modelo = g_obj_CRMH_Encuestas_Datos.Grabar(mdl_CRM_Encuestas);
                            if (mdl_ValorDevuelto_Modelo.TodoCorrecto == false)
                            {
                                transaccion_SQL.Dispose();
                                return mdl_ValorDevuelto_Modelo;
                            }
                        }

                        if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            //Modificando
                            if (g_frm_P_Encuestas_Historico.P_Base_TipoAperturaPantalla == 1)
                            {
                                mdl_ValorDevuelto_Modelo.TipoAccion = Enumerados.G_ENUM_TIPOACCION.INT_MODIFICAR;
                            }
                            else
                            {
                                mdl_ValorDevuelto_Modelo.TipoAccion = Enumerados.G_ENUM_TIPOACCION.INT_INSERTAR;
                            }


                            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_Encuestas_Historico_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
        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_Encuestas_Historico.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_Encuestas_Historico.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_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_Encuestas_Historico_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_Encuestas_Historico_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)
        {
            //Quitar Pantalla de Espera
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            //Desbloquear Formulario
            g_frm_P_Encuestas_Historico.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
                {
                    if (g_frm_P_Encuestas_Historico.P_Base_PantallaOrigen != null)
                    {
                        List<object> lst_obj = new List<object>();
                        lst_obj.Add(g_frm_P_Encuestas_Historico.g_mdl_PRV_OpcionesDetalle.opcion);
                        lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Objeto);

                        g_frm_P_Encuestas_Historico.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    g_frm_P_Encuestas_Historico.Close();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();

            try
            {
                List<List<object>> lst_Objetos = new List<List<object>>();
                List<object> lst_ids_Encuestas = new List<object>();
               
                lst_ids_Encuestas.Add(g_lng_idClientePotencial_DatosRecibidos);
                lst_ids_Encuestas.Add(g_lng_idEmpleado_DatosRecibidos);
                lst_ids_Encuestas.Add(g_lng_idEncuesta_DatosRecibidos);
                lst_ids_Encuestas.Add(g_str_FechaHora_DatosRecibidos);
                lst_ids_Encuestas.Add(g_str_GUID_DatosRecibidos);

                lst_Objetos.Add(lst_ids_Encuestas);
                
                mdl_ValorDevuelto_Modelo = g_obj_CRMH_Encuestas_Datos.Borrar(lst_Objetos);

                //Si se borro todo Correcto, guardo los idas para actualizar el Listado
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    mdl_ValorDevuelto_Modelo.Objeto = lst_Objetos;
                }
            }
            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_Encuestas_Historico_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 Encuestas
        public void BuscarEncuestas(string _str_filtro)
        {
            try
            {
                g_frm_P_Encuestas_Historico.Enabled = false;
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_CARGANDODATOS());

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

                g_obj_TareaAsincrona_Buscar_Encuestas = new BackgroundWorker();
                g_obj_TareaAsincrona_Buscar_Encuestas.DoWork += new DoWorkEventHandler(TareaAsincrona_Buscar_Encuestas_DoWork);
                g_obj_TareaAsincrona_Buscar_Encuestas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Buscar_Encuestas_Completed);
                g_obj_TareaAsincrona_Buscar_Encuestas.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_Encuestas_Historico.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(BuscarEncuestas));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_Buscar_Encuestas_DoWork (object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Error = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo_Error.TodoCorrecto = true;

            try
            {
                //Argumentos
                List<object> listadoArgumentos = (List<object>)e.Argument;
                string str_filtro = (string)listadoArgumentos[0];
                
                CRM_Encuestas mdl_CRM_Encuestas = g_obj_CRM_Encuestas_Datos.Obtener_Registro_PorFiltros(str_filtro);

                //Valores a devolver
                List<object> lst_ValoreADevolver = new List<object>();
                lst_ValoreADevolver.Add(mdl_CRM_Encuestas);

                mdl_ValorDevuelto_Modelo_Error.Objeto = lst_ValoreADevolver;
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_Buscar_Encuestas_DoWork));

                mdl_ValorDevuelto_Modelo_Error.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo_Error.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo_Error.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo_Error.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_Buscar_Encuestas_DoWork));

                mdl_ValorDevuelto_Modelo_Error.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo_Error.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo_Error;
            }
            
        }
        private void TareaAsincrona_Buscar_Encuestas_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                g_frm_P_Encuestas_Historico.Enabled = true;

                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                if(mdl_ValorDevuelto_Modelo_Resultado != null && mdl_ValorDevuelto_Modelo_Resultado.Objeto !=null)
                {
                    List<object> lst_ValoresADevolver = (List<object>)mdl_ValorDevuelto_Modelo_Resultado.Objeto;

                    if(lst_ValoresADevolver[0] != null)
                    {
                        CRM_Encuestas mdl_CRM_Encuestas = (CRM_Encuestas)lst_ValoresADevolver[0];
                        if(mdl_CRM_Encuestas != null)
                        {
                            //Cargar Datos de la Encuesta
                            CargarDatosAuxiliar_Encuestas(mdl_CRM_Encuestas.id, null, null);
                        }
                        else
                        {
                            g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Clear();
                        }
                    }
                }

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

                Control_Errores.Errores_Log("", ex, nameof(P_Encuestas_Historico_Controladora) + "/" + nameof(TareaAsincrona_Buscar_Encuestas_Completed));
            }
        }
        #endregion

        private List<CRMH_Encuestas> Obtener_EncuestasPanel()
        {
            List<CRMH_Encuestas> lst_CRMH_Encuestas = new List<CRMH_Encuestas>();

            CTU_P_Liquidaciones_Encuestas obj_CTU_P_Liquidaciones_Encuestas = null;

            for(int int_Contador = 1; int_Contador <= g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Count; int_Contador++)
            {
                //Objeto Preguntas
                obj_CTU_P_Liquidaciones_Encuestas = (CTU_P_Liquidaciones_Encuestas)g_frm_P_Encuestas_Historico.Exferia_Panel_PreguntasRespuestas.Controls.Find("controlusuario_CTU_P_Liquidaciones_Encuestas" + int_Contador, false).FirstOrDefault();

                if(obj_CTU_P_Liquidaciones_Encuestas != null)
                {
                    foreach(CRMH_Encuestas mdl_CRMH_Encuestas_AUX in obj_CTU_P_Liquidaciones_Encuestas.Devolver_Datos())
                    {
                        mdl_CRMH_Encuestas_AUX.guid = g_str_GUID_DatosRecibidos;
                        mdl_CRMH_Encuestas_AUX.idEmpleado = g_lng_idEmpleado_DatosRecibidos;

                        //Fecha Y Hora
                        DateTime dtt_fechaHora_Inicio = DateTime.ParseExact(g_frm_P_Encuestas_Historico.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        TimeSpan tms_hora_Inicio = TimeSpan.Parse(g_frm_P_Encuestas_Historico.Exferia_TextBox_ConMascara_Hora.Text);
                        dtt_fechaHora_Inicio = new DateTime(dtt_fechaHora_Inicio.Year, dtt_fechaHora_Inicio.Month, dtt_fechaHora_Inicio.Day, tms_hora_Inicio.Hours, tms_hora_Inicio.Minutes, 0);

                        mdl_CRMH_Encuestas_AUX.fechaHora = dtt_fechaHora_Inicio;

                        //Exferia_F3
                        mdl_CRMH_Encuestas_AUX.idClientePotencial = g_frm_P_Encuestas_Historico.Exferia_F3_ClientePotencial.Exferia_F3_Id;
                        mdl_CRMH_Encuestas_AUX.idEncuesta = g_frm_P_Encuestas_Historico.Exferia_F3_Encuesta.Exferia_F3_Id;

                       
                        mdl_CRMH_Encuestas_AUX.idTerminal = g_lng_idTerminal_DatosRecibidos;
                        
                        lst_CRMH_Encuestas.Add(mdl_CRMH_Encuestas_AUX);
                    }
                }
            }
            return lst_CRMH_Encuestas;
        }
    }
}
