示例#1
0
        //public SMSController()
        //{

        //}

        //public SMSController(ISMSService smsService)
        //{
        //    //_smsService = smsService;
        //}

        public HttpResponseMessage Post(SMSRequest request)
        {
            var smsevents = new SMSEvents();

            switch (request.action)
            {
            case "test":
                break;

            case "outgoing":
            {
                var msgs     = SMSService.FindBy(s => s.Status == 1);
                var messages = new List <SmsOutgoingMessage>();

                if (msgs.Count > 0)
                {
                    foreach (var msg in msgs)
                    {
                        var m = new SmsOutgoingMessage()
                        {
                            id       = msg.SMSID.ToString(),
                            message  = "\"" + msg.Text + "\"",
                            to       = msg.MobileNumber,
                            priority = null,
                            type     = null
                        };

                        messages.Add(m);
                    }
                }

                // messages.Add(messageTwo);
                var sendevents = new List <SmsEventSend>();

                var ev = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;

                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }

            case "send_status":
            {
                if (request.status == "sent")
                {
                    var id  = Convert.ToInt32(request.id);
                    var msg = SMSService.FindById(id);
                    msg.Status = 2;
                    SMSService.EditSMS(msg);
                }
                break;
            }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }
示例#2
0
        public HttpResponseMessage Post(SMSRequest request)
        {
            var smsevents = new SMSEvents();

            //var headerparam = request.GetQueryNameValuePairs();

            //if(request.Content.Headers.Contains("action"))
            //{
            //    return null;
            //}

            //var action = headerparam.SingleOrDefault(t => t.Key == "action");

            if (request.action == "test")
            {
            }

            else if (request.action == "outgoing")
            {
                var msgs     = _smsService.FindBy(s => s.Status == 1);
                var messages = new List <SmsOutgoingMessage>();

                //var outmsgs = new List<out>
                foreach (var msg in msgs)
                {
                    var m = new SmsOutgoingMessage()
                    {
                        id       = msg.SMSID.ToString(),
                        message  = msg.Text,
                        to       = msg.MobileNumber,
                        priority = null,
                        type     = null
                    };
                    messages.Add(m);
                }

                var sendevents = new List <SmsEventSend>();

                //var messageOne = new SmsOutgoingMessage()
                //{
                //    id = "9y7c9cya5711b",
                //    message = "\"Hello Yareda! You are selected to be man of the day! CATS\"",
                //    to = "0911663223",
                //    priority = null,
                //    type = null
                //};

                //var messageTwo = new SmsOutgoingMessage()
                //{
                //    id = "9c7c9cya5711b",
                //    message = "\"Hello Fish! You are selected to be man of the day again! CATS\"",
                //    to = "0911306248",
                //    priority = null,
                //    type = null
                //};

                //messages.Add(messageOne);
                //messages.Add(messageTwo);

                var ev = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;

                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }
            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }
示例#3
0
        public HttpResponseMessage Post(SMSRequest request)
        {
            var phone = _db.PhoneStatus.Find(1);

            phone.BatteryLevel = request.battery;
            phone.Network      = request.network;
            phone.PowerMode    = request.power;
            phone.SIM_Number   = request.phone_number;
            //phone.LastConnected = _mv.ToDateTime(Convert.ToDouble(request.now));
            phone.LastConnected = DateTime.Now;
            _db.SaveChanges();

            var smsevents = new SMSEvents();

            char[] separators = { ' ', ',', '-', '_', '/', ':', ';', '~' };

            switch (request.action)
            {
            case "test":
                break;

            case "outgoing":
            {
                var msgs     = _db.Messages.Where(m => m.Status == 7).Take(200);
                var msgLogs  = _db.MessageLogs.Where(m => m.Status == 4);
                var messages = new List <SmsOutgoingMessage>();

                //This if clause is needed because the outgoing messages are fetched from two tables and sent to the mobile client as if they are all coming from the same table.
                if (msgs.Any())
                {
                    messages.AddRange(msgs.ToList().Select(msg => new SmsOutgoingMessage()
                        {
                            id       = "P" + msg.MessageID.ToString(),
                            message  = msg.msg_body,
                            to       = msg.User.PhoneNumber,
                            priority = null,
                            type     = null
                        }));
                }
                if (msgLogs.Any())
                {
                    messages.AddRange(msgLogs.ToList().Select(msg => new SmsOutgoingMessage()
                        {
                            id       = "S" + msg.MessageID.ToString(),
                            message  = msg.MessageBody,
                            to       = msg.PhoneNumber,
                            priority = null,
                            type     = null
                        }));
                }

                var sendevents = new List <SmsEventSend>();
                var ev         = new SmsEventSend()
                {
                    @event   = "send",
                    messages = messages
                };
                sendevents.Add(ev);
                smsevents.events = sendevents;
                return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
            }

            case "incoming":
            {
                if (request.message_type != "sms")
                {
                    //Add MMS Functionality here
                    return(Request.CreateResponse(HttpStatusCode.OK, request));
                }
                var fm = request.from;

                //RealHub.Value.Clients.All.notify();

                //Check if the message is coming from a registered user
                var s = _db.Users.Where(t => t.PhoneNumber == fm).ToList().FirstOrDefault();

                //var tag = request.message.TrimStart().Take(1).FirstOrDefault();


                char[] separator      = { ' ' };
                var    token          = request.message;
                var    code           = request.message.Split(separator).First().ToUpper();
                var    replay         = new MessageLog();
                var    comprayer      = new MessageLog();
                var    services       = _db.ServiceCodes.Where(y => y.Type == 1).ToList();
                var    customServices = _db.ServiceCodes.Where(y => y.Type == 2 && y.Active == true).ToList();

                var serviceRequest = new ServiceRequest
                {
                    RequestFromNumber = request.@from,
                    RequestTime       = DateTime.Now,
                    RequestFromName   = s != null ? s.Name : ""
                };


                //Determine which original service type it is: Registration, Prayer and Comments
                // var c=' ';
                if (code.Equals(services.Find(t => t.ServiceCodeID == 1).Code.ToUpper()))
                {
                    //It means it is a registration request
                    //c = 'R';
                    var sr = services.Find(t => t.ServiceCodeID == 1);
                    serviceRequest.ServiceCodeID = 1;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();

                    if (sr.Active)
                    {
                        var values = token.Split(separator, 3);
                        try
                        {
                            var firstName = values[1];
                            var lastName  = values[2];
                        }
                        catch (IndexOutOfRangeException e)
                        {
                        }

                        var member = new User
                        {
                            PhoneNumber = request.@from,
                            Name        = (values[1] + " " + values[2]).ToUpper(),
                            Status      = 3
                        };
                        var exists = _db.Users.Where(t => t.PhoneNumber == fm).ToList();

                        if (!exists.Any())
                        {
                            _db.Users.Add(member);
                            _db.SaveChanges();
                            if (sr.AutoReply)
                            {
                                replay.PhoneNumber = request.from;
                                replay.MessageBody = sr.Response;
                                replay.Status      = 4;
                                replay.Time        = DateTime.Now;
                                _db.MessageLogs.Add(replay);
                            }
                            _db.SaveChanges();
                        }
                        else
                        {
                            if (sr.AutoReply)
                            {
                                replay.PhoneNumber = request.from;
                                replay.MessageBody = "Someone has already been registered from this number: " +
                                                     request.from;
                                replay.Status = 4;
                                replay.Time   = DateTime.Now;
                                _db.MessageLogs.Add(replay);
                                _db.SaveChanges();
                            }
                        }
                    }
                }
                else if (code.Equals(services.Find(t => t.ServiceCodeID == 2).Code.ToUpper()))
                {
                    // It means it is a prayer request
                    //c = 'P';
                    var sr = services.Find(t => t.ServiceCodeID == 2);
                    serviceRequest.ServiceCodeID = 2;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();

                    if (sr.Active)
                    {
                        var vals = token.Split(separator, 2);
                        if (s != null)
                        {
                            comprayer.PhoneNumber = s.Name + Environment.NewLine + request.from;
                        }
                        else
                        {
                            comprayer.PhoneNumber = request.from;
                        }
                        comprayer.MessageBody = vals[1];
                        comprayer.Status      = 5;
                        comprayer.Time        = DateTime.Now;
                        _db.MessageLogs.Add(comprayer);
                        _db.SaveChanges();
                        if (sr.AutoReply)
                        {
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = sr.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                        }
                    }
                }
                else if (code.Equals(services.Find(t => t.ServiceCodeID == 3).Code.ToUpper()))
                {
                    //It means it is a comment
                    //c = 'C';
                    var sr = services.Find(t => t.ServiceCodeID == 3);
                    serviceRequest.ServiceCodeID = 3;
                    sr.ServiceRequests.Add(serviceRequest);
                    _db.SaveChanges();
                    if (sr.Active)
                    {
                        var valls = token.Split(separator, 2);
                        if (s != null)
                        {
                            comprayer.PhoneNumber = s.Name + Environment.NewLine + request.from;
                        }
                        else
                        {
                            comprayer.PhoneNumber = request.from;
                        }
                        comprayer.MessageBody = valls[1];
                        comprayer.Status      = 6;
                        comprayer.Time        = DateTime.Now;
                        _db.MessageLogs.Add(comprayer);
                        _db.SaveChanges();
                        if (sr.AutoReply)
                        {
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = sr.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                        }
                    }
                }
                else
                {
                    var custom = true;
                    foreach (var cs in customServices)
                    {
                        if (code.Equals(cs.Code.ToUpper()) && cs.Active && cs.AutoReply)
                        {
                            serviceRequest.ServiceCodeID = cs.ServiceCodeID;
                            cs.ServiceRequests.Add(serviceRequest);
                            _db.SaveChanges();
                            replay.PhoneNumber = request.from;
                            replay.MessageBody = cs.Response;
                            replay.Status      = 4;
                            replay.Time        = DateTime.Now;
                            _db.MessageLogs.Add(replay);
                            _db.SaveChanges();
                            custom = false;
                        }
                    }

                    if (s != null && custom)
                    {
                        if (s.CurrentSurvey == null)
                        {
                            // A registered member is sending a message for niether services nor for poll answers
                            var m = new MessageLog
                            {
                                MessageBody = request.message,
                                Status      = 1,
                                Time        = _mv.ToDateTime(Convert.ToDouble(request.timestamp)),
                                PhoneNumber = s.Name + Environment.NewLine + request.from
                            };

                            _db.MessageLogs.Add(m);
                            _db.SaveChanges();
                        }
                    }
                    else if (custom)
                    {
                        // Some body is who is not registered is sending a message
                        var m = new MessageLog
                        {
                            MessageBody = request.message,
                            Status      = 1,
                            Time        = _mv.ToDateTime(Convert.ToDouble(request.timestamp)),
                            PhoneNumber = request.from
                        };
                        _db.MessageLogs.Add(m);
                        _db.SaveChanges();
                    }
                }

                // Analyze Poll Answers
                if (s != null && s.CurrentSurvey != null)
                {
                    var response = request.message;
                    var answers  = response.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    //response.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    var participant = _db.Users.Find(s.UserId);

                    //Check if this participant  already has answered for this question
                    var done =
                        _db.Answers.Any(
                            a => a.User_UserId == s.UserId && a.Question.Survey_SurveyId == s.Survey.SurveyId);

                    var survey    = participant.Survey;
                    var questions = survey.Questions;

                    if (done)
                    {
                        return(Request.CreateResponse(HttpStatusCode.OK, request));
                    }

                    if (survey.Questions.Count == answers.Count())
                    {
                        var i        = 0;
                        var feedback = new List <Answer>();
                        var parity   = new List <bool>();

                        foreach (var question in questions)
                        {
                            switch (question.QuestionType)
                            {
                            case 1:
                                if (answers[i].ToLower().Contains("yes"))
                                {
                                    parity.Add(true);
                                    var ansYes = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 1,
                                        Response            = "Yes",
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansYes);
                                }
                                else if (answers[i].ToLower().Contains("no"))
                                {
                                    parity.Add(true);
                                    var ansNo = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 2,
                                        Response            = "No",
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansNo);
                                }
                                else
                                {
                                    parity.Add(false);
                                }
                                break;

                            case 2:
                                if (answers[i].IsDecimal() || answers[i].IsInt())
                                {
                                    var ansQty = new Answer()
                                    {
                                        Question_QuestionId = question.QuestionId,
                                        User_UserId         = participant.UserId,
                                        AnswerType          = 3,
                                        Response            = answers[i],
                                        TimeStamp           = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                                    };
                                    feedback.Add(ansQty);
                                }
                                else
                                {
                                    parity.Add(false);
                                }
                                break;
                            }
                            i++;
                        }

                        if (parity.TrueForAll(t => t.Equals(true)))
                        {
                            var j = 0;
                            foreach (var qs in questions)
                            {
                                qs.Answers.Add(feedback[j]);
                                j++;
                            }
                            _db.SaveChanges();
                            s.CurrentSurvey = null;
                            _db.SaveChanges();
                        }
                        else
                        {
                            var r = new Resolution
                            {
                                SurveyID = survey.SurveyId,
                                UserId   = participant.UserId,
                                message  = request.message,
                                Resolved = false,
                                Time     = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                            };
                            _db.Resolutions.Add(r);
                            _db.SaveChanges();
                        }
                    }
                    else
                    {
                        var r = new Resolution
                        {
                            SurveyID = survey.SurveyId,
                            UserId   = participant.UserId,
                            message  = request.message,
                            Resolved = false,
                            Time     = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                        };
                        _db.Resolutions.Add(r);
                        _db.SaveChanges();
                    }
                }



                //else
                //{
                //    var m = new MessageLog
                //    {
                //        MessageBody = request.message,
                //        PhoneNumber = request.@from,
                //        Status = 1,
                //        Time = _mv.ToDateTime(Convert.ToDouble(request.timestamp))
                //    };
                //    _db.MessageLogs.Add(m);
                //    _db.SaveChanges();
                //}

                return(Request.CreateResponse(HttpStatusCode.OK, request));
            }

            case "send_status":
            {
                if (request.status == "sent")
                {
                    var temp = request.id;
                    if (temp.StartsWith("P"))
                    {
                        var id  = Convert.ToInt32(request.id.Substring(1));
                        var msg = _db.Messages.Find(id);
                        msg.Status   = 2;
                        msg.SentTime = DateTime.Now;
                        _db.SaveChanges();
                    }
                    else if (temp.StartsWith("S"))
                    {
                        var id  = Convert.ToInt32(request.id.Substring(1));
                        var msg = _db.MessageLogs.Find(id);
                        msg.Status = 7;
                        msg.Time   = DateTime.Now;
                        _db.SaveChanges();
                    }
                }
                break;
            }
            }
            return(Request.CreateResponse(HttpStatusCode.OK, smsevents));
        }