public IList<StatusModel> GetStatus(int projectId)
        {
            IList<StatusModel> models = new List<StatusModel>();

            var allStatus = Enum.GetValues(typeof(Status)).Cast<Status>();
            foreach (var status in allStatus)
            {
                StatusModel model = new StatusModel();
                model.FilledBy(status);
                models.Add(model);
            };
            return models;
        }
        private IList<StatusModel> getQualifiedStatus(int status)
        {
            IList<StatusModel> qualified = new List<StatusModel>();

            //TODO:
            StatusModel ownModel = new StatusModel();
            //ownModel.FilledBy(Status.Own);

            StatusModel cancelModel = new StatusModel();
            //cancelModel.FilledBy(Status.Cancel);

            StatusModel completeModel = new StatusModel();
            //completeModel.FilledBy(Status.Complete);

            StatusModel pauseModel = new StatusModel();
            //pauseModel.FilledBy(Status.Pause);

            if (status == (int)Status.Assign)
            {
                qualified.Add(ownModel);
                qualified.Add(cancelModel);
            }
            else if (status == (int)Status.Own)
            {
                qualified.Add(pauseModel);
                qualified.Add(completeModel);
                qualified.Add(cancelModel);
            }
            else if (status == (int)Status.Pause)
            {
                qualified.Add(ownModel);
                qualified.Add(cancelModel);
            }
            else if (status == (int)Status.Complete)
            {
                qualified.Add(ownModel);
            }
            return qualified;
        }
        private IList<StatusModel> getQualifiedStatus(Status status, Task task)
        {
            IList<StatusModel> qualified = new List<StatusModel>();

            StatusModel beginWorkModel = new StatusModel();
            beginWorkModel.FilledBy(Status.BeginWork);

            StatusModel quitModel = new StatusModel();
            quitModel.FilledBy(Status.Quit);

            StatusModel completeModel = new StatusModel();
            completeModel.FilledBy(Status.Complete);

            StatusModel pauseModel = new StatusModel();
            pauseModel.FilledBy(Status.Pause);

            StatusModel dissentModel = new StatusModel();
            dissentModel.FilledBy(Status.Dissent);

            if (status == Status.Assign
                || status == Status.Own
                || status == Status.Dissent)
            {
                qualified.Add(beginWorkModel);
                qualified.Add(quitModel);
            }
            else if (status == Status.BeginWork)
            {
                qualified.Add(completeModel);
                qualified.Add(pauseModel);
                qualified.Add(quitModel);
                addDoubt(qualified, task);
            }
            else if (status == Status.Pause)
            {
                qualified.Add(beginWorkModel);
                qualified.Add(quitModel);
                addDoubt(qualified, task);
                qualified.Add(completeModel);
            }
            else if (status == Status.Doubt
                || status == Status.Update)
            {
                qualified.Add(beginWorkModel);
                qualified.Add(quitModel);
                qualified.Add(completeModel);
            }
            else if (status == Status.Complete)
            {
                qualified.Add(beginWorkModel);
            }
            else if (status == Status.RefuseAccept)
            {
                qualified.Add(beginWorkModel);
                qualified.Add(quitModel);
                qualified.Add(dissentModel);
            }
            return qualified;
        }
        private void addDoubt(IList<StatusModel> qualified, Task task)
        {
            StatusModel doubtModel = new StatusModel();
            doubtModel.FilledBy(Status.Doubt);

            if (task.Publisher != task.Owner || task.Owner != task.Accepter)
            {
                qualified.Add(doubtModel);
            }
        }