public async Task <IActionResult> AddEditTutor(TutorDto model) { using (var txscope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { if (!ModelState.IsValid) { txscope.Dispose(); ErrorLog.AddErrorLog(new Exception("ModelStateIsValid"), "CreateTutor"); return(RedirectToAction(@"Components/_AddEditTutor", model.Id)); } if (model.Id == 0) { if (!string.IsNullOrEmpty(model.UserName)) { bool userExist = UserNameExists(model.UserName); if (userExist == true) { txscope.Dispose(); return(JsonResponse.GenerateJsonResult(3, ResponseConstants.TutorUserExist)); } } if (!string.IsNullOrEmpty(model.MobileNo)) { bool mobileNoExist = MobileNoExists(model.MobileNo); if (mobileNoExist == true) { txscope.Dispose(); return(JsonResponse.GenerateJsonResult(3, ResponseConstants.MobileNoExist)); } } //Created by company Tutor ApplicationUser tutorUser = new ApplicationUser(); tutorUser.UserName = model.UserName; tutorUser.MobileNumber = model.MobileNo; tutorUser.IsActive = true; var createStudentUser = await _userManager.CreateAsync(tutorUser, model.TutorPassword); if (createStudentUser.Succeeded) { var isRoleAssined = await _userManager.AddToRoleAsync(tutorUser, UserRoles.Tutor); var tutorObj = Mapper.Map <Tutors>(model); tutorObj.CreatedDate = model.DateofEmployeement; tutorObj.IsActive = true; tutorObj.UserId = tutorUser.Id; var result = await _tutorService.InsertAsync(tutorObj, Accessor, User.GetUserId()); if (result != null) { List <long> lessonIds = JsonConvert.DeserializeObject <List <long> >(model.RelevantLesson); // string[] lessonIds = model.RelevantLesson.Split(","); foreach (var lesson in lessonIds) { var relevantLessonData = new RelevantLessonDto() { TutorId = result.Id, LessonId = lesson }; var relevantLessonObj = Mapper.Map <TutorRelevantLesson>(relevantLessonData); var relevantLessonResult = await _relevantLessonService.InsertAsync(relevantLessonObj, Accessor, User.GetUserId()); } //Staff Log if (User.IsInRole(UserRoles.Staff)) { await _staffLog.InsertAsync(new Log { CreatedDate = DateTime.UtcNow, StaffId = User.GetUserId(), Description = ResponseConstants.CreateNewTutor }, Accessor, User.GetUserId()); } txscope.Complete(); return(JsonResponse.GenerateJsonResult(1, ResponseConstants.CreateNewTutor)); } } } else if (model != null) { var result = await _tutorService.GetSingleAsync(x => x.Id == model.Id); result.TutorName = model.TutorName; await _tutorService.UpdateAsync(result, Accessor, User.GetUserId()); var tutorUserObj = await _userService.GetSingleAsync(x => x.Id == model.Id); tutorUserObj.UserName = model.UserName; tutorUserObj.MobileNumber = model.MobileNo; await _userService.UpdateAsync(tutorUserObj, Accessor, User.GetUserId()); string[] lessonIds = model.RelevantLesson.Split(","); var relevantTutor = _relevantLessonService.GetAll().Where(x => x.TutorId == model.Id).ToList(); foreach (var item in relevantTutor) { await _relevantLessonService.DeleteAsync(item, Accessor, User.GetUserId()); } foreach (string lesson in lessonIds) { var relevantLessonData = new RelevantLessonDto() { TutorId = result.Id, LessonId = Convert.ToInt64(lesson) }; var relevantLessonObj = Mapper.Map <TutorRelevantLesson>(relevantLessonData); var relevantLessonResult = await _relevantLessonService.InsertAsync(relevantLessonObj, Accessor, User.GetUserId()); } //Staff Log if (User.IsInRole(UserRoles.Staff)) { await _staffLog.InsertAsync(new Log { CreatedDate = DateTime.UtcNow, StaffId = User.GetUserId(), Description = ResponseConstants.UpdateTutor }, Accessor, User.GetUserId()); } txscope.Complete(); return(JsonResponse.GenerateJsonResult(1, ResponseConstants.UpdateTutor)); } else { txscope.Dispose(); return(JsonResponse.GenerateJsonResult(0, ResponseConstants.SomethingWrong)); } txscope.Dispose(); return(JsonResponse.GenerateJsonResult(0, ResponseConstants.SomethingWrong)); } catch (Exception ex) { txscope.Dispose(); ErrorLog.AddErrorLog(ex, "CreateTutor"); return(JsonResponse.GenerateJsonResult(0, ResponseConstants.SomethingWrong)); } } }