Exemple #1
0
        public static void BorrarTrazas(EntornoDeTrabajo entorno)
        {
            entorno.CrearTraza("Inicio del proceso");
            var ficheros = Directory.GetFiles(TrazaSql.ruta);
            var borrados = 0;
            var errores  = 0;
            var trazaDtm = entorno.CrearTraza("Fichero a borrar");

            foreach (var fichero in ficheros)
            {
                if (File.Exists(fichero))
                {
                    try
                    {
                        entorno.ActualizarTraza(trazaDtm, $"Borrando el fichero {Path.GetFileName(fichero)}");
                        File.Delete(fichero);
                        borrados++;
                    }
                    catch (Exception e)
                    {
                        entorno.AnotarError($"Error al borrar el fichero {Path.GetFileName(fichero)}", e);
                        errores++;
                    }
                }
            }
            entorno.CrearTraza($"Se han borrado {borrados} y {errores} no se han podido borrar");
        }
        private static TipoDeViaDtm ProcesarTipoDeViaLeido(EntornoDeTrabajo entorno, GestorDeTiposDeVia gestor, string sigla, string nombre, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var p = gestor.LeerRegistro(nameof(TipoDeViaDtm.Sigla), sigla, errorSiNoHay: false, errorSiHayMasDeUno: true, traqueado: true, conBloqueo: false, false);

            //var p = LeerTipoDeViaPorSigla(entorno.contextoDelProceso, sigla, paraActualizar: true);
            if (p == null)
            {
                p         = new TipoDeViaDtm();
                p.Sigla   = sigla;
                p.Nombre  = nombre;
                operacion = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando el tipo de vía {sigla}");
            }
            else
            {
                if (p.Nombre != nombre)
                {
                    p.Nombre  = nombre;
                    operacion = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                    entorno.ActualizarTraza(trazaInfDtm, $"Modificando el tipo de vía {sigla}");
                    entorno.CrearTraza($"Existe un tipo de vía con la sigla {p.Sigla}, el nombre es {p.Nombre}, vaya al mantenimiento si quiere cambiar el nombre por {nombre}");
                }
                else
                {
                    entorno.ActualizarTraza(trazaInfDtm, $"El tipo de vía {sigla} ya existe");
                    return(p);
                }
            }

            return(gestor.PersistirRegistro(p, operacion));
        }
Exemple #3
0
        internal static void ImportarFicheroDeCalles(EntornoDeTrabajo entorno, int idArchivo)
        {
            var gestorProceso = Gestor(entorno.contextoDelProceso, entorno.contextoDelProceso.Mapeador);
            var rutaFichero   = GestorDocumental.DescargarArchivo(entorno.contextoDelProceso, idArchivo, entorno.ProcesoIniciadoPorLaCola);
            var fichero       = new FicheroCsv(rutaFichero);
            var linea         = 1;

            entorno.CrearTraza($"Inicio del proceso");
            var trazaPrcDtm = entorno.CrearTraza($"Procesando la fila {linea}");
            var trazaInfDtm = entorno.CrearTraza($"Traza informativa del proceso");

            foreach (var fila in fichero)
            {
                var tran = gestorProceso.IniciarTransaccion();
                try
                {
                    if (fila.EnBlanco)
                    {
                        continue;
                    }

                    if (fila.Columnas != 6)
                    {
                        throw new Exception($"la fila {linea} solo debe tener 6 columnas");
                    }

                    if (fila["A"].IsNullOrEmpty() || fila["B"].IsNullOrEmpty() ||
                        fila["C"].IsNullOrEmpty() || fila["D"].IsNullOrEmpty() ||
                        fila["E"].IsNullOrEmpty() || fila["F"].IsNullOrEmpty())
                    {
                        throw new Exception($"El contenido de la fila {linea} debe ser:Iso2Pais, código de provincia, código municipio, codigo de calle, nombre de la calle, sigla del tipo de vía");
                    }

                    ProcesarCalleLeido(entorno, gestorProceso,
                                       iso2Pais: fila["A"],
                                       codigoProvincia: fila["B"],
                                       codigoMunicipio: fila["C"],
                                       codigoCalle: fila["D"],
                                       nombreCalle: fila["E"],
                                       siglaTipoVia: fila["F"],
                                       trazaInfDtm);
                    gestorProceso.Commit(tran);
                }
                catch (Exception e)
                {
                    gestorProceso.Rollback(tran);
                    entorno.AnotarError($"Error al procesar la fila {linea}", e);
                }
                finally
                {
                    entorno.ActualizarTraza(trazaPrcDtm, $"Procesando la fila {linea}");
                    linea++;
                }
            }

            entorno.CrearTraza($"Procesadas un total de {linea} filas");
        }
