Exemplo n.º 1
0
        public async Task <ActionResult> Index(string filterText, int index = 0,
                                               FilterEventOptions filterBy  = FilterEventOptions.None, bool isFirstLoad = true)
        {
            var data = await _eventService.GetPublishedEventsAsync(filterBy, filterText, Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName);

            ViewBag.Count        = data.Count();
            ViewBag.PageSize     = _eventPageSize;
            ViewBag.CurrentIndex = index;
            ViewBag.FilterOption = filterBy;
            ViewBag.FilterText   = filterText;

            if (isFirstLoad)
            {
                return(View(data.Skip(index).Take(_eventPageSize)));
            }
            else
            {
                return(PartialView("~/Views/Home/Partial/_EventList.cshtml", data.Skip(index).Take(_eventPageSize)));
            }
        }
Exemplo n.º 2
0
        public Task <IEnumerable <EventModel> > GetPublishedEvents(FilterEventOptions filter, string filterText = null, string dateCulture = null)
        {
            var result = new List <EventModel>();

            var eventsList = _context.EventRepository.GetList();
            var areasList  = _context.EventAreaRepository.GetList();

            var data = from events in eventsList
                       join areas in areasList on events.Id equals areas.EventId
                       where areas.Price > 0
                       group areas by areas.EventId into areaGroup
                       where areaGroup.Count() == (from areas in areasList
                                                   where areas.EventId == areaGroup.Key
                                                   select areas.EventId).Count()
                       join events in eventsList on areaGroup.Key equals events.Id
                       join layouts in _context.LayoutRepository.GetList() on events.LayoutId equals layouts.Id
                       join venues in _context.VenueRepository.GetList() on layouts.VenueId equals venues.Id
                       select new { venue = venues, currentEvent = events };

            switch (filter)
            {
            case FilterEventOptions.Title:
                if (!string.IsNullOrEmpty(filterText))
                {
                    data = from events in data
                           where events.currentEvent.Title.IndexOf(filterText, 0, StringComparison.OrdinalIgnoreCase) != -1
                           select events;
                }
                break;

            case FilterEventOptions.Date:
                if (!string.IsNullOrEmpty(filterText) && !string.IsNullOrEmpty(dateCulture))
                {
                    DateTime date;
                    try { date = DateTime.Parse(filterText, new CultureInfo(dateCulture)); }
                    catch (FormatException) { break; }

                    data = from events in data
                           where events.currentEvent.Date.Year == date.Date.Year &&
                           events.currentEvent.Date.Month == date.Date.Month &&
                           events.currentEvent.Date.Day == date.Date.Day
                           select events;
                }
                break;
            }

            //gets events which don't happened by venue's local date
            var list = (from events in data.AsEnumerable()
                        where !IsPastDate(events.currentEvent.Date, events.venue.Timezone)
                        select events).ToList();

            if (!list.Any())
            {
                return(Task.FromResult(result.AsEnumerable()));
            }

            list.ToList().ForEach(x =>
            {
                if (!result.Any(y => y.Event.Id == x.currentEvent.Id))
                {
                    var add = new EventModel
                    {
                        Event = MapToEventDto(x.currentEvent),
                        Venue = new VenueDto
                        {
                            Address  = x.venue.Address,
                            Name     = x.venue.Name,
                            Phone    = x.venue.Phone,
                            Timezone = x.venue.Timezone
                        }
                    };
                    result.Add(add);
                }
            });
            result.OrderBy(x => x.Event.Date);

            return(Task.FromResult(result.AsEnumerable()));
        }