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);
        }
Ejemplo n.º 2
0
        public Persona createPersona(Persona laPersona)
        {
            List <Correo> correosNotificar = null;
            string        cadenaPreguntas  = string.Empty;

            if (laPersona.respuestas != null)
            {
                //Evaluar si se levantan alertas
                List <Pregunta> preguntas = preguntaRepository.getPreguntasActivas("Registro");

                foreach (DetalleRespuesta p in laPersona.respuestas)
                {
                    //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)
                                {
                                    laPersona.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))
                                {
                                    laPersona.GeneroAlerta = true;
                                    p.GeneroAlerta         = true;
                                }
                                break;
                            }

                            break;
                        }
                    }
                }

                if (laPersona.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);

                        //laPersona.PersonasNotificadas = textoCorreos;
                    }
                }
            }
            int idPersona = personaRepository.createPersona(laPersona);

            if (laPersona.respuestas != null)
            {
                //Guarda Detalle
                detalleRespuestaRepository.GuardarDetalleRespuestas(laPersona.respuestas, null, idPersona);
                laPersona.FechaHoraCreacion = DateTime.Now.ToString();
                //TODO: Armar logica para enviar correo en caso de alerta
                if (laPersona.GeneroAlerta)
                {
                    //Envio correo de alertas
                    Persona miPersona = personaRepository.getPersonaById(idPersona);
                    laPersona.FechaHoraCreacion = miPersona.FechaHoraCreacion;
                    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 laPersona.respuestas)
                    {
                        if (d.ValorRespuesta == Constants.respuestas.respuestSi)
                        {
                            cadenaPreguntas += $"{d.Pregunta.Enunciado} </br>";
                        }
                        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);
                }
            }
            laPersona.CadenaPreguntas = cadenaPreguntas;
            return(laPersona);
        }