Exemple #4
0
        public static void ImportarFicheroDeCodigosPostales(EntornoDeTrabajo entorno, int idArchivo)
        {
            var gestor      = Gestor(entorno.contextoDelProceso, entorno.contextoDelProceso.Mapeador);
            var rutaFichero = GestorDocumental.DescargarArchivo(entorno.contextoDelProceso, idArchivo, entorno.ProcesoIniciadoPorLaCola);
            var fichero     = new FicheroCsv(rutaFichero);
            var linea       = 0;

            entorno.CrearTraza($"Inicio del proceso");
            var trazaPrcDtm = entorno.CrearTraza($"Procesando la fila {linea}");
            var trazaInfDtm = entorno.CrearTraza($"Traza informativa del proceso");

            foreach (var fila in fichero)
            {
                var tran = gestor.IniciarTransaccion();
                try
                {
                    linea++;
                    if (fila.EnBlanco)
                    {
                        continue;
                    }

                    if (fila.Columnas != 3)
                    {
                        throw new Exception($"la fila {linea} solo debe tener 3 columnas");
                    }

                    if (fila["A"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica la provincia, celda A, no puede ser nulo");
                    }
                    if (fila["B"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el municipio, celda B, no puede ser nulo");
                    }
                    if (fila["C"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el CP, celda C, no puede ser nulo");
                    }

                    ProcesarCodigosPostales(entorno, gestor, fila["A"], fila["B"], fila["C"], trazaInfDtm);
                    gestor.Commit(tran);
                }
                catch (Exception e)
                {
                    gestor.Rollback(tran);
                    entorno.AnotarError($"Error al procesar la línea {linea}", e);
                }
                finally
                {
                    entorno.ActualizarTraza(trazaPrcDtm, $"Procesando la fila {linea}");
                }
            }

            entorno.CrearTraza($"Procesadas un total de {linea} filas");
        }
Exemple #5
0
        public static void ImportarFicheroDeProvincias(EntornoDeTrabajo entorno, int idArchivo)
        {
            var gestorProceso = GestorDeProvincias.Gestor(entorno.contextoDelProceso, entorno.contextoDelProceso.Mapeador);
            var rutaFichero   = GestorDocumental.DescargarArchivo(entorno.contextoDelProceso, idArchivo, entorno.ProcesoIniciadoPorLaCola);
            var fichero       = new FicheroCsv(rutaFichero);
            var linea         = 0;

            entorno.CrearTraza($"Inicio del proceso");
            var trazaPrcDtm = entorno.CrearTraza($"Procesando la fila {linea}");
            var trazaInfDtm = entorno.CrearTraza($"Traza informativa del proceso");

            foreach (var fila in fichero)
            {
                var tran = gestorProceso.IniciarTransaccion();
                try
                {
                    linea++;
                    if (fila.EnBlanco)
                    {
                        continue;
                    }

                    if (fila.Columnas != 5)
                    {
                        throw new Exception($"la fila {linea} solo debe tener 5 columnas");
                    }

                    if (fila["A"].IsNullOrEmpty() || fila["B"].IsNullOrEmpty() ||
                        fila["C"].IsNullOrEmpty() || fila["D"].IsNullOrEmpty() ||
                        fila["E"].IsNullOrEmpty())
                    {
                        throw new Exception($"El contenido de la fila {linea} debe ser: nombre de la provincia, nombre en ingles, iso de 2 iso de 3 y prefijo telefónico");
                    }

                    ProcesarProvinciaLeida(entorno, gestorProceso,
                                           iso2Pais: fila["E"],
                                           nombreProvincia: fila["C"],
                                           sigla: fila["A"],
                                           codigo: fila["B"],
                                           prefijoTelefono: fila["D"],
                                           trazaInfDtm);
                    gestorProceso.Commit(tran);
                }
                catch (Exception e)
                {
                    gestorProceso.Rollback(tran);
                    entorno.AnotarError(e);
                }
                finally
                {
                    entorno.ActualizarTraza(trazaPrcDtm, $"Procesando la fila {linea}");
                }
            }

            entorno.CrearTraza($"Procesadas un total de {linea} filas");
        }
        public static void Exportacion(EntornoDeTrabajo entorno)
        {
            Dictionary <string, object> parametros = entorno.TrabajoDeUsuario.Parametros.ToDiccionarioDeParametros();

            if (!parametros.ContainsKey(nameof(ElementoDto)))
            {
                GestorDeErrores.Emitir("No se ha indicado el ElementoDto de exportación");
            }

            if (!parametros.ContainsKey(nameof(Registro)))
            {
                GestorDeErrores.Emitir("No se ha indicado el Registro de exportación");
            }

            var gestor = NegociosDeSe.CrearGestor(entorno.contextoDelProceso, parametros[nameof(Registro)].ToString(), parametros[nameof(ElementoDto)].ToString());

            var cantidad = !parametros.ContainsKey(ltrFiltros.cantidad) ? -1 : parametros[ltrFiltros.cantidad].ToString().Entero();
            var posicion = !parametros.ContainsKey(ltrFiltros.posicion) ? 0 : parametros[ltrFiltros.posicion].ToString().Entero();
            List <ClausulaDeFiltrado>   filtros = !parametros.ContainsKey(ltrFiltros.filtro) || parametros[ltrFiltros.filtro].ToString().IsNullOrEmpty() ? new List <ClausulaDeFiltrado>() : JsonConvert.DeserializeObject <List <ClausulaDeFiltrado> >(parametros["filtro"].ToString());
            List <ClausulaDeOrdenacion> orden   = !parametros.ContainsKey(ltrFiltros.orden) || parametros[ltrFiltros.orden].ToString().IsNullOrEmpty() ? new List <ClausulaDeOrdenacion>() : JsonConvert.DeserializeObject <List <ClausulaDeOrdenacion> >(parametros["orden"].ToString());

            var opcionesDeMapeo = new Dictionary <string, object>();

            opcionesDeMapeo.Add(ltrParametrosDto.DescargarGestionDocumental, false);

            Type       clase          = gestor.GetType();
            MethodInfo metodo         = clase.GetMethod(nameof(GestorDeElementos <ContextoSe, Registro, ElementoDto> .LeerElementos));
            dynamic    elementos      = metodo.Invoke(gestor, new object[] { posicion, cantidad, filtros, orden, opcionesDeMapeo });
            var        ficheroConRuta = GenerarExcel(entorno.contextoDelProceso, elementos);

            GestorDeCorreos.CrearCorreoPara(entorno.contextoDelProceso
                                            , new List <string> {
                parametros[ltrFltCorreosDto.receptores].ToString()
            }
                                            , "Exportación solicitada"
                                            , "Se le adjunta el fichero con la exportación solicitada"
                                            , new List <TipoDtoElmento>()
                                            , new List <string>()
            {
                ficheroConRuta
            }
                                            );
        }
Exemple #7
0
        private static CodigoPostalDtm ProcesarCodigosPostales(EntornoDeTrabajo entorno, GestorDeCodigosPostales gestor, string provincia, string municipio, string cp, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var codigoPostalDtm = gestor.LeerRegistro(nameof(CodigoPostalDtm.Codigo), cp, errorSiNoHay: false, errorSiHayMasDeUno: true, traqueado: false, conBloqueo: false, aplicarJoin: false);

            if (codigoPostalDtm == null)
            {
                codigoPostalDtm        = new CodigoPostalDtm();
                codigoPostalDtm.Codigo = cp;
                operacion = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando el codigo postal {cp}");
            }
            else
            {
                entorno.ActualizarTraza(trazaInfDtm, $"El codigo postal {cp} ya existe");
                GestorDeCpsDeUnMunicipio.CrearRelacionConMunicipioSiNoExiste(entorno.contextoDelProceso, codigoPostalDtm, "ES", provincia, municipio);
                return(codigoPostalDtm);
            }
            operacion.Parametros[ltrCps.NombreProvincia] = provincia;
            operacion.Parametros[ltrCps.NombreMunicipio] = municipio;
            return(gestor.PersistirRegistro(codigoPostalDtm, operacion));
        }
        public static void ImportarCallejero(EntornoDeTrabajo entorno)
        {
            var archivos = JsonConvert.DeserializeObject <List <archivoParaImportar> >(entorno.TrabajoDeUsuario.Parametros);

            if (archivos.Count == 0)
            {
                GestorDeErrores.Emitir("No se ha sometido ningún fichero a cargar");
            }

            foreach (archivoParaImportar archivo in archivos)
            {
                switch (archivo.parametro)
                {
                case ParametroPais:
                    ImportarFicheroDePaises(entorno, archivo.valor);
                    break;

                case GestorDeProvincias.ParametroProvincia:
                    GestorDeProvincias.ImportarFicheroDeProvincias(entorno, archivo.valor);
                    break;

                case GestorDeMunicipios.ParametroMunicipio:
                    GestorDeMunicipios.ImportarFicheroDeMunicipios(entorno, archivo.valor);
                    break;

                case GestorDeTiposDeVia.ParametroTipoDeVia:
                    GestorDeTiposDeVia.ImportarFicheroDeTiposDeVia(entorno, archivo.valor);
                    break;

                case GestorDeCodigosPostales.ltrCps.csvCp:
                    GestorDeCodigosPostales.ImportarFicheroDeCodigosPostales(entorno, archivo.valor);
                    break;

                default:
                    GestorDeErrores.Emitir($"No es valido el parámetro {archivo.parametro} en el proceso {nameof(ImportarCallejero)}");
                    break;
                }
            }
        }
Exemple #9
0
        private static ProvinciaDtm ProcesarProvinciaLeida(EntornoDeTrabajo entorno, GestorDeProvincias gestor, string iso2Pais, string nombreProvincia, string sigla, string codigo, string prefijoTelefono, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var provinciaDtm = LeerProvinciaPorCodigo(gestor.Contexto, iso2Pais, codigo, paraActualizar: false, errorSiNoHay: false);

            if (provinciaDtm == null)
            {
                var pais = GestorDePaises.LeerPaisPorCodigo(gestor.Contexto, iso2Pais, errorSiNoHay: false);
                provinciaDtm         = new ProvinciaDtm();
                provinciaDtm.Codigo  = codigo;
                provinciaDtm.Nombre  = nombreProvincia;
                provinciaDtm.Sigla   = sigla;
                provinciaDtm.IdPais  = pais.Id;
                provinciaDtm.Prefijo = prefijoTelefono;
                operacion            = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando la provincia {nombreProvincia}");
            }
            else
            {
                if (provinciaDtm.Nombre != nombreProvincia || provinciaDtm.Codigo != codigo || provinciaDtm.Sigla != sigla || provinciaDtm.Prefijo != prefijoTelefono)
                {
                    provinciaDtm.Nombre  = nombreProvincia;
                    provinciaDtm.Sigla   = sigla;
                    provinciaDtm.Codigo  = codigo;
                    provinciaDtm.Prefijo = prefijoTelefono;
                    operacion            = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                    entorno.ActualizarTraza(trazaInfDtm, $"Modificando la provincia {nombreProvincia}");
                }
                else
                {
                    entorno.ActualizarTraza(trazaInfDtm, $"La provincia {nombreProvincia} ya exite");
                    return(provinciaDtm);
                }
            }

            provinciaDtm.Pais = null;
            return(gestor.PersistirRegistro(provinciaDtm, operacion));
        }
Exemple #10
0
        private static MunicipioDtm ProcesarMunicipioLeido(EntornoDeTrabajo entorno, GestorDeMunicipios gestorProceso, string iso2Pais, string codigoProvincia, string codigoMunicipio, string DC, string nombreMunicipio, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var municipioDtm = LeerMunicipioPorCodigo(gestorProceso.Contexto, iso2Pais, codigoProvincia, codigoMunicipio, paraActualizar: false, errorSiNoHay: false);

            if (municipioDtm == null)
            {
                var provinciaDtm = GestorDeProvincias.LeerProvinciaPorCodigo(gestorProceso.Contexto, iso2Pais, codigoProvincia, paraActualizar: false);

                municipioDtm             = new MunicipioDtm();
                municipioDtm.IdProvincia = provinciaDtm.Id;
                municipioDtm.Codigo      = codigoMunicipio;
                municipioDtm.Nombre      = nombreMunicipio;
                municipioDtm.DC          = DC;
                operacion = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando el municipio {nombreMunicipio}");
            }
            else
            {
                if (municipioDtm.Nombre != nombreMunicipio || municipioDtm.Codigo != codigoMunicipio || municipioDtm.DC != DC)
                {
                    municipioDtm.Nombre             = nombreMunicipio;
                    municipioDtm.DC                 = DC;
                    municipioDtm.Codigo             = codigoMunicipio;
                    operacion                       = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                    municipioDtm.UsuarioModificador = null;
                    entorno.ActualizarTraza(trazaInfDtm, $"Modificando el municipio {nombreMunicipio}");
                }
                else
                {
                    entorno.ActualizarTraza(trazaInfDtm, $"el municipio {nombreMunicipio} ya exite");
                    return(municipioDtm);
                }
            }
            municipioDtm.Provincia = null;
            return(gestorProceso.PersistirRegistro(municipioDtm, operacion));
        }
Exemple #11
0
        private static CalleDtm ProcesarCalleLeido(EntornoDeTrabajo entorno, GestorDeCalles gestorProceso, string iso2Pais, string codigoProvincia, string codigoMunicipio, string codigoCalle, string nombreCalle, string siglaTipoVia, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var calleDtm   = LeerCallePorCodigo(gestorProceso.Contexto, iso2Pais, codigoProvincia, codigoMunicipio, codigoCalle, paraActualizar: false, errorSiNoHay: false);
            var tipoViaDtm = gestorProceso.Contexto.Set <TipoDeViaDtm>().LeerCacheadoPorPropiedad(nameof(TipoDeViaDtm.Sigla), siglaTipoVia);

            if (calleDtm == null)
            {
                var municipioDtm = GestorDeMunicipios.LeerMunicipioPorCodigo(gestorProceso.Contexto, iso2Pais, codigoProvincia, codigoMunicipio, paraActualizar: false);

                calleDtm             = new CalleDtm();
                calleDtm.IdMunicipio = municipioDtm.Id;
                calleDtm.Codigo      = codigoCalle;
                calleDtm.Nombre      = nombreCalle;
                calleDtm.IdTipoVia   = tipoViaDtm.Id;
                operacion            = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando la calle {nombreCalle}");
            }
            else
            {
                if (calleDtm.Nombre != nombreCalle || calleDtm.IdTipoVia != tipoViaDtm.Id)
                {
                    calleDtm.Nombre             = nombreCalle;
                    calleDtm.IdTipoVia          = tipoViaDtm.Id;
                    operacion                   = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                    calleDtm.UsuarioModificador = null;
                    entorno.ActualizarTraza(trazaInfDtm, $"Modificando la calle {nombreCalle}");
                }
                else
                {
                    entorno.ActualizarTraza(trazaInfDtm, $"la calle {nombreCalle} ya exite");
                    return(calleDtm);
                }
            }
            calleDtm.Municipio = null;
            return(gestorProceso.PersistirRegistro(calleDtm, operacion));
        }
        private static PaisDtm ProcesarPaisLeido(EntornoDeTrabajo entorno, GestorDePaises gestor, string nombrePais, string nombreEnIngles, string Iso2, string codigoPais, string prefijoTelefono, TrazaDeUnTrabajoDtm trazaInfDtm)
        {
            ParametrosDeNegocio operacion;
            var pais = gestor.LeerRegistro(nameof(PaisDtm.Codigo), codigoPais, false, true, false, false, false);

            if (pais == null)
            {
                pais              = new PaisDtm();
                pais.Codigo       = codigoPais;
                pais.Nombre       = nombrePais;
                pais.NombreIngles = nombreEnIngles;
                pais.ISO2         = Iso2;
                pais.Prefijo      = prefijoTelefono;
                operacion         = new ParametrosDeNegocio(enumTipoOperacion.Insertar);
                entorno.ActualizarTraza(trazaInfDtm, $"Creando el pais {nombrePais}");
            }
            else
            {
                if (pais.Nombre != nombrePais || pais.ISO2 != Iso2 || pais.NombreIngles != nombreEnIngles || pais.Prefijo != prefijoTelefono)
                {
                    pais.Nombre       = nombrePais;
                    pais.NombreIngles = nombreEnIngles;
                    pais.ISO2         = Iso2;
                    pais.Prefijo      = prefijoTelefono;
                    operacion         = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                    entorno.ActualizarTraza(trazaInfDtm, $"Modificando el pais {nombrePais}");
                }
                else
                {
                    entorno.ActualizarTraza(trazaInfDtm, $"El pais {nombrePais} ya existe");
                    return(pais);
                }
            }

            return(gestor.PersistirRegistro(pais, operacion));
        }
        private static void ImportarFicheroDePaises(EntornoDeTrabajo entorno, int idArchivo)
        {
            var gestor      = Gestor(entorno.contextoDelProceso, entorno.contextoDelProceso.Mapeador);
            var rutaFichero = GestorDocumental.DescargarArchivo(entorno.contextoDelProceso, idArchivo, entorno.ProcesoIniciadoPorLaCola);
            var fichero     = new FicheroCsv(rutaFichero);
            var linea       = 0;

            entorno.CrearTraza($"Inicio del proceso");
            var trazaPrcDtm = entorno.CrearTraza($"Procesando la fila {linea}");
            var trazaInfDtm = entorno.CrearTraza($"Traza informativa del proceso");

            foreach (var fila in fichero)
            {
                var tran = gestor.IniciarTransaccion();
                try
                {
                    linea++;
                    if (fila.EnBlanco)
                    {
                        continue;
                    }

                    if (fila.Columnas != 5)
                    {
                        throw new Exception($"la fila {linea} solo debe tener 5 columnas");
                    }

                    if (fila["A"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el nombre del país, celda A, no puede ser nulo");
                    }
                    if (fila["B"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el nombre en Inglés, celda B, no puede ser nulo");
                    }
                    if (fila["C"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el iso2, celda C, no puede ser nulo");
                    }
                    if (fila["D"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el iso3, celda D, no puede ser nulo");
                    }
                    if (fila["E"].IsNullOrEmpty())
                    {
                        GestorDeErrores.Emitir($"El contenido de la fila {linea} donde se indica el prefijo telefónico, celda E, no puede ser nulo");
                    }

                    ProcesarPaisLeido(entorno, gestor, fila["A"], fila["B"], fila["C"], fila["D"], fila["E"], trazaInfDtm);
                    gestor.Commit(tran);
                }
                catch (Exception e)
                {
                    gestor.Rollback(tran);
                    entorno.AnotarError(e);
                }
                finally
                {
                    entorno.ActualizarTraza(trazaPrcDtm, $"Procesando la fila {linea}");
                }
            }

            entorno.CrearTraza($"Procesadas un total de {linea} filas");
        }