using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Ventas._0_Modelos;
using Exferia_Ventas._1_Datos;
using Exferia_Ventas.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Ventas._3_Vistas.Controladoras
{
    public class P_RecepcionCuaderno60_Controladora
    {
        #region Variables Generales
        private P_RecepcionCuaderno60 g_frm_P_RecepcionCuaderno60 = 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

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

        public GEN_EjerciciosActivos_Empresa g_mdl_GEN_EjerciciosActivos_Empresa = null;

        private BackgroundWorker g_obj_TareaAsincrona_RecepcionCuaderno60;
        private BackgroundWorker g_obj_TareaAsincrona_ParaProgress = null;

        private VTA_Vencimientos_Datos g_obj_VTA_Vencimientos_Datos = new VTA_Vencimientos_Datos();
        private VTA_RemesasCabecera_Datos g_obj_VTA_RemesasCabecera_Datos = new VTA_RemesasCabecera_Datos();
        private VTA_RemesasLinea_Datos g_obj_VTA_RemesasLinea_Datos = new VTA_RemesasLinea_Datos();
        private VTA_Cobros_Datos g_obj_VTA_Cobros_Datos = new VTA_Cobros_Datos();

        private VTA_RemesasCabecera g_mdl_VTA_RemesasCabecera = null;
        private long g_lng_idRemesaLinea = 0;
        private List<VTA_RemesasLinea> g_lst_VTA_RemesasLinea=null;
        private long g_lng_idCobro = 0;
        private List<VTA_Cobros> g_lst_VTA_Cobros=null;
        #endregion

        // Constructor de la clase Logica
        public P_RecepcionCuaderno60_Controladora(P_RecepcionCuaderno60 _frm_P_RecepcionCuaderno60)
        {
            g_frm_P_RecepcionCuaderno60 = _frm_P_RecepcionCuaderno60;

            g_bol_Termino_CargaDatos_Inicial = true;
        }

        public void Datos_PorDefecto()
        {
            try
            {


                //Delegacion
                if (g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.Delegacion != null)
                {
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id = g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.Delegacion.id;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo = g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.Delegacion.codigo;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Descripcion = g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.Delegacion.descripcion;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_FechaBorrado = g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.Delegacion.fechaBorrado;
                }

                //CTA_PredefinidosCabeceras_RecepcionCuaderno60
                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_DEFECTO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_1 = { Variables.G_PREDEFINIDOFICHEROS_REMESASDEEFECTOSVENTA.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60 = (CTA_PredefinidosCabeceras)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                //##################################################################################################################################################################################################
                
                if (mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60 != null &&
                    mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.idPredefinidoFichero != null &&
                    mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.idPredefinidoFichero.Value.Equals(Variables.G_PREDEFINIDOFICHEROS_REMESASDEEFECTOSVENTA.Id))
                {
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Id = mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.id;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Codigo = mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.codigo;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Descripcion = mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.descripcion;
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_CTA_PredefinidosCabeceras_RecepcionCuaderno60.fechaBorrado;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(Datos_PorDefecto));
            }
            finally
            {
                g_frm_P_RecepcionCuaderno60.P_Base_SeModificoDatosPantalla = false;
            }
        }

        #region Recepcionar_Cuaderno60

        public void Recepcionar_Cuaderno60()
        {
            try
            {
                //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_RecepcionCuaderno60 != null)
                {
                    while (g_obj_TareaAsincrona_RecepcionCuaderno60.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_RecepcionCuaderno60 = new BackgroundWorker();
                    g_obj_TareaAsincrona_RecepcionCuaderno60.DoWork += new DoWorkEventHandler(TareaAsincrona_RecepcionCuaderno60_DoWork);
                    g_obj_TareaAsincrona_RecepcionCuaderno60.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_RecepcionCuaderno60_ProgressChanged);
                    g_obj_TareaAsincrona_RecepcionCuaderno60.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_RecepcionCuaderno60_Completed);
                    g_obj_TareaAsincrona_RecepcionCuaderno60.WorkerReportsProgress = true;
                }

                //(Tarea Asincrona) ##################################################################
                g_obj_TareaAsincrona_RecepcionCuaderno60.RunWorkerAsync();
                //#################################################################################################

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

                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS(), ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(Recepcionar_Cuaderno60), true);
            }
        }

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

            try
            {
                g_obj_TareaAsincrona_ParaProgress = ((BackgroundWorker)sender);

                // Validar Primero
                mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos();
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Parsear los datos del Fichero
                    mdl_INTERNO_ValorDevuelto_Modelo = Pasear_Cuaderno60();

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo= (INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)mdl_INTERNO_ValorDevuelto_Modelo.Objeto;

                        //Validar Datos Parseados
                        mdl_INTERNO_ValorDevuelto_Modelo = ValidarDatos_ModeloParseado(mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo);
                        if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                        {
                            //Variables inicializar
                            g_mdl_VTA_RemesasCabecera = new VTA_RemesasCabecera();
                            g_lst_VTA_RemesasLinea = new List<VTA_RemesasLinea>();
                            g_lng_idRemesaLinea = 0;
                            g_lng_idCobro = 0;
                            g_lst_VTA_Cobros = new List<VTA_Cobros>();

                            //Generacion de Remesas
                            mdl_INTERNO_ValorDevuelto_Modelo = Generacion_Remesas(mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo);

                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                List<long> lst_idPredefinidoCabecera = new List<long>();
                                lst_idPredefinidoCabecera.Add(g_mdl_VTA_RemesasCabecera.idPredefinidoCabecera_Remesa.Value);

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

                                //Obtener valores
                                object[] arr_Parametros_1 = { lst_idPredefinidoCabecera,
                                                              g_mdl_VTA_RemesasCabecera.id,
                                                              Variables.G_STR_OPCION_VTA_REMESASCABECERA_AUX_1,
                                                              null};

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

                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(TareaAsincrona_RecepcionCuaderno60_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.g_str_MensajeError;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(TareaAsincrona_RecepcionCuaderno60_DoWork));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }

            e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private void TareaAsincrona_RecepcionCuaderno60_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                if (e.UserState.ToString().Equals("1"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Total = e.ProgressPercentage;
                }
                else if (e.UserState.ToString().Equals("2"))
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Actualizar = e.ProgressPercentage;
                }
                else
                {
                    g_frm_PE_Esperando_BarraProgreso.PE_Esperando_BarraProgreso_Mensaje = e.UserState.ToString();
                }
            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_RecepcionCuaderno60_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;
                }

                //Mostrar si tuviera algun mensaje
                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
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_GENERANDODATOS_CORRECTO());
                    g_frm_P_RecepcionCuaderno60.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(TareaAsincrona_RecepcionCuaderno60_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GENERARDATOS());
            }
        }

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

            try
            {
                // La fecha no puede estar vacia y debe ser correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_RecepcionCuaderno60.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_RecepcionCuaderno60.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_RecepcionCuaderno60.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_RecepcionCuaderno60.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_RecepcionCuaderno60.Exferia_FechaSeleccion_Fecha;
                    }
                }

                // La ClavePredefinida Remesa no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.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_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay ClavePredefinida Remesa validar que es Correcta
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // La Delegacion no puede estar Vacio (Obligatorio)
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.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_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

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

                // Tiene que tener datos el fichero seleccionado
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_frm_P_RecepcionCuaderno60.Exferia_TextBox_DatosFichero.Text.Trim().Length==0)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO("El fichero");
                    }
                }
            }
            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_RecepcionCuaderno60_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 ValidarDatos_ModeloParseado(INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                // Modelo EntidadGestora a nulo
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (_mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo == null ||
                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_A_CodigoRegistro.Trim().Length == 0)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_VALIDACION_ENTIDADGESTORA_VACIA();
                    }
                }

                // Modelo Organismo Emisor a nulo
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (_mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor == null ||
                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor.Count == 0)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_VALIDACION_ORGANISMOEMISOR_VACIO();
                    }
                }

                // Modelo Registros individuales y total tributo a nulo
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    foreach (INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo in _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor)
                    {
                        //Registro Individual
                        if ((mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad1 == null ||
                            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad1.Count == 0) &&
                            (mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad2 == null ||
                            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad2.Count == 0))
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_VALIDACION_REGISTROSINDIVIDUALES_VACIOS();

                            break;
                        }

                        //Total Tributo
                        if (mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Total_TributoConcepto == null ||
                            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Total_TributoConcepto.ZONA_A_CodigoRegistro.Trim().Length==0)
                        {
                            mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_VALIDACION_TOTALTRIBUTOCONCEPTO_VACIA();

                            break;
                        }
                    }
                }

                // Modelo Total Entidad Gestora
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (_mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Total_EntidadGestora==null ||
                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Total_EntidadGestora.ZONA_A_CodigoRegistro.Trim().Length==0)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_VALIDACION_TOTALENTIDADGESTORA_VACIA();
                    }
                }

            }
            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_RecepcionCuaderno60_Controladora) + "/" + nameof(ValidarDatos_ModeloParseado));

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

            return mdl_ValorDevuelto_Modelo;
        }

        #region Pasear datos
        private INTERNO_ValorDevuelto_Modelo Pasear_Cuaderno60()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                
                INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo = new INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo();
                INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo = null;


                //Recorrer todas las lineas
                string[] arr_Lineas = g_frm_P_RecepcionCuaderno60.Exferia_TextBox_DatosFichero.Text.Split(new[] { Environment.NewLine },StringSplitOptions.None);
                foreach (string str_Linea in arr_Lineas)
                {
                    if (str_Linea.Trim().Length > 0)
                    {
                        //Entidad Gestora
                        if (str_Linea.Substring(0, 2).Equals("01"))
                        {
                            mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo = Pasear_EntidadGestora(str_Linea, mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo);
                        }
                        //Organimos Emisor
                        else if (str_Linea.Substring(0, 2).Equals("02"))
                        {
                            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo = Pasear_OrganismoEmisor(str_Linea);
                        }
                        //Modalidad 1 o 2
                        else if (str_Linea.Substring(0, 2).Equals("03"))
                        {
                            //Modalidad 1
                            if (str_Linea.Length == 100)
                            {
                                //Añadir al Listado
                                mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad1.Add(Pasear_Modalidad1(str_Linea));
                            }
                            //Modalidad 2
                            else
                            {

                            }
                        }
                        //Total Tributo o concepto
                        else if (str_Linea.Substring(0, 2).Equals("04"))
                        {
                            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Total_TributoConcepto = Pasear_TotalTributoConcepto(str_Linea);

                            //Añadir al Listado
                            mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor.Add(mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo);
                        }
                        //Total entidad gestora
                        else if (str_Linea.Substring(0, 2).Equals("05"))
                        {
                            mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Total_EntidadGestora = Pasear_TotalEntidadGestora(str_Linea);
                        }
                    }
                    
                }

                mdl_ValorDevuelto_Modelo.Objeto = mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo;
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(Pasear_Cuaderno60));

                mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_PARSEAR("Cuaderno60");
            }
     
            return mdl_ValorDevuelto_Modelo;
        }

        private INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo Pasear_EntidadGestora(string _str_Linea, INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)
        {
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_A_CodigoRegistro = _str_Linea.Substring(0,2);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_B_CodigoOperacion = _str_Linea.Substring(2,2);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_C1_IdentificacionEntidadGestora = _str_Linea.Substring(4,6);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_C2_Libre = _str_Linea.Substring(10,3);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_D1_VersionFichero = _str_Linea.Substring(13,5);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_D2_Libre = _str_Linea.Substring(18,10);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_E1_NRBE = _str_Linea.Substring(28,4);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_E2_Oficina = _str_Linea.Substring(32,4);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_F1_FechaLiquidacion = _str_Linea.Substring(36,6);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_F2_Libre = _str_Linea.Substring(42,11);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_G_IBAN_0_a_4 = _str_Linea.Substring(53,4);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H1_IBAN_CodigoEntidadCuenta = _str_Linea.Substring(57,4);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H2_IBAN_CodigoSucursalCuenta = _str_Linea.Substring(61,4);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H3_IBAN_DigitosControl = _str_Linea.Substring(65,2);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H4_IBAN_NumeroCuenta = _str_Linea.Substring(67,10);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_I_Libre = _str_Linea.Substring(77,7);
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_J_Libre = _str_Linea.Substring(84,16);

            //Instanciar las propiedades
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor = new List<INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo>();
            _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Total_EntidadGestora = new INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo();

            return _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo;
        }
        private INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo Pasear_OrganismoEmisor(string _str_Linea)
        {
            INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo = new INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo();

            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_A_CodigoRegistro = _str_Linea.Substring(0, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_B_CodigoOperacion = _str_Linea.Substring(2, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_C1_IdentificacionOrganismoEmisor = _str_Linea.Substring(4, 6);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_C2_Libre = _str_Linea.Substring(10, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_D_Libre = _str_Linea.Substring(13, 15);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_E1_NRBE = _str_Linea.Substring(28, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_E2_Oficina = _str_Linea.Substring(32, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_F_Libre = _str_Linea.Substring(36, 18);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_G_Libre = _str_Linea.Substring(54, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_H_Libre = _str_Linea.Substring(57, 20);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_I_Libre = _str_Linea.Substring(77, 7);
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.ZONA_J_Libre = _str_Linea.Substring(84, 16);

            //Inicializar Variables
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad1 = new List<INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo>();
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad2 = new List<INTERNO_DatosParseados_Cuaderno60_Modalidad2_Modelo>();
            mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Total_TributoConcepto = new INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo();

            return mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo;
        }
        private INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo Pasear_Modalidad1(string _str_Linea)
        {
            INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo = new INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo();

            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_A_CodigoRegistro = _str_Linea.Substring(0, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_B_CodigoOperacion = _str_Linea.Substring(2, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_C1_IdentificacionOrganismoEmisor = _str_Linea.Substring(4, 6);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_C2_Libre = _str_Linea.Substring(10, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_D1_Referencia = _str_Linea.Substring(13, 12);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_D2_Libre = _str_Linea.Substring(25, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_E1_NRBE = _str_Linea.Substring(28, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_E2_Oficina = _str_Linea.Substring(32, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_F1_FechaCobro = _str_Linea.Substring(36, 6);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_F2_Importe = decimal.Parse(_str_Linea.Substring(42, 10) + "," + _str_Linea.Substring(52, 2));
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_G1_Libre = _str_Linea.Substring(54, 1);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_G2_CanalPago = _str_Linea.Substring(55, 1);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_G3_IntencionDomiciliacion = _str_Linea.Substring(56, 1);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_H1_IBAN_CodigoEntidadCuenta = _str_Linea.Substring(57, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_H2_IBAN_CodigoSucursalCuenta = _str_Linea.Substring(61, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_H3_IBAN_DigitosControl = _str_Linea.Substring(65, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_H4_IBAN_NumeroCuenta = _str_Linea.Substring(67, 10);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_I1_CodigoTributo = _str_Linea.Substring(77, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_I2_Ejercicio = _str_Linea.Substring(80, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_I3_Remesa = _str_Linea.Substring(82, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_J_IBAN_0_a_4 = _str_Linea.Substring(84, 4);
            mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_K_Libre = _str_Linea.Substring(88, 12);

            return mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo;
        }
        private INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo Pasear_TotalTributoConcepto(string _str_Linea)
        {
            INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo = new INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo();

            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_A_CodigoRegistro =_str_Linea.Substring(0, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_B_CodigoOperacion =_str_Linea.Substring(2, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_C1_IdentificacionOrganismoEmisor =_str_Linea.Substring(4, 6);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_C2_Libre =_str_Linea.Substring(10, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_D_Libre =_str_Linea.Substring(13, 15);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_E_NumeroCobros =_str_Linea.Substring(28, 8);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_F_TotalImporte = decimal.Parse(_str_Linea.Substring(36, 16) + "," + _str_Linea.Substring(52, 2));
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_G_Libre =_str_Linea.Substring(54, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_H_Libre =_str_Linea.Substring(57, 20);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_I1_CodigoTributoConcepto =_str_Linea.Substring(77, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_I2_Libre =_str_Linea.Substring(80, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_I3_Libre =_str_Linea.Substring(82, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo.ZONA_J_Libre =_str_Linea.Substring(84, 16);
    
            return mdl_INTERNO_DatosParseados_Cuaderno60_TotalTributoConcepto_Modelo;
        }
        private INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo Pasear_TotalEntidadGestora(string _str_Linea)
        {
            INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo = new INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo();

            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_A_CodigoRegistro = _str_Linea.Substring(0, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_B_CodigoOperacion = _str_Linea.Substring(2, 2);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_C1_IdentificacionEntidadGestora = _str_Linea.Substring(4, 6);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_C2_Libre = _str_Linea.Substring(10, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_D_Libre = _str_Linea.Substring(13, 15);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_E_NumeroRegistros = _str_Linea.Substring(28, 8);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_F_TotalImporte = decimal.Parse(_str_Linea.Substring(36, 16) + "," + _str_Linea.Substring(52, 2));
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_G_Libre = _str_Linea.Substring(54, 3);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_H_Libre = _str_Linea.Substring(57, 20);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_I_Libre = _str_Linea.Substring(77, 7);
            mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo.ZONA_J_Libre = _str_Linea.Substring(84, 16);

            return mdl_INTERNO_DatosParseados_Cuaderno60_TotalEntidadGestora_Modelo;
        }

        #endregion

        private INTERNO_ValorDevuelto_Modelo Generacion_Remesas(INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = RemesaCabecera_Rellenar(_mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo);
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //RemesasLineas y Cobros
                    mdl_INTERNO_ValorDevuelto_Modelo = RemesaLinea_Cobro_Rellenar(_mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo);

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = Grabar_Generacion();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(Generacion_Remesas));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo RemesaCabecera_Rellenar(INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                g_mdl_VTA_RemesasCabecera.id = -1;

                g_mdl_VTA_RemesasCabecera.idEmpresa = Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.lng_idEmpresa, nameof(VTA_RemesasCabecera));

                //Codigo 
                g_mdl_VTA_RemesasCabecera.codigo = long.Parse(Datos_Generales.Buscar_CodigoSiguiente(nameof(VTA_RemesasCabecera), nameof(VTA_RemesasCabecera.codigo), "", -1, true, 21));

                g_mdl_VTA_RemesasCabecera.estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;

                // TextBox String
                g_mdl_VTA_RemesasCabecera.observaciones = "Remesa " + g_mdl_VTA_RemesasCabecera.codigo;

                // TextBox Decimal
                g_mdl_VTA_RemesasCabecera.importe = _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Total_EntidadGestora.ZONA_F_TotalImporte;

                // DateTime
                g_mdl_VTA_RemesasCabecera.fecha = DateTime.ParseExact(g_frm_P_RecepcionCuaderno60.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                g_mdl_VTA_RemesasCabecera.fechaEnvioFichero = null;

                // CheckBox 
                g_mdl_VTA_RemesasCabecera.negociar = false;
                g_mdl_VTA_RemesasCabecera.recurrente = null;

                //Negociar
                g_mdl_VTA_RemesasCabecera.fechaVencimientosCobros = null;
                g_mdl_VTA_RemesasCabecera.envio_Bloqueado = false;
                g_mdl_VTA_RemesasCabecera.cobro_Bloqueado = false;

                g_mdl_VTA_RemesasCabecera.resumen_Acumular = false;
                g_mdl_VTA_RemesasCabecera.resumen_AcumularNegativos = false;

                //Tipo captura
                g_mdl_VTA_RemesasCabecera.tipoCaptura = 0;
                g_mdl_VTA_RemesasCabecera.tipoCaptura_Fecha_Inicio = null;
                g_mdl_VTA_RemesasCabecera.tipoCaptura_Fecha_Final = null;

                g_mdl_VTA_RemesasCabecera.tipoCaptura_Bolsa = false;
                g_mdl_VTA_RemesasCabecera.tipoCaptura_Negativos = false;

                //Tipo Norma
                g_mdl_VTA_RemesasCabecera.norma_Tipo = 0;
                g_mdl_VTA_RemesasCabecera.norma_Formato = null;
                g_mdl_VTA_RemesasCabecera.norma_TipoFecha = null;

                // F3
                //..................................................................................
                g_mdl_VTA_RemesasCabecera.idDelegacion = g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_Delegacion.Exferia_F3_SoloSeleccion_Id;

                //..................................................................................

                //BUscar Tesoreria por IBAN
                string str_IBAN = _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_G_IBAN_0_a_4 +
                                                                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H1_IBAN_CodigoEntidadCuenta +
                                                                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H2_IBAN_CodigoSucursalCuenta +
                                                                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H3_IBAN_DigitosControl +
                                                                        _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.ZONA_H4_IBAN_NumeroCuenta;

                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAETESORERIAS_OBTENER_POR_IBAN, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_1 = { str_IBAN };

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

                if (lng_idTesoreria!=null)
                {
                    g_mdl_VTA_RemesasCabecera.idTesoreria = lng_idTesoreria.Value;
                }
                else
                {
                    //Buscar los datos del Arbol
                    INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_MAE_TESORERIA);


                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_ERROR_NOENCONTRO_TESORERIA(mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_Singular, str_IBAN);

                    return mdl_INTERNO_ValorDevuelto_Modelo;
                }


                //..................................................................................
                g_mdl_VTA_RemesasCabecera.idPredefinidoCabecera_Remesa = g_frm_P_RecepcionCuaderno60.Exferia_F3_SoloSeleccion_ClavePredefinida_Remesa.Exferia_F3_SoloSeleccion_Id;

                //..................................................................................
                g_mdl_VTA_RemesasCabecera.idPredefinidoCabecera_Negociacion = null;
                //..................................................................................

                g_mdl_VTA_RemesasCabecera.idPredefinidoCabecera_CobroManual = null;

            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.g_str_MensajeError;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(RemesaCabecera_Rellenar));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo RemesaLinea_Cobro_Rellenar(INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Cargamos el ensamblado #########################################################################################################################################################################
                Assembly m_assembly_1 = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_CONTABILIDAD + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type_1 = m_assembly_1.GetType("" + Variables.G_STR_LIBRERIA_CONTABILIDAD + "." + Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD);
                //creamos la instancia
                var obj_Clase_1 = Activator.CreateInstance(m_type_1);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo_1 = obj_Clase_1.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCONTABILIDAD_PROCEDIMIENTO_CTAPREDEFINIDOCABECERA_OBTENERMODELO_POR_DEFECTO, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros_1 = { Variables.G_PREDEFINIDOFICHEROS_COBROS.Id };

                //Pasamos los parametros al metodo y lo ejecutamos
                CTA_PredefinidosCabeceras mdl_CTA_PredefinidosCabeceras_COBRO = (CTA_PredefinidosCabeceras)obj_MethodInfo_1.Invoke(obj_Clase_1, arr_Parametros_1);
                //##################################################################################################################################################################################################
               
                //Organismos Emisores
                foreach (INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo in _mdl_INTERNO_DatosParseados_Cuaderno60_EntidadGestora_Modelo.Listado_OrganismoEmisor )
                {
                    //Registros Individuales
                    foreach (INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo in mdl_INTERNO_DatosParseados_Cuaderno60_OrganismoEmisor_Modelo.Listado_Modalidad1)
                    {

                        //REMESALINEA ####################################################################################################################################
                        g_lng_idRemesaLinea -= 1;

                        VTA_RemesasLinea mdl_VTA_RemesasLinea = new VTA_RemesasLinea();
                        mdl_VTA_RemesasLinea.id = g_lng_idRemesaLinea;
                        mdl_VTA_RemesasLinea.idRemesaCabecera = g_mdl_VTA_RemesasCabecera.id;
                        mdl_VTA_RemesasLinea.idRemesaAcumulado = null;

                        //..................................................................................
                        //Buscar el Vencimiento
                        INTERNO_GeneracionAutomatica_Cuaderno60_Modelo mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo = g_obj_VTA_Vencimientos_Datos.Obtener_Vencimiento_PorReferencia(mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_D1_Referencia, mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_I2_Ejercicio,g_frm_P_RecepcionCuaderno60.P_Base_ValoresGenerales.lng_idEmpresa);

                        if (mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo != null)
                        {
                            mdl_VTA_RemesasLinea.idVencimiento = mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.id;

                            mdl_VTA_RemesasLinea.idCuentaBancariaSEPA_Cobro = null;
                            //..................................................................................................................

                            mdl_VTA_RemesasLinea.importe = mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_F2_Importe;

                            //Las X se sustituyen a la hora de grabar_, por si se cambia el numero de factura
                            mdl_VTA_RemesasLinea.concepto = mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.Factura_Fecha.ToString("yyyy") + "-" +
                                                            mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.Delegacion_Codigo + "/" +
                                                            mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.Factura_Numero + "/" +
                                                            mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.Vencimiento_Codigo;

                            //Posicion
                            mdl_VTA_RemesasLinea.posicion = 1;  //Recurrente

                            mdl_VTA_RemesasLinea.bloqueado = false;

                            //Listado De RemesaLinea
                            g_lst_VTA_RemesasLinea.Add(mdl_VTA_RemesasLinea);

                            //Crear Cobro Relacionado ###################################################################
                            VTA_Cobros mdl_VTA_Cobros = new VTA_Cobros();
                            g_lng_idCobro -= 1;

                            mdl_VTA_Cobros.codigo = 1;
                            mdl_VTA_Cobros.estado = Variables.G_STR_ESTADO_CONTABILIDAD_ABIERTO;
                            mdl_VTA_Cobros.idVencimiento = mdl_VTA_RemesasLinea.idVencimiento;

                            if (g_mdl_VTA_RemesasCabecera.negociar != null &&
                                g_mdl_VTA_RemesasCabecera.negociar.Value &&
                                g_mdl_VTA_RemesasCabecera.fechaVencimientosCobros != null)
                            {
                                mdl_VTA_Cobros.fecha = g_mdl_VTA_RemesasCabecera.fechaVencimientosCobros.Value;
                                mdl_VTA_Cobros.fechaVencimientoTalon = g_mdl_VTA_RemesasCabecera.fechaEnvioFichero;
                                mdl_VTA_Cobros.efecto = true;
                            }
                            else
                            {
                                mdl_VTA_Cobros.fecha = g_mdl_VTA_RemesasCabecera.fecha;
                                mdl_VTA_Cobros.fechaVencimientoTalon = g_mdl_VTA_RemesasCabecera.fechaEnvioFichero;
                                mdl_VTA_Cobros.efecto = false;
                            }

                            mdl_VTA_Cobros.idTesoreria = g_mdl_VTA_RemesasCabecera.idTesoreria;
                            mdl_VTA_Cobros.comision = 0;
                            mdl_VTA_Cobros.correo = 0;
                            mdl_VTA_Cobros.importeComision = 0;
                            mdl_VTA_Cobros.porcentajeComision = 0;
                            mdl_VTA_Cobros.observaciones = "Remesa Nº " + g_mdl_VTA_RemesasCabecera.codigo;
                            mdl_VTA_Cobros.confirmado = null;

                            mdl_VTA_Cobros.idTipoPago = null;
                            mdl_VTA_Cobros.idVendedor = mdl_INTERNO_GeneracionAutomatica_Cuaderno60_Modelo.idVendedor;
                            mdl_VTA_Cobros.idClaveAnalitica = null;

                            //..............................................
                            //PredefinidosCabeceras_Cobro
                            long? lng_idPredefinidoCabecera_Cobro = null;

                            if (mdl_CTA_PredefinidosCabeceras_COBRO != null)
                            {
                                lng_idPredefinidoCabecera_Cobro = mdl_CTA_PredefinidosCabeceras_COBRO.id;
                            }
                            mdl_VTA_Cobros.idPredefinidoCabecera_Cobro = lng_idPredefinidoCabecera_Cobro;

                            //PredefinidosCabeceras_Negocioacion
                            mdl_VTA_Cobros.idPredefinidoCabecera_Negociacion = null;

                            mdl_VTA_Cobros.importe = mdl_VTA_RemesasLinea.importe;
                            mdl_VTA_Cobros.idRemesaLinea = mdl_VTA_RemesasLinea.id;

                            //SE AGREGA AL LISTADO
                            g_lst_VTA_Cobros.Add(mdl_VTA_Cobros);
                        }
                        else
                        {
                            //Buscar los datos del Arbol
                            INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_VENCIMIENTO);

                            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                            mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_RECEPCIONCUADERNO60_ERROR_NOENCONTRO_VENCIMIENTO(mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_Singular, mdl_INTERNO_DatosParseados_Cuaderno60_Modalidad1_Modelo.ZONA_D1_Referencia);

                            break;
                        }
                    }
                }
            }
            catch (Control_Errores ex)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = ex.g_str_MensajeError;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(RemesaLinea_Cobro_Rellenar));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = "";
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        private INTERNO_ValorDevuelto_Modelo Grabar_Generacion()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
            {
                try
                {
                    DateTime dtt_Actual = DateTime.Now;
                    INTERNO_OpcionesDetalle_Modelo mdl_INTERNO_OpcionesDetalle_Modelo = null;
                    int int_NumeroPosicion = 0;
                    long lng_idRecepcionFichero = -1;

                    //GRABAR FICHERORECEPCIONADO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                    mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_PRV_RECEPCIONFICHERO);

                    PRV_RecepcionFicheros mdl_PRV_RecepcionFicheros = new PRV_RecepcionFicheros();
                    mdl_PRV_RecepcionFicheros.idRecepcionFicheroTipo = Variables.G_LNG_RECEPCIONFICHEROSTIPOS_CUADERNO60;
                    mdl_PRV_RecepcionFicheros.texto = g_frm_P_RecepcionCuaderno60.Exferia_TextBox_DatosFichero.Text;
                    mdl_PRV_RecepcionFicheros.fecha = dtt_Actual;
                    mdl_PRV_RecepcionFicheros.idUsuario = Variables.G_MDL_USUARIOVALIDADO_MODELO.id;

                    mdl_INTERNO_ValorDevuelto_Modelo = Grabar_Externo(mdl_INTERNO_OpcionesDetalle_Modelo,mdl_PRV_RecepcionFicheros);
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        lng_idRecepcionFichero = mdl_INTERNO_ValorDevuelto_Modelo.Id;
                    }
                    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

                    //GRABAR REMESACABECERA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (g_mdl_VTA_RemesasCabecera != null)
                        {
                            //Cambio de Titulo
                            //obtener los datos segun Opcion
                            mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_REMESASCABECERA);

                            //Cambio de Titulo
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(0, Mensajes.G_STR_GRABANDO(mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_Plural));

                            //Actualizar el Progress TOTAL ..........
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(1, "1");
                            //......................................

                            long lng_idRemesaCabecera_NEW = 0;
                            long lng_idRemesaCabecera_OLD = g_mdl_VTA_RemesasCabecera.id;

                            //Actualizar idRecepcionFichero
                            g_mdl_VTA_RemesasCabecera.idRecepcionFichero = lng_idRecepcionFichero;
                            g_mdl_VTA_RemesasCabecera.importe = g_lst_VTA_RemesasLinea.Where(m => m.idRemesaCabecera.Equals(lng_idRemesaCabecera_OLD)).Select(m => m.importe).Sum();

                            //Grabar
                            mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_RemesasCabecera_Datos.Grabar(g_mdl_VTA_RemesasCabecera);

                            //Actualizar el Progress PROGRESO ..........
                            int_NumeroPosicion += 1;
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(int_NumeroPosicion, "2");
                            //......................................

                            if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                            {
                                lng_idRemesaCabecera_NEW = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                                g_mdl_VTA_RemesasCabecera.id = lng_idRemesaCabecera_NEW;

                                //Actualizar los Listados el idRemesaCabecera
                                g_lst_VTA_RemesasLinea.Where(m => m.idRemesaCabecera.Equals(lng_idRemesaCabecera_OLD)).ToList().ForEach(x => x.idRemesaCabecera = lng_idRemesaCabecera_NEW);
                            }
                        }
                    }
                    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

                    //GRABAR REMESALINEA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (g_lst_VTA_RemesasLinea != null && g_lst_VTA_RemesasLinea.Count() > 0)
                        {
                            //Cambio de Titulo
                            //obtener los datos segun Opcion
                            mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_REMESASLINEA);

                            //Cambio de Titulo
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(0, Mensajes.G_STR_GRABANDO(mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_Plural));

                            int_NumeroPosicion = 0;

                            //Actualizar el Progress TOTAL ..........
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(g_lst_VTA_RemesasLinea.Count, "1");
                            //......................................

                            long lng_idRemesaLinea_OLD = 0;
                            long lng_idRemesaLinea_NEW = 0;
                            foreach (VTA_RemesasLinea mdl_VTA_RemesasLinea in g_lst_VTA_RemesasLinea)
                            {
                                lng_idRemesaLinea_OLD = mdl_VTA_RemesasLinea.id;

                                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_RemesasLinea_Datos.Grabar(mdl_VTA_RemesasLinea);

                                //Actualizar el Progress PROGRESO ..........
                                int_NumeroPosicion += 1;
                                g_obj_TareaAsincrona_ParaProgress.ReportProgress(int_NumeroPosicion, "2");
                                //......................................

                                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                                {
                                    lng_idRemesaLinea_NEW = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                                    //Actualizar los Listados el idRemesaLinea
                                    g_lst_VTA_Cobros.Where(m => m.idRemesaLinea.Equals(lng_idRemesaLinea_OLD)).ToList().ForEach(x => x.idRemesaLinea = lng_idRemesaLinea_NEW);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

                    //GRABAR COBROS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (g_lst_VTA_Cobros != null && g_lst_VTA_Cobros.Count() > 0)
                        {
                            //obtener los datos segun Opcion
                            mdl_INTERNO_OpcionesDetalle_Modelo = Datos_Generales.PRV_Opciones_Buscar_Detalles(Variables.G_STR_OPCION_VTA_COBRO);

                            //Grabar
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(0, Mensajes.G_STR_GRABANDO(mdl_INTERNO_OpcionesDetalle_Modelo.descripcion_Plural));

                            int_NumeroPosicion = 0;

                            //Actualizar el Progress TOTAL ..........
                            g_obj_TareaAsincrona_ParaProgress.ReportProgress(g_lst_VTA_Cobros.Count, "1");
                            //......................................

                            foreach (VTA_Cobros mdl_VTA_Cobros in g_lst_VTA_Cobros)
                            {
                                mdl_VTA_Cobros.confirmado = dtt_Actual;

                                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_VTA_Cobros_Datos.Grabar(mdl_VTA_Cobros);

                                //Actualizar el Progress PROGRESO ..........
                                int_NumeroPosicion += 1;
                                g_obj_TareaAsincrona_ParaProgress.ReportProgress(int_NumeroPosicion, "2");
                                //......................................

                                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        transaccion_SQL.Complete();
                    }

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        private INTERNO_ValorDevuelto_Modelo Grabar_Externo(INTERNO_OpcionesDetalle_Modelo _mdl_INTERNO_OpcionesDetalle_Modelo, dynamic _dnm_ObjetoGrabar)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {

                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + _mdl_INTERNO_OpcionesDetalle_Modelo.nombreLibreria + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType("" + _mdl_INTERNO_OpcionesDetalle_Modelo.nombreLibreria + "." + Variables.G_STR_LIBRERIA_OPCIONES);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_OPCIONES_PROCEDIMIENTO_GRABAR_REGISTRO, BindingFlags.Instance | BindingFlags.NonPublic);


                //Obtener valores
                object[] arr_Parametros = { _mdl_INTERNO_OpcionesDetalle_Modelo.opcion, _dnm_ObjetoGrabar };

                //Pasamos los parametros al metodo y lo ejecutamos
                mdl_INTERNO_ValorDevuelto_Modelo = (INTERNO_ValorDevuelto_Modelo)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_RecepcionCuaderno60_Controladora) + "/" + nameof(Grabar_Externo));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

    }
}
