public ActionResult Unsubscribe(StudentSubscriptionModel model) { var org = GetMyOrganisation(); var semester = SemesterService.GetSemester(model.SemesterName); if (semester == null) { ModelState.AddModelError("SemesterName", "Es existiert kein Semester mit dieser Bezeichnung"); return(View(model)); } var courses = Db.Activities.OfType <Course>().Where(x => x.ShortName.Equals(model.CourseShortName.Trim()) && x.SemesterGroups.Any(g => g.Semester.Id == semester.Id && g.CapacityGroup.CurriculumGroup.Curriculum.Organiser.Id == org.Id)).ToList(); if (!courses.Any()) { ModelState.AddModelError("CourseShortName", "Es existiert keine Lehrveranstaltung mit dieser Bezeichnung"); return(View(model)); } if (courses.Count > 1) { ModelState.AddModelError("CourseShortName", $"Bezeichnung nicht eindeutig. Es existieren {courses.Count} Lehrveranstaltungen mit dieser Bezeichnung"); return(View(model)); } var host = GetCurrentUser(); var course = courses.First(); var subscription = course.Occurrence.Subscriptions.FirstOrDefault(x => x.UserId.Equals(model.User.Id)); if (subscription == null) { ModelState.AddModelError("CourseShortName", "Ist in dieser Lehrveranstaltung nicht eingetragen."); return(View(model)); } var subService = new SubscriptionService(Db); subService.DeleteSubscription(subscription); var mailService = new SubscriptionMailService(); mailService.SendSubscriptionEMail(course, model.User.Id, host); return(RedirectToAction("CoursePlan", new { id = model.User.Id, semId = semester.Id })); }
/// <summary> /// /// </summary> /// <param name="id">Id des Kurses</param> /// <returns></returns> public PartialViewResult Subscribe(Guid id) { var logger = LogManager.GetLogger("Booking"); var user = GetCurrentUser(); var student = StudentService.GetCurrentStudent(user); var course = Db.Activities.OfType <Course>().SingleOrDefault(x => x.Id == id); OccurrenceSubscription succeedingSubscription = null; Occurrence occ = course.Occurrence; OccurrenceSubscription subscription = null; using (var transaction = Db.Database.BeginTransaction()) { subscription = occ.Subscriptions.FirstOrDefault(x => x.UserId.Equals(user.Id)); var bookingService = new BookingService(Db); var bookingLists = bookingService.GetBookingLists(occ.Id); var bookingState = new BookingState { Student = student, Occurrence = occ, BookingLists = bookingLists }; bookingState.Init(); var bookingList = bookingState.MyBookingList; if (subscription == null) { // eintragen // den Status aus den Buchungslisten ermitteln // ermittle Buchungsliste // wenn eine Liste // wenn voll, dann Warteliste // sonst Teilnehmer // sonst // Fehlermeldung an Benutzer mit Angabe des Grunds if (bookingList != null) { subscription = new OccurrenceSubscription { TimeStamp = DateTime.Now, Occurrence = occ, UserId = user.Id, OnWaitingList = bookingState.AvailableSeats <= 0 }; Db.Subscriptions.Add(subscription); } } else { // austragen var subscriptionService = new SubscriptionService(Db); subscriptionService.DeleteSubscription(subscription); // Nachrücken if (bookingList != null) { var succBooking = bookingList.GetSucceedingBooking(); if (succBooking != null) { succBooking.Subscription.OnWaitingList = false; succeedingSubscription = succBooking.Subscription; } } } Db.SaveChanges(); transaction.Commit(); } // Mail an Nachrücker versenden if (succeedingSubscription != null) { var mailService = new SubscriptionMailService(); mailService.SendSucceedingEMail(course, succeedingSubscription); var subscriber = GetUser(succeedingSubscription.UserId); logger.InfoFormat("{0} ({1}) for [{2}]: set on participient list", course.Name, course.ShortName, subscriber.UserName); } // jetzt neu abrufen und anzeigen var model = GetBookingStateModel(course.Id); return(PartialView("_CourseSummaryBookingBox", model)); }
public ActionResult Subscribe(StudentSubscriptionModel model) { var org = GetMyOrganisation(); var semester = SemesterService.GetSemester(model.SemesterName.Trim()); if (semester == null) { ModelState.AddModelError("SemesterName", "Es existiert kein Semester mit dieser Bezeichnung"); return(View(model)); } var courses = Db.Activities.OfType <Course>().Where(x => x.ShortName.Equals(model.CourseShortName.Trim()) && x.SemesterGroups.Any(g => g.Semester.Id == semester.Id && g.CapacityGroup.CurriculumGroup.Curriculum.Organiser.Id == org.Id)).ToList(); if (!courses.Any()) { ModelState.AddModelError("CourseShortName", "Es existiert keine Lehrveranstaltung mit dieser Bezeichnung"); return(View(model)); } if (courses.Count > 1) { ModelState.AddModelError("CourseShortName", $"Bezeichnung nicht eindeutig. Es existieren {courses.Count} Lehrveranstaltungen mit dieser Bezeichnung"); return(View(model)); } var host = GetCurrentUser(); var course = courses.First(); var subscription = course.Occurrence.Subscriptions.FirstOrDefault(x => x.UserId.Equals(model.User.Id)); if (subscription != null) { ModelState.AddModelError("CourseShortName", "Ist bereits in dieser Lehrveranstaltung eingetragen."); return(View(model)); } subscription = new OccurrenceSubscription(); subscription.TimeStamp = DateTime.Now; subscription.UserId = model.User.Id; subscription.OnWaitingList = false; subscription.Occurrence = course.Occurrence; course.Occurrence.Subscriptions.Add(subscription); // wenn es ein Wahlverfahren gibt, dann als Prio 1 var lottery = Db.Lotteries.FirstOrDefault(x => x.Occurrences.Any(y => y.Id == course.Occurrence.Id)); if (lottery != null) { subscription.Priority = 1; var game = lottery.Games.FirstOrDefault(x => x.UserId.Equals(model.User.Id)); if (game == null) { game = new LotteryGame { Lottery = lottery, UserId = subscription.UserId, AcceptDefault = false, CoursesWanted = lottery.MaxConfirm, Created = DateTime.Now, LastChange = DateTime.Now }; lottery.Games.Add(game); } } Db.SaveChanges(); // Bei Erfolg Mail versenden var mailService = new SubscriptionMailService(); mailService.SendSubscriptionEMail(course, subscription, host); return(RedirectToAction("CoursePlan", new { id = model.User.Id, semId = semester.Id })); }