コード例 #1
0
        public void AddToSprint(Task task)
        {
            BacklogTasks.Remove(task);
            task.SprintRelevant = true;
            if (task.SprintPosition == null)
            {
                // Add it at the bottom of the ToDo tasks
                task.SprintPosition = Positioning.Calculate(SprintTasks.Where(t => t.Status == Status.ToDo).LastOrDefault()?.Position, null);
                DataAccess.UpdateTask(task);
            }
            else
            {
                DataAccess.UpdateTaskSprintRelevance(task);
            }

            for (int i = 0; i < SprintTasks.Count(); i++)
            {
                if (String.Compare(SprintTasks[i].SprintPosition, task.SprintPosition) >= 0)
                {
                    SprintTasks.Insert(i, task);
                    ApplyFilters();
                    return;
                }
            }

            SprintTasks.Add(task);
            ApplyFilters();
            Selected = task;
        }
コード例 #2
0
        private void ApplyFilters()
        {
            BacklogTasksFiltered.Clear();

            Priority?priority;

            if (PriorityFilter == null || PriorityFilter.Equals(" "))
            {
                priority = null;
            }
            else
            {
                priority = (Priority)System.Enum.Parse(typeof(Priority), PriorityFilter);
            }

            var temp = BacklogTasks
                       .Where(
                t => (t?.Title ?? "").Contains(SearchTerm ?? "") &&
                (BoardFilter == null || BoardFilter.ID == -1 || t.BoardID == BoardFilter.ID) &&
                (priority == null || t.Priority == priority) &&
                (DueDateFilter == null || DueDateFilter.Equals(" ") ||
                 (DueDateFilter.Equals("Overdue") && t.DueDate != null && t.DueDate < DateTime.Now) ||
                 (DueDateFilter.Equals("Todays") && t.DueDate != null && t.DueDate == DateTime.Today) ||
                 (DueDateFilter.Equals("3 Days") && t.DueDate != null && DateTime.Now.AddDays(3) - t.DueDate <= TimeSpan.FromDays(3))
                )).OrderBy(t => t.Position);

            foreach (Task task in temp)
            {
                BacklogTasksFiltered.Add(task);
            }
        }
コード例 #3
0
        private void HandleReorder(Task task, int indexFrom, int indexTo)
        {
            string nextPos = BacklogTasksFiltered.ElementAtOrDefault(indexTo + 1)?.Position ?? Positioning.EndStop;
            string prevPos = BacklogTasks.Where(t => String.Compare(nextPos, t.Position) >= 1).OrderBy(t => t.Position).LastOrDefault()?.Position ?? "a";

            // if there are sprint tasks that would be below the previous (= above) element make sure that the new element is placed below those as well so that they end in a similar position once they are added to the backlog again
            prevPos = SprintTasks.Where(t => String.Compare(t.Position, prevPos) >= 0 && String.Compare(t.Position, nextPos) < 0).OrderBy(t => t.Position).LastOrDefault()?.Position ?? prevPos;

            task.Position = Positioning.Calculate(prevPos, nextPos);
            DataAccess.UpdateTaskPosition(task);
        }
コード例 #4
0
 public void DeleteSelected()
 {
     DataAccess.DeleteTask(Selected);
     if (Selected.SprintRelevant)
     {
         SprintTasks.Remove(Selected);
     }
     else
     {
         BacklogTasks.Remove(Selected);
         ApplyFilters();
     }
     Selected = null;
 }
コード例 #5
0
        public async void CreateSprint()
        {
            await DataAccess.ClearSprint();

            foreach (Task task in SprintTasks)
            {
                if (task.Status != Status.Completed)
                {
                    task.SprintRelevant = false;
                    BacklogTasks.Add(task);
                }
            }

            SprintTasks.Clear();
            ApplyFilters();
        }
コード例 #6
0
        public async System.Threading.Tasks.Task CreateTask()
        {
            Task task = new Task()
            {
                Status         = Status.ToDo,
                SprintRelevant = false,
                BoardID        = 0,
                Priority       = Priority.Low,
                Position       = Positioning.Calculate(Positioning.Max(BacklogTasks.LastOrDefault()?.Position, SprintTasks.LastOrDefault()?.Position), null),
                CreationDate   = DateTime.Now
            };

            long id = await DataAccess.AddTask(task);

            task.ID = id;
            BacklogTasks.Add(task);
            ApplyFilters();
            Selected = task;
        }
コード例 #7
0
        public void RemoveFromSprint(Task task)
        {
            SprintTasks.Remove(task);
            task.SprintRelevant = false;
            DataAccess.UpdateTaskSprintRelevance(task);

            for (int i = 0; i < BacklogTasks.Count(); i++)
            {
                if (String.Compare(BacklogTasks[i].Position, task.Position) >= 0)
                {
                    BacklogTasks.Insert(i, task);
                    return;
                }
            }

            BacklogTasks.Add(task);
            ApplyFilters();
            Selected = task;
        }
コード例 #8
0
        public async System.Threading.Tasks.Task LoadDataAsync()
        {
            BacklogTasks.Clear();
            SprintTasks.Clear();

            var tasks = await DataAccess.GetTasks(true);

            foreach (var task in tasks)
            {
                if (task.SprintRelevant)
                {
                    SprintTasks.Add(task);
                }
                else
                {
                    BacklogTasks.Add(task);
                }
            }

            ApplyFilters();

            BacklogTasksFiltered.CollectionChanged += CollectionChanged;
        }