예제 #1
0
        public CourseSelectModel GetCourseSelectModel(Guid id, string userId)
        {
            var model = new CourseSelectModel();

            var summary = GetCourseSummary(id);

            model.Summary = summary;

            if (!string.IsNullOrEmpty(userId))
            {
                var studentService = new StudentService(Db);
                var student        = studentService.GetCurrentStudent(userId);

                var subscriptionService = new SubscriptionService(Db);
                var subscription        = subscriptionService.GetSubscription(summary.Course.Occurrence.Id, userId);

                var bookingService = new BookingService(Db);
                var bookingLists   = bookingService.GetBookingLists(summary.Course.Occurrence.Id);

                var bookingState = new BookingState();
                bookingState.Occurrence   = summary.Course.Occurrence;
                bookingState.Student      = student;
                bookingState.BookingLists = bookingLists;
                bookingState.Init();

                if (summary.Course.Dates.Any())
                {
                    var firstDate  = summary.Course.Dates.Min(x => x.Begin);
                    var lastDate   = summary.Course.Dates.Max(x => x.End);
                    var activities = Db.Activities.OfType <Course>()
                                     .Where(x => x.Occurrence.Subscriptions.Any(s => s.UserId.Equals(userId)) &&
                                            x.Dates.Any(d => d.End >= firstDate && d.Begin <= lastDate)
                                            ).ToList();

                    model.Summary.ConflictingDates = GetConflictingDates(summary.Course, activities);
                }

                model.Student      = student;
                model.BookingState = bookingState;
                model.Subscription = subscription;

                summary.Subscription = subscription;
            }

            return(model);
        }
예제 #2
0
        private CourseSelectModel GetBookingStateModel(Guid id)
        {
            var user = GetCurrentUser();

            var student = StudentService.GetCurrentStudent(user.Id);

            var courseService = new CourseService(Db);

            var courseSummary = courseService.GetCourseSummary(id);

            var bookingService = new BookingService(Db);

            var bookingLists = bookingService.GetBookingLists(courseSummary.Course.Occurrence.Id);

            var subscriptionService = new SubscriptionService(Db);

            var subscription = subscriptionService.GetSubscription(courseSummary.Course.Occurrence.Id, user.Id);

            // Konflikte suchen
            if (Request.IsAuthenticated)
            {
                var firstDate = courseSummary.Course.Dates.Min(x => x.Begin);
                var lastDate  = courseSummary.Course.Dates.Max(x => x.Begin);

                var activities = Db.Activities.OfType <Course>().Where(a =>
                                                                       a.Occurrence.Subscriptions.Any(u => u.UserId.Equals(user.Id)) &&
                                                                       a.Dates.Any(d => d.Begin >= firstDate && d.End <= lastDate)).ToList();

                courseSummary.ConflictingDates = courseService.GetConflictingDates(courseSummary.Course, activities);

                /*
                 * foreach (var date in courseSummary.Course.Dates)
                 * {
                 *  var conflictingActivities = activities.Where(x =>
                 *      x.Id != courseSummary.Course.Id &&
                 *      x.Dates.Any(d =>
                 *          (d.End > date.Begin && d.End <= date.End) || // Veranstaltung endet im Zeitraum
                 *          (d.Begin >= date.Begin && d.Begin < date.End) || // Veranstaltung beginnt im Zeitraum
                 *          (d.Begin <= date.Begin &&
                 *           d.End >= date.End) // Veranstaltung zieht sich über gesamten Zeitraum
                 *  )).ToList();
                 *
                 *  courseSummary.ConflictingDates[date] = new List<ActivityDate>();
                 *
                 *  foreach (var conflictingActivity in conflictingActivities)
                 *  {
                 *      var conflictingDates = conflictingActivity.Dates.Where(d =>
                 *              (d.End > date.Begin && d.End <= date.End) || // Veranstaltung endet im Zeitraum
                 *              (d.Begin >= date.Begin &&
                 *               d.Begin < date.End) || // Veranstaltung beginnt im Zeitraum
                 *              (d.Begin <= date.Begin &&
                 *               d.End >= date.End) // Veranstaltung zieht sich über gesamten Zeitraum
                 *      ).ToList();
                 *      courseSummary.ConflictingDates[date].AddRange(conflictingDates);
                 *  }
                 * }
                 */
            }

            var bookingState = new BookingState
            {
                Student      = student,
                Occurrence   = courseSummary.Course.Occurrence,
                BookingLists = bookingLists
            };

            bookingState.Init();

            var model = new CourseSelectModel
            {
                User         = user,
                Student      = student,
                Summary      = courseSummary,
                BookingState = bookingState,
                Subscription = subscription,
            };

            return(model);
        }