public int GrabarGestanteMonitoreo(GestanteMonitoreoModel gestanteMonitoreo)
 {
     return(_db.sproc_AddUpdateGestanteMonitoreo(
                gestanteMonitoreo.GestanteKey,
                gestanteMonitoreo.PresionSistolica,
                gestanteMonitoreo.PresionDiastolica,
                gestanteMonitoreo.Proteinuria,
                gestanteMonitoreo.MovimientosFetales,
                gestanteMonitoreo.SignosAlarma).SingleOrDefault() ?? 0);
 }
        public ActionResult Crear(string tramaTelefono, string tramaDatos)
        {
            int    gestanteKey;
            string gestanteNroDocumento;
            string gestanteTelefono = tramaTelefono;

            string[]      arregloDatos;
            int           presionSistolica;
            int           presionDiastolica;
            int           proteinuria;
            int           movimientosFetales;
            string        signosAlarma;
            string        mensaje              = string.Empty;
            List <string> mensajesAlarma       = new List <string>();
            bool          esTelefonoRegistrado = false;

            if (!string.IsNullOrWhiteSpace(tramaTelefono))
            {
                if (tramaTelefono.Length < 9)
                {
                    mensaje = "Trama recibida con numero de telefono incorrecto: " + tramaTelefono;
                    NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                    return(Content(mensaje));
                }
                if (tramaTelefono.Length > 9)
                {
                    gestanteTelefono = tramaTelefono.Substring(tramaTelefono.Length - 9, 9);
                }

                gestanteKey = gestanteManager.ObtenerGestanteKeyByGestanteTelefono(gestanteTelefono);
                if (gestanteKey == -1)
                {
                    mensaje = "El numero de telefono no esta registrado en el programa.";
                    NotificacionManager.GrabarNotificacion(gestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                esTelefonoRegistrado = true;

                if (string.IsNullOrWhiteSpace(tramaDatos))
                {
                    mensaje = "Trama de datos invalida.";
                    NotificacionManager.GrabarNotificacion(gestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                if (tramaDatos.IndexOf(" ") > -1 && tramaDatos.IndexOf(" ") < tramaDatos.IndexOf(","))
                {
                    tramaDatos = tramaDatos.Substring(tramaDatos.IndexOf(" ") + 1).Trim();
                }

                arregloDatos = tramaDatos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                if (arregloDatos.Length == 0)
                {
                    mensaje = "Trama de datos invalida.";
                    NotificacionManager.GrabarNotificacion(gestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }
            }
            else
            {
                if (string.IsNullOrWhiteSpace(tramaDatos))
                {
                    mensaje = "Trama de datos invalida.";
                    NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                if (tramaDatos.IndexOf(" ") > -1 && tramaDatos.IndexOf(" ") < tramaDatos.IndexOf(","))
                {
                    tramaDatos = tramaDatos.Substring(tramaDatos.IndexOf(" ") + 1).Trim();
                }

                arregloDatos = tramaDatos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                if (arregloDatos.Length == 0)
                {
                    mensaje = "Trama de datos invalida: " + tramaDatos;
                    NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                gestanteNroDocumento = arregloDatos[0];
                if (string.IsNullOrWhiteSpace(gestanteNroDocumento))
                {
                    mensaje = "El numero de documento enviado es invalido: " + gestanteNroDocumento;
                    NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                gestanteKey = gestanteManager.ObtenerGestanteKeyByGestanteNroDocumento(gestanteNroDocumento);
                if (gestanteKey == -1)
                {
                    mensaje = "El numero de documento enviado no esta registrado en el programa: " + tramaTelefono;
                    NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                    return(Content(mensaje));
                }
            }

            try
            {
                var gestante = gestanteManager.MostrarGestante(gestanteKey);
                if (esTelefonoRegistrado)
                {
                    if (arregloDatos.Length < 5)
                    {
                        mensaje = "Los valores de monitoreo enviados en la trama de datos estan incompletos.";
                        NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                        return(Content(mensaje));
                    }
                    Int32.TryParse(arregloDatos[0], out presionSistolica);
                    Int32.TryParse(arregloDatos[1], out presionDiastolica);
                    Int32.TryParse(arregloDatos[2], out proteinuria);
                    Int32.TryParse(arregloDatos[3], out movimientosFetales);
                    signosAlarma = arregloDatos[4];
                }
                else
                {
                    if (arregloDatos.Length < 6)
                    {
                        mensaje = "Los valores de monitoreo enviados en la trama de datos estan incompletos.";
                        NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                        return(Content(mensaje));
                    }
                    Int32.TryParse(arregloDatos[1], out presionSistolica);
                    Int32.TryParse(arregloDatos[2], out presionDiastolica);
                    Int32.TryParse(arregloDatos[3], out proteinuria);
                    Int32.TryParse(arregloDatos[4], out movimientosFetales);
                    signosAlarma = arregloDatos[5];
                }

                bool enviarAlarma = false;

                // validacion presion sistolica
                if (presionSistolica < 10 || presionSistolica > 280)
                {
                    mensaje = "El valor para Presion Sistolica esta fuera del rango valido (10 - 280).";
                    NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                // validacion presion diastolica
                if (presionDiastolica < 10 || presionDiastolica > 280)
                {
                    mensaje = "El valor para Presion Diastolica esta fuera del rango valido (10 - 280).";
                    NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                // validacion proteinuria
                if (proteinuria < 0 || proteinuria > 10)
                {
                    mensaje = "El valor para Proteinuria esta fuera del rango valido (0 - 10).";
                    NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                // validacion movimientos fetales
                if (movimientosFetales < 0 || movimientosFetales > 50)
                {
                    mensaje = "El valor para Movimientos Fetales esta fuera del rango valido (0 - 50).";
                    NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                // validacion signos alarma
                if (signosAlarma.Length > 20 || signosAlarma.Contains("script") || signosAlarma.Contains("insert") ||
                    signosAlarma.Contains("update") || signosAlarma.Contains("delete") || signosAlarma.Contains("select"))
                {
                    mensaje = "El valor para signos de alarma excede a 20 caracteres o incluye caracteres no permitidos";
                    NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Error", mensaje);
                    return(Content(mensaje));
                }

                var gestanteMonitoreo = new GestanteMonitoreoModel()
                {
                    GestanteKey          = gestanteKey,
                    GestanteNroDocumento = gestante.GestanteNroDocumento,
                    PresionSistolica     = presionSistolica,
                    PresionDiastolica    = presionDiastolica,
                    Proteinuria          = proteinuria,
                    MovimientosFetales   = movimientosFetales,
                    SignosAlarma         = signosAlarma
                };

                var result = gestanteManager.GrabarGestanteMonitoreo(gestanteMonitoreo);

                // Si presion sistolica > presion sistolica base + 30 ==> Alarma
                if (presionSistolica > gestante.PresionSistolicaBase + 30)
                {
                    mensajesAlarma.Add("PS:" + presionSistolica + "mmHg(" +
                                       gestante.PresionSistolicaBase + "mmHg)");
                    enviarAlarma = true;
                }
                // Si presion diastolica > presion diastolica base + 15 ==> Alarma
                if (presionDiastolica > gestante.PresionDiastolicaBase + 15)
                {
                    mensajesAlarma.Add("PD:" + presionDiastolica + "mmHg(" +
                                       gestante.PresionDiastolicaBase + "mmHg)");
                    enviarAlarma = true;
                }
                // Si proteinuria >= 1 ==> Alarma
                if (proteinuria >= 1)
                {
                    mensajesAlarma.Add("PR:" + proteinuria);
                    enviarAlarma = true;
                }
                // Si movimientos fetales == 0 ==> Alarma
                if (movimientosFetales == 0)
                {
                    mensajesAlarma.Add("MF:" + movimientosFetales);
                    enviarAlarma = true;
                }

                if (enviarAlarma && mensajesAlarma.Count > 0)
                {
                    var    numerosDestino    = gestanteManager.ObtenerTelefonosParaAlerta(gestante);
                    string mensajesSecuencia = string.Empty;
                    foreach (var mensajeAlarma in mensajesAlarma)
                    {
                        mensajesSecuencia += mensajeAlarma + ", ";
                    }
                    mensajesSecuencia += "Gestante: " + gestante.GestanteNroDocumento +
                                         " Celular: " + gestante.GestanteTelefono + " Reporte: " + result.ToString();
                    NotificacionManager.GrabarNotificacion(numerosDestino, "Msg. Alarma", mensajesSecuencia);
                }
                NotificacionManager.GrabarNotificacion(gestante.GestanteTelefono, "Msg. Confirmacion",
                                                       "Su reporte de monitoreo se ha registrado correctamente. Numero de reporte: " + result.ToString());

                RegistrarAccion((byte)AccionSesion.Crear, (byte)ObjetoSesion.CrearGestanteMonitoreo, result);
                return(Content("OK"));
            }
            catch (Exception e)
            {
                mensaje = "Ha ocurrido un error en la creacion de reporte de monitoreo: " + e.Message;
                NotificacionManager.GrabarNotificacionParaAdminUser("Msg. Error", mensaje);
                return(Content(mensaje));
            }
        }