Example #1
0
        public override HandleMessageResult HandleMessage(UserActionMessage message)
        {
            var cm = message.Command;

            switch (this.Data.State)
            {
            case State.AskStart:
                if (message.ActionType != UserActionType.Postback || cm == null)
                {
                    return(new HandleMessageResult(false));
                }
                if (cm.MethodName == nameof(State.AskStart))
                {
                    if (cm.Value.ToBoolean() == true)
                    {
                        this.LoadData();
                        if (this.Data.Task == null)
                        {
                            this.Complete();
                        }
                        else
                        {
                            this.ResponseAskComplete();
                        }
                    }
                    else
                    {
                        this.Complete();
                    }
                    return(new HandleMessageResult(true));
                }
                break;

            case State.AskComplete:
                if (message.ActionType != UserActionType.Postback || cm == null)
                {
                    return(new HandleMessageResult(false));
                }

                if (cm.MethodName == "TaskSuspend")
                {
                    this.UpdateCommandData(State.AskSuspend);
                    this.ResponseAskSuspend();
                    return(new HandleMessageResult(true));
                }

                if (cm.MethodName == "TaskComplete")
                {
                    var rState = WebApp.Current.DatabaseCache.TaskState.GetDefaultState(this.Data.Task.ProjectCD, "Done");
                    var dc     = new TaskDataContext(this.UserCD);
                    dc.Task_CompleteState_Edit(this.Data.Task.TaskCD, rState.StateCD);
                }
                else if (cm.MethodName == "TaskInCompleted")
                {
                    //Do nothing...
                }
                if (this.Data.TaskList.Count > 0)
                {
                    this.TaskEdit();
                }
                else
                {
                    this.Complete();
                }
                return(new HandleMessageResult(true));

            case State.AskSuspend:
                if (message.ActionType == UserActionType.Postback)
                {
                    if (cm.MethodName == "SuspendDay")
                    {
                        var      dc      = new TaskDataContext(this.UserCD);
                        var      days    = cm.Value.ToInt32();
                        DateTime?dueDate = null;
                        if (days.HasValue)
                        {
                            dueDate = DateTimeInfo.GetToday().Date.AddDays(days.Value);
                        }
                        dc.Task_DueDate_Edit(this.Data.Task.TaskCD, dueDate);
                        this.TaskEdit();
                    }
                }
                else if (message.ActionType == UserActionType.Message)
                {
                    var days = message.Text.ToInt32();
                    if (days > 0)
                    {
                        var dueDate = DateTimeInfo.GetToday().Date.AddDays(days.Value);
                        var dc      = new TaskDataContext(this.UserCD);
                        dc.Task_DueDate_Edit(this.Data.Task.TaskCD, dueDate);
                    }
                    this.TaskEdit();
                }
                return(new HandleMessageResult(true));

            default: throw new InvalidOperationException();
            }
            return(new HandleMessageResult(false));
        }