public async Task <IEnumerable> QueryAsync()
        {
            var dyParam = new OracleDynamicParameters();

            dyParam.Add(UserSpParams.PARAMETER_ID, OracleDbType.Decimal, ParameterDirection.Input, (object)ID ?? DBNull.Value);
            dyParam.Add(UserSpParams.PARAMETER_LANG_ID, OracleDbType.Decimal, ParameterDirection.Input, (object)LangID ?? DBNull.Value);
            dyParam.Add(UserSpParams.PARAMETER_REF_SELECT, OracleDbType.RefCursor, ParameterDirection.Output);
            List <User> users = await QueryExecuter.ExecuteQueryAsync <User>(UserSpName.SP_LOAD_USER, dyParam);

            foreach (var item in users)
            {
                GetUserGroups userGroup = new GetUserGroups();
                userGroup.UserID   = item.ID;
                item.UserRelations = await userGroup.GetUserRelation();
            }
            return(users);
        }
        public IActionResult Load(Int64?ID, Int64?userID, Int64?langId)
        {
            GetUserGroups operation = new GetUserGroups();


            if (langId.HasValue)
            {
                operation.LangID = langId;
            }
            else
            {
                operation.LangID = 1;
            }
            if (!userID.HasValue)
            {
                operation.ID = ID;
                var results = operation.QueryAsync().Result;
                return(Ok((List <UserGroup>)results));
            }
            operation.UserID = userID;
            var       result     = operation.QueryAsync().Result;
            var       userGroups = (List <UserGroup>)result;
            GetGroups groups     = new GetGroups();

            groups.LangID = 1;
            if (langId.HasValue)
            {
                groups.LangID = langId;
            }
            else
            {
                groups.LangID = 1;
            }
            var          Groups = (List <Group>)groups.QueryAsync().Result;
            List <Group> returnedRelatedGroups   = new List <Group>();
            List <Group> returnedUnRelatedGroups = new List <Group>();

            if (userGroups.Count > 0)
            {
                foreach (var group in Groups)
                {
                    foreach (var item in userGroups)
                    {
                        if (group.ID == item.RefrenceID)
                        {
                            bool alreadyExist             = returnedRelatedGroups.Contains(group);
                            bool alreadyExistInSecondList = returnedUnRelatedGroups.Contains(group);
                            if (!alreadyExist && !alreadyExistInSecondList)
                            {
                                group.UserRelationID = item.ID;
                                returnedRelatedGroups.Add(group);
                            }
                            else
                            {
                                group.UserRelationID = item.ID;
                                returnedRelatedGroups.Add(group);
                                returnedUnRelatedGroups.Remove(group);
                            }
                        }
                        else
                        {
                            bool alreadyExist            = returnedUnRelatedGroups.Contains(group);
                            bool alreadyExistInFirstList = returnedRelatedGroups.Contains(group);
                            if (!alreadyExist && !alreadyExistInFirstList)
                            {
                                group.UserRelationID = item.ID;
                                returnedUnRelatedGroups.Add(group);
                            }
                        }
                    }
                }
            }
            else
            {
                returnedUnRelatedGroups = Groups;
            }


            if (result is ValidationsOutput)
            {
                return(Ok(new ApiResult <List <ValidationItem> >()
                {
                    Data = ((ValidationsOutput)result).Errors
                }));
            }
            else
            {
                return(Ok(new { RelatedGroups = returnedRelatedGroups, UnRelatedGroups = returnedUnRelatedGroups }));
            }
        }
        public IActionResult LoadUserGroup(Int64?ID, Int64?groupID, Int64?langId)
        {
            GetUserGroups operation = new GetUserGroups();
            GetUsers      users     = new GetUsers();

            List <User> returnedRelatedGroups   = new List <User>();
            List <User> returnedUnRelatedGroups = new List <User>();

            if (langId.HasValue)
            {
                operation.LangID = langId;
                users.LangID     = langId;
            }
            else
            {
                operation.LangID = 1;
                users.LangID     = 1;
            }
            var result         = operation.QueryAsync().Result;
            var usersList      = (List <User>)users.QueryAsync().Result;
            var userIDsInGroup = (List <UserGroup>)result;

            userIDsInGroup = userIDsInGroup.Where(g => g.RefrenceID == groupID).ToList();
            if (userIDsInGroup.Count > 0)
            {
                foreach (var item in userIDsInGroup)
                {
                    foreach (var user in usersList)
                    {
                        if (user.ID == item.UserID)
                        {
                            bool alreadyExist             = returnedRelatedGroups.Contains(user);
                            bool alreadyExistInSecondList = returnedUnRelatedGroups.Contains(user);
                            if (!alreadyExist && !alreadyExistInSecondList)
                            {
                                user.UserRelationID = item.ID;
                                returnedRelatedGroups.Add(user);
                            }
                            else
                            {
                                user.UserRelationID = item.ID;
                                returnedRelatedGroups.Add(user);
                                returnedUnRelatedGroups.Remove(user);
                            }
                        }
                        else
                        {
                            bool alreadyExist            = returnedUnRelatedGroups.Contains(user);
                            bool alreadyExistInFirstList = returnedRelatedGroups.Contains(user);
                            if (!alreadyExist && !alreadyExistInFirstList)
                            {
                                user.UserRelationID = item.ID;
                                returnedUnRelatedGroups.Add(user);
                            }
                        }
                    }
                }
            }
            else
            {
                returnedUnRelatedGroups = usersList;
            }


            if (result is ValidationsOutput)
            {
                return(Ok(new ApiResult <List <ValidationItem> >()
                {
                    Data = ((ValidationsOutput)result).Errors
                }));
            }
            else
            {
                return(Ok(new { RelatedGroups = returnedRelatedGroups, UnRelatedGroups = returnedUnRelatedGroups }));
            }
        }
        public async static Task <IDTO> UpdateMode(User user)
        {
            OracleDynamicParameters oracleParams = new OracleDynamicParameters();
            ComplateOperation <int> complate     = new ComplateOperation <int>();

            user.ModificationDate = DateTime.Now;
            oracleParams.Add(UserSpParams.PARAMETER_ID, OracleDbType.Int64, ParameterDirection.Input, (object)user.ID ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_USERNAME, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.UserName ?? DBNull.Value, 30);
            oracleParams.Add(UserSpParams.PARAMETER_NAME, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.Name ?? DBNull.Value, 500);
            oracleParams.Add(UserSpParams.PARAMETER_NAME2, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.Name2 ?? DBNull.Value, 500);
            oracleParams.Add(UserSpParams.PARAMETER_EFFECTIVE_DATE, OracleDbType.Date, ParameterDirection.Input, (object)user.EffectiveDate ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_EXPIRY_DATE, OracleDbType.Date, ParameterDirection.Input, (object)user.ExpiryDate ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_LOCKUP_STATUS, OracleDbType.Int64, ParameterDirection.Input, (object)user.Status ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_STATUS_DATE, OracleDbType.Date, ParameterDirection.Input, (object)user.StatusDate ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_PASSWORD, OracleDbType.Varchar2, ParameterDirection.Input, (object)Encryption.EncryptPassword(user.Password) ?? DBNull.Value, 1000);
            oracleParams.Add(UserSpParams.PARAMETER_EMAIL, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.Email ?? DBNull.Value, 30);
            oracleParams.Add(UserSpParams.PARAMETER_COMPANY_ID, OracleDbType.Int64, ParameterDirection.Input, (object)user.CompanyID ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_NO_OF_LOGIN, OracleDbType.Int64, ParameterDirection.Input, (object)user.NoOfLogin ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_BIRTHDATE, OracleDbType.Date, ParameterDirection.Input, (object)user.BirthDate ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_PICTURE, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.Picture ?? DBNull.Value, 500);
            oracleParams.Add(UserSpParams.PARAMETER_COUNTRY_ID, OracleDbType.Int64, ParameterDirection.Input, (object)user.CountryID ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_MOBILE, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.Mobile ?? DBNull.Value, 30);
            oracleParams.Add(UserSpParams.PARAMETER_LOCKUP_TYPE, OracleDbType.Int64, ParameterDirection.Input, (object)user.UserType ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_CREATED_BY, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.CreatedBy ?? DBNull.Value, 30);
            oracleParams.Add(UserSpParams.PARAMETER_CREATION_DATE, OracleDbType.Date, ParameterDirection.Input, (object)user.CreationDate ?? DBNull.Value);
            oracleParams.Add(UserSpParams.PARAMETER_MODIFIED_BY, OracleDbType.Varchar2, ParameterDirection.Input, (object)user.ModifiedBy ?? DBNull.Value, 30);
            oracleParams.Add(UserSpParams.PARAMETER_MODIFICATION_DATE, OracleDbType.Date, ParameterDirection.Input, (object)user.ModificationDate ?? DBNull.Value);


            if (await NonQueryExecuter.ExecuteNonQueryAsync(UserSpName.SP_UPADTE_USER, oracleParams) == -1)
            {
                //Delete Relations

                complate.message = "Updated Successfully";
                List <UserGroup> userRelations     = new List <UserGroup>();
                GetUserGroups    userRelationGroup = new GetUserGroups();
                userRelationGroup.UserID = user.ID;
                userRelationGroup.LangID = 1;
                userRelations            = (List <UserGroup>)userRelationGroup.QueryAsync().Result;
                foreach (var userRelation in userRelations)
                {
                    DeleteUserGroup deleteUserGroup = new DeleteUserGroup();
                    deleteUserGroup.ID = userRelation.ID;
                    await deleteUserGroup.ExecuteAsync();
                }
                if (user.Branches.Length > 0)
                {
                    // Add Relations
                    if (user.Branches.Length > 0)
                    {
                        // Add Relations


                        UserGroup userGroup = new UserGroup();


                        userGroup.UserName    = user.UserName;
                        userGroup.UserID      = user.ID;
                        userGroup.RefrenceIDs = user.Branches;
                        if (user.UserRelationID.HasValue)
                        {
                            userGroup.UserRelationID = user.UserRelationID;
                        }
                        else
                        {
                            userGroup.UserRelationID = 1;
                        }

                        await DBUserGroupSetup.AddUserBranches(userGroup);
                    }
                }


                return(complate);
            }
            else
            {
                complate.message = "Operation Failed";
            }

            return(complate);
        }