예제 #1
0
        private async Task <DisplayedTasks> GetWeekTasksAsync(IQueryable <TaskItem> processedTasks,
                                                              QueryProcessing queryProcessing)
        {
            processedTasks = processedTasks.Where(t => t.PlanningDate.HasValue && t.EffectiveDate == null);
            processedTasks = queryProcessing.SortTasks(processedTasks);

            int thisWeekRemainingDaysCount = DateTime.Today.DayOfWeek == 0
                ? 0
                : 7 - (int)DateTime.Today.DayOfWeek;
            DateTime thisWeekEndDate = DateTime.Today.AddDays(thisWeekRemainingDaysCount);

            Dictionary <string, IEnumerable <TaskItem> > tasks = await dbTasks
                                                                 .Where(t => t.PlanningDate <= thisWeekEndDate &&
                                                                        t.PlanningDate.HasValue &&
                                                                        t.EffectiveDate == null)
                                                                 .Select(t => new { t.PlanningDate })
                                                                 .Distinct()
                                                                 .OrderBy(t => t.PlanningDate)
                                                                 .GroupJoin(
                processedTasks,
                t1 => t1.PlanningDate,
                t2 => t2.PlanningDate,
                (t1, t2) => new { t1.PlanningDate, t2 })
                                                                 .ToDictionaryAsync(a => a.PlanningDate.Value.ToShortDateString(), a => a.t2);

            return(new DisplayedTasks
            {
                Week = tasks
            });
        }
예제 #2
0
        private async Task <DisplayedTasks> GetTodayTasksAsync(IQueryable <TaskItem> processedTasks,
                                                               QueryProcessing queryProcessing)
        {
            processedTasks = processedTasks.Where(t => t.EffectiveDate == null &&
                                                  t.PlanningDate.HasValue &&
                                                  t.PlanningDate <= DateTime.Today);
            processedTasks = queryProcessing.SortTasks(processedTasks);

            long minId = dbCategories.Min(c => c.Id);
            IQueryable <Category> secondCategories             = dbCategories.Where(c => c.Id > minId).OrderBy(c => c.Name);
            Dictionary <string, IEnumerable <TaskItem> > tasks = await dbCategories
                                                                 .Where(c => c.Id == minId)
                                                                 .Concat(secondCategories)
                                                                 .GroupJoin(
                processedTasks,
                c => c.Id,
                t => t.CategoryId,
                (c, ct) => new { c.Name, ct })
                                                                 .ToDictionaryAsync(anonymous => anonymous.Name, anonymous => anonymous.ct);

            return(new DisplayedTasks
            {
                Today = tasks
            });
        }
예제 #3
0
        private async Task <DisplayedTasks> GetTasksAsync(IQueryable <TaskItem> processedTasks,
                                                          QueryProcessing queryProcessing)
        {
            processedTasks = queryProcessing.SortTasks(processedTasks);

            List <TaskItem> tasks = await processedTasks.ToListAsync();

            return(new DisplayedTasks
            {
                Active = tasks?.Where(t => t.IsCompleted == false).ToList(),
                Completed = tasks?.Where(t => t.IsCompleted == true).ToList()
            });
        }
예제 #4
0
        private async Task <DisplayedTasks> GetFoundTasksAsync(QueryProcessing queryProcessing)
        {
            IQueryable <TaskItem> processedTasks = queryProcessing.SearchTasks(dbTasks);

            processedTasks = processedTasks.Where(t => t.EffectiveDate == null);
            processedTasks = queryProcessing.SortTasks(processedTasks);

            long minId = dbCategories.Min(c => c.Id);
            IQueryable <Category> secondCategories             = dbCategories.Where(c => c.Id > minId).OrderBy(c => c.Name);
            Dictionary <string, IEnumerable <TaskItem> > tasks = await dbCategories
                                                                 .Where(c => c.Id == minId)
                                                                 .Concat(secondCategories).GroupJoin(
                processedTasks,
                c => c.Id,
                t => t.CategoryId,
                (c, ct) => new { c.Name, ct })
                                                                 .Where(a => a.ct.Count() > 0)
                                                                 .ToDictionaryAsync(anonymous => anonymous.Name, anonymous => anonymous.ct);

            return(new DisplayedTasks
            {
                Found = tasks
            });
        }