using Exferia_Aplicacion.General;
using Exferia_Formularios;
using Exferia_KairosPRO._2_Datos;
using Exferia_KairosPRO.General;
using Exferia_KairosPRO_EF;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;

namespace Exferia_KairosPRO._4_Vistas.Controladoras
{
    public class P_Empleado_RellenarPerfil_PorEjercicio_Controladora
    {
        #region Variables Generales
        private P_Empleado_RellenarPerfil_PorEjercicio g_frm_P_Empleado_RellenarPerfil_PorEjercicio = null;//Variable que enlaza con la pantalla asociada
        private PE_Esperando_BarraProgreso g_frm_PE_Esperando_BarraProgreso;//Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc
        private List<dynamic> g_lst_Empleados_Seleccionados = null;

        private KRS_Empleados_Datos g_obj_KRS_Empleados_Datos = new KRS_Empleados_Datos();
        private KRS_Ejercicios_PerfilesCabecera_Datos g_obj_KRS_Ejercicios_PerfilesCabecera_Datos = new KRS_Ejercicios_PerfilesCabecera_Datos();

        //Tarea Asincrona para la proceso de Rellenar Perfil Por Ejercicio
        private BackgroundWorker g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio;

        #endregion

        #region  Constructor
        public P_Empleado_RellenarPerfil_PorEjercicio_Controladora(P_Empleado_RellenarPerfil_PorEjercicio _frm_P_Empleado_RellenarPerfil_PorEjercicio, List<dynamic> _lst_EntradasMercancias_Seleccionadas)
        {
            g_frm_P_Empleado_RellenarPerfil_PorEjercicio = _frm_P_Empleado_RellenarPerfil_PorEjercicio;
            g_lst_Empleados_Seleccionados = _lst_EntradasMercancias_Seleccionadas;

            CargarDatos_Iniciales();
        }
        #endregion

        #region Datos Iniciales
        public void CargarDatos_Iniciales()
        {
            try
            {

            }
            catch (Exception)
            { }
        }
        #endregion

        #region Proceso de Rellenar Perfil por Ejercicio
        public void Proceso_ProcesoRellenarPerfilPorEjercicio()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando_BarraProgreso = new PE_Esperando_BarraProgreso(Mensajes.G_STR_ESPERANDO_GENERANDODATOS());

                // Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio != null)
                {
                    while (g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio = new BackgroundWorker();
                    g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.DoWork += new DoWorkEventHandler(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_DoWork);
                    g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_ProgressChanged);
                    g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_Completed);
                    g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.WorkerReportsProgress = true;
                }

                //Lista de Argumentos
                List<object> lst_Parametros = new List<object>();
                lst_Parametros.Add(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Id);
                lst_Parametros.Add(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Id);
                lst_Parametros.Add(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Id);
                lst_Parametros.Add(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Id);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_ProcesoRellenarPerfilPorEjercicio.RunWorkerAsync(lst_Parametros);
                //#################################################################################################

