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));
        }
Esempio n. 3
0
        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);
        }