private async Task ConfirmUniqueUserName(UserModel userModel, UserSubmit userSubmit) { if (userModel.UserName != userSubmit.Username) { // Confirm the new username is available UserModel checkUserModel = await userRepository.GetByUsernameAsync(userSubmit.Username, false); if (checkUserModel != null) { throw new ItemNotProcessableException($"User with user name '{userSubmit.Username}' already exists."); } } }
private async Task ConfirmLdapLink(UserModel userModel, UserSubmit userSubmit) { if (userSubmit.LdapAuthenticationModeId != null && userSubmit.LdapAuthenticationModeId != Guid.Empty) { var authMode = await ldapAuthenticationModeRepository.GetByIdAsync((Guid)userSubmit.LdapAuthenticationModeId, true); if (authMode == null) { throw new ItemNotFoundException($"Ldap Authentication Mode '{userModel.LdapAuthenticationModeId}' not found."); } if (userSubmit.LdapAuthenticationModeId != userModel.LdapAuthenticationModeId && !(await ldapConnectionService.CheckIfUserExist(userSubmit.Username, (Guid)userSubmit.LdapAuthenticationModeId))) { throw new ItemNotFoundException($"User with username '{userSubmit.Username}' was not found on Ldap authentication mode '{userSubmit.LdapAuthenticationModeId}'."); } } }
public async Task CreateUserAsync_WithTestUser_ReturnsCreatesdUser() { // Arrange var userService = Substitute.For <IUserService>(); var profileService = Substitute.For <IProfileService>(); var inputModel = new UserSubmit() { Name = "Test Name", Surname = "Test Surname", Email = "Test Email", PhoneNumber = "Test Phone", Username = "******" }; userService.CreateAsync(inputModel, Arg.Any <Guid>()) .Returns(new User() { Name = inputModel.Name, Surname = inputModel.Surname, Email = inputModel.Email, PhoneNumber = inputModel.PhoneNumber, Username = inputModel.Username } ); var controller = new UserController(userService, profileService, paginationHelper, orderByHelper, mapper); // Act IActionResult actionResult = await controller.CreateUserAsync(inputModel); // Assert var okResult = actionResult as OkObjectResult; Assert.NotNull(okResult); var user = okResult.Value as User; Assert.NotNull(user); Assert.True(user.Name == inputModel.Name, $"Retrieved Name {user.Name} not the same as sample Name {inputModel.Name}."); Assert.True(user.Surname == inputModel.Surname, $"Retrieved Surname {user.Surname} not the same as sample Surname {inputModel.Surname}."); Assert.True(user.Email == inputModel.Email, $"Retrieved Email {user.Email} not the same as sample Email {inputModel.Email}."); Assert.True(user.PhoneNumber == inputModel.PhoneNumber, $"Retrieved Email {user.PhoneNumber} not the same as sample Email {inputModel.PhoneNumber}."); Assert.True(user.Username == inputModel.Username, $"Retrieved Username {user.Username} not the same as sample Username {inputModel.Username}."); }
public async Task CreateUser_GivenUserCreate_ReturnsUserResource() { var userRepository = Substitute.For <IUserRepository>(); var roleRepository = Substitute.For <IRoleRepository>(); var teamRepository = Substitute.For <ITeamRepository>(); var ldapRepository = Substitute.For <ILdapAuthenticationModeRepository>(); var ldapConnectionService = Substitute.For <ILdapConnectionService>(); var userModelMock = new UserModel { UserName = "******", FirstName = "Test User Firstname", Surname = "Test User Surname", Email = "Test User Email", PhoneNumber = "Test User Phone", LdapAuthenticationModeId = null }; var userCreate = new UserSubmit() { Username = userModelMock.UserName, Password = "******", Name = userModelMock.FirstName, Surname = userModelMock.Surname, Email = userModelMock.Email, PhoneNumber = userModelMock.PhoneNumber, LdapAuthenticationModeId = userModelMock.LdapAuthenticationModeId }; userRepository.CreateAsync(Arg.Any <UserModel>(), Arg.Any <string>(), Arg.Any <bool>()).Returns(userModelMock); userRepository.UpdateAsync(Arg.Any <UserModel>()).Returns(userModelMock); userRepository.GetByIdAsync(Arg.Any <Guid>(), Arg.Any <bool>()).Returns(userModelMock); var userService = new UserService(userRepository, roleRepository, teamRepository, ldapRepository, mapper, ldapConnectionService); var userResource = await userService.CreateAsync(userCreate, Guid.NewGuid()); Assert.NotNull(userResource); Assert.True(userResource.Name == userModelMock.FirstName, $"User resource name: '{userResource.Name}' does not match expected value: '{userModelMock.FirstName}'"); Assert.True(userResource.Surname == userModelMock.Surname, $"User resource surname: '{userResource.Surname}' does not match expected value: '{userModelMock.Surname}'"); Assert.True(userResource.Username == userModelMock.UserName, $"User resource username: '******' does not match expected value: '{userModelMock.UserName}'"); Assert.True(userResource.Email == userModelMock.Email, $"User resource email: '{userResource.Email}' does not match expected value: '{userModelMock.Email}'"); Assert.True(userResource.PhoneNumber == userModelMock.PhoneNumber, $"User resource PhoneNumber: '{userResource.PhoneNumber}' does not match expected value: '{userModelMock.PhoneNumber}'"); }
public async Task UpdateUser_GivenUserSubmit_ReturnsUserResource() { var userRepository = Substitute.For <IUserRepository>(); var roleRepository = Substitute.For <IRoleRepository>(); var teamRepository = Substitute.For <ITeamRepository>(); var ldapRepository = Substitute.For <ILdapAuthenticationModeRepository>(); var ldapConnectionService = Substitute.For <ILdapConnectionService>(); var guid = Guid.NewGuid(); var userModelMock = new UserModel { UserName = "******", Id = guid.ToString(), FirstName = "Test User Firstname", Surname = "Test User Surname", Email = "Test User Email" }; var userSubmit = new UserSubmit() { Uuid = guid, Username = userModelMock.UserName, Name = userModelMock.FirstName, Surname = userModelMock.Surname, Email = userModelMock.Email }; userRepository.UpdateAsync(Arg.Any <UserModel>()).Returns(userModelMock); userRepository.GetByIdAsync(Arg.Any <Guid>(), Arg.Any <bool>()).Returns(userModelMock); var userService = new UserService(userRepository, roleRepository, teamRepository, ldapRepository, mapper, ldapConnectionService); var userResource = await userService.UpdateAsync(userSubmit, Guid.NewGuid()); Assert.NotNull(userResource); Assert.True(userResource.Uuid.ToString() == userModelMock.Id, $"User resource Id: '{userResource.Uuid}' does not match expected value: '{userModelMock.Id}'"); Assert.True(userResource.Name == userModelMock.FirstName, $"User resource name: '{userResource.Name}' does not match expected value: '{userModelMock.FirstName}'"); Assert.True(userResource.Surname == userModelMock.Surname, $"User resource surname: '{userResource.Surname}' does not match expected value: '{userModelMock.Surname}'"); Assert.True(userResource.Username == userModelMock.UserName, $"User resource username: '******' does not match expected value: '{userModelMock.UserName}'"); Assert.True(userResource.Email == userModelMock.Email, $"User resource email: '{userResource.Email}' does not match expected value: '{userModelMock.Email}'"); }
public abstract Task <IActionResult> CreateUserAsync([FromBody] UserSubmit userSubmit);
public abstract Task <IActionResult> UpdateUserAsync([FromRoute][Required] Guid userId, [FromBody] UserSubmit userSubmit);
public async Task <User> CreateAsync(UserSubmit userSubmit, Guid createdById) { // Start transactions to allow complete rollback in case of an error BeginAllTransactions(); try { userSubmit.Username = userSubmit.Username.Trim(); userSubmit.Email = userSubmit.Email.Trim(); if (string.IsNullOrWhiteSpace(userSubmit.Password)) { throw new ItemNotProcessableException($"Password field required for user create."); } if (userSubmit.Avatar != null && !userSubmit.Avatar.IsBase64String()) { throw new ItemNotProcessableException($"Avatar field is not a valid base64 string."); } UserModel checkUserModel = await userRepository.GetByUsernameAsync(userSubmit.Username, false); if (checkUserModel != null) { throw new ItemNotProcessableException($"User with user name '{userSubmit.Username}' already exists."); } var userModel = mapper.Map <UserModel>(userSubmit); // Check that the mapper did not assign a default GUID (happens if no GUID supplied). if (userModel.Id == Guid.Empty.ToString()) { userModel.Id = null; } userModel.ChangedBy = createdById; // Validate Authentication Mode if (userModel.LdapAuthenticationModeId == Guid.Empty) { userModel.LdapAuthenticationModeId = null; } if (userModel.LdapAuthenticationModeId != null) { var authMode = await ldapAuthenticationModeRepository.GetByIdAsync((Guid)userModel.LdapAuthenticationModeId, true); if (authMode == null) { throw new ItemNotFoundException($"Ldap Authentication Mode '{userModel.LdapAuthenticationModeId}' not found."); } if (!(await ldapConnectionService.CheckIfUserExist(userSubmit.Username, (Guid)userSubmit.LdapAuthenticationModeId))) { throw new ItemNotFoundException($"User with username '{userSubmit.Username}' was not found on Ldap authentication mode '{userModel.LdapAuthenticationModeId}'."); } } userModel.NormalizedEmail = userSubmit.Email.ToUpper(); userModel.NormalizedUserName = userSubmit.Username.ToUpper(); userModel.EmailConfirmed = true; userModel.PhoneNumberConfirmed = (userModel.PhoneNumber != null); UserModel createdUser = await userRepository.CreateAsync(userModel, userSubmit.Password, isPlainTextPassword : true); await AssignRolesToUserFromRoleIdList(createdUser, userSubmit.RoleIds); await AssignTeamsToUserFromTeamIdList(createdUser, userSubmit.TeamIds); createdUser = await userRepository.UpdateAsync(createdUser); // All successful CommitAllTransactions(); return(mapper.Map <User>(createdUser)); } catch (Exception ex) { logger.Error(ex); RollbackAllTransactions(); throw; } }
public async Task <User> UpdateAsync(UserSubmit userSubmit, Guid updatedById) { // Start transactions to allow complete rollback in case of an error BeginAllTransactions(); try { userSubmit.Username = userSubmit.Username.Trim(); userSubmit.Email = userSubmit.Email.Trim(); if (userSubmit.Avatar != null && !userSubmit.Avatar.IsBase64String()) { throw new ItemNotProcessableException($"Avatar field is not a valid base64 string."); } UserModel userModel = await userRepository.GetByIdAsync(userSubmit.Uuid, true); if (userModel == null) { throw new ItemNotFoundException($"User with ID '{userSubmit.Uuid}' not found when attempting to update a user using this ID!"); } await ConfirmUniqueUserName(userModel, userSubmit); await ConfirmLdapLink(userModel, userSubmit); if (userSubmit.Avatar != null) { userModel.Avatar = Convert.FromBase64String(userSubmit.Avatar); } else { userModel.Avatar = null; } if (userSubmit.LdapAuthenticationModeId == Guid.Empty) { userModel.LdapAuthenticationModeId = null; } else { userModel.LdapAuthenticationModeId = userSubmit.LdapAuthenticationModeId; } userModel.Email = userSubmit.Email; userModel.NormalizedEmail = userSubmit.Email.ToUpper(); userModel.FirstName = userSubmit.Name; userModel.PhoneNumber = userSubmit.PhoneNumber; userModel.PhoneNumberConfirmed = (userModel.PhoneNumber != null); userModel.Surname = userSubmit.Surname; userModel.UserName = userSubmit.Username; userModel.NormalizedUserName = userSubmit.Username.ToUpper(); userModel.ChangedBy = updatedById; await AssignRolesToUserFromRoleIdList(userModel, userSubmit.RoleIds); await AssignTeamsToUserFromTeamIdList(userModel, userSubmit.TeamIds); UserModel updatedUser = await userRepository.UpdateAsync(userModel); // All successful CommitAllTransactions(); return(mapper.Map <User>(updatedUser)); } catch (Exception ex) { logger.Error(ex); RollbackAllTransactions(); throw; } }
public async Task UpdateUserAsync_WithTestUser_ReturnsUpdatedUser() { // Arrange var userService = Substitute.For <IUserService>(); var inputModel = new UserSubmit() { Uuid = Guid.NewGuid(), Name = "Test Name", Surname = "Test Surname", Email = "Test Email", Username = "******", RoleIds = new List <Guid>() { new Guid(), new Guid() } }; userService.UpdateAsync(inputModel, Arg.Any <Guid>()) .Returns(new User() { Uuid = inputModel.Uuid, Name = inputModel.Name, Surname = inputModel.Surname, Email = inputModel.Email, Username = inputModel.Username, Roles = new List <Role>() { new Role() { Uuid = inputModel.RoleIds[0] }, new Role() { Uuid = inputModel.RoleIds[1] } } } ); var controller = new UserController(userService); // Act IActionResult actionResult = await controller.UpdateUserAsync(inputModel.Uuid, inputModel); // Assert var okResult = actionResult as OkObjectResult; Assert.NotNull(okResult); var user = okResult.Value as User; Assert.NotNull(user); Assert.True(user.Uuid == inputModel.Uuid, $"Retrieved Id {user.Uuid} not the same as sample id {inputModel.Uuid}."); Assert.True(user.Name == inputModel.Name, $"Retrieved Name {user.Name} not the same as sample Name {inputModel.Name}."); Assert.True(user.Surname == inputModel.Surname, $"Retrieved Surname {user.Surname} not the same as sample Surname {inputModel.Surname}."); Assert.True(user.Email == inputModel.Email, $"Retrieved Email {user.Email} not the same as sample Email {inputModel.Email}."); Assert.True(user.Username == inputModel.Username, $"Retrieved Username {user.Username} not the same as sample Username {inputModel.Username}."); Assert.True(user.Roles.Count == 2, $"Retrieved role count {user.Roles.Count} not the same as sample role count {inputModel.RoleIds.Count}."); Assert.True(user.Roles[0].Uuid == inputModel.RoleIds[0], $"Retrieved role id {user.Roles[0].Uuid} not the same as sample role id {inputModel.RoleIds[0]}."); Assert.True(user.Roles[1].Uuid == inputModel.RoleIds[1], $"Retrieved role id {user.Roles[1].Uuid} not the same as sample role id {inputModel.RoleIds[1]}."); }
public async override Task <IActionResult> UpdateUserAsync([FromRoute, Required] Guid userId, [FromBody] UserSubmit userSubmit) { if (userId == Guid.Empty || userSubmit.Uuid == Guid.Empty) { return(BadRequest()); } var loggedOnUser = ClaimsHelper.GetScalarClaimValue <Guid>(User, ClaimTypes.NameIdentifier, Guid.Empty); return(Ok(await userService.UpdateAsync(userSubmit, loggedOnUser))); }
public async override Task <IActionResult> CreateUserAsync([FromBody] UserSubmit userSubmit) { var loggedOnUser = ClaimsHelper.GetScalarClaimValue <Guid>(User, ClaimTypes.NameIdentifier, Guid.Empty); return(Ok(await userService.CreateAsync(userSubmit, loggedOnUser))); }
public JsonResult SubmitUserSelections(string username, string password, string xmlData) { var mgr = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>(); var usr = mgr.Find(username, password); if (usr == null) { return(Json(new MyJsonResult("Invalid username/password", MyJsonResult.InvalidUsernamePassword))); } using (var ent = new mushaf_qeraat_serverEntities()) { var usrDb = ent.User.FirstOrDefault(k => k.UsersTableID == usr.Id); if (usrDb == null || usrDb.CanSubmit != true) { return(Json(new MyJsonResult("Not permitted to submit", MyJsonResult.NotPermittedToSubmit))); } var details = new List <Detail>(); var shaheds = new List <Shahed>(); var mawade3 = new List <Mawd3>(); var groups = new List <Group>(); var khlafs = new List <Khlaf>(); readXml(xmlData, details, shaheds, mawade3, groups, khlafs); using (var trans = ent.Database.BeginTransaction()) { try { var mySubmits = ent.UserSubmit.Where(k => k.UserId == usrDb.ID); var myShatibiyah = ent.Submit_ShatibiyyahShahed.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var myDorrah = ent.Submit_DorrahShahed.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var myDetails = ent.Submit_MawdeaKhlafDetail.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var myMawadea = ent.Submit_MawdeaKhlaf.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var myGroups = ent.Submit_KhlafGroup.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var myKhlafs = ent.Submit_Khlaf.Where(m => mySubmits.Any(k => k.ID == m.SubmitID)); var submit = new UserSubmit() { UserId = usrDb.ID, SubmitTime = DateTime.Now }; ent.UserSubmit.Add(submit); ent.SaveChanges(); var resolve = new List <KeyValuePair <MawdeaKhlafDetail, Detail> >(); #region Detail var det_i = from b in details where !myDetails.Any(k => k.TableID == b.ID) select b; foreach (var item in det_i) { var id = myMawadea.FirstOrDefault(k => k.TableID == item.Owner); var obj = new MawdeaKhlafDetail() { KhlafType = item.Type }; if (id == null) { resolve.Add(new KeyValuePair <MawdeaKhlafDetail, Detail>(obj, item)); } else { obj.OwnerMawdeaKhlaf = id.InsertedID; } ent.MawdeaKhlafDetail.Add(obj); ent.SaveChanges(); ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail() { DetailType = item.Type, OwnerMawdeaKhlaf = item.Owner, SubmitID = submit.ID, TableID = item.ID, InsertedID = obj.C_ID }); } var det_u = from b in details where myDetails.Any(k => k.TableID == b.ID) select b; foreach (var item in det_u) { var id = myDetails.First(k => k.TableID == item.ID).InsertedID; var up = ent.MawdeaKhlafDetail.First(k => k.C_ID == id); var owner = myMawadea.FirstOrDefault(k => k.TableID == item.Owner); if (owner == null) { resolve.Add(new KeyValuePair <MawdeaKhlafDetail, Detail>(up, item)); } else { up.OwnerMawdeaKhlaf = owner.InsertedID; } ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail() { DetailType = item.Type, OwnerMawdeaKhlaf = item.Owner, SubmitID = submit.ID, TableID = item.ID, InsertedID = id, RejectReason = 1 }); } var ints = (from b in details select b.ID).ToArray(); var det_d = from b in myDetails where !ints.Any(k => k == b.TableID) select b; foreach (var item in det_d) { var del = ent.MawdeaKhlafDetail.First(k => k.C_ID == item.InsertedID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_MawdeaKhlafDetail.Add(new Submit_MawdeaKhlafDetail() { DetailType = del.KhlafType, OwnerMawdeaKhlaf = del.OwnerMawdeaKhlaf, InsertedID = item.InsertedID, RejectReason = 2, SubmitID = submit.ID }); } } #endregion #region Mawdea Khlaf var mawd_i = from b in mawade3 where !myMawadea.Any(k => k.TableID == b.ID) select b; foreach (var item in mawd_i) { var obj = new MawdeaKhlaf() { DetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID, PageNumber = item.Page, x1 = item.x1, y1 = item.y1, x2 = item.x2, y2 = item.y2 }; ent.MawdeaKhlaf.Add(obj); ent.SaveChanges(); ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf() { TableID = item.ID, PageNumber = item.Page, x1 = item.x1, y1 = item.y1, x2 = item.x2, y2 = item.y2, InsertedID = obj.C_ID, DetailID = item.Detail, SubmitID = submit.ID }); } var mawd_u = from b in mawade3 where myMawadea.Any(k => k.TableID == b.ID) select b; foreach (var item in mawd_u) { var id = myMawadea.First(k => k.TableID == item.ID).InsertedID; var up = ent.MawdeaKhlaf.First(k => k.C_ID == id); up.x1 = item.x1; up.x2 = item.x2; up.y1 = item.y1; up.y2 = item.y2; ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf() { TableID = item.ID, PageNumber = item.Page, x1 = item.x1, y1 = item.y1, x2 = item.x2, y2 = item.y2, InsertedID = id, RejectReason = 1, DetailID = item.Detail, SubmitID = submit.ID }); } ints = (from b in mawade3 select b.ID).ToArray(); var mawd_d = from b in myMawadea where !ints.Any(k => k == b.TableID) select b; foreach (var item in mawd_d) { var del = ent.MawdeaKhlaf.First(k => k.C_ID == item.InsertedID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_MawdeaKhlaf.Add(new Submit_MawdeaKhlaf() { PageNumber = del.PageNumber, x1 = del.x1, y1 = del.y1, x2 = del.x2, y2 = del.y2, InsertedID = del.C_ID, RejectReason = 2, DetailID = del.DetailID, SubmitID = submit.ID }); } } #endregion ent.SaveChanges(); foreach (var item in resolve) { item.Key.OwnerMawdeaKhlaf = myMawadea.First(k => k.TableID == item.Value.Owner).InsertedID; } #region Shahed var shat_i = from b in shaheds where !b.Dorrah && !myShatibiyah.Any(k => k.TableDetailID == b.Detail && k.BeitID == b.Beit) select b; foreach (var item in shat_i) { var obj = new ShatibiyyahShahed() { BeitID = item.Beit, BeitPart = item.Part, DetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID }; ent.ShatibiyyahShahed.Add(obj); ent.SaveChanges(); ent.Submit_ShatibiyyahShahed.Add(new Submit_ShatibiyyahShahed() { BeitID = item.Beit, BeitPart = item.Part, SubmitID = submit.ID, TableDetailID = item.Detail, InsertedDetailID = obj.DetailID }); } var shat_tmp = (from b in myShatibiyah select new { b.TableDetailID, b.BeitID }).ToArray(); var shat_d = from b in shat_tmp where !shaheds.Any(k => !k.Dorrah && b.TableDetailID == k.Detail && b.BeitID == k.Beit) select b; foreach (var i in shat_d) { var item = myShatibiyah.First(k => k.BeitID == i.BeitID && k.TableDetailID == i.TableDetailID); var del = ent.ShatibiyyahShahed.First(k => k.DetailID == item.InsertedDetailID && k.BeitID == item.BeitID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_ShatibiyyahShahed.Add(new Submit_ShatibiyyahShahed() { BeitID = item.BeitID, BeitPart = item.BeitPart, SubmitID = submit.ID, InsertedDetailID = item.InsertedDetailID, RejectReason = 2 }); } } var dor_i = from b in shaheds where b.Dorrah && !myDorrah.Any(k => k.TableDetailID == b.Detail && k.BeitID == b.Beit) select b; foreach (var item in dor_i) { var obj = new DorrahShahed() { BeitID = item.Beit, BeitPart = item.Part, DetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID }; ent.DorrahShahed.Add(obj); ent.SaveChanges(); ent.Submit_DorrahShahed.Add(new Submit_DorrahShahed() { BeitID = item.Beit, BeitPart = item.Part, SubmitID = submit.ID, TableDetailID = item.Detail, InsertedDetailID = obj.DetailID }); } var dor_tmp = (from b in myDorrah select new { b.TableDetailID, b.BeitID }).ToArray(); var dor_d = from b in dor_tmp where !shaheds.Any(k => k.Dorrah && b.TableDetailID == k.Detail && b.BeitID == k.Beit) select b; foreach (var i in dor_d) { var item = myDorrah.First(k => k.BeitID == i.BeitID && k.TableDetailID == i.TableDetailID); var del = ent.DorrahShahed.First(k => k.DetailID == item.InsertedDetailID && k.BeitID == item.BeitID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_DorrahShahed.Add(new Submit_DorrahShahed() { BeitID = item.BeitID, BeitPart = item.BeitPart, SubmitID = submit.ID, InsertedDetailID = item.InsertedDetailID, RejectReason = 2 }); } } #endregion #region Group var gr_i = from b in groups where !myGroups.Any(k => k.TableID == b.ID) select b; foreach (var item in gr_i) { var obj = new KhlafGroup() { Description = item.Descr, MawdeaKhlafDetailID = (int)myDetails.First(k => k.TableID == item.Detail).InsertedID }; ent.KhlafGroup.Add(obj); ent.SaveChanges(); ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup() { Description = item.Descr, InsertedID = obj.C_ID, SubmitID = submit.ID, TableID = item.ID, MawdeaKhlafDetailID = item.Detail }); } var gr_u = from b in groups where myGroups.Any(k => k.TableID == b.ID) select b; foreach (var item in gr_u) { var id = myGroups.First(k => k.TableID == item.ID).InsertedID; var up = ent.KhlafGroup.First(k => k.C_ID == id); up.Description = item.Descr; ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup() { Description = item.Descr, InsertedID = id, RejectReason = 1, SubmitID = submit.ID, TableID = item.ID, MawdeaKhlafDetailID = item.Detail }); } ints = (from b in groups select b.ID).ToArray(); var gr_d = from b in myGroups where !ints.Any(k => k == b.TableID) select b; foreach (var item in gr_d) { var del = ent.KhlafGroup.First(k => k.C_ID == item.InsertedID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_KhlafGroup.Add(new Submit_KhlafGroup() { Description = item.Description, InsertedID = item.InsertedID, RejectReason = 2, SubmitID = submit.ID, MawdeaKhlafDetailID = item.MawdeaKhlafDetailID }); } } #endregion #region Khlaf var kh_i = from b in khlafs where !myKhlafs.Any(k => k.TableKhlafGroupID == b.Group && k.TableRewayahID == b.Rewayah) select b; foreach (var item in kh_i) { var obj = new WebApplication.Models.Database.Khlaf() { HasKholf = item.Kholf, KhlafGroupID = (int)myGroups.First(k => k.TableID == item.Group).InsertedID, RewayahID = item.Rewayah }; ent.Khlaf.Add(obj); ent.Submit_Khlaf.Add(new Submit_Khlaf() { InsertedKhlafGroupID = obj.KhlafGroupID, InsertedRewayahID = item.Rewayah, TableKhlafGroupID = item.Group, TableRewayahID = item.Rewayah, SubmitID = submit.ID, HasKholf = item.Kholf }); } var kh_u = from b in khlafs where myKhlafs.Any(k => k.TableKhlafGroupID == b.Group && k.TableRewayahID == b.Rewayah) select b; foreach (var item in kh_u) { var id = myKhlafs.First(k => k.TableKhlafGroupID == item.Group && k.TableRewayahID == item.Rewayah) .InsertedKhlafGroupID; var up = ent.Khlaf.First(k => k.KhlafGroupID == id && k.RewayahID == item.Rewayah); up.HasKholf = item.Kholf; ent.Submit_Khlaf.Add(new Submit_Khlaf() { InsertedKhlafGroupID = id, InsertedRewayahID = item.Rewayah, TableKhlafGroupID = item.Group, TableRewayahID = item.Rewayah, SubmitID = submit.ID, HasKholf = item.Kholf, RejectReason = 1 }); } var kh_tmp = (from b in myKhlafs select new { b.TableKhlafGroupID, b.TableRewayahID }).ToArray(); var kh_d = from b in kh_tmp where !khlafs.Any(k => b.TableKhlafGroupID == k.Group && b.TableRewayahID == k.Rewayah) select b; foreach (var i in kh_d) { var item = myKhlafs.First(k => k.TableRewayahID == i.TableRewayahID && k.TableKhlafGroupID == i.TableKhlafGroupID); var del = ent.Khlaf.First(k => k.KhlafGroupID == item.InsertedKhlafGroupID && k.RewayahID == item.InsertedRewayahID); if (!del.IsDeleted) { del.IsDeleted = true; ent.Submit_Khlaf.Add(new Submit_Khlaf() { InsertedKhlafGroupID = item.InsertedKhlafGroupID, InsertedRewayahID = item.InsertedRewayahID, SubmitID = submit.ID, HasKholf = item.HasKholf, RejectReason = 2 }); } } #endregion ent.SaveChanges(); trans.Commit(); } catch (Exception ex) { string message = ex.Message; while (ex.InnerException != null) { ex = ex.InnerException; message = ex.Message; } return(Json(new MyJsonResult("Internal Server Error\n" + message, MyJsonResult.InternalServerError))); } } } return(Json(new MyJsonResult("Ok", MyJsonResult.Ok))); }