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._3_Vistas.ControlesPersonalizados_DentroPaneles;
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_Respuesta_EnvioDeuda_AEAT_Controladora
    {
        #region Variables Generales
        private P_Respuesta_EnvioDeuda_AEAT g_frm_P_Respuesta_EnvioDeuda_AEAT = null;//Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando;//Pantalla de Espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc

        public GEN_EjerciciosActivos_Empresa g_mdl_GEN_EjerciciosActivos_Empresa = null;
        public INTERNO_VTA_RemesasCabecera_Modelo g_mdl_INTERNO_VTA_RemesasCabecera_Modelo = null;
        public List<INTERNO_VTA_RemesasLinea_Listado_Modelo> g_lst_INTERNO_VTA_RemesasLinea_Listado_Modelo = null;

        private List<INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo> g_lst_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo = new List<INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo>();

        //Tareea Asincrona de procesar datos
        private BackgroundWorker g_obj_TareaAsincrona_ProcesarDatos;

        private List<INTERNO_CodigoDescripcion_Modelo> g_lst_DocumentoRespuesta_Errores = new List<INTERNO_CodigoDescripcion_Modelo>();
        private List<INTERNO_CodigoDescripcion_Modelo> g_lst_DocumentoRespuesta_Campos_Tipo0 = new List<INTERNO_CodigoDescripcion_Modelo>();
        private List<INTERNO_CodigoDescripcion_Modelo> g_lst_DocumentoRespuesta_Campos_Tipo1 = new List<INTERNO_CodigoDescripcion_Modelo>();
        private List<INTERNO_CodigoDescripcion_Modelo> g_lst_DocumentoRespuesta_Campos_Tipo4= new List<INTERNO_CodigoDescripcion_Modelo>();
        #endregion

        //Constructor de la clase Logica
        public P_Respuesta_EnvioDeuda_AEAT_Controladora(P_Respuesta_EnvioDeuda_AEAT _frm_P_Respuesta_EnvioDeuda_AEAT)
        {
            g_frm_P_Respuesta_EnvioDeuda_AEAT = _frm_P_Respuesta_EnvioDeuda_AEAT;


            //Rellenar Listado Errores
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00000", "Correcto"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00001", "Falta"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00002", "Formato erroneo"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00003", "No existe"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00004", "Erroneo"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00005", "Duplicado"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00006", "Valor ilogico"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00007", "No identificado"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00008", "Otros errores"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00009", "Fallecido/Entidad disuelta"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("00010", "Concursal"));
            g_lst_DocumentoRespuesta_Errores.Add(new INTERNO_CodigoDescripcion_Modelo("99999", "Longitud incorrecta del registro recibido"));


            //Rellenar Listado Campos Tipo 0
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("01", "Indicador de registro de cabecera"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("02", "Tipo de Oficina Liquidadora"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("03", "Año y número de envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("04", "Fecha de envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("05", "Número de liquidaciones del envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("06", "Importe pendiente de las liquidaciones"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("07", "Número de responsables garantías"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("08", "Importe de responsabilidad garantías"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("09", "Periodo en que deben gestionarse las liquidaciones/deudas"));
            g_lst_DocumentoRespuesta_Campos_Tipo0.Add(new INTERNO_CodigoDescripcion_Modelo("10", "Indicador de tipo de moneda"));

            //Rellenar Listado Campos Tipo 1
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("01", "Indicador de detalle de liquidaciones/deudas"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("02", "Año y número de envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("03", "Número de orden de la liquidación/deuda dentro del envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("04", "Clave de liquidación"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("05", "DNI o CI del deudor. Para DNI 30-37 Núm. 38 Alf"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("06", "Apellidos y Nombre o Razón Social del deudor."));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("07", "Siglas de la vía pública de domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("08", "Nombre de la vía pública del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("09", "Número del portal del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("10", "Letra del portal del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("11", "Escalera del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("12", "Piso del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("13", "Puerta del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("14", "Código de la Administración de la A.E.A.T. del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("15", "Código de la provincia del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("16", "Código del municipio del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("17", "Código postal del domicilio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("18", "Código del concepto presupuestario"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("19", "Indicador del tipo de liquidación./Deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("20", "Fecha de liquidación"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("21", "Forma en que debe gestionarse el cobro de la liquidación./Deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("22", "Indicador de que se trata de una liquidación de sanción"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("23", "Indicador de que la deuda está recurrida"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("24", "Ejercicio a que corresponde la deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("25", "Descripción del objeto tributario/deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("26", "Código del municipio del objeto tributario/deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("27", "Código postal del objeto/deuda tributario/prov.origen"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("28", "Importe principal"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("29", "Importe recargo"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("30", "Importe total"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("31", "Importe ingresado fuera de plazo"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("32", "Fecha del ingreso del importe ingresado fuera de plazo"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("33", "Fecha de notificación en voluntaria"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("34", "Tipo de notificación"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("35", "Fecha de vencimiento en voluntaria"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("36", "Fecha de certificación/prov. de apremio"));
            g_lst_DocumentoRespuesta_Campos_Tipo1.Add(new INTERNO_CodigoDescripcion_Modelo("37", "Referencia del órgano emisor"));


            //Rellenar Listado Campos Tipo 4
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("01", "Indicador de registro de detalles de otras informaciones"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("02", "Año y número de envío"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("03", "Número de orden de Registro Tipo 4"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("04", "Clave de liquidación/deuda"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("05", "Tipo de información"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("06", "Código de órgano que dicta el acuerdo"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("07", "Tipo recurso"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("08", "Período de prescripción"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("09", "Fecha de última actuación interruptiva"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("10", "Indicador de PDF Posterior"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("11", "Fecha Nacimiento de la obligación"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("12", "Indicador de TIPO de acuerdo/convenio"));
            g_lst_DocumentoRespuesta_Campos_Tipo4.Add(new INTERNO_CodigoDescripcion_Modelo("13", "Fecha ACUERDO/CONVENIO"));
        }


        #region Procesar los datos del fichero
        public void ProcesarDatos_Respuesta_DeudaAEAT(string _str_RutaFichero)
        {
            try
            {

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

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

                //Vaciar Variables de Lineas del fichero
                g_lst_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Clear();
                g_frm_P_Respuesta_EnvioDeuda_AEAT.Exferia_DataGridView_Respuestas.Rows.Clear();

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_ProcesarDatos.RunWorkerAsync(_str_RutaFichero);
                //#################################################################################################

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

                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_Respuesta_EnvioDeuda_AEAT_Controladora) + "/" + nameof(ProcesarDatos_Respuesta_DeudaAEAT), true);
            }
        }
        private void TareaAsincrona_ProcesarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                string str_RutaFichero = (string)e.Argument;

                if (ProcesarDatos(str_RutaFichero, ((BackgroundWorker)sender)) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Respuesta_EnvioDeuda_AEAT_Controladora) + "/" + nameof(TareaAsincrona_ProcesarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Respuesta_EnvioDeuda_AEAT_Controladora) + "/" + nameof(TareaAsincrona_ProcesarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_ProcesarDatos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid
                g_frm_P_Respuesta_EnvioDeuda_AEAT.Exferia_DataGridView_Respuestas.Rows.Add((DataGridViewRow)e.UserState);

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Respuesta_EnvioDeuda_AEAT_Controladora) + "/" + nameof(TareaAsincrona_ProcesarDatos_ProgressChanged));
            }
        }
        private void TareaAsincrona_ProcesarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            try
            {

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



        private bool ProcesarDatos(string _str_RutaFichero,BackgroundWorker _obj_TareaAsincrona_ParaProgress)
        {
            bool bol_ValorDevuelto = true;
            StreamReader obj_Fichero = null;

            try
            {
                INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo =null;
                string str_Linea="";

                string str_Tipo = "";
                string str_AnyoNumeroEnvio = "";
                string str_TextoError = "";
                INTERNO_CodigoDescripcion_Modelo mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = null;
                string str_NombreCampo = "";
                INTERNO_CodigoDescripcion_Modelo mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = null;


                //Cargar el Fichero
                obj_Fichero = new StreamReader(_str_RutaFichero);
                
                //Leerlo Linea a Linea
                while ((str_Linea = obj_Fichero.ReadLine()) != null)
                {
                    //Obtener el Tipo
                    str_Tipo = str_Linea.Substring(0, 1);

                    //Solo almacenara el Tipo 0 ,el Tipo 1 y el Tipo 4
                    if (str_Tipo.Equals("0") || str_Tipo.Equals("1") || str_Tipo.Equals("4"))
                    {
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo = new INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo();
                        
                        //Tipo ................................................................................
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Tipo = str_Tipo;

                        //Numero de Envio .....................................................................
                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            str_AnyoNumeroEnvio = str_Linea.Substring(7, 5);
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            str_AnyoNumeroEnvio = str_Linea.Substring(1, 5);
                        }
                         //Tipo 4
                        else
                        {
                            str_AnyoNumeroEnvio = str_Linea.Substring(1, 5);
                        }
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.NumeroEnvio = int.Parse(str_AnyoNumeroEnvio.Substring(2,3));

                        //Clave liquidacion .....................................................................
                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.ClaveLiquidacionAEAT = "";
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RoeZec = "";
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RazonSocial = "";
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.ClaveLiquidacionAEAT = str_Linea.Substring(12, 17);
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RoeZec = "";
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RazonSocial = str_Linea.Substring(38, 40);
                        }
                        //Tipo 4
                        else
                        {
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.ClaveLiquidacionAEAT = "";
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RoeZec = "";
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RazonSocial = "";
                        }
                       
                        //Estado ...............................................................................
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo = str_Linea.Substring(312, 2);
                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            if (mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo.Equals("SI"))
                            {
                                mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado = true;
                            }
                            else
                            {
                                mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado = false;
                            }
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            if (mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo!=null &&
                                mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo.Trim().Length>0 &&
                                int.Parse(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo)>=1 &&
                                int.Parse(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado_Codigo)<= 56)
                            {
                                mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado = true;
                            }
                            else
                            {
                                mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado = false;
                            }
                        }
                        //Tipo 4
                        else
                        {
                            mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado = false;
                        }

                        //Error 1 ...............................................................................................
                        str_TextoError = "";
                        str_NombreCampo = "";

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_Codigo = str_Linea.Substring(314, 5);
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_NumeroCampo = str_Linea.Substring(319, 2);
                        mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = g_lst_DocumentoRespuesta_Errores.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_Codigo)).FirstOrDefault();
                        if (mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR!=null)
                        {
                            str_TextoError = mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR.Descripcion;
                        }

                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo0.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo1.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo4
                        else
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo4.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_NumeroCampo)).FirstOrDefault();
                        }

                        if (mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO != null)
                        {
                            str_NombreCampo ="[" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_NumeroCampo + "] " +  mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO.Descripcion;
                        }

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1 =  "(" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_Codigo + ") " +
                                                                                        str_TextoError + 
                                                                                        (str_NombreCampo.Trim().Length>0 ? ("- " + str_NombreCampo) : "");


                        //Error 2 ...............................................................................................
                        str_TextoError = "";
                        str_NombreCampo = "";

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_Codigo = str_Linea.Substring(321, 5);
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_NumeroCampo = str_Linea.Substring(326, 2);
                        mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = g_lst_DocumentoRespuesta_Errores.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_Codigo)).FirstOrDefault();
                        if (mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR != null)
                        {
                            str_TextoError = mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR.Descripcion;
                        }

                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo0.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo1.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo4
                        else
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo4.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_NumeroCampo)).FirstOrDefault();
                        }

                        if (mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO != null)
                        {
                            str_NombreCampo = "[" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_NumeroCampo + "] " + mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO.Descripcion;
                        }

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2 = "(" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_Codigo + ") " +
                                                                                        str_TextoError +
                                                                                        (str_NombreCampo.Trim().Length > 0 ? ("- " + str_NombreCampo) : "");


                        //Error 3 ...............................................................................................
                        str_TextoError = "";
                        str_NombreCampo = "";

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_Codigo = str_Linea.Substring(328, 5);
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_NumeroCampo = str_Linea.Substring(333, 2);
                        mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = g_lst_DocumentoRespuesta_Errores.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_Codigo)).FirstOrDefault();
                        if (mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR != null)
                        {
                            str_TextoError = mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR.Descripcion;
                        }

                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo0.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo1.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo4
                        else
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo4.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_NumeroCampo)).FirstOrDefault();
                        }

                        if (mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO != null)
                        {
                            str_NombreCampo = "[" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_NumeroCampo + "] " + mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO.Descripcion;
                        }
                       

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3 = "(" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_Codigo + ") " +
                                                                                        str_TextoError +
                                                                                        (str_NombreCampo.Trim().Length > 0 ? ("- " + str_NombreCampo) : "");

                        //Error 4 ...............................................................................................
                        str_TextoError = "";
                        str_NombreCampo = "";

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_Codigo = str_Linea.Substring(335, 5);
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_NumeroCampo = str_Linea.Substring(340, 2);
                        mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = g_lst_DocumentoRespuesta_Errores.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_Codigo)).FirstOrDefault();
                        if (mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR != null)
                        {
                            str_TextoError = mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR.Descripcion;
                        }

                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo0.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo1.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo4
                        else
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo4.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_NumeroCampo)).FirstOrDefault();
                        }

                        if (mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO != null)
                        {
                            str_NombreCampo = "[" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_NumeroCampo + "] " + mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO.Descripcion;
                        }

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4 = "(" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_Codigo + ") " +
                                                                                        str_TextoError +
                                                                                        (str_NombreCampo.Trim().Length > 0 ? ("- " + str_NombreCampo) : "");


                        //Error 5 ...............................................................................................
                        str_TextoError = "";
                        str_NombreCampo = "";

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_Codigo = str_Linea.Substring(342, 5);
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_NumeroCampo = str_Linea.Substring(347, 2);
                        mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR = g_lst_DocumentoRespuesta_Errores.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_Codigo)).FirstOrDefault();
                        if (mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR != null)
                        {
                            str_TextoError = mdl_INTERNO_CodigoDescripcion_Modelo_TEXTOERROR.Descripcion;
                        }

                        //Tipo 0
                        if (str_Tipo.Equals("0"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo0.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo 1
                        else if (str_Tipo.Equals("1"))
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo1.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_NumeroCampo)).FirstOrDefault();
                        }
                        //Tipo4
                        else
                        {
                            mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO = g_lst_DocumentoRespuesta_Campos_Tipo4.Where(m => m.Codigo.Equals(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_NumeroCampo)).FirstOrDefault();
                        }

                        if (mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO != null)
                        {
                            str_NombreCampo = "[" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_NumeroCampo + "] " + mdl_INTERNO_CodigoDescripcion_Modelo_NOMBRECAMPO.Descripcion;
                        }

                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5 = "(" + mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_Codigo + ") " +
                                                                                        str_TextoError +
                                                                                        (str_NombreCampo.Trim().Length > 0 ? ("- " + str_NombreCampo) : "");

                        //Otros Errores
                        mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_Otros = str_Linea.Substring(349, 1);

                        //Añadir al DataGridView
                        _obj_TareaAsincrona_ParaProgress.ReportProgress(2, Transformar_Modelo_A_Row_EstadosFicheros(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo, null));

                        //Añadir al Listado
                        g_lst_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Add(mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo);
                    }
                }

              

            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Respuesta_EnvioDeuda_AEAT_Controladora) + "/" + nameof(ProcesarDatos));
                bol_ValorDevuelto = false;
            }
            finally
            {
                if (obj_Fichero!=null)
                {
                    obj_Fichero.Close();
                    obj_Fichero.Dispose();
                }
            }

            return bol_ValorDevuelto;
        }

        public DataGridViewRow Transformar_Modelo_A_Row_EstadosFicheros(INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {
                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Respuesta_EnvioDeuda_AEAT.Exferia_DataGridView_Respuestas.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Respuesta_EnvioDeuda_AEAT.Exferia_DataGridView_Respuestas);
            }

            obj_DataGridViewRow.Cells[0].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Tipo;
            obj_DataGridViewRow.Cells[1].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Estado ? "ACEPTADO" : "RECHAZADO";
            obj_DataGridViewRow.Cells[2].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RoeZec;
            obj_DataGridViewRow.Cells[3].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Socio_RazonSocial;
            obj_DataGridViewRow.Cells[4].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1;
            obj_DataGridViewRow.Cells[5].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2;
            obj_DataGridViewRow.Cells[6].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3;
            obj_DataGridViewRow.Cells[7].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4;
            obj_DataGridViewRow.Cells[8].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5;
            obj_DataGridViewRow.Cells[9].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_Otros;
            obj_DataGridViewRow.Cells[10].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_1_Codigo;
            obj_DataGridViewRow.Cells[11].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_2_Codigo;
            obj_DataGridViewRow.Cells[12].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_3_Codigo;
            obj_DataGridViewRow.Cells[13].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_4_Codigo;
            obj_DataGridViewRow.Cells[14].Value = _mdl_INTERNO_LiquidacionesDeudasAEAT_Respuesta_Modelo.Error_5_Codigo;

            return obj_DataGridViewRow;
        }

        #endregion

    }
}
