public ActionResult ConsultarProceso(String mesProceso) { Resultado <ProcesoMapas> resultadoDetalle = new Resultado <ProcesoMapas>(); //Inicializamos la variable que representa el proceso ejecutado actualmente. procesoTrabajo = new ProcesoMapas(); try { DateTime fechaProceso = Convert.ToDateTime(DateTime.ParseExact(mesProceso, "dd/MM/yyyy", CultureInfo.CurrentUICulture.DateTimeFormat)); //Consultamos los procesos erroneos List <ProcesoMapas> ProcesoError = FacadeErrores.ConsultaErrores(fechaProceso.Date.Year, fechaProceso.Date.Month); resultadoDetalle.Listado = ProcesoError.ToList(); //Agregamos los errores a la vista principal resultadoDetalle.Lista = ProcesoError.ToList(); //Consultamos los datos en base de datos List <ProcesoMapas> mapasProceso = FacadeProceso.ConsultaProcesoByFecha(fechaProceso.Date.Year, fechaProceso.Date.Month); resultadoDetalle.Listado.AddRange(mapasProceso.Where(x => x.llestatusMapa == Constantes.ID_ESTATUS_INICIADO || x.llestatusMapa == Constantes.ID_ESTATUS_ERROR).ToList()); resultadoDetalle.Lista.AddRange(mapasProceso.ToList()); resultadoDetalle.Lista = resultadoDetalle.Lista.OrderBy(x => x.fcinicio).ToList(); // Si no existen registros agregamos como proceso exitoso 2 para indicar que no se cargen los GRIDS if (mapasProceso.Count == 0) { resultadoDetalle.ProcesoExitoso = 2; } else { procesoTrabajo.llproceso = mapasProceso[0].llproceso; resultadoDetalle.ProcesoExitoso = 1; } } catch (Exception ex) { resultadoDetalle.ProcesoExitoso = 0; resultadoDetalle.Mensaje = ex.Message; } return(Json(resultadoDetalle, JsonRequestBehavior.DenyGet)); }
public ActionResult ProcesarCarpeta(String mesProceso) { Resultado <ProcesoMapas> resultadoArchivo = new Resultado <ProcesoMapas>(); try { DateTime fechaProceso = Convert.ToDateTime(DateTime.ParseExact(mesProceso, "dd/MM/yyyy", CultureInfo.CurrentUICulture.DateTimeFormat)); Procesos proceso = new Procesos(); DateTime fechaHoy = DateTime.Now; proceso.boprocesomanual = false; proceso.dslog = ""; proceso.dsmes = fechaProceso.Date.Month; proceso.dsanio = Convert.ToInt32(fechaProceso.Date.ToString("yyyy")); int IdPro = FacadeProceso.InsertarMvProceso(proceso); procesoTrabajo = new ProcesoMapas(); procesoTrabajo.llproceso = IdPro; //Validamos el tipo de acceso a archivos. String tipoAccesoArchivos = ConfigurationManager.AppSettings["usarFTP"]; List <string> archivos; if (tipoAccesoArchivos.Equals("true")) { //Obtenemos los archivos del FTP archivos = InteraccionFTP.obtenerListaArchivos(FacadeFTP.ConsultaFTP(), fechaProceso.Date.ToString("yyyy"), Convert.ToString(fechaProceso.Date.Month)); } else { //Obtenemos los datos de la carpeta y almacenamos los procedimientos de mapas. string mes = Convert.ToString(fechaProceso.Date.Month); if (fechaProceso.Date.Month < 10) { mes = "0" + mes; } String[] archivosRuta = System.IO.Directory.GetFiles(ConfigurationManager.AppSettings["RutaDocumentos"] + fechaProceso.Date.ToString("yyyy") + "//" + mes); archivos = new List <string>(archivosRuta); } if (archivos.Count == 0) { resultadoArchivo.ProcesoExitoso = 0; resultadoArchivo.Mensaje = "No se han encontrado archivos a procesar."; return(Json(resultadoArchivo, JsonRequestBehavior.DenyGet)); } //recorremos todos los archivos y los escribimos en consola List <ProcesoMapas> ListaProcesosMapas = new List <ProcesoMapas>(); foreach (var rutaarchivo in archivos) { Console.WriteLine(rutaarchivo); String archivo = System.IO.Path.GetFileName(rutaarchivo); ProcesoMapas procesoMapa = new ProcesoMapas(); procesoMapa.llproceso = IdPro; procesoMapa.dsarchivo = archivo; //Obtenemos el prefigo del arvhivo string[] sufijo = archivo.Split('_'); string datoPrefijo = sufijo[0]; //Obtenemos el mapa a cargar por el prefijo List <Mapas> mapas = FacadeMapa.BuscaMapa(datoPrefijo); if (mapas.Count == 0) { // update log no hay mapa procesoMapa.dslogMapa = "No se ha encontrado el mapa asociado"; procesoMapa.llestatusMapa = 3; FacadeErrores.InsertaErrorMapa(IdPro, archivo); } else { //Verificamos si el mapa ya esta cargado en catalogo. List <ProcesoMapas> mapa = FacadeProceso.ConsultaAllProcesoMapaByIdproceso(procesoTrabajo.llproceso).Where(x => x.llmapa == mapas.First().mapaId&& x.llestatusMapa == 2).ToList(); if (mapa.Count() > 0) { procesoMapa.llmapa = mapa.First().llmapa; procesoMapa.fcinicio = mapa.First().fcinicio; procesoMapa.llestatusMapa = mapa.First().llestatusMapa; procesoMapa.dsmapa = mapa.First().dsmapa; } else { //Cargamos el archivo en temporales string rutaDocumento = HostingEnvironment.MapPath("~/Temporal/" + Guid.NewGuid().ToString() + System.IO.Path.GetExtension(archivo)); System.IO.File.Copy(rutaarchivo, rutaDocumento, true); //Request.Files[0].SaveAs(rutaDocumento); Mapas mapaExtraccion = mapas.First(); //si mapa extraccion es igual 86 imprime laa linea Console.WriteLine(rutaarchivo); procesoMapa.llmapa = mapaExtraccion.mapaId; procesoMapa.dsmapa = mapaExtraccion.ClaveMapa; procesoMapa.dslogMapa = "Inicia el proceso de extracción del archivo + " + archivo; procesoMapa.dslogMapa = procesoMapa.dslogMapa + "Mapa encontrado" + mapaExtraccion.ClaveMapa; //Inserta proceso mapa///////////////////////////////verificar Procesos proMapa = new Procesos(); proMapa.IdMapa = mapaExtraccion.mapaId; proMapa.llprocesos = IdPro; //Datos del excel List <Catalogo> datosCatalogo = new List <Catalogo>(); try { int IdPros = FacadeProceso.InsertaProcMapas(proMapa); procesoMapa.fcinicio = DateTime.Now.ToString(); //Actualizamos el inicio del mapa ActualizaProcesoMapa(IdPro, mapaExtraccion.mapaId, 4, archivo, "Inicia el proceso de extracción del archivo " + archivo); ActualizaProcesoMapa(IdPro, mapaExtraccion.mapaId, 0, null, "Mapa encontrado " + mapaExtraccion.ClaveMapa); //Modificamos la seccion de tareas con EPPlus //Creamos una nueva instancia con el archiv que utilizaremos como plantilla. ExcelPackage pantillaExcel = new ExcelPackage(new FileInfo(rutaDocumento)); //Creamos un objecto tipo ExcelWorksheet que sera en la que vamos a trabajar. ExcelWorksheet hojaTrabajo = pantillaExcel.Workbook.Worksheets[mapaExtraccion.hoja]; //Validamos los encabezados string statusError = ValidarHeaders(hojaTrabajo, mapaExtraccion, IdPro); if (statusError != String.Empty) { throw new Exception("La validación de encabezados terminó con errores."); } //Obtenemos los datos del exel datosCatalogo = DatosExcel(hojaTrabajo, mapaExtraccion, IdPro); procesoMapa.llestatusMapa = 1; ActualizaProcesoMapa(IdPro, mapaExtraccion.mapaId, 1, null, "Mapa procesado correctamente."); } catch (Exception ex) { string errorMessage = ex.Message; procesoMapa.dslogMapa = (procesoMapa.dslogMapa + errorMessage); procesoMapa.llestatusMapa = 3; //Actualizamos el estatus a error ActualizaProcesoMapa(IdPro, mapaExtraccion.mapaId, 3, null, errorMessage); } procesoMapa.catalogos = datosCatalogo; } } ListaProcesosMapas.Add(procesoMapa); } resultadoArchivo.Lista = ListaProcesosMapas; //Recuperamos los archivos que no se encontro mapa. resultadoArchivo.Listado = FacadeErrores.ConsultaErrores(fechaProceso.Date.Year, fechaProceso.Date.Month); foreach (ProcesoMapas mapaerror in ListaProcesosMapas.Where(x => x.llestatusMapa == 4 || x.llestatusMapa == 3).ToList()) { if (resultadoArchivo.Listado.Where(x => x.llmapa == mapaerror.llmapa).Count() == 0) { resultadoArchivo.Listado.Add(mapaerror); } } resultadoArchivo.ProcesoExitoso = 1; } catch (Exception ex) { resultadoArchivo.ProcesoExitoso = 0; resultadoArchivo.Mensaje = ex.Message; } return(Json(resultadoArchivo, JsonRequestBehavior.DenyGet)); }