private DashboardStudentViewModel CreateDashboardModelStudent(UserRight userRight) { var semSubService = new SemesterSubscriptionService(); var currentSemester = SemesterService.GetSemester(DateTime.Today); var nextSemester = SemesterService.GetNextSemester(DateTime.Today); var model = new DashboardStudentViewModel { User = userRight.User, Semester = currentSemester, SemesterGroup = semSubService.GetSemesterGroup(userRight.User.Id, currentSemester), Student = Db.Students.Where(x => x.UserId.Equals(userRight.User.Id)).OrderByDescending(x => x.Created).FirstOrDefault() }; // keine Semestergruppe gewählt => aktive Pläne suchen if (model.SemesterGroup == null) { model.ActiveOrgsSemester = SemesterService.GetActiveOrganiser(currentSemester, true); } // das nächste Semester nur anzeigen, wenn es einen veröffentlichsten Stundenplan für die letzte Fakultät gibt! var nextSemesterOrgs = SemesterService.GetActiveOrganiser(nextSemester, true); if (nextSemesterOrgs.Any()) { model.NextSemester = nextSemester; model.NextSemesterGroup = semSubService.GetSemesterGroup(userRight.User.Id, nextSemester); if (model.NextSemesterGroup == null) { model.ActiveOrgsNextSemester = nextSemesterOrgs; } } // Alle Anfragen zu Abschlussarbeiten var supervisions = Db.Activities.OfType <Supervision>() .Where(x => x.Occurrence.Subscriptions.Any(y => y.UserId.Equals(userRight.User.Id))).ToList(); foreach (var supervision in supervisions) { var request = new SupervisionRequestModel(); request.Supervision = supervision; request.Lecturer = supervision.Owners.First().Member; request.Subscription = supervision.Occurrence.Subscriptions.FirstOrDefault(x => x.UserId.Equals(userRight.User.Id)); model.Requests.Add(request); } // Alle Abschlussarbeiten var theses = Db.Theses.Where(x => x.Student.UserId.Equals(userRight.User.Id)).ToList(); foreach (var thesis in theses) { var tModel = new ThesisDetailModel(); tModel.Thesis = thesis; tModel.Lecturer = thesis.Supervision.Owners.First().Member; model.Theses.Add(tModel); } // Alle heutigen Termine // Alle Eintragungen var begin = DateTime.Now; var end = DateTime.Today.AddDays(1); var allDates = Db.ActivityDates.Where(d => (d.Activity.Occurrence.Subscriptions.Any(s => s.UserId.Equals(userRight.User.Id)) || d.Occurrence.Subscriptions.Any(s => s.UserId.Equals(userRight.User.Id)) || d.Slots.Any(slot => slot.Occurrence.Subscriptions.Any(s => s.UserId.Equals(userRight.User.Id)))) && d.End >= begin && d.End <= end).OrderBy(d => d.Begin).ToList(); foreach (var date in allDates) { var act = new AgendaActivityViewModel { Date = date, Slot = date.Slots.FirstOrDefault(x => x.Occurrence.Subscriptions.Any(s => s.UserId.Equals(userRight.User.Id))) }; model.TodaysActivities.Add(act); } if (model.Student != null) { var org = model.Student.Curriculum.Organiser; // Alle Platzverlosungen // letzte 90 Tage var lastEnd = DateTime.Today; var alLotteries = Db.Lotteries.Where(x => x.IsActiveUntil >= lastEnd && x.IsAvailable && x.Organiser != null && x.Organiser.Id == org.Id).OrderBy(x => x.FirstDrawing).ToList(); foreach (var lottery in alLotteries) { var courseList = new List <Course>(); courseList.AddRange( lottery.Occurrences.Select( occurrence => Db.Activities.OfType <Course>().SingleOrDefault( c => c.Occurrence.Id == occurrence.Id)).Where(course => course != null)); var hasFit = courseList.Any(c => c.SemesterGroups.Any(g => g.CapacityGroup.CurriculumGroup.Curriculum.Id == model.Student.Curriculum.Id)); if (hasFit) { model.Lotteries.Add(lottery); } } } return(model); }
public PartialViewResult Agenda() { var model = new AgendaViewModel(); var user = UserManager.FindByName(User.Identity.Name); var begin = DateTime.Today; var end = DateTime.Today.AddDays(7); // Alle Dates bei denen der Benutzer als Dozent eingetragen ist var lectureDates = Db.ActivityDates.Where(d => d.Hosts.Any(l => !string.IsNullOrEmpty(l.UserId) && l.UserId.Equals(user.Id)) && d.End >= begin && d.End <= end).OrderBy(d => d.Begin).ToList(); foreach (var date in lectureDates) { var agendaDay = model.Days.SingleOrDefault(d => d.Day.Date == date.Begin.Date); if (agendaDay == null) { agendaDay = new AgendaDayViewModel { Day = date.Begin.Date }; model.Days.Add(agendaDay); } var agendaActivity = new AgendaActivityViewModel { Date = date }; agendaDay.Activities.Add(agendaActivity); } // Alle Eintragungen var subscriptions = Db.ActivityDates.Where(d => (d.Activity.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) || d.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) || d.Slots.Any(slot => slot.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)))) && d.End >= begin && d.End <= end).OrderBy(d => d.Begin).ToList(); foreach (var date in subscriptions) { var agendaDay = model.Days.SingleOrDefault(d => d.Day.Date == date.Begin.Date); if (agendaDay == null) { agendaDay = new AgendaDayViewModel { Day = date.Begin.Date }; model.Days.Add(agendaDay); } var agendaActivity = new AgendaActivityViewModel { Date = date }; // den slot prüfen agendaActivity.Slot = date.Slots.FirstOrDefault(x => x.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id))); agendaDay.Activities.Add(agendaActivity); } return(PartialView(model)); }