public async Task <IActionResult> Tasks([FromQuery] AtividadesParams ap) { var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var schedules = await _repo.GetSchedules(ap, userId); Response.AddPagination(schedules.CurrentPage, schedules.PageSize, schedules.TotalCount, schedules.TotalPages); return(Ok(new { schedules })); }
public async Task <PagedList <AgendaDto> > GetSchedules(AtividadesParams ap, int id) { var dateCurrent = DateTime.Now; var worksQuery = _context.Works .OrderBy(w => w.DateWork) .AsNoTracking() .AsQueryable(); var projectsQuery = _context.Projects .OrderBy(p => p.StartProject) .AsNoTracking() .AsQueryable(); var reunionsQuery = _context.Reunions .OrderBy(r => r.DateReunion) .AsNoTracking() .AsQueryable(); var startDate = new DateTime(); var endDate = new DateTime(); if (ap.ExpiredDate == 1) { worksQuery = worksQuery.Where(w => w.DateWork < dateCurrent); projectsQuery = projectsQuery.Where(p => p.EndProject < dateCurrent); reunionsQuery = reunionsQuery.Where(r => r.DateReunion < dateCurrent); } else { worksQuery = worksQuery.Where(w => w.DateWork >= dateCurrent); projectsQuery = projectsQuery.Where(p => p.EndProject >= dateCurrent); reunionsQuery = reunionsQuery.Where(r => r.DateReunion >= dateCurrent); } if (ap.StartDate != "" && ap.EndDate != "") { startDate = DateTime.ParseExact(ap.StartDate, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("pt-BR")); endDate = DateTime.ParseExact(ap.EndDate, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("pt-BR")); worksQuery = worksQuery.Where(w => w.DateWork >= startDate); projectsQuery = projectsQuery.Where(p => p.StartProject >= startDate || p.EndProject <= endDate); reunionsQuery = reunionsQuery.Where(r => r.DateReunion >= startDate); } if (ap.Title != "") { worksQuery = worksQuery.Where(w => w.Title.Contains(ap.Title)); projectsQuery = projectsQuery.Where(w => w.Title.Contains(ap.Title)); reunionsQuery = reunionsQuery.Where(w => w.Title.Contains(ap.Title)); } var countWorks = await worksQuery.CountAsync(); var countProjects = await projectsQuery.CountAsync(); var countReunions = await reunionsQuery.CountAsync(); var count = countProjects + countReunions + countWorks; var works = await worksQuery.Select(w => new AgendaDto { Id = w.Id, Title = w.Title, Description = w.Description, DateWork = w.DateWork, Local = w.Local, Reschedule = w.Reschedule, Tipo = "Tarefa", UserId = w.UserId }).ToListAsync(); var projects = await projectsQuery.Select(p => new AgendaDto { Id = p.Id, Title = p.Title, Description = p.Description, Local = p.Local, Reschedule = p.Reschedule, StartProject = p.StartProject, EndProject = p.EndProject, Tipo = "Projeto", UserId = p.UserId }).ToListAsync(); var reunions = await reunionsQuery.Select(r => new AgendaDto { Id = r.Id, Title = r.Title, Description = r.Description, Local = r.Local, Reschedule = r.Reschedule, DateReunion = r.DateReunion, HourStart = r.HourStart, HourEnd = r.HourEnd, Tipo = "Reunião", UserId = r.UserId }).ToListAsync(); var schedules = new List <AgendaDto>(); schedules.AddRange(reunions); schedules.AddRange(works); schedules.AddRange(projects); var itens = schedules .Skip((ap.PageNumber - 1) * ap.PageSize) .Take(ap.PageSize) .OrderByDescending(s => s.Tipo) .ToList(); return(new PagedList <AgendaDto>(itens, count, ap.PageNumber, ap.PageSize)); }