예제 #1
0
        private IHttpActionResult BajaEmbarazada(string ID_INSTANCIA, int motivo)
        {
            /*
             * motivo:
             * 1 - Recibi un mensaje con la palabra BAJA
             * 2 - Termina instancia de gestacion (workflow)
             * 3 - Termina instancia de nacido (workflow)
             * 4 - Recibi mensaje con la palabra BEBE
             */
            MilDiasEntities db          = new MilDiasEntities();
            Embarazada      embarazada  = new Embarazada();
            Inscripcion     inscripcion = new Inscripcion();

            try
            {
                inscripcion = db.Inscripcion.Where(e => e.ID_INSTANCIA == ID_INSTANCIA).FirstOrDefault();
                if (inscripcion != null)
                {
                    switch (motivo)
                    {
                    case 1:     //Recibi un mensaje de baja
                    {
                        if (inscripcion.ID_TIPOINSTANCIA == 1)
                        {
                            StopSMSGestacionClient clientGestacion = new StopSMSGestacionClient();
                            clientGestacion.StopSMSGestacion(inscripcion.ID_INSTANCIA);
                        }
                        else if (inscripcion.ID_TIPOINSTANCIA == 2)
                        {
                            StopSMSNacidoClient clientNacido = new StopSMSNacidoClient();
                            clientNacido.StopSMSNacido(inscripcion.ID_INSTANCIA);
                        }
                        inscripcion.ACTIVO      = false;
                        inscripcion.FECHA_BAJA  = DateTime.Now;
                        inscripcion.MOTIVO_BAJA = "Recibi un mensaje con la palabra BAJA";
                        db.SaveChanges();
                    }
                    break;

                    case 2:     //Termina la gestación (workflow)
                    case 4:     //Recibi mensaje con la palabra BEBE
                    {
                        //Fin periodo de gestacion embarazada
                        if (motivo == 2)
                        {
                            inscripcion.MOTIVO_BAJA = "Termina instancia de gestacion (workflow)";
                        }
                        else
                        {
                            inscripcion.MOTIVO_BAJA = "Recibi mensaje con la palabra bebe";
                            if (inscripcion.ID_TIPOINSTANCIA == 1)
                            {
                                StopSMSGestacionClient clientGestacion = new StopSMSGestacionClient();
                                clientGestacion.StopSMSGestacion(inscripcion.ID_INSTANCIA);
                            }
                        }
                        inscripcion.ACTIVO     = false;
                        inscripcion.FECHA_BAJA = DateTime.Now;
                        db.SaveChanges();

                        /*Se debera crear una nueva instancia de bebe nacido
                         * y hacer todo el WF deshabilitando la actual*/

                        string InstanciaID = WFAltaNacido(0);

                        //Crear instancia de inscripcion
                        inscripcion.ID_EMBARAZADA    = inscripcion.ID_EMBARAZADA;
                        inscripcion.ID_TIPOINSTANCIA = 2;         // WF Nacido
                        inscripcion.MES          = 0;
                        inscripcion.ID_INSTANCIA = InstanciaID;
                        inscripcion.FECHA_ALTA   = DateTime.Now;
                        inscripcion.FECHA_BAJA   = null;
                        inscripcion.MOTIVO_BAJA  = null;
                        inscripcion.ACTIVO       = true;
                        db.Inscripcion.Add(inscripcion);
                        db.SaveChanges();
                        /**/
                    }
                    break;

                    case 3:     //Termina instancia de nacido (workflow)
                    {
                        /*Fin definitivo del WF para la embarazada*/
                        inscripcion.ACTIVO      = false;
                        inscripcion.FECHA_BAJA  = DateTime.Now;
                        inscripcion.MOTIVO_BAJA = "Termina instancia de nacido (workflow)";
                        db.SaveChanges();
                    }
                    break;
                    }
                }
                GuardaLog("INFO -- BajaEmbarazada -- IdInstancia: " + ID_INSTANCIA + " -- Motivo: " + motivo, 6, ID_INSTANCIA);
                return(Json(true));
            }
            catch (Exception e)
            {
                GuardaLog("ERROR -- BajaEmbarazada: " + e.InnerException.Message, 6, "");
                return(Json(false));
            }
        }
