Beispiel #1
0
        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);
        }
Beispiel #2
0
 public object Get(DiagnosticoInfo request)
 {
     return(Store.ReadDiagnosticoInfo(request));
 }