Esempio n. 1
0
        public ActionResult Responder(RespuestaDtoIn respuestaDto)
        {
            if (!_preguntaRepository.Exists(respuestaDto.IdPregunta))
            {
                return(BadRequest("El numero de pregunta es incorrecto"));
            }

            if (!_sesionRepository.Exists(respuestaDto.IdSesion))
            {
                return(BadRequest("El id de la persona es incorrecto"));
            }

            if (!_opcionRepository.Exists(respuestaDto.IdOpcion))
            {
                return(BadRequest("El numero de respuesta es incorrecto"));
            }

            Respuesta respuesta = _mapper.Map <Respuesta>(respuestaDto);

            _respuestaRepository.GuardarRespuesta(respuesta);

            return(Ok("Respuesta guardada correctamente"));
        }
        public bool GuardarRespuestas(ObjRespuestaDTO objRespuestaDTO)
        {
            //Comienzo armando el objeto
            Respuesta miRespuesta = new Respuesta();

            miRespuesta.IdPersona    = objRespuestaDTO.IdPersona;
            miRespuesta.Tipo         = objRespuestaDTO.Tipo;
            miRespuesta.GeneroAlerta = false;
            List <Correo> correosNotificar = null;

            //Evaluar si se levantan alertas
            List <Pregunta> preguntas = preguntaRepository.getPreguntasActivas("Cuestionario");

            foreach (DetalleRespuesta p in objRespuestaDTO.DetalleRespuestas)
            {
                //Validar cada una de las respuestas
                Pregunta miPregunta = preguntas.SingleOrDefault(d => d.Id == p.IdPregunta);
                p.Pregunta = miPregunta;

                if (miPregunta.GeneraAlerta)
                {
                    //Evalua los distintos tipos de valores
                    switch (miPregunta.TipoValor)
                    {
                    case "texto":

                        //Evalua los distintos tipos de condiciones para texto
                        switch (miPregunta.CondicionGeneraAlerta)
                        {
                        case "=":
                            if (p.ValorRespuesta == miPregunta.ValorGeneraAlerta)
                            {
                                miRespuesta.GeneroAlerta = true;
                                p.GeneroAlerta           = true;
                            }
                            break;
                        }

                        break;

                    case "decimal":

                        //Evalua los distintos tipos de condiciones para decimal
                        switch (miPregunta.CondicionGeneraAlerta)
                        {
                        case ">=":
                            if (Convert.ToDecimal(p.ValorRespuesta) >= Convert.ToDecimal(miPregunta.ValorGeneraAlerta))
                            {
                                miRespuesta.GeneroAlerta = true;
                                p.GeneroAlerta           = true;
                            }
                            break;
                        }

                        break;
                    }
                }
            }

            if (miRespuesta.GeneroAlerta)
            {
                //Busca las personas a notificar
                correosNotificar = correoRepository.getCorreosActivos();
                string textoCorreos = "";

                if (correosNotificar.Count > 0)
                {
                    foreach (Correo c in correosNotificar)
                    {
                        textoCorreos += c.CorreoElectronico + ",";
                    }

                    textoCorreos = textoCorreos.Substring(0, textoCorreos.Length - 1);

                    miRespuesta.PersonasNotificadas = textoCorreos;
                }
            }

            //Guarda encabezado
            int IdRespuesta = respuestaRepository.GuardarRespuesta(miRespuesta);

            if (IdRespuesta != 0)
            {
                //Guarda Detalle
                detalleRespuestaRepository.GuardarDetalleRespuestas(objRespuestaDTO.DetalleRespuestas, IdRespuesta, null);

                if (miRespuesta.GeneroAlerta)
                {
                    //Envio correo de alertas
                    Persona miPersona = personaRepository.getPersonaById(miRespuesta.IdPersona);


                    string Asunto = "Registro de COVID de " + miPersona.Nombres + " " + miPersona.Apellidos;
                    string Body   = "<h3>" + miPersona.Nombres + " " + miPersona.Apellidos +
                                    " presenta sintomas de alarma en las siguientes preguntas:</h3>";

                    foreach (DetalleRespuesta d in objRespuestaDTO.DetalleRespuestas)
                    {
                        Body += "<p>" +
                                "<div>Pregunta: " + d.Pregunta.Enunciado + "</div>" +
                                "<div>Respuesta: " + d.ValorRespuesta + "</div>" +
                                "</p>";
                    }

                    List <string> correos = new List <string>();
                    foreach (Correo c in correosNotificar)
                    {
                        correos.Add(c.CorreoElectronico);
                    }

                    corrreoService.EnviaCorreo(correos, Asunto, Body);

                    if (miPersona.Vinculo == "Visitante")
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(false);
        }