Beispiel #1
0
        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));
        }