Beispiel #1
0
        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.");
                }
            }
        }
Beispiel #2
0
        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}.");
        }
Beispiel #4
0
        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}'");
        }
Beispiel #5
0
        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}'");
        }
Beispiel #6
0
 public abstract Task <IActionResult> CreateUserAsync([FromBody] UserSubmit userSubmit);
Beispiel #7
0
 public abstract Task <IActionResult> UpdateUserAsync([FromRoute][Required] Guid userId, [FromBody] UserSubmit userSubmit);
Beispiel #8
0
        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;
            }
        }
Beispiel #9
0
        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;
            }
        }
Beispiel #10
0
        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]}.");
        }
Beispiel #11
0
        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)));
        }
Beispiel #12
0
        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)));
        }