public ExpedienteBandejaDTO registrarDerivacion(Expediente expediente, string userId) { Derivacion derivacion = new Derivacion(); derivacion = expediente.derivaciones.FirstOrDefault(); derivacion.usuarioreceptor = userId; var filter = Builders <Expediente> .Filter.Eq(exp => exp.id, expediente.id); var update = Builders <Expediente> .Update.Push("derivaciones", derivacion); _expedientes.UpdateOne(filter, update); BandejaDocumento bandejaDocumento = new BandejaDocumento(); bandejaDocumento.idexpediente = expediente.id; bandejaDocumento.iddocumento = expediente.documentos.Last().iddocumento; UpdateDefinition <Bandeja> updateBandeja = Builders <Bandeja> .Update.Push("bandejaentrada", bandejaDocumento); _bandejas.UpdateOne(band => band.usuario == userId, updateBandeja); UpdateDefinition <Bandeja> updateBandejaS = Builders <Bandeja> .Update.Pull("bandejasalida", bandejaDocumento); _bandejas.UpdateOne(band => band.usuario == derivacion.usuarioemisor, updateBandejaS); UpdateDefinition <Bandeja> updateBandejaE = Builders <Bandeja> .Update.Pull("bandejaentrada", bandejaDocumento); _bandejas.UpdateOne(band => band.usuario == derivacion.usuarioemisor, updateBandejaE); Proceso proceso = new Proceso(); proceso.area = derivacion.areaprocedencia; proceso.fechaemision = DateTime.Now; proceso.fecharecepcion = DateTime.Now; proceso.idemisor = derivacion.usuarioemisor; proceso.idreceptor = userId; UpdateDefinition <Documento> updateDocumento = Builders <Documento> .Update.Push("historialproceso", proceso); _documentos.UpdateOne(doc => doc.id == bandejaDocumento.iddocumento, updateDocumento); ExpedienteBandejaDTO ex = new ExpedienteBandejaDTO(); ex = obtenerExpedienteBandeja(expediente.id); return(ex); }
public async Task SendMessageBandeja(string user, ExpedienteBandejaDTO bandeja) { await Clients.Group(user).SendAsync("ReceiveMessageBandeja", user, bandeja); }
public ExpedienteBandejaDTO obtenerExpedienteBandeja(string idexpediente) { BsonArray embebedpipeline = new BsonArray(); var match = new BsonDocument("$match", new BsonDocument("_id", new ObjectId(idexpediente))); embebedpipeline.Add( new BsonDocument("$match", new BsonDocument( "$expr", new BsonDocument( "$eq", new BsonArray { "$_id", new BsonDocument( "$toObjectId", "$$iddoc") } )))); var lookup = new BsonDocument("$lookup", new BsonDocument("from", "documentos"). Add("let", new BsonDocument("iddoc", "$documentos.iddocumento")). Add("pipeline", embebedpipeline). Add("as", "documentosobj")); var group = new BsonDocument("$group", new BsonDocument { { "_id", "$_id" }, { "tipo", new BsonDocument("$first", "$tipo") }, { "cliente", new BsonDocument("$first", "$cliente") }, { "documentosobj", new BsonDocument("$push", "$documentosobj") } }); var project = new BsonDocument("$project", new BsonDocument { { "_id", 0 }, { "idexpediente", "$_id" }, { "tipo", "$tipo" }, { "cliente", "$cliente" }, { "documentosobj", "$documentosobj" }, { "documento", new BsonDocument("$arrayElemAt", new BsonArray { "$documentosobj", -1 }) } }); ExpedienteBandejaDTO listaexpedientesdto = new ExpedienteBandejaDTO(); listaexpedientesdto = _expedientes.Aggregate() .AppendStage <Expediente>(match) .Unwind <Expediente, Expedientedoc>(x => x.documentos) .AppendStage <Expedientedoc_lookup>(lookup) .Unwind <Expedientedoc_lookup, Expedientedoc_lookup_ur>(x => x.documentosobj) .AppendStage <Expedientedoc_group>(group) .AppendStage <ExpedienteBandejaDTO>(project).SingleOrDefault(); return(listaexpedientesdto); }