Example #1
0
        /// <summary>
        /// Liest die Daten für die Anzeige der Seite aus der Datenbank.
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task InitializeAsync(Token token)
        {
            Token = token ?? throw new ArgumentNullException(nameof(token));

            // Die angemeldeten Fächer des Users auslesen
            var subjectRegistrations = from r in _context.Registrations
                                       where r.TokenId == token.TokenId
                                       select new SubjectRegistration
            {
                SubjectId      = r.SubjectId,
                SubjectName    = r.Subject.Name,
                RegistrationId = r.RegistrationId,
                Rating         = r.Rating
            };

            if (!subjectRegistrations.Any())
            {
                // Wenn keine Anmeldung besteht, wird eine leere Anmeldung für jedes vorhandene
                // Fach erstellt.
                subjectRegistrations = from s in _context.Subjects
                                       select new SubjectRegistration
                {
                    SubjectId   = s.SubjectId,
                    SubjectName = s.Name
                };
            }

            RegistrationStats = await(from r in _context.Registrations
                                      where r.Rating == 1
                                      group r by r.Subject.SubjectId into g
                                      orderby g.Key
                                      select new RegistrationStat
            {
                SubjectId         = g.Key,
                RegistrationCount = g.Count()
            }).ToListAsync();

            SubjectRegistrations = new SubjectRegistrationList(await subjectRegistrations.ToListAsync());
        }
Example #2
0
        /// <summary>
        /// Speichert die Formulareingaben in der Datenbank.
        /// </summary>
        /// <param name="id">Token</param>
        /// <param name="subjectRegistrations">Formulardaten, die gespeichert werden müssen.</param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostAsync(string id, SubjectRegistrationList subjectRegistrations)
        {
            // Nur mit gültigem Token verarbeiten.
            var token = _context.Tokens.Find(id);

            if (token == null)
            {
                return(NotFound());
            }

            // Die restlichen Daten für die Anzeige (Statistik) nachladen, denn es werden nur die
            // Formulardaten übermittelt.
            if (ModelState.IsValid)
            {
                foreach (var r in subjectRegistrations ?? Enumerable.Empty <SubjectRegistration>())
                {
                    if (r.RegistrationId == 0)
                    {
                        _context.Registrations.Add(new Registration
                        {
                            SubjectId = r.SubjectId,
                            TokenId   = id,
                            Rating    = r.Rating
                        });
                    }
                    else
                    {
                        var registration = _context.Registrations.Find(r.RegistrationId);
                        registration.Rating = r.Rating;
                    }
                }
                _context.SaveChanges();
                token.LastValidRegistration = DateTime.UtcNow;
                _context.SaveChanges();
            }
            await InitializeAsync(token);

            return(Page());
        }