                g_frm_PE_Esperando_BarraProgreso.Show();
            }
            catch (Exception ex)
            {
                g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Enabled = true;

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

                throw new Control_Errores("", ex, nameof(P_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(Proceso_ProcesoRellenarPerfilPorEjercicio), true);
            }
        }

        private void TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            mdl_ValorDevuelto_Modelo.Mensaje = "";
            try
            {
                //Parametros
                List<object> lst_Parametros = (List<object>)e.Argument;

                long lng_idEjercicio_ABuscar = (long)lst_Parametros[0];
                long lng_idPerfilCabecera_ABuscar = (long)lst_Parametros[1];
                long lng_idEjercicio_ARellenar = (long)lst_Parametros[2];
                long lng_idPerfilCabecera_ARellenar = (long)lst_Parametros[3];

                // ## 1º-> VALIDAR
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    // ## 2º BUSCAR EMPLEADOS
                    List<long> lst_idEmpleados = g_obj_KRS_Empleados_Datos.Obtener_Listado_Por_EjercicioPerfilCabecera(lng_idEjercicio_ABuscar, lng_idPerfilCabecera_ABuscar);

                    if (lst_idEmpleados!=null && lst_idEmpleados.Count>0)
                    {
                        //Mensaje de recalculando ............................................................................................................
                        ((BackgroundWorker)sender).ReportProgress(3, Mensajes.G_STR_ESPERANDO_GENERANDODATOS());
                        //Vaciar el total cargado de lineas
                        ((BackgroundWorker)sender).ReportProgress(2, 0);
                        //Total de lineas
                        ((BackgroundWorker)sender).ReportProgress(1, 0);
                        //.....................................................................................................................................

                        // Iniciar transaccion
                        using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
                        {
                            try
                            {
                                // ## 3º GRABAR LOS PERFILES
                                INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_AGRABAR = null;
                                foreach (long lng_idEmpleado in lst_idEmpleados)
                                {
                                    KRS_Ejercicios_PerfilesCabecera mdl_KRS_Ejercicios_PerfilesCabecera = new KRS_Ejercicios_PerfilesCabecera();

                                    mdl_KRS_Ejercicios_PerfilesCabecera.idPerfilCabecera = lng_idPerfilCabecera_ARellenar;
                                    mdl_KRS_Ejercicios_PerfilesCabecera.idEjercicio = lng_idEjercicio_ARellenar;
                                    mdl_KRS_Ejercicios_PerfilesCabecera.idEmpleado = lng_idEmpleado;
                                    mdl_KRS_Ejercicios_PerfilesCabecera.codigoCliente = Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO;

                                    mdl_INTERNO_ValorDevuelto_Modelo_AGRABAR=g_obj_KRS_Ejercicios_PerfilesCabecera_Datos.Grabar_Simple(mdl_KRS_Ejercicios_PerfilesCabecera);

                                    if (mdl_INTERNO_ValorDevuelto_Modelo_AGRABAR.TodoCorrecto == false)
                                    {
                                        mdl_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_AGRABAR;
                                        break;
                                    }

                                    //Mensaje de recalculando ............................................................................................................
                                    ((BackgroundWorker)sender).ReportProgress(3, Mensajes.G_STR_GRABANDO(Variables.G_STR_OPCION_KRS_PERFILESCABECERA));
                                    //Vaciar el total cargado de lineas
                                    ((BackgroundWorker)sender).ReportProgress(2, 0);
                                    //Total de lineas
                                    ((BackgroundWorker)sender).ReportProgress(1, 0);
                                    //.....................................................................................................................................
                                }

                                //Terminar trasaccion
                                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_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_DoWork));
                                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                                transaccion_SQL.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    mdl_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_DoWork));

                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_DoWork));
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS();
            }
            finally
            {

                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.ProgressPercentage.ToString().Equals("1"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Total = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("2"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Actualizar = int.Parse(e.UserState.ToString());
                }
                else if (e.ProgressPercentage.ToString().Equals("3"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Mensaje = e.UserState.ToString();
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                if (g_frm_PE_Esperando_BarraProgreso != null)
                {
                    g_frm_PE_Esperando_BarraProgreso.Close();
                    g_frm_PE_Esperando_BarraProgreso = null;
                }

                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje != null &&
                    mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                }
                else
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_GENERANDODATOS_CORRECTO());

                    //PERFIL A bUSCAR
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Id = -1;
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Codigo = "";
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Descripcion = "";
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                    //PERFIL A RELLENAR
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Id = -1;
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Codigo = "";
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Descripcion = "";
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(TareaAsincrona_ProcesoRellenarPerfilPorEjercicio_Completed));
            }
            finally
            {
                //Desbloquear el Formulario
                g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Enabled = true;
            }
        }

        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {

                // El ejercicio a buscar no puede estar Vacia (Obligatoria)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ejercicio a buscar validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ABuscar.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // El perfil a buscar no puede estar Vacia (Obligatoria)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay perfil a buscar validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ABuscar.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // El ejercicio a rellenar (Obligatoria)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ejercicio a rellenar validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_Ejercicio_ASustituir.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // El perfil a sustituir no puede estar Vacia (Obligatoria)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay perfil a sustituir validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Empleado_RellenarPerfil_PorEjercicio.Exferia_F3_SoloSeleccion_PorEjercicio_PerfilCabecera_ASustituir.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }
            }
            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_Empleado_RellenarPerfil_PorEjercicio_Controladora) + "/" + nameof(ValidarDatos));

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

            return mdl_ValorDevuelto_Modelo;
        }

        #endregion

    }
}
