コード例 #1
0
        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)
                }
            });
        }
コード例 #4
0
 public static XtracurDivisionItemViewModel Build(XtracurDivision xtracurDivision)
 {
     return(new XtracurDivisionItemViewModel
     {
         Name = xtracurDivision.GetNameByLanguage(CultureHelper.CurrentLanguage),
         Alias = xtracurDivision.Alias
     });
 }
コード例 #5
0
 public static IEnumerable <StudyEventAggregatedDayItemViewModel> GetXtracurTimetableAggregatedEventsDays(
     XtracurDivision xtracurDivision, DateTime fromDate, DateTime toDate)
 {
     using (var appointmentsRepository = new XtracurAppointmentsRepository(xtracurDivision, fromDate, toDate))
     {
         return(GetStudyEventAggregatedDayItemViewModels(appointmentsRepository));
     }
 }
コード例 #6
0
        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)
                }
            });
        }
コード例 #7
0
        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 }
                })
            });
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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))
                });
            }
        }
コード例 #10
0
 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));
 }
コード例 #11
0
        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);
                }
            }
        }