public static CourseAdmissionDto ConvertCourseadmissionToDTO(UserCourseAdmission entity) { return(new CourseAdmissionDto { CourseId = entity.CourseId, Results = entity.Results.Select(ConvertScoreCardDto).ToList() }); }
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); }