예제 #2
0
        public HttpResponseMessage NuevoSMS(HttpRequestMessage request)
        {
            MilDiasEntities db = new MilDiasEntities();

            try
            {
                string xmlString = request.Content.ReadAsStringAsync().Result;
                xmlString = xmlString.Trim();

                if (xmlString != "" && xmlString != "\n")
                {
                    GuardaLog(xmlString, 6, "");

                    string mensaje = "";
                    //log.FECHA = DateTime.Now;
                    //log.MENSAJE = xmlString;

                    var       serializer = new XmlSerializer(typeof(MORequest));
                    MORequest MO         = new MORequest();
                    using (TextReader readerXML = new StringReader(xmlString))
                    {
                        MO = (MORequest)serializer.Deserialize(readerXML);
                    }

                    mensaje = quitarAcentos(MO.Contenido);
                    /*Obtengo la embarazada por unica vez*/
                    Embarazada embarazada = new Embarazada();
                    embarazada = db.Embarazada.Where(e => e.TELEFONO == MO.Telefono.Msisdn).FirstOrDefault();


                    mensaje = mensaje.Trim();
                    //Quita los doble-espacios y los convierte en un espacio simple
                    while (mensaje.Contains("  "))
                    {
                        mensaje = mensaje.Replace("  ", " ");
                    }

                    //Divide el Mensaje en componentes(por espacio en blanco simple)
                    string[] mensajeSplit = mensaje.Split(' ');

                    //Posibles casos de Mensajes
                    switch (mensajeSplit.Count())
                    {
                    case 1:
                        //Es mensaje de control (SI, NO, INFO, BAJA, BEBE)
                        if (embarazada != null)
                        {
                            Inscripcion inscripcion = new Inscripcion();
                            inscripcion = embarazada.Inscripcion.Where(i => i.ACTIVO == true).FirstOrDefault();
                            if (inscripcion != null)
                            {
                                if (mensaje == "SI" || mensaje == "NO")
                                {
                                    LogMensajeControl logControl = new LogMensajeControl();
                                    logControl = db.LogMensajeControl
                                                 .Where(c => c.ID_INSTANCIA == inscripcion.ID_INSTANCIA)
                                                 .OrderByDescending(x => x.ID).FirstOrDefault();

                                    if (logControl != null)
                                    {
                                        //Actualizo segun respuesta en LogMensajeControl
                                        if (mensaje == "SI")
                                        {
                                            logControl.ID_RESPUESTA = 1;
                                        }
                                        else
                                        {
                                            logControl.ID_RESPUESTA = 2;
                                        }
                                        if (inscripcion.ID_TIPOINSTANCIA == 1)
                                        {
                                            WF_SMSGestacion.RespSMSControlClient clientResp = new WF_SMSGestacion.RespSMSControlClient();
                                            clientResp.RespSMSControl(inscripcion.ID_INSTANCIA, logControl.ID_RESPUESTA);
                                        }
                                        else if (inscripcion.ID_TIPOINSTANCIA == 2)
                                        {
                                            WF_SMSNacido.RespSMSControlClient clientResp = new WF_SMSNacido.RespSMSControlClient();
                                            clientResp.RespSMSControl(inscripcion.ID_INSTANCIA, logControl.ID_RESPUESTA);
                                        }
                                        //Update DB
                                        db.SaveChanges();
                                    }
                                    else
                                    {
                                        GuardaLog("LogControl NULL. -- ID_Instancia: " + inscripcion.ID_TIPOINSTANCIA, 6, inscripcion.ID_INSTANCIA);
                                    }
                                }
                                else if (mensaje == "INFO")
                                {
                                    //ENVIO MENSAJE AL TEL EMBARAZADA CON LA INFO DEL SERVICIO DE MENSAJERIA

                                    EnviarSMSController sms = new EnviarSMSController();
                                    SMS smsModel            = new SMS();

                                    smsModel.Mensaje      = "Mensaje modelo de info";
                                    smsModel.ID_Instancia = inscripcion.ID_INSTANCIA;
                                    smsModel.Es_Control   = false;
                                    smsModel.Mes          = 0;
                                    sms.EnviarSMS(smsModel);

                                    /*Guardo el mensaje de info saliente en el log de mensajes como tipo de mensaje enviado*/
                                    GuardaLog("MENSAJE DE INFORMACION", 7, inscripcion.ID_INSTANCIA);
                                }
                                else if (mensaje == "BAJA")
                                {
                                    //BAJA EL SERVICIO PARA LA EMBARAZADA
                                    /*Guardo el mensaje de info saliente en el log de mensajes como tipo de mensaje enviado*/

                                    GuardaLog("MENSAJE DE BAJA", 3, inscripcion.ID_INSTANCIA);
                                    /*Cambio el campo ACTIVO de la embarazada porque recibi la palabra baja*/
                                    BajaEmbarazada(inscripcion.ID_INSTANCIA, 1);
                                    EnviarMensaje("BAJA DEL SERVICIO DE MENSAJES DE 1000 DIAS CONFIRMADA", MO.Servicio.Id, MO.Telefono.Msisdn, inscripcion.ID_INSTANCIA);
                                    /******/
                                }
                                else if (mensaje == "BEBE")
                                {
                                    //UPDATE DE EMBARAZADA CON EL INDICADOR DE QUE EL BEBE HA NACIDO

                                    GuardaLog("MENSAJE DE BEBE", 9, inscripcion.ID_INSTANCIA);

                                    /*Cambio el campo ACTIVO de la embarazada porque el bebe nacio*/
                                    //inscripcion = db.Inscripcion.Where(e => e.ID_EMBARAZADA == embarazada.ID).FirstOrDefault();
                                    BajaEmbarazada(inscripcion.ID_INSTANCIA, 4);
                                    /******/
                                }
                            }
                        }
                        break;

                    case 3:
                    {
                        //Es mensaje de inscripción (MAMA DNI MES)

                        /*Tomo la primera palabras del mensaje entrante para saber si es bebe o mama*/
                        String Palabra = mensajeSplit[0].ToString().Trim();

                        String tmpDNI = mensajeSplit[1].ToString().Trim();
                        String tmpMES = mensajeSplit[2].ToString().Trim();

                        int  DNI       = 0;
                        int  MES       = 0;
                        bool continuar = false;

                        //Valido que el DNI sea numerico
                        //Valido que si la palabra es mama y las otras dos palabras son numericas, esten dentro del siguiente rango.
                        if (Palabra == "MAMA" || Palabra == "BEBE")
                        {
                            if (Int32.TryParse(tmpMES, out MES) && Int32.TryParse(tmpDNI, out DNI))
                            {
                                continuar = true;
                            }
                        }

                        if (continuar)
                        {
                            /*Guardo el mensaje de info saliente en el log de mensajes como tipo de mensaje enviado*/
                            embarazada = db.Embarazada.Where(e => e.TELEFONO == MO.Telefono.Msisdn).FirstOrDefault();
                            if (embarazada == null)
                            {
                                GuardaLog("NUEVA EMBARAZADA", 10, "");
                                /*Creo el registro de la embarazada*/
                                embarazada            = new Embarazada();
                                embarazada.DNI        = DNI;
                                embarazada.TELEFONO   = MO.Telefono.Msisdn;
                                embarazada.ID_EMPRESA = getEmpresaID(MO.Servicio.Id);
                                db.Embarazada.Add(embarazada);
                                db.SaveChanges();
                            }

                            /*Doy inicio al WF segun palabra*/
                            /********************************/
                            Inscripcion inscripcion = new Inscripcion();
                            inscripcion = db.Inscripcion.Where(e => e.ID_EMBARAZADA == embarazada.ID && e.ACTIVO == true).FirstOrDefault();
                            if (inscripcion == null)
                            {
                                string InstanciaID = "";
                                if (Palabra == "MAMA")
                                {
                                    InstanciaID = WFAltaGestacion(MES);
                                    GuardaLog("MAMA -- Embarazada DNI: " + embarazada.DNI, 2, InstanciaID);
                                }
                                else if (Palabra == "BEBE")
                                {
                                    InstanciaID = WFAltaNacido(MES);
                                    GuardaLog("BEBE -- Embarazada DNI: " + embarazada.DNI, 2, InstanciaID);
                                }

                                //Crear instancia de inscripcion
                                inscripcion = new Inscripcion();
                                inscripcion.ID_EMBARAZADA    = embarazada.ID;
                                inscripcion.ID_TIPOINSTANCIA = (Palabra == "MAMA") ? 1 : 2;         //
                                inscripcion.MES          = MES;
                                inscripcion.ID_INSTANCIA = InstanciaID;
                                inscripcion.FECHA_ALTA   = DateTime.Now;
                                inscripcion.FECHA_BAJA   = null;
                                inscripcion.MOTIVO_BAJA  = null;
                                inscripcion.ACTIVO       = true;
                                db.Inscripcion.Add(inscripcion);
                                db.SaveChanges();

                                EnviarMensaje("TE FELICITAMOS. BIENVENIDA A LA INICIATIVA 1000 DIAS", MO.Servicio.Id, MO.Telefono.Msisdn, InstanciaID);
                            }
                            else
                            {
                                //
                                GuardaLog("la inscripción ya existe. TELEFONO" + embarazada.TELEFONO, 6, inscripcion.ID_INSTANCIA);
                            }
                        }
                        else
                        {
                            //continuar = false;
                            EnviarMensaje("El mensaje no tiene el formato correcto. Recorda que para inscribirte debes enviar MAMA DNI MES. Ejemplo MAMA 30XXXXXX 3", MO.Servicio.Id, MO.Telefono.Msisdn, "");
                            GuardaLog("El mensaje no tiene el formato correcto." + MO.Telefono.Msisdn, 6, "");
                        }
                    }

                    break;

                    default:
                    {
                        /*Guardo el mensaje de info saliente en el log de mensajes como tipo de mensaje enviado*/

                        EnviarMensaje("El mensaje no tiene el formato correcto. Recorda que para inscribirte debes enviar MAMA DNI MES. Ejemplo MAMA 30XXXXXX 3", MO.Servicio.Id, MO.Telefono.Msisdn, "");
                        GuardaLog("El mensaje no tiene el formato correcto." + MO.Telefono.Msisdn, 6, "");
                    }
                    break;
                    }
                }
                return(new HttpResponseMessage(HttpStatusCode.OK));
            }
            catch (Exception e)
            {
                GuardaLog(e.InnerException.Message, 6, "");
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }
        }