public ActionResult Search(string alias, string q, int?offset, bool?showPast) { XtracurDivision xtracurDivision = xtracurDivisionRepository.GetXtracurDivisionByAlias(alias); var viewModel = XtracurEventsSearchViewModel.Build(xtracurDivision, q, offset, showPast); return(xtracurDivision != null ? (ActionResult)View(viewModel) : HttpNotFound()); }
public static XtracurEventsIndexMonthViewModel Build(XtracurDivision xtracurDivision, DateTime?month, int?showImmediateEventId, int?showImmediateRecurrenceIndex) { var language = CultureHelper.CurrentLanguage; var firstDayOfCurrentMonth = DateTimeHelper.GetFirstDayOfCurrentMonth(); var firstDayOfChosenMonth = DateTimeHelper.GetFirstDayOfMonth(month); var firstDayOfTheNextMonth = DateTimeHelper.GetFirstDayOfTheNextMonth(firstDayOfChosenMonth); var firstDayOfThePreviousMonth = DateTimeHelper.GetFirstDayOfThePreviousMonth(firstDayOfChosenMonth); var eventGroupings = EventsViewModelHelper.GetXtracurEventGroupings(xtracurDivision, firstDayOfChosenMonth, firstDayOfTheNextMonth, showImmediateEventId, showImmediateRecurrenceIndex); return(new XtracurEventsIndexMonthViewModel { Alias = xtracurDivision.Alias, Title = xtracurDivision.GetNameByLanguage(language), IsCurrentMonthReferenceAvailable = firstDayOfCurrentMonth != firstDayOfChosenMonth, ChosenMonthDisplayText = GetMonthDisplayText(firstDayOfChosenMonth), PreviousMonthDisplayText = GetPreviousMonthDisplayText(firstDayOfThePreviousMonth), PreviousMonthDate = DateTimeHelper.GetDateStringForWeb(firstDayOfThePreviousMonth), NextMonthDisplayText = GetNextMonthDisplayText(firstDayOfTheNextMonth), NextMonthDate = DateTimeHelper.GetDateStringForWeb(firstDayOfTheNextMonth), EventGroupings = eventGroupings, ShowGroupingCaptions = eventGroupings.Count() > 1, HasEventsToShow = eventGroupings.Any(eg => eg.Events.Any(e => !e.IsShowImmediateHidden)), Breadcrumb = new Breadcrumb() { BreadcrumbHelper.GetBreadcrumbRootItem(false), BreadcrumbHelper.GetBreadcrumbXtracurEventsItem(xtracurDivision, true) } }); }
public new static XtracurEventsIndexWeekViewModel Build(XtracurDivision xtracurDivision, DateTime?fromDate, int?showImmediateEventId, int?showImmediateRecurrenceIndex) { var language = CultureHelper.CurrentLanguage; var weekFromDate = DateTimeHelper.GetWeekStart(fromDate); var weekToDate = weekFromDate.AddDays(7); var previousWeekFromDate = weekFromDate.AddDays(-7); var nextWeekFromDate = weekFromDate.AddDays(7); var currentWeekFromDate = DateTimeHelper.GetWeekStart(DateTime.Today); var events = EventsViewModelHelper.GetXtracurEvents(xtracurDivision, weekFromDate, weekToDate, showImmediateEventId, showImmediateRecurrenceIndex).ToList(); var weekDays = events.Where(e => e.Start >= weekFromDate) .GroupBy(vm => vm.Start.Date) .OrderBy(g => g.Key) .Select(g => EventsDayViewModel.Build(g.Key, g.AsEnumerable())); var earlierEvents = events.Where(e => e.Start < weekFromDate); return(new XtracurEventsIndexWeekViewModel { Alias = xtracurDivision.Alias, Title = xtracurDivision.GetNameByLanguage(language), EarlierEvents = earlierEvents, Days = weekDays, WeekDisplayText = DateTimeHelper.GetWeekDisplayText(language, weekFromDate, weekToDate), PreviousWeekMonday = DateTimeHelper.GetDateStringForWeb(previousWeekFromDate), WeekMonday = DateTimeHelper.GetDateStringForWeb(weekFromDate), NextWeekMonday = DateTimeHelper.GetDateStringForWeb(nextWeekFromDate), IsCurrentWeekReferenceAvailable = (currentWeekFromDate != weekFromDate), HasEventsToShow = events.Any(e => !e.IsShowImmediateHidden), Breadcrumb = new Breadcrumb() { BreadcrumbHelper.GetBreadcrumbRootItem(false), BreadcrumbHelper.GetBreadcrumbXtracurEventsItem(xtracurDivision, true) } }); }
public static XtracurDivisionItemViewModel Build(XtracurDivision xtracurDivision) { return(new XtracurDivisionItemViewModel { Name = xtracurDivision.GetNameByLanguage(CultureHelper.CurrentLanguage), Alias = xtracurDivision.Alias }); }
public static IEnumerable <StudyEventAggregatedDayItemViewModel> GetXtracurTimetableAggregatedEventsDays( XtracurDivision xtracurDivision, DateTime fromDate, DateTime toDate) { using (var appointmentsRepository = new XtracurAppointmentsRepository(xtracurDivision, fromDate, toDate)) { return(GetStudyEventAggregatedDayItemViewModels(appointmentsRepository)); } }
public static XtracurEventsSearchViewModel Build(XtracurDivision xtracurDivision, string query, int?offset, bool?showPast) { LanguageCode language = CultureHelper.CurrentLanguage; bool isEmptyQuery = String.IsNullOrWhiteSpace(query); int totalCount; var today = DateTime.Today; IEnumerable <XtracurEventItemViewModel> events = Enumerable.Empty <XtracurEventItemViewModel>(); if (!showPast.HasValue && !offset.HasValue) { var upcomingEvents = GetEvents(xtracurDivision, query, 0, today, DateTimeHelper.MaxValue, out totalCount); if (upcomingEvents.Any()) { events = upcomingEvents; showPast = false; } else { var pastEvents = GetEvents(xtracurDivision, query, 0, DateTimeHelper.MinValue, today.AddDays(1), out totalCount); if (pastEvents.Any()) { events = pastEvents; showPast = true; } } } else { var fromDate = showPast.Value ? DateTimeHelper.MinValue : today; var toDate = showPast.Value ? today.AddDays(1) : DateTimeHelper.MaxValue; events = GetEvents(xtracurDivision, query, offset ?? 0, fromDate, toDate, out totalCount); } IEnumerable <XtracurEventsSearchPagerItemViewModel> pagerItems = GeneratePagerItems(offset ?? 0, (totalCount - 1) / ItemsOnPageCount + 1); return(new XtracurEventsSearchViewModel { Alias = xtracurDivision.Alias, Title = xtracurDivision.GetNameByLanguage(language), Events = events, PagerItems = pagerItems, ShowPager = pagerItems.Any(pi => pi.IsEnabled && !pi.IsActive), ShowPast = showPast ?? false, ShowUpcoming = showPast.HasValue ? !(showPast ?? false) : false, IsEmptyQuery = isEmptyQuery, Offset = offset ?? 0, QueryDisplayText = query, Breadcrumb = new Breadcrumb() { BreadcrumbHelper.GetBreadcrumbRootItem(false), BreadcrumbHelper.GetBreadcrumbXtracurEventsItem(xtracurDivision, false), BreadcrumbHelper.GetBreadcrumbXtracurSearchItem(true) } }); }
public static BreadcrumbItem GetBreadcrumbXtracurEventsItem(XtracurDivision xtracurDivision, bool isActive) { LanguageCode language = CultureHelper.CurrentLanguage; return(new BreadcrumbItem { IsActive = isActive, DisplayText = xtracurDivision.GetNameByLanguage(language), ControllerName = "XtracurEvents", ActionName = "Index", RouteValues = new RouteValueDictionary(new Dictionary <string, object> { { "alias", xtracurDivision.Alias } }) }); }
public static XtracurEventsIndexViewModelBase Build(XtracurDivision xtracurDivision, DateTime?fromDate, int?showImmediateEventId, int?showImmediateRecurrenceIndex) { if (xtracurDivision != null) { switch (xtracurDivision.WebViewKind) { case XtracurEventsWebViewKind.Month: return(XtracurEventsIndexMonthViewModel.Build(xtracurDivision, fromDate, showImmediateEventId, showImmediateRecurrenceIndex)); case XtracurEventsWebViewKind.Week: default: return(XtracurEventsIndexWeekViewModel.Build(xtracurDivision, fromDate, showImmediateEventId, showImmediateRecurrenceIndex)); } } return(null); }
private ExtracurEventsContract GetMonthEvents(XtracurDivision division, DateTime?month = null) { var firstDayOfCurrentMonth = DateTimeHelper.GetFirstDayOfCurrentMonth(); var firstDayOfChosenMonth = DateTimeHelper.GetFirstDayOfMonth(month); var firstDayOfTheNextMonth = DateTimeHelper.GetFirstDayOfTheNextMonth(firstDayOfChosenMonth); var firstDayOfThePreviousMonth = DateTimeHelper.GetFirstDayOfThePreviousMonth(firstDayOfChosenMonth); using (var repository = new XtracurAppointmentsRepository(division, firstDayOfChosenMonth, firstDayOfTheNextMonth)) { var eventsByKind = repository .GetAppointments() .Where(a => a.IsPublicMaster) .Select(extracurEventMapper.Map) .OrderBy(c => c.Start) .OrderBy(c => c.OrderIndex) .GroupBy(c => c.SubkindDisplayName) .Select(g => new ExtracurEventsContract.EventsByKind { Kind = g.Key, Events = g.AsEnumerable() }) .ToList(); return(new ExtracurEventsContract { Alias = division.Alias, TimetableTitle = division.GetNameByLanguage(language), IsCurrentMonthReferenceAvailable = firstDayOfCurrentMonth != firstDayOfChosenMonth, ChosenMonthDisplayText = firstDayOfChosenMonth.ToString("MMMM yyyy"), PreviousMonthDisplayText = $"« {firstDayOfThePreviousMonth.ToString("MMMM yyyy")}", PreviousMonthDate = DateTimeHelper.GetDateStringForWeb(firstDayOfThePreviousMonth), NextMonthDisplayText = $"{firstDayOfTheNextMonth.ToString("MMMM yyyy")} »", NextMonthDate = DateTimeHelper.GetDateStringForWeb(firstDayOfTheNextMonth), KindsEvents = eventsByKind, ShowGroupingCaptions = eventsByKind.Count() > 1, HasEventsToShow = eventsByKind.Any(eg => eg.Events.Any(e => !e.IsShowImmediateHidden)) }); } }
private static IEnumerable <XtracurEventItemViewModel> GetEvents(XtracurDivision xtracurDivision, string query, int offset, DateTime fromDate, DateTime toDate, out int totalCount) { return(EventsViewModelHelper.GetXtracurSearchEvents(xtracurDivision, fromDate, toDate, query, offset * ItemsOnPageCount, ItemsOnPageCount, out totalCount)); }
private ExtracurEventsContract GetWeekEvents(XtracurDivision division, DateTime?fromDate = null) { var weekFromDate = DateTimeHelper.GetWeekStart(fromDate); var weekToDate = weekFromDate.AddDays(7); var previousWeekFromDate = weekFromDate.AddDays(-7); var nextWeekFromDate = weekFromDate.AddDays(7); var currentWeekFromDate = DateTimeHelper.GetWeekStart(DateTime.Today); using (var repository = new XtracurAppointmentsRepository(division, weekFromDate, weekToDate)) { var events = repository .GetAppointments() .Where(a => a.IsPublicMaster) .Select(extracurEventMapper.Map) .OrderBy(c => c.Start) .ToList(); var eventsDays = events .Where(e => e.Start >= weekFromDate) .GroupBy(e => e.Start.Date) .OrderBy(g => g.Key) .Select(g => { var day = g.Key; var dayEvents = g.AsEnumerable(); return(new ExtracurEventsContract.EventsDay { Day = day, DayString = (language == LanguageCode.English) ? day.ToString("dddd, MMMM d") : day.ToString("dddd, d MMMM"), DayEvents = hideRepeatedTimeFromEvents(dayEvents) }); }) .ToList(); return(new ExtracurEventsContract { Alias = division.Alias, TimetableTitle = division.GetNameByLanguage(language), EarlierEvents = events.Where(e => e.Start < weekFromDate), EventsDays = eventsDays, WeekDisplayText = DateTimeHelper.GetWeekDisplayText(language, weekFromDate, weekToDate), PreviousWeekMonday = DateTimeHelper.GetDateStringForWeb(previousWeekFromDate), WeekMonday = DateTimeHelper.GetDateStringForWeb(weekFromDate), NextWeekMonday = DateTimeHelper.GetDateStringForWeb(nextWeekFromDate), IsCurrentWeekReferenceAvailable = (currentWeekFromDate != weekFromDate), HasEventsToShow = events.Any(e => !e.IsShowImmediateHidden), IsPreviousWeekReferenceAvailable = true, IsNextWeekReferenceAvailable = true }); /// <summary> /// Returns events with <see cref="ExtracurEventContract.HasTheSameTimeAsPreviousItem"/> and /// <see cref="ExtracurEventContract.DisplayDateAndTimeIntervalString"/> set /// </summary> /// <param name="dayEvents"></param> /// <returns></returns> IEnumerable <ExtracurEventContract> hideRepeatedTimeFromEvents( IEnumerable <ExtracurEventContract> dayEvents) { // day events ordered by subject in time interval var dayEventsOrdered = dayEvents .GroupBy(de => de.TimeIntervalString) .Select(g => g.OrderBy(e => e.Subject)) .SelectMany(g => g.AsEnumerable()) .ToList(); var eventWithTimeShown = dayEventsOrdered[0]; for (int i = 1; i < dayEventsOrdered.Count; i++) { var @event = dayEventsOrdered[i]; if (@event.TimeIntervalString == eventWithTimeShown.TimeIntervalString) { @event.HasTheSameTimeAsPreviousItem = true; @event.DisplayDateAndTimeIntervalString = @event.WithinTheSameDay ? @event.HasTheSameTimeAsPreviousItem ? string.Empty : @event.TimeIntervalString : @event.DateWithTimeIntervalString; } else { eventWithTimeShown = @event; } } return(dayEventsOrdered); } } }