public void SaveCourseAchievements(User user, UserCourseAchievement achievement, int courseModuleKey)
        {
            var existingAchievements = GetUserCourseAchievements(user).AsQueryable();

            CompareAndPrepareCourseAchievement(achievement, courseModuleKey, user, existingAchievements);

            _courseCourseAchievementRepository.CommitChanges();
        }
        private void CompareAndPrepareCourseAchievement(
            UserCourseAchievement courseAchievementCandidate,
            int courseModuleKey,
            User user,
            IQueryable <UserCourseAchievement> existingAchievements)
        {
            var courseKey         = courseAchievementCandidate.CourseKey;
            var courseAchievement = existingAchievements.FirstOrDefault(x => x.CourseKey == courseKey);

            if (courseAchievement == null)
            {
                courseAchievement = new UserCourseAchievement
                {
                    CourseKey = courseKey,
                    UserKey   = user.Key
                };
                _courseCourseAchievementRepository.InsertOnCommit(courseAchievement);
            }


            if (courseAchievement.CourseModuleAchievements == null)
            {
                courseAchievement.CourseModuleAchievements = new List <UserCourseModuleAchievement>();
            }

            UserCourseModuleAchievement moduleAchievement = courseAchievement.CourseModuleAchievements.OrEmptyListIfNull().FirstOrDefault(a => a.CourseModuleKey == courseModuleKey);

            if (moduleAchievement == null)
            {
                moduleAchievement = new UserCourseModuleAchievement
                {
                    UserCourseAchievement = courseAchievement,
                    CourseModuleKey       = courseModuleKey
                };

                courseAchievement.CourseModuleAchievements.Add(moduleAchievement);
            }

            moduleAchievement.CompletedDate = DateTime.UtcNow;

            var course = _courseRepository.GetAll().Include(c => c.CourseModules).FirstOrDefault(x => x.Key == courseKey);

            // should not be null
            if (course != null)
            {
                if (courseAchievement.CourseModuleAchievements.Count >= course.CourseModules.Count)
                {
                    courseAchievement.Completed     = true;
                    courseAchievement.CompletedDate = DateTime.UtcNow;
                }
            }
        }
예제 #3
0
        public CourseAchievementViewModel(UserCourseAchievement courseAchievement)
        {
            Key           = courseAchievement.Key;
            UserKey       = courseAchievement.UserKey;
            User          = courseAchievement.User;
            CourseKey     = courseAchievement.CourseKey;
            Completed     = courseAchievement.Completed;
            CompletedDate = courseAchievement.CompletedDate;

            CourseModuleAchievements = new List <CourseModuleAchievementViewModel>();
            foreach (var moduleAchievement in courseAchievement.CourseModuleAchievements.OrEmptyListIfNull())
            {
                CourseModuleAchievements.Add(new CourseModuleAchievementViewModel(moduleAchievement));
            }
        }
        public virtual ActionResult CourseName(CourseViewModel viewModel, string courseName, string courseModuleName)
        {
            courseName       = courseName.Replace("-", "");
            courseModuleName = courseModuleName.Replace("-", "");

            if (ModelState.IsValid)
            {
                var user = userService.FindByUsername(currentUser.Identity.Name);
                TempData["Message"] = "You passed this course!";

                var courseAchievement = new UserCourseAchievement
                {
                    CourseKey = viewModel.CourseKey,
                    UserKey   = user.Key
                };

                //courseAchievement.CourseModuleAchievements
                courseAchievementsService.SaveCourseAchievements(user, courseAchievement, viewModel.CourseModuleKey);

                return(Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString() + "?quiz=true"));
            }

            return(View("~/Views/Courses/{0}/{1}.cshtml".format_with(courseName, courseModuleName), viewModel));
        }