public async Task <IActionResult> Create([Bind("CityId,Date,Comment,Id,Created,SelectedCity")] ExamViewModel examViewModel) { if (ModelState.IsValid) { var latestDate = _repository.Query <Exam>() .OrderBy(x => x.Created) .LastOrDefault(); var exam = ExamMappings.ToEntity(examViewModel); var city = await _repository.Query <City>().FirstOrDefaultAsync(x => x.Name == examViewModel.SelectedCity); exam.CityId = city.Id; var previousUrl = TempData["ReturnPath"].ToString(); if (latestDate != null) { exam.Tasks = latestDate.Tasks; await _repository.InsertAsync(exam); _logger.LogInformation("New exam added to DB. User {User}.", _user); return(Redirect(previousUrl)); } else { _logger.LogWarning("Exam was null. Nothing added to DB. User {User}.", _user); } await _repository.InsertAsync(exam); return(Redirect(previousUrl)); } return(RedirectToAction(nameof(Index))); }
public async Task <IActionResult> Index(int value, [Bind("SelectedCity")] ExamsViewModel viewModel) { var exams = await _repository.Query <Exam>() .Include(exam => exam.City) .ToListAsync(); List <ExamViewModel> examViewModels = new List <ExamViewModel>(); exams.ForEach(x => examViewModels.Add(ExamMappings.ToViewModel(x))); examViewModels = examViewModels.OrderByDescending(x => x.Date).ToList(); List <string> AcceptancePeriod = await CalculateAcceptancePeriods(examViewModels); var AcceptancePeriods = new List <SelectListItem>(); foreach (var ap in AcceptancePeriod) { AcceptancePeriods.Add(new SelectListItem { Value = AcceptancePeriod.FindIndex(a => a == ap).ToString(), Text = ap }); } viewModel.AcceptancePeriod = AcceptancePeriods; viewModel.ExamViewModels = examViewModels.Where(x => x.SetAcceptancePeriod == AcceptancePeriods.ElementAt(value).Text).ToList(); var SelectedAcceptancePeriod = AcceptancePeriods.ElementAt(value); viewModel.SelectedAcceptancePeriod = SelectedAcceptancePeriod.Text; TempData["SelectedAcceptancePeriod"] = SelectedAcceptancePeriod.Value; var selectedExams = examViewModels.Where(x => x.SetAcceptancePeriod == SelectedAcceptancePeriod.Text).ToList(); var results = await _repository.Query <Result>().ToListAsync(); int studentsCountInAcceptancePeriod = 0; foreach (var selectedExam in selectedExams) { int examId = exams.FirstOrDefault(x => x.Date == selectedExam.Date).Id; studentsCountInAcceptancePeriod += results.Count(x => x.ExamId == examId); } TempData["Count"] = studentsCountInAcceptancePeriod; _logger.LogInformation("Found {Count} records. User {User}.", viewModel.ExamViewModels.Count(), _user); return(View(viewModel)); }