예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Subscribe(Guid id)
        {
            var semester = SemesterService.GetSemester(id);

            var semSubService = new SemesterSubscriptionService(Db);

            // Liegt eine Einschreibung vor?
            var semGroup = semSubService.GetSemesterGroup(AppUser.Id, semester);

            SemesterSubscriptionViewModel model;

            if (semGroup == null)
            {
                model = GetModel(semester);
            }
            else
            {
                model = new SemesterSubscriptionViewModel
                {
                    Group    = semGroup,
                    Semester = semester.Id.ToString()
                };
            }

            ViewBag.Semester = semester;

            return(View("Semester", model));
        }
예제 #2
0
        public ActionResult Issue(ThesisAcceptModel model)
        {
            var subscription = Db.Subscriptions.OfType <OccurrenceSubscription>().SingleOrDefault(x => x.Id == model.Subscription.Id);
            var supervision  = Db.Activities.OfType <Supervision>()
                               .SingleOrDefault(x => x.Occurrence.Id == subscription.Occurrence.Id);
            var user = GetUser(subscription.UserId);

            // aus der subscription eine Thesis machen
            var subInfoService = new SemesterSubscriptionService();
            var semester       = SemesterService.GetSemester(DateTime.Today);
            var curriculum     = subInfoService.GetBestCurriculum(subscription.UserId, semester);

            int  period  = 0;
            bool success = int.TryParse(curriculum.Version, out period);

            if (!success || period == 0)
            {
                period = 3;
            }

            var student = Db.Students.FirstOrDefault(x => x.UserId.Equals(user.Id) && x.Curriculum.Id == curriculum.Id);

            if (student == null)
            {
                var curr = Db.Curricula.SingleOrDefault(x => x.Id == curriculum.Id);
                student = new Student
                {
                    UserId     = user.Id,
                    Curriculum = curr
                };

                Db.Students.Add(student);
            }


            var thesis = new Thesis();

            thesis.TitleDe        = model.Title;
            thesis.Supervision    = supervision;
            thesis.IssueDate      = DateTime.Today;
            thesis.ExpirationDate = thesis.IssueDate.Value.AddMonths(period);
            thesis.Student        = student;

            Db.Theses.Add(thesis);

            // Subscription und alle anderen löschen
            var list = Db.Activities.OfType <Supervision>().Where(x =>
                                                                  x.Occurrence.Subscriptions.Any(u => u.UserId.Equals(subscription.UserId))).ToList();

            foreach (var item in list)
            {
                var sub = item.Occurrence.Subscriptions.FirstOrDefault(x => x.UserId.Equals(user.Id));
                Db.Subscriptions.Remove(sub);
            }

            Db.SaveChanges();

            // oder zur Detailseite
            return(RedirectToAction("Thesis", "Lecturer"));
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            // Alle Semester mit Stundenplänen, die in der Zukunft enden
            var semesterList = Db.Semesters.Where(x =>
                                                  x.EndCourses >= DateTime.Today &&
                                                  x.Groups.Any(g => g.IsAvailable)).ToList();

            var semSubService = new SemesterSubscriptionService(Db);

            var model = new List <SemesterSubscriptionOverviewModel>();

            foreach (var semester in semesterList)
            {
                var semGroup = semSubService.GetSemesterGroup(AppUser.Id, semester);

                var m = new SemesterSubscriptionOverviewModel
                {
                    Semester = semester,
                    Group    = semGroup
                };

                model.Add(m);
            }


            return(View(model));
        }
예제 #4
0
        public PartialViewResult Search(string searchString)
        {
            var semester = SemesterService.GetSemester(DateTime.Today);

            var model = new List <StudentViewModel>();

            if (!string.IsNullOrEmpty(searchString))
            {
                var userDb = new ApplicationDbContext();
                var users  = from s in userDb.Users select s;
                if (!string.IsNullOrEmpty(searchString))
                {
                    users = users.Where(u =>
                                        u.MemberState == MemberState.Student &&
                                        (u.FirstName.ToUpper().Contains(searchString.ToUpper()) ||
                                         u.LastName.ToUpper().Contains(searchString.ToUpper()))
                                        );
                }


                var semSubService = new SemesterSubscriptionService();

                foreach (var user in users)
                {
                    var studModel = new StudentViewModel
                    {
                        User    = user,
                        Student = Db.Students.Where(x => x.UserId.Equals(user.Id)).OrderByDescending(x => x.Created).FirstOrDefault()
                    };


                    // alle Kurse des Benutzers
                    var courses =
                        Db.Activities.OfType <Course>()
                        .Where(c => c.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) &&
                               c.SemesterGroups.Any((g => g.Semester.Id == semester.Id)))
                        .OrderBy(c => c.Name)
                        .ToList();

                    studModel.CurrentCourses = courses;

                    model.Add(studModel);
                }
            }

            model = model.OrderBy(u => u.User.LastName).ToList();

            ViewBag.CurrentSemester = semester;

            return(PartialView("_Profile", model));
        }
예제 #5
0
        public ActionResult Change()
        {
            var semester = SemesterService.GetSemester(DateTime.Today);
            var user     = GetCurrentUser();

            var semSubService        = new SemesterSubscriptionService();
            var semesterSubscription = semSubService.GetSemesterGroup(user.Id, semester);

            var model = new CurriculumSubscriptionViewModel
            {
                OrgId  = semesterSubscription?.CapacityGroup.CurriculumGroup.Curriculum.Organiser.Id ?? Guid.Empty,
                CurrId = semesterSubscription?.CapacityGroup.CurriculumGroup.Curriculum.Id ?? Guid.Empty,
                SemId  = semester.Id
            };

            var orgs = Db.Organisers.Where(x => x.IsFaculty && x.Curricula.Any()).OrderBy(f => f.ShortName).ToList();
            var org  = semesterSubscription?.CapacityGroup.CurriculumGroup.Curriculum.Organiser ?? orgs.FirstOrDefault();

            ViewBag.Faculties = orgs.Select(f => new SelectListItem
            {
                Text  = f.ShortName,
                Value = f.Id.ToString(),
            });


            ViewBag.Curricula = org.Curricula.OrderBy(f => f.ShortName).Select(f => new SelectListItem
            {
                Text  = f.Name,
                Value = f.Id.ToString(),
            });

            var nextDate = DateTime.Today.AddDays(70);

            ViewBag.Semesters = Db.Semesters.Where(x => x.StartCourses <= nextDate).OrderByDescending(x => x.EndCourses)
                                .Select(f => new SelectListItem
            {
                Text  = f.Name,
                Value = f.Id.ToString(),
            }
                                        );


            return(View(model));
        }
예제 #6
0
        public ActionResult UpdateSemesterGroup(SemesterSubscriptionViewModel model)
        {
            var user = AppUser;

            var semSubService = new SemesterSubscriptionService();

            if (user != null)
            {
                var group = Db.SemesterGroups.SingleOrDefault(g => g.Id.ToString().Equals(model.CurrGroup));

                if (group != null)
                {
                    semSubService.Subscribe(user.Id, group.Id);
                    model.Group = group;
                }
            }


            return(RedirectToAction("Index"));
        }
예제 #7
0
        public ActionResult Schedule(Guid id)
        {
            var userRight = GetUserRight();

            ViewBag.UserRight = userRight;

            var semSubService = new SemesterSubscriptionService();

            var user = AppUser;

            // das übergebene Semester
            var currentSemester = SemesterService.GetSemester(id);

            var model = new DashboardStudentViewModel();

            model.User      = user;
            model.Organiser = GetMyOrganisation();

            model.Semester      = currentSemester;
            model.SemesterGroup = semSubService.GetSemesterGroup(user.Id, currentSemester);

            return(View(model));
        }
예제 #8
0
        public ActionResult Issue(Guid id)
        {
            var subscription = Db.Subscriptions.OfType <OccurrenceSubscription>().SingleOrDefault(x => x.Id == id);
            var supervision  = Db.Activities.OfType <Supervision>()
                               .SingleOrDefault(x => x.Occurrence.Id == subscription.Occurrence.Id);
            var user           = GetUser(subscription.UserId);
            var subInfoService = new SemesterSubscriptionService();
            var semester       = SemesterService.GetSemester(DateTime.Today);



            var model = new ThesisAcceptModel
            {
                Subscription = subscription,
                Supervision  = supervision,
                User         = user
            };

            model.Curriculum = subInfoService.GetBestCurriculum(subscription.UserId, semester);
            model.Lecturer   = supervision.Owners.First().Member;

            int period = 0;

            bool success = int.TryParse(model.Curriculum.Version, out period);

            if (!success || period == 0)
            {
                period = 3;
            }

            model.Period       = period;
            model.IssueDate    = DateTime.Today;
            model.DeliveryDate = model.IssueDate.AddMonths(period);


            return(View(model));
        }
예제 #9
0
        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);
        }
예제 #10
0
        public ActionResult SendInvitations(OccurrenceMailingModel model)
        {
            var host = AppUser;

            var invitationList = Session["InvitationList"] as InvitationCheckModel;

            var semSubService = new SemesterSubscriptionService();

            // Keine Liste
            // Vermutung, die Session ist abgelaufen
            if (invitationList == null)
            {
                return(View("SendInvitationsError"));
            }

            var attachmentList = new List <CustomMailAttachtmentModel>();

            foreach (var attachment in model.Attachments)
            {
                if (attachment != null)
                {
                    var bytes = new byte[attachment.ContentLength];
                    attachment.InputStream.Read(bytes, 0, attachment.ContentLength);

                    attachmentList.Add(new CustomMailAttachtmentModel
                    {
                        FileName = Path.GetFileName(attachment.FileName),
                        Bytes    = bytes,
                    });
                }
            }



            foreach (var invitation in invitationList.Invitations.Where(i => i.Invite))
            {
                invitation.Invited = false;

                var now  = DateTime.Now;
                var user = new ApplicationUser
                {
                    UserName       = invitation.Email,
                    Email          = invitation.Email,
                    FirstName      = invitation.FirstName,
                    LastName       = invitation.LastName,
                    Registered     = now,
                    MemberState    = MemberState.Student,
                    Remark         = "Einladung von " + host.FullName,
                    ExpiryDate     = null,   // Einladung bleibt dauerhaft bestehen - Deprovisionierung automatisch
                    Submitted      = now,
                    EmailConfirmed = true,   // damit ist auch ein "ForgotPassword" möglich, auch wenn er die Einladung nicht angenommen hat.
                    IsApproved     = true,   // Damit bekommt der Nutzer von Anfang an E-Mails
                    Faculty        = host.Id // Benutzer der eingeladen hat
                };

                // Benutzer anlegen, mit Dummy Passwort


                //string pswd = Membership.GeneratePassword(10, 2);

                var result = UserManager.Create(user, "Pas1234?");
                if (result.Succeeded)
                {
                    // analog Forget E-Mail Versand
                    string code = UserManager.GeneratePasswordResetToken(user.Id);

                    var mailModel = new ForgotPasswordMailModel
                    {
                        User          = user,
                        Token         = code,
                        CustomSubject = model.Subject,
                        CustomBody    = model.Body,
                        Attachments   = attachmentList,
                        IsNewAccount  = true,
                    };


                    try
                    {
                        new MailController().InvitationMail(mailModel, host, model.TemplateLanguage).Deliver();

                        // Student anlegen
                        var student = Db.Students.FirstOrDefault(x => x.UserId.Equals(user.Id));

                        if (student == null)
                        {
                            var sem = SemesterService.GetSemester(invitation.Semester);

                            var org = Db.Organisers.SingleOrDefault(x =>
                                                                    x.ShortName.Equals(invitation.Organiser));

                            var curr = org.Curricula.SingleOrDefault(c => c.ShortName.Equals(invitation.Curriculum));


                            student = new Student
                            {
                                Created       = DateTime.Now,
                                Curriculum    = curr,
                                FirstSemester = sem,
                                UserId        = user.Id
                            };

                            Db.Students.Add(student);
                            Db.SaveChanges();
                        }

                        //semSubService.Subscribe(user.Id, invitation.SemGroup.Id);

                        invitation.Invited = true;
                    }
                    catch (SmtpFailedRecipientException ex)
                    {
                        invitation.Remark = ex.Message;
                    }
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        invitation.Remark += error;
                    }
                }
            }


            var deliveryMailModel = new GenericMailDeliveryModel
            {
                Subject         = model.Subject,
                Receiver        = host,
                TemplateContent = new UserMailModel
                {
                    CustomBody = model.Body,
                }
            };


            // Mail an Einladenden versenden
            var ms     = new MemoryStream();
            var writer = new StreamWriter(ms, Encoding.Default);


            writer.Write(
                "Name;Vorname;E-Mail;Versand;Bemerkung");

            writer.Write(Environment.NewLine);

            foreach (var delivery in invitationList.Invitations)
            {
                writer.Write("{0};{1};{2};{3};{4}",
                             delivery.LastName, delivery.FirstName, delivery.Email,
                             (delivery.Invite && delivery.Invited) ? "OK" : "FEHLER",
                             delivery.Remark);
                writer.Write(Environment.NewLine);
            }

            writer.Flush();
            writer.Dispose();

            var sb = new StringBuilder();

            sb.Append("Versandbericht");
            sb.Append(".csv");

            deliveryMailModel.Attachments.Add(new CustomMailAttachtmentModel
            {
                FileName = sb.ToString(),
                Bytes    = ms.GetBuffer()
            });

            try
            {
                new MailController().GenericMail(deliveryMailModel).Deliver();
            }
            catch (Exception ex)
            {
                var logger = LogManager.GetLogger("SendMail");
                logger.ErrorFormat("Mailsent failed: {0}", ex.Message);
            }

            return(View("SendInvitationsSuccess", invitationList));
        }
예제 #11
0
        private SemesterSubscriptionViewModel GetModel(Semester semester)
        {
            var model = new SemesterSubscriptionViewModel
            {
                Semester   = semester.Id.ToString(),
                Group      = null,
                Faculty    = string.Empty,
                Curriculum = string.Empty,
                CurrGroup  = string.Empty,
            };

            var semService    = new SemesterService(Db);
            var semSubService = new SemesterSubscriptionService(Db);

            // Alle Fakultäten, die aktive Semestergruppen haben
            var acticeorgs = semService.GetActiveOrganiser(semester, true);

            ViewBag.Semesters = new List <SelectListItem>()
            {
                new SelectListItem
                {
                    Text  = semester.Name,
                    Value = semester.Id.ToString()
                }
            };


            // Immer alle anzeigen, die was haben
            ViewBag.Faculties = acticeorgs.OrderBy(f => f.ShortName).Select(f => new SelectListItem
            {
                Text  = f.ShortName,
                Value = f.Id.ToString(),
            });

            // Liste der Studiengänge
            var actOrg     = acticeorgs.FirstOrDefault();
            var activecurr = semService.GetActiveCurricula(actOrg, semester, true);

            // Liste der Gruppen hängt jetzt von der Einschreibung ab

            // keine Einschreibung vorhanden
            if (!activecurr.Any())
            {
                model.HasData = false;
            }
            else
            {
                model.HasData = true;

                ViewBag.Curricula = activecurr.OrderBy(f => f.ShortName).Select(f => new SelectListItem
                {
                    Text  = string.Format("{0} ({1})", f.ShortName, f.Name),
                    Value = f.Id.ToString(),
                });


                // nimm den ersten
                var myCurr = activecurr.First();

                var semesterGroups = Db.SemesterGroups.Where(g =>
                                                             g.Semester.Id == semester.Id &&
                                                             g.IsAvailable &&
                                                             g.CapacityGroup.CurriculumGroup.Curriculum.Id == myCurr.Id).OrderBy(g => g.CapacityGroup.CurriculumGroup.Name).ToList();


                var semGroups = semesterGroups.Select(s => new SelectListItem
                {
                    Text  = s.FullName,
                    Value = s.Id.ToString()
                }).ToList();

                ViewBag.Groups = semGroups;
            }

            ViewBag.Semester = semester;

            return(model);
        }
예제 #12
0
        public PartialViewResult ListByGroup(Guid semGroupId)
        {
            var semGroup = Db.SemesterGroups.SingleOrDefault(g => g.Id == semGroupId);

            var semester    = SemesterService.GetSemester(DateTime.Today);
            var vorSemester = SemesterService.GetPreviousSemester(semester);

            var model = new List <StudentViewModel>();

            if (semGroup != null)
            {
                var semSubService = new SemesterSubscriptionService();

                foreach (var sub in semGroup.Subscriptions)
                {
                    var user = UserManager.FindById(sub.UserId);

                    if (user != null)
                    {
                        var studModel = new StudentViewModel
                        {
                            User = user,
                            CurrentSubscription = semSubService.GetSubscription(user.Id, semester.Id),
                            LastSubscription    = semSubService.GetSubscription(user.Id, vorSemester.Id)
                        };



                        // alle Kurse des Benutzers
                        var courses =
                            Db.Activities.OfType <Course>()
                            .Where(c => c.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) &&
                                   c.SemesterGroups.Any((g => g.Semester.Id == semester.Id)))
                            .OrderBy(c => c.Name)
                            .ToList();


                        studModel.AllCourses = courses;

                        var coursesFit =
                            Db.Activities.OfType <Course>()
                            .Where(c => c.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) &&
                                   c.SemesterGroups.Any((g => g.Id == semGroupId)))
                            .OrderBy(c => c.Name)
                            .ToList();


                        studModel.CoursesFit = coursesFit;

                        model.Add(studModel);
                    }
                }
            }

            model = model.OrderBy(u => u.User.LastName).ToList();

            ViewBag.CurrentSemester = semester;
            ViewBag.LastSemester    = vorSemester;

            return(PartialView("Persons", model));
        }
예제 #13
0
        public PartialViewResult Persons(string searchString)
        {
            var semester    = SemesterService.GetSemester(DateTime.Today);
            var vorSemester = new SemesterService().GetSemester(semester, 1);

            var model = new List <StudentViewModel>();

            if (!string.IsNullOrEmpty(searchString))
            {
                var userDb = new ApplicationDbContext();
                var users  = from s in userDb.Users select s;
                if (!string.IsNullOrEmpty(searchString))
                {
                    users = users.Where(u =>
                                        u.MemberState == MemberState.Student &&
                                        (u.FirstName.ToUpper().Contains(searchString.ToUpper()) ||
                                         u.LastName.ToUpper().Contains(searchString.ToUpper()))
                                        );
                }


                var semSubService = new SemesterSubscriptionService();

                foreach (var user in users)
                {
                    var studModel = new StudentViewModel
                    {
                        User = user,
                        CurrentSubscription = semSubService.GetSubscription(user.Id, semester.Id),
                        LastSubscription    = semSubService.GetSubscription(user.Id, vorSemester.Id)
                    };

                    var semesterSubscription = Db.Subscriptions.OfType <SemesterSubscription>()
                                               .FirstOrDefault(s => s.SemesterGroup.Semester.Id == semester.Id && s.UserId.Equals(user.Id));

                    // alle Kurse des Benutzers
                    var courses =
                        Db.Activities.OfType <Course>()
                        .Where(c => c.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) &&
                               c.SemesterGroups.Any((g => g.Semester.Id == semester.Id)))
                        .OrderBy(c => c.Name)
                        .ToList();


                    studModel.AllCourses = courses;

                    var coursesFit = new List <Course>();

                    if (semesterSubscription != null)
                    {
                        coursesFit = Db.Activities.OfType <Course>()
                                     .Where(
                            c =>
                            c.Occurrence.Subscriptions.Any(s => s.UserId.Equals(user.Id)) &&
                            c.SemesterGroups.Any((g => g.Id == semesterSubscription.SemesterGroup.Id)))
                                     .OrderBy(c => c.Name)
                                     .ToList();
                    }


                    studModel.CoursesFit = coursesFit;

                    model.Add(studModel);
                }
            }

            model = model.OrderBy(u => u.User.LastName).ToList();

            ViewBag.CurrentSemester = semester;
            ViewBag.LastSemester    = vorSemester;

            return(PartialView("Persons", model));
        }