Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
            }
        }
Exemplo n.º 5
0
        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();
            }
        }
Exemplo n.º 6
0
        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));
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        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
        }