public DiagnosticoInfoResponse ReadDiagnosticoInfo(DiagnosticoInfo request) { var response = new DiagnosticoInfoResponse(); response.Norma = request.Norma; response.Normas = ReadNorma(new ReadNorma()).Data; response.Diagnostico = GetById <Diagnostico> (request.Id) ?? new Diagnostico(); response.Plantilla = GetById <Plantilla> (response.Diagnostico.IdPlantilla) ?? new Plantilla(); response.Empresa = GetById <EmpresaLogo> (response.Diagnostico.IdEmpresa) ?? new EmpresaLogo(); response.Capitulos = GetByQuery <CapituloInfo> (typeof(Capitulo), q => q.IdPlantilla == response.Diagnostico.IdPlantilla) .OrderBy(q => NormalizeNumeral(q.Numeral)).ToList(); var capIds = response.Capitulos.ConvertAll(e => e.Id); var p = GetCollection <Pregunta>().Find(Query <Pregunta> .In((q) => q.IdCapitulo, capIds)) .OrderBy(q => NormalizeNumeral(q.Numeral)).ToList(); var r = GetByQuery <Respuesta> (q => q.IdDiagnostico == response.Diagnostico.Id, q => q.IdPregunta); p.ForEach(q => { var vp = new ViewPreguntaInfo { Pregunta = q, Respuesta = r.FirstOrDefault(rq => rq.IdPregunta == q.Id) ?? new Respuesta { IdPregunta = q.Id, IdDiagnostico = response.Diagnostico.Id, Respuestas = new List <bool>(q.Preguntas.Count), Valor = (q.Preguntas.Count > 0 ? (short)0 : default(short?)) }, }; response.Preguntas.Add(vp); var cap = response.Capitulos.First(c => c.Id == q.IdCapitulo); ++cap.TotalQ; if (vp.Respuesta.Valor == 1) { ++cap.TotalR; } response.Normas.ForEach(n => { var sc = n.Alias == "Decreto"?vp.Pregunta.Decreto: n.Alias == "OHSAS"? vp.Pregunta.OHSAS:vp.Pregunta.RUC; var item = n.Items.FirstOrDefault(i => i.Codigo == sc); if (item == default(NormaItem)) { item = new NormaItem { Codigo = vp.Pregunta.Numeral }; n.Items.Add(item); } var grupo = n.Grupos.FirstOrDefault(gr => gr.Codigos.Contains(sc)); if (grupo == default(NormaGrupo)) { grupo = new NormaGrupo(); grupo.Codigos.Add(vp.Pregunta.Numeral); n.Grupos.Add(grupo); } ++grupo.TotalQ; ++item.TotalQ; ++n.TotalQ; if (vp.Respuesta.Valor == 1) { ++n.TotalR; ++item.TotalR; ++grupo.TotalR; } }); }); response.Preguntas = response.Preguntas.OrderByDescending(q => q.Respuesta.Valor).ToList(); response.Normas.ForEach(n => { n.Items = n.Items.OrderByDescending(x => x.TotalR > 0?x.TotalQ:x.TotalQ * -1).OrderByDescending(x => (double)x.TotalR / (double)x.TotalQ).ToList(); n.Grupos = n.Grupos.OrderByDescending(x => x.TotalR > 0?x.TotalQ:x.TotalQ * -1).OrderByDescending(x => (double)x.TotalR / (double)x.TotalQ).ToList(); }); return(response); }
public object Get(DiagnosticoInfo request) { return(Store.ReadDiagnosticoInfo(request)); }