public object Post(UpdateCuestionario request) { var r = Store.UpdateCuestionario(request); if (r.Data.Estado == "green") { TryPublishMessage(new CreateDiagnosticoInfo { Id = r.Data.IdDiagnostico }); } return(r); }
public BulkResult <Descarga> UpdateCuestionario(UpdateCuestionario request) { var descarga = Single <Descarga> (q => q.Token == request.Data.Descarga.Token && q.IdDiagnostico == request.Data.Descarga.IdDiagnostico ); if (descarga.Id.IsNullOrEmpty()) { throw new Exception("Token token:'{0}' No encontrado".Fmt(request.Data.Descarga.Token)); } if (descarga.Estado == "green") { throw new Exception("Cuestionario asociado al Token token:'{0}' ya esta actualizado" .Fmt(request.Data.Descarga.Token)); } if (descarga.Estado == "red") { descarga.Estado = "yellow"; Put(descarga); } var bwr = new BulkWrite(); if (request.Data.Respuestas.Count > 0) { var cl = GetCollection <Respuesta> (); BulkWriteOperation bw = cl.InitializeOrderedBulkOperation(); request.Data.Respuestas.ForEach(r => { if (r.Respuestas.Count > 0) { r.Valor = (short?)(r.Respuestas.Exists(v => v == false)?0:1); } bw.Find(Query <Respuesta> .Where(q => q.IdDiagnostico == descarga.IdDiagnostico && q.IdPregunta == r.IdPregunta)) .Upsert().UpdateOne(Update <Respuesta> .Set(f => f.Valor, r.Valor).Set(f => f.NoAplicaChecked, r.NoAplicaChecked).Set(f => f.Respuestas, r.Respuestas)); }); var wc = bw.Execute(); bwr.PopulateWith(wc); bwr.UpsertsCount = wc.Upserts.Count; } if (request.Data.RespuestasGuias.Count > 0) { var gIds = request.Data.RespuestasGuias.ConvertAll(e => e.IdGuia); var guias = GetCollection <Guia>().Find(Query <Guia> .In((q) => q.Id, gIds)); var cl2 = GetCollection <RespuestaGuia> (); BulkWriteOperation bw2 = cl2.InitializeOrderedBulkOperation(); request.Data.RespuestasGuias.ForEach(r => { var guia = guias.FirstOrDefault(g => g.Id == r.IdGuia); bw2.Find(Query <RespuestaGuia> .Where(q => q.IdDiagnostico == descarga.IdDiagnostico && q.IdGuia == r.IdGuia)) .Upsert().UpdateOne(Update <RespuestaGuia> .Set(f => f.Valor, r.Valor) .Set(f => f.NoAplicaChecked, r.NoAplicaChecked) .Set(f => f.Tipo, guia.Tipo)); }); var wc2 = bw2.Execute(); bwr.DeleteCount += wc2.DeletedCount; bwr.InsertedCount += wc2.InsertedCount; bwr.MatchedCount += wc2.MatchedCount; bwr.UpsertsCount += wc2.Upserts.Count; } if ((request.Data.Respuestas.Count + request.Data.RespuestasGuias.Count) > 0 && ((bwr.UpsertsCount + bwr.MatchedCount) == (request.Data.Respuestas.Count + request.Data.RespuestasGuias.Count))) { descarga.Estado = "green"; Put(descarga); GetCollection <Diagnostico> ().FindAndModify(new FindAndModifyArgs { Query = Query <Diagnostico> .EQ(x => x.Id, descarga.IdDiagnostico), Update = Update <Diagnostico> .Inc(x => x.Revision, 1).Set(x => x.FechaRevision, DateTime.UtcNow) }); } return(CreateResult(descarga, bwr)); }