public async Task <IActionResult> EditModules(CourseEditModulesViewModel model) { if (ModelState.IsValid) { try { var result = await _coursesRepository.EditModules(model); if (result) { // success return(RedirectToAction("EditStudents", new { courseId = model.CourseId })); } } catch { // error ModelState.AddModelError(string.Empty, "Невідома помилка"); return(RedirectToAction("EditStudents", new { courseId = model.CourseId })); } } else { ModelState.TryAddModelError(string.Empty, "Невідома помилка!"); } return(View(model)); }
public async Task <IActionResult> EditModules(int courseId) { var course = _coursesRepository.GetById(courseId); var subjectId = course.SubjectId; var subject = _subjectsRepository.GetById(subjectId); var modules = _modulesRepository.GetModulesBySubjectId(subjectId); var model = new CourseEditModulesViewModel { CourseId = courseId, Course = new CourseViewModel { CourseId = courseId, Description = subject.Description, Start = course.StartDate, End = course.EndDate, Subject = subject, Name = course.Name, Teacher = new UserViewModel { Email = course.Teacher.Email, FirstName = course.Teacher.FirstName, LastName = course.Teacher.LastName, MiddleName = course.Teacher.MiddleName, }, TeacherId = course.TeacherId, SubjectId = subjectId }, SubjectId = subjectId, }; var modulesInCourses = (await _coursesRepository.GetModules(model.CourseId)).Select(x => x.ModuleId).ToList(); model.Modules = modules.Select(x => new CourseModuleEditViewModel { Id = x.ModuleId, Name = x.Name, Description = x.Description, Selected = modulesInCourses.Count == 0 ? true : modulesInCourses.Contains(x.ModuleId) }).ToList(); return(View(model)); }
public async Task <bool> EditModules(CourseEditModulesViewModel model) { var courseId = model.CourseId; var courseStudents = await GetStudents(courseId); var notSelectedModules = model.Modules.Where(x => !x.Selected).Select(x => x.Id).ToList(); _context.CourseModule.RemoveRange(await _context.CourseModule.Where(x => notSelectedModules.Contains(x.ModuleId)).ToListAsync()); _context.Mark.RemoveRange(await _context.Mark.Include(x => x.CourseModule).Where(x => x.CourseModule.CourseId == courseId && notSelectedModules.Contains(x.CourseModule.ModuleId)).ToListAsync()); var existedModules = await _context.CourseModule.Where(cm => cm.CourseId == courseId).Select(x => x.ModuleId).ToListAsync(); var newModules = model.Modules.Where(x => x.Selected && !existedModules.Contains(x.Id)).Select(x => x.Id).ToList(); newModules.ForEach(async moduleId => { var cm = new CourseModule { CourseId = courseId, ModuleId = moduleId }; await _context.CourseModule.AddAsync(cm); if (courseStudents != null && courseStudents.Count > 0) { courseStudents.ForEach(async student => { await _context.Mark.AddAsync( new Mark { StudentId = student.StudentId, CourseModuleId = cm.CourseModuleId, } ); }); } }); return(await _context.SaveChangesAsync() >= 0); }