public static void ProcesaCopiaArchivosProcesadosAFinalizados(CLLASausageContext db) { var archivosFinalizadosPendientes = db.fnExpedienteDigitalFinalizadoPendiente().ToList(); int numeroTareas = archivosFinalizadosPendientes.Count; ManualResetEvent finalizado = new ManualResetEvent(false); foreach (var archivoFinalizadoPendiente in archivosFinalizadosPendientes) { var expedienteDigitalArchivo = db.ExpedienteDigitalArchivo.Where(w => w.IdExpedienteDigitalArchivo == archivoFinalizadoPendiente.IdExpedienteDigitalArchivo).SingleOrDefault(); Action accionEnvuelta = () => { try { ProcesaCopiaArchivoProcesadoAFinalizado(archivoFinalizadoPendiente, expedienteDigitalArchivo /*, db*/); } catch (Exception ex) { Logs.EscribirLog(ex); } finally { if (Interlocked.Decrement(ref numeroTareas) == 0) { finalizado.Set(); } } }; ThreadPool.QueueUserWorkItem(x => accionEnvuelta()); } finalizado.WaitOne(); db.SaveChanges(); }
public static void ProcesaBitacoraExportacionSysExpert(CLLASausageContext db) { var bitacorasExportacion = db.ExpedienteDigitalBitacoraExportacion.Where(w => w.Exportado == null && w.IdExpedienteDigitalTipoExportacion == 2).ToList(); int numeroTareas = bitacorasExportacion.Count; ManualResetEvent finalizado = new ManualResetEvent(false); foreach (var archivo in bitacorasExportacion) { Action accionEnvuelta = () => { try { ProcesaArchivoBitacoraExportacionSysExpert(archivo); } catch (Exception ex) { Logs.EscribirLog(ex); } finally { if (Interlocked.Decrement(ref numeroTareas) == 0) { finalizado.Set(); } } }; ThreadPool.QueueUserWorkItem(x => accionEnvuelta()); } finalizado.WaitOne(); db.SaveChanges(); }
public static void ProcesaArchivosPendientes(CLLASausageContext db, Configuracion configuracionSistema) { var procesamientoArchivosPendientes = db.ExpedienteDigitalProcesamientoArchivo.Where(w => DbFunctions.DiffDays(w.PrimeraBusqueda, DateTime.Now) < configuracionSistema.ProcesamientoHistoricoDias && w.Procesado == null).ToList(); int numeroTareas = procesamientoArchivosPendientes.Count; ManualResetEvent finalizado = new ManualResetEvent(false); foreach (var archivoPendiente in procesamientoArchivosPendientes) { Action accionEnvuelta = () => { try { ProcesaArchivoPendiente(archivoPendiente); } catch (Exception ex) { Logs.EscribirLog(ex); } finally { if (Interlocked.Decrement(ref numeroTareas) == 0) { finalizado.Set(); } } }; ThreadPool.QueueUserWorkItem(x => accionEnvuelta()); } finalizado.WaitOne(); db.SaveChanges(); }
public static void ProcesaBitacoraExportacionCliente(CLLASausageContext db) { var bitacorasExportacionCliente = db.ExpedienteDigitalBitacoraExportacionCliente.Where(w => w.RutaRaiz == null).ToList(); foreach (var bitacoraExportacionCliente in bitacorasExportacionCliente) { string rutaRaiz = bitacoraExportacionCliente.RutaRaizNomenclatura; var metaDatosGeneralesExpediente = db.ExpedienteDigitalMetaDato.Where(w => w.IdExpedienteDigital == bitacoraExportacionCliente.IdExpedienteDigital && w.Nivel == 1).ToList(); rutaRaiz = RemplazaMetaDatosRutaArchivo(metaDatosGeneralesExpediente, rutaRaiz); bitacoraExportacionCliente.RutaRaiz = rutaRaiz; bitacoraExportacionCliente.RutaCompletaExportado = rutaRaiz + bitacoraExportacionCliente.Nombre + "." + bitacoraExportacionCliente.Extension; db.SaveChanges(); } }
public static void CargaArchivosBitacoraExportacionClienteSFTP(CLLASausageContext db) { var arhivosBitacoraExportacionCliente = db.ExpedienteDigitalBitacoraExportacionCliente.Where(w => w.RutaCompletaExportado != null && w.Exportado == null && DateTime.Now >= w.Programacion && w.IdExpedienteDigitalTipoExportacion == 3).ToList(); foreach (var archivo in arhivosBitacoraExportacionCliente) { if (File.Exists(archivo.RutaOrigen)) { try { SessionOptions sessionOptions = new SessionOptions(); sessionOptions.HostName = archivo.Servidor; sessionOptions.PortNumber = Convert.ToInt32(archivo.Puerto); sessionOptions.UserName = archivo.Usuario; sessionOptions.Password = archivo.Contrasenia; sessionOptions.Protocol = Protocol.Sftp; sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey = true; Session session = new Session(); session.Open(sessionOptions); string rutaRaizFormateada = archivo.RutaRaiz.Substring(1).Replace(@"\", "/"); if (!session.FileExists(rutaRaizFormateada)) { var directorios = rutaRaizFormateada.Split('/').Where(w => w.Length > 0).ToList(); string ruta = string.Empty; foreach (var directorio in directorios) { ruta = ruta + "/" + directorio; if (!session.FileExists(ruta)) { session.CreateDirectory(ruta); } } } session.PutFileToDirectory(archivo.RutaOrigen, archivo.RutaRaiz.Substring(1).Replace(@"\", "/"), false, new TransferOptions { OverwriteMode = OverwriteMode.Overwrite }); session.Close(); archivo.Exportado = DateTime.Now; } catch (Exception ex) { archivo.Error = DateTime.Now; archivo.ErrorIdExpedienteDigitalEvento = (int)Modelos.Enumerados.ExpedienteDigitalEventoBitacora.FALTA_ARCHIVO_ORIGEN; archivo.ErrorObservaciones = Excepciones.ObtenerMensajesExcepcionEnCadenaSencilla(ex); } } else { archivo.Error = DateTime.Now; archivo.ErrorIdExpedienteDigitalEvento = (int)Modelos.Enumerados.ExpedienteDigitalEventoBitacora.FALTA_ARCHIVO_ORIGEN; archivo.ErrorObservaciones = "FALTA ARCHIVO EN ORIGEN"; } db.SaveChanges(); } }
public static void ProcesaGastosComprobados(CLLASausageContext db) { var archivosXML = Directory.GetFiles(configuracionSistema.GastosComprobadosRutaOrigen, "*.xml"); string rutaCompletaArchivoXML = string.Empty; string directorioRaizArchivoXML = string.Empty; string nombreCompletoArhivoXML = string.Empty; string nombreArchivoXML = string.Empty; string rutaCompletaArchivoPDF = string.Empty; foreach (var archivoXML in archivosXML) { rutaCompletaArchivoXML = archivoXML; directorioRaizArchivoXML = archivoXML.Substring(0, archivoXML.LastIndexOf("\\") + 1); nombreCompletoArhivoXML = archivoXML.Substring(archivoXML.LastIndexOf(@"\") + 1); nombreArchivoXML = nombreCompletoArhivoXML.Substring(0, nombreCompletoArhivoXML.LastIndexOf(".")); rutaCompletaArchivoPDF = directorioRaizArchivoXML + nombreArchivoXML + ".pdf"; ExpedienteDigitalGastoComprobado gastoComprobado = new ExpedienteDigitalGastoComprobado(); try { using (FileStream fileStream = new FileStream(archivoXML, FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(Comprobante)); Comprobante comprobante = (Comprobante)serializer.Deserialize(fileStream); //Datos del CFDI gastoComprobado.EmisorNombre = comprobante.Emisor.Nombre; gastoComprobado.EmisorRFC = comprobante.Emisor.Rfc; gastoComprobado.Fecha = comprobante.Fecha; gastoComprobado.Folio = comprobante.Folio; gastoComprobado.SubTotal = comprobante.SubTotal; gastoComprobado.Total = comprobante.Total; gastoComprobado.RutaArchivoXMLOrigen = archivoXML; gastoComprobado.RutaArchivoXMLDestino = configuracionSistema.GastosComprobadosRutaDestino + gastoComprobado.Fecha.Substring(0, 4) + "\\" + gastoComprobado.Fecha.Substring(5, 2) + "\\" + nombreCompletoArhivoXML; gastoComprobado.RutaArchivoPDFOrigen = configuracionSistema.GastosComprobadosRutaOrigen + nombreArchivoXML + ".pdf"; gastoComprobado.RutaArchivoPDFDestino = configuracionSistema.GastosComprobadosRutaDestino + gastoComprobado.Fecha.Substring(0, 4).ToString() + "\\" + gastoComprobado.Fecha.Substring(5, 2) + "\\" + nombreArchivoXML + ".pdf"; } Directory.CreateDirectory(gastoComprobado.RutaArchivoXMLDestino.Substring(0, gastoComprobado.RutaArchivoXMLDestino.LastIndexOf("\\"))); File.Move(gastoComprobado.RutaArchivoXMLOrigen, gastoComprobado.RutaArchivoXMLDestino); File.Move(gastoComprobado.RutaArchivoPDFOrigen, gastoComprobado.RutaArchivoPDFDestino); db.ExpedienteDigitalGastoComprobado.Add(gastoComprobado); db.SaveChanges(); } catch (IOException exYaExiste) when((exYaExiste.HResult & 0x0000FFFF) == 183) //El archivo ya existe en destino (ERROR_ALREADY_EXISTS) { string rutaErrorYaExiste = directorioRaizArchivoXML + "ProcesadoSausage\\Error\\YaExistente\\"; Directory.CreateDirectory(rutaErrorYaExiste); string rutaCompletaErrorXML = rutaErrorYaExiste + nombreCompletoArhivoXML; string rutaCompletaErrorPDF = rutaErrorYaExiste + nombreArchivoXML + ".pdf"; try { if (File.Exists(rutaCompletaErrorXML)) { File.Delete(rutaCompletaArchivoXML); } else { File.Move(rutaCompletaArchivoXML, rutaCompletaErrorXML); } if (File.Exists(rutaCompletaErrorPDF)) { File.Delete(rutaCompletaArchivoPDF); } else { File.Move(rutaCompletaArchivoPDF, rutaCompletaErrorPDF); } } catch (Exception ex) { Logs.EscribirLog("Error al mover XML (Error lectura XML): " + Excepciones.ObtenerMensajesExcepcionEnCadenaSencilla(ex)); } } catch (Exception ex) { if ( Excepciones.ObtenerNombreExcepcion(ex) == "XmlException" || (Excepciones.ObtenerNombreExcepcion(ex) == "InvalidOperationException" && Excepciones.ObtenerMensajeExepcion(ex) == "No se esperaba <Acuse xmlns=''>.") ) { string rutaErrorXML = directorioRaizArchivoXML + "ProcesadoSausage\\Error\\LecturaXML\\"; Directory.CreateDirectory(rutaErrorXML); string rutaCompletaErrorXML = rutaErrorXML + nombreCompletoArhivoXML; string rutaCompletaErrorPDF = rutaErrorXML + nombreArchivoXML + ".pdf"; try { File.Move(rutaCompletaArchivoXML, rutaCompletaErrorXML); File.Move(rutaCompletaArchivoPDF, rutaCompletaErrorPDF); } catch (Exception exXML) { Logs.EscribirLog("Error al mover XML (Error lectura XML): " + Excepciones.ObtenerMensajesExcepcionEnCadenaSencilla(exXML)); } } } } }
public static void ProcesaTablasProcesamiento(CLLASausageContext db) { #region GeneracionDeTablasProcesamiento var procesamientosPendientes = db.fnExpedienteDigitalProcesamientoPendiente().OrderBy(o => o.IdExpedienteDigital).ToList(); List <ExpedienteDigitalMetaDato> metaDatosExpediente = new List <ExpedienteDigitalMetaDato>(); List <ExpedienteDigitalMetaDato> metaDatosGeneralesExpediente = new List <ExpedienteDigitalMetaDato>(); int?ultimoIdExpedienteDigital = int.MinValue; foreach (var procesamientoPendiente in procesamientosPendientes) { string origenNomenclaura = procesamientoPendiente.OrigenNomenclatura; string destinoNomenclatura = procesamientoPendiente.DestinoNomenclatura; string archivoFinalizadoNomenclaturaOriginal = FuncionesEscalares.fnExpedienteDigitalObtenerNomenclaturaArchivoFinalizado(procesamientoPendiente.IdExpedienteDigitalProcesamiento, db); if ((ultimoIdExpedienteDigital == int.MinValue) || (procesamientoPendiente.IdExpedienteDigital != ultimoIdExpedienteDigital)) { Console.WriteLine("Procesando tabla expediente id: " + procesamientoPendiente.IdExpedienteDigital.ToString()); metaDatosExpediente = db.ExpedienteDigitalMetaDato.Where(w => w.IdExpedienteDigital == procesamientoPendiente.IdExpedienteDigital).ToList(); metaDatosGeneralesExpediente = metaDatosExpediente.Where(w => w.Nivel == 1).ToList(); ultimoIdExpedienteDigital = procesamientoPendiente.IdExpedienteDigital; } Boolean esPedConsolidado = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.RemNumeroRemesa).ToList().Count == 0 ? false : true; origenNomenclaura = RemplazaMetaDatosRutaArchivo(metaDatosGeneralesExpediente, origenNomenclaura); destinoNomenclatura = RemplazaMetaDatosRutaArchivo(metaDatosGeneralesExpediente, destinoNomenclatura); string archivoFinalizadoNomenclatura = RemplazaMetaDatosRutaArchivo(metaDatosGeneralesExpediente, archivoFinalizadoNomenclaturaOriginal); #region HOTFIXNAMESERVERSX origenNomenclaura = origenNomenclaura.Replace("NAS-EXPDigital", "10.1.45.252"); origenNomenclaura = origenNomenclaura.Replace("NAS-EXPDIGITAL", "10.1.45.252"); #endregion switch (procesamientoPendiente.IdExpedienteDigitalTipoArchivo) { case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.COVE_ACUSE: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.COVE_IMPRESO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.COVE_XML: var metaDatosCOVE = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.PedCOVENumeroEDocument).ToList(); foreach (var metaDatoCOVE in metaDatosCOVE) { List <ExpedienteDigitalMetaDato> metaDatosPadre = new List <ExpedienteDigitalMetaDato>(); metaDatosPadre.Add(metaDatoCOVE); string origen = RemplazaMetaDatosRutaArchivo(metaDatosPadre, origenNomenclaura); string destino = RemplazaMetaDatosRutaArchivo(metaDatosPadre, destinoNomenclatura); string finalizado = RemplazaMetaDatosRutaArchivo(metaDatosPadre, archivoFinalizadoNomenclatura); AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origen, destino, archivoFinalizadoNomenclaturaOriginal, finalizado, true, db ); } break; case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_AVISO_CONSOLIDADO_IMPRESO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_AVISO_CONSOLIDADO_XML_ENVIO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_AVISO_CONSOLIDADO_XML_RESPUESTA: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.REMESA_RELACION_DE_FACTURAS: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.REMESA_SIMPLIFICADO: var metaDatosRemesa = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.RemNumeroRemesa).ToList(); foreach (var metaDatoRemesa in metaDatosRemesa) { List <ExpedienteDigitalMetaDato> metaDatosPadre = new List <ExpedienteDigitalMetaDato>(); metaDatosPadre.Add(metaDatoRemesa); string origen = RemplazaMetaDatosRutaArchivo(metaDatosPadre, origenNomenclaura); string destino = RemplazaMetaDatosRutaArchivo(metaDatosPadre, destinoNomenclatura); string finalizado = RemplazaMetaDatosRutaArchivo(metaDatosPadre, archivoFinalizadoNomenclatura); var metaDatosHijos = metaDatosExpediente.Where(w => w.EsHijo == metaDatoRemesa.IdExpedienteDigitalMetaDato).ToList(); if (metaDatosHijos.Count > 0) { origen = RemplazaMetaDatosRutaArchivo(metaDatosHijos, origen); destino = RemplazaMetaDatosRutaArchivo(metaDatosHijos, destino); } AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origen, destino, archivoFinalizadoNomenclaturaOriginal, finalizado, true, db ); } break; case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_IMPRESO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_XML_ENVIO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DODA_XML_RESPUESTA: if (!esPedConsolidado) { AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origenNomenclaura, destinoNomenclatura, archivoFinalizadoNomenclaturaOriginal, archivoFinalizadoNomenclatura, true, db ); } break; case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DIGITALIZACION_DOCUMENTO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DIGITALIZACION_XML_ENVIO: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DIGITALIZACION_XML_RESPUESTA: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.DIGITALIZACION_ACUSE_IMPRESO: var metaDatosDigitalizacion = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.PedDigitalizacionNumeroEDocument).ToList(); foreach (var metaDatoDigitalizacion in metaDatosDigitalizacion) //MAS DE UN REGISTRO { List <ExpedienteDigitalMetaDato> metaDatosPadre = new List <ExpedienteDigitalMetaDato>(); metaDatosPadre.Add(metaDatoDigitalizacion); string origen = RemplazaMetaDatosRutaArchivo(metaDatosPadre, origenNomenclaura); string destino = RemplazaMetaDatosRutaArchivo(metaDatosPadre, destinoNomenclatura); string finalizado = RemplazaMetaDatosRutaArchivo(metaDatosPadre, archivoFinalizadoNomenclatura); var metaDatosHijos = metaDatosExpediente.Where(w => w.EsHijo == metaDatoDigitalizacion.IdExpedienteDigitalMetaDato).ToList(); if (metaDatosHijos.Count > 0) { origen = RemplazaMetaDatosRutaArchivo(metaDatosHijos, origen); destino = RemplazaMetaDatosRutaArchivo(metaDatosHijos, destino); } AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origen, destino, archivoFinalizadoNomenclaturaOriginal, finalizado, true, db ); } break; case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.MANIFESTACION_DE_VALOR: var metaDato = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.PedCantidadProveedores).SingleOrDefault(); int cantidadProveedores = Convert.ToInt32(metaDato.Valor); for (int i = 0; i < cantidadProveedores; i++) { string origen = origenNomenclaura.Replace("{Consecutivo}", (i + 1).ToString()); string destino = destinoNomenclatura.Replace("{Consecutivo}", (i + 1).ToString()); string finalizado = archivoFinalizadoNomenclatura.Replace("{Consecutivo}", (i + 1).ToString()); AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origen, destino, archivoFinalizadoNomenclaturaOriginal, finalizado, true, db ); } break; case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.GASTO_COMPROBADO_PDF: case (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.GASTO_COMPROBADO_XML: var metaDatosGastosComproados = metaDatosExpediente.Where(w => w.Nombre == Modelos.Enumerados.ExpedientedigitalTipoMetaDato.GastoComprobadoFolio).ToList(); foreach (var metaDatoGastoComprobado in metaDatosGastosComproados) //MAS DE UN REGISTRO { List <ExpedienteDigitalMetaDato> metaDatosPadre = new List <ExpedienteDigitalMetaDato>(); metaDatosPadre.Add(metaDatoGastoComprobado); var gastoComprobado = db.ExpedienteDigitalGastoComprobado.Where(w => w.Folio == metaDatoGastoComprobado.Valor).FirstOrDefault(); if (gastoComprobado != null) { string origen = procesamientoPendiente.IdExpedienteDigitalTipoArchivo == (int)Modelos.Enumerados.ExpedienteDigitalTipoArchivo.GASTO_COMPROBADO_PDF ? gastoComprobado.RutaArchivoPDFDestino : gastoComprobado.RutaArchivoXMLDestino; string destino = RemplazaMetaDatosRutaArchivo(metaDatosPadre, destinoNomenclatura); string finalizado = RemplazaMetaDatosRutaArchivo(metaDatosPadre, archivoFinalizadoNomenclatura); AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origen, destino, archivoFinalizadoNomenclaturaOriginal, finalizado, true, db ); } } break; default: if (!origenNomenclaura.Contains("{") || !destinoNomenclatura.Contains("{")) //Se remplazaron correctamento los metadatos { AgregarProcesamientoArchivo( procesamientoPendiente.IdExpedienteDigital, procesamientoPendiente.IdExpedienteDigitalProcesamiento, origenNomenclaura, destinoNomenclatura, archivoFinalizadoNomenclaturaOriginal, archivoFinalizadoNomenclatura, true, db ); } break; } } db.SaveChanges(); #endregion }