public static CourseAdmissionDto ConvertCourseadmissionToDTO(UserCourseAdmission entity)
 {
     return(new CourseAdmissionDto
     {
         CourseId = entity.CourseId,
         Results = entity.Results.Select(ConvertScoreCardDto).ToList()
     });
 }
Example #2
0
        public void ResetCourse(User user, UserCourseAdmission courseAdmission, int startingModule)
        {
            user.CourseAdmissions.Remove(courseAdmission);

            var course = _coachingCourseRepository.GetCourseById(courseAdmission.CourseId);
            //Find all exercises and get a fresh scorecard
            var modules   = _moduleRepository.GetModulesWithIds(course.Modules.Select(m => m.ModuleReferenceId)).ToList();
            var exercises = _exerciseRepository.GetExercisesWithIds(modules.SelectMany(m => new[] { m.Exercise.ResourceReferenceId, m.Reflection.ResourceReferenceId })).ToList();

            var freshScoreCards = exercises.SelectMany(er => er.Elements.Select(e =>
                                                                                e.Exercise != null ?
                                                                                e.Exercise.GetEmptyScoreCard() :
                                                                                new BaseScoreCard(
                                                                                    new CoachingModuleReference(modules.Single(m =>
                                                                                                                               m.Exercise.ResourceReferenceId == er.Id).Id), Guid.NewGuid(), "")));

            //Add course admission to user
            if (user.CourseAdmissions == null)
            {
                user.CourseAdmissions = new List <UserCourseAdmission>();
            }

            user.CourseAdmissions.Add(new UserCourseAdmission
            {
                CourseId = course.Id,
                Results  = freshScoreCards.ToList()
            });

            for (int i = 0; i < startingModule; i++)
            {
                var module  = modules[i];
                var results = user.CourseAdmissions.Last().Results.Where(r => r.Module.ModuleReferenceId == module.Id);

                foreach (var result in results)
                {
                    result.IsCompleted = true;
                }
            }

            //Remove dialogs for this user
            var dialogRepo    = new DialogRepositoryDocumentDb();
            var dialogService = new DialogService(dialogRepo);

            var dialogs = dialogService.GetUserDialogs(user.Id);

            foreach (var dialog in dialogs)
            {
                //Get the opposit dialog
                var oppositeDialog = dialogService.GetOpositDialog(dialog);

                if (dialog.OwnerId == user.CoachId)
                {
                    //Delete all except the first
                    dialog.Entries = new List <UserDialogEntry> {
                        dialog.Entries.OrderBy(d => d.TimeStamp).First()
                    };
                    oppositeDialog.Entries = new List <UserDialogEntry> {
                        oppositeDialog.Entries.OrderBy(d => d.TimeStamp).First()
                    };

                    dialogRepo.SaveDialog(dialog);
                    dialogRepo.SaveDialog(oppositeDialog);
                }
                else
                {
                    dialogRepo.DeleteDialog(dialog);
                    dialogRepo.DeleteDialog(oppositeDialog);
                }
            }
            //Save user
            _userRepository.SaveUser(user);
        }