예제 #1
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");
        }
예제 #2
0
        protected override void DespuesDePersistir(CodigoPostalDtm registro, ParametrosDeNegocio parametros)
        {
            base.DespuesDePersistir(registro, parametros);
            if (parametros.Operacion == enumTipoOperacion.Insertar)
            {
                //relacionar con la provincia usando los dos primeros caractéres
                var gestorProvincias = GestorDeProvincias.Gestor(Contexto, Contexto.Mapeador);
                var provinciaDtm     = gestorProvincias.LeerRegistro(nameof(ProvinciaDtm.Codigo), registro.Codigo.PadLeft(5, '0').Substring(0, 2), errorSiNoHay: true, errorSiHayMasDeUno: true, traqueado: false, conBloqueo: false, aplicarJoin: false);
                GestorDeCpsDeUnaProvincia.CrearRelacion(Contexto, registro, provinciaDtm);

                //relacionar con el municipio usando lo indicado en los parámetros
                if (parametros.Parametros.ContainsKey(nameof(MunicipioDtm)))
                {
                    var municipioDtm = (MunicipioDtm)parametros.Parametros[nameof(MunicipioDtm)];
                    GestorDeCpsDeUnMunicipio.CrearRelacion(Contexto, registro, municipioDtm);
                }
            }
        }