public IActionResult Load(long?ID, long?Type, long?SubMenuID, long?LanguageID)
        {
            GetMenus operation = new GetMenus();

            operation.ID        = ID;
            operation.SubMenuID = SubMenuID;
            operation.Type      = Type;

            if (LanguageID.HasValue)
            {
                operation.LangID = LanguageID;
            }
            else
            {
                operation.LangID = 1;
            }



            var result = operation.QueryAsync().Result;

            if (result is ValidationsOutput)
            {
                return(Ok(new ApiResult <List <ValidationItem> >()
                {
                    Data = ((ValidationsOutput)result).Errors
                }));
            }
            else
            {
                return(Ok((List <Menu>)result));
            }
        }
        public IActionResult LoadMenus(long?groupID, long?LanguageID)
        {
            GetGroupRelation operation = new GetGroupRelation();

            operation.GroupID = groupID;
            GetMenus getMenus = new GetMenus();

            getMenus.Type = 1;
            if (LanguageID.HasValue)
            {
                getMenus.LangID  = LanguageID;
                operation.LangID = LanguageID;
            }
            else
            {
                getMenus.LangID  = 1;
                operation.LangID = 1;
            }

            var System = (List <Menu>)getMenus.QueryAsync().Result;

            getMenus.Type = 2;
            var Modules = (List <Menu>)getMenus.QueryAsync().Result;

            getMenus.Type = 3;
            var SubModule = (List <Menu>)getMenus.QueryAsync().Result;

            getMenus.Type = 4;
            var Pages         = (List <Menu>)getMenus.QueryAsync().Result;
            var groups        = (List <GroupRelation>)operation.QueryAsync().Result;
            var relatedSystem = new List <System>();

            foreach (var ss in System)
            {
                var system = new System();
                system.ID         = ss.ID;
                system.Name       = ss.Name;
                system.children   = Modules.Where(x => x.SubMenuID == ss.ID).ToList();
                system.children   = system.children.Select(c => { c.Parent = ss; return(c); }).ToList();
                system.SubModuels = SubModule.Where(subModule => system.children.Where(x => x.ID == subModule.SubMenuID) != null).ToList();
                system.Pages      = Pages.Where(page => system.SubModuels.Where(x => x.ID == page.SubMenuID) != null).ToList();
                system.OrderChildrens();
                relatedSystem.Add(system);
            }

            var unRelatedSystem = GenrerateUnRelatedGroups(groups, relatedSystem);

            return(Ok(new { unRelatedMenu = unRelatedSystem, relatedMenu = relatedSystem }));
        }
        public IActionResult LoadParent(long?ID, long?Type, long?SubMenuID, long?LanguageID)
        {
            if (SubMenuID.HasValue)
            {
                //First load the Type
                GetMenus operation = new GetMenus();
                // the direct parent of menu
                GetMenus FirstParent = new GetMenus();
                // the second parent of the related menu
                GetMenus SecondParent = new GetMenus();
                // the thid parent of the related menu
                GetMenus ThirdParent = new GetMenus();
                // the fourth parent of the related menu
                GetMenus FourthParent = new GetMenus();
                operation.ID   = ID;
                operation.Type = Type;
                if (LanguageID.HasValue)
                {
                    operation.LangID    = LanguageID;
                    FirstParent.LangID  = LanguageID;
                    SecondParent.LangID = LanguageID;
                    ThirdParent.LangID  = LanguageID;
                    FourthParent.LangID = LanguageID;
                }

                else
                {
                    operation.LangID    = 1;
                    FirstParent.LangID  = 1;
                    SecondParent.LangID = 1;
                    ThirdParent.LangID  = 1;
                    FourthParent.LangID = 1;
                }

                var result = operation.QueryAsync().Result;
                var Menus  = (List <Menu>)result;

                List <Menu> MenusToReturn = new List <Menu>();
                FirstParent.ID = SubMenuID;
                // Get the first parent of menu
                var FirstMenu = ((List <Menu>)FirstParent.QueryAsync().Result).FirstOrDefault();

                // Get the second Parent of parent of menu
                SecondParent.ID = FirstMenu.SubMenuID;
                var secondMenu = ((List <Menu>)SecondParent.QueryAsync().Result).FirstOrDefault();
                if (secondMenu != null)
                {
                    // Get the third Parent
                    ThirdParent.ID = secondMenu.SubMenuID;
                    var ThirdMenu = ((List <Menu>)ThirdParent.QueryAsync().Result).FirstOrDefault();
                    if (ThirdMenu != null)
                    {
                        // Get fourth Parent
                        FourthParent.ID = ThirdParent.SubMenuID;
                        var FourthMenu = ((List <Menu>)FourthParent.QueryAsync().Result).FirstOrDefault();

                        if (FourthParent != null)
                        {
                            foreach (var item in Menus)
                            {
                                if (item.SubMenuID == ThirdMenu.ID && ThirdMenu.SubMenuID == secondMenu.ID && secondMenu.SubMenuID == FirstMenu.ID)
                                {
                                    item.SystemMenuID   = FirstMenu.SubMenuID;
                                    item.SystemMenuName = FirstMenu.Name;

                                    item.ModuleMenuID      = secondMenu.ID;
                                    item.ModuleMenuName    = secondMenu.Name;
                                    item.SubModuleMenuID   = ThirdMenu.ID;
                                    item.SubModuleMenuName = ThirdMenu.Name;
                                    MenusToReturn.Add(item);
                                }
                            }
                        }
                        else
                        {
                            foreach (var item in Menus)
                            {
                                if (item.SubMenuID == secondMenu.ID && secondMenu.SubMenuID == FirstMenu.ID)
                                {
                                    item.SystemMenuID   = FirstMenu.ID;
                                    item.SystemMenuName = FirstMenu.Name;

                                    item.ModuleMenuID      = secondMenu.ID;
                                    item.ModuleMenuName    = secondMenu.Name;
                                    item.SubModuleMenuID   = FirstMenu.ID;
                                    item.SubModuleMenuName = FirstMenu.Name;
                                    MenusToReturn.Add(item);
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (var item in Menus)
                        {
                            if (item.SubMenuID == FirstMenu.ID)
                            {
                                item.SystemMenuID   = FirstMenu.ID;
                                item.SystemMenuName = FirstMenu.Name;

                                item.ModuleMenuID   = secondMenu.ID;
                                item.ModuleMenuName = secondMenu.Name;
                                MenusToReturn.Add(item);
                            }
                        }
                    }
                }
                else
                {
                    foreach (var item in Menus)
                    {
                        if (item.SubMenuID == FirstMenu.ID)
                        {
                            item.SystemMenuID   = FirstMenu.ID;
                            item.SystemMenuName = FirstMenu.Name;

                            MenusToReturn.Add(item);
                        }
                    }
                }


                if (result is ValidationsOutput)
                {
                    return(Ok(new ApiResult <List <ValidationItem> >()
                    {
                        Data = ((ValidationsOutput)result).Errors
                    }));
                }
                else
                {
                    return(Ok(MenusToReturn));
                }
            }
            else
            {
                List <Menu> MenusToReturn = new List <Menu>();
                //First load the Type
                GetMenus operation = new GetMenus();
                // the direct parent of menu
                GetMenus FirstChild = new GetMenus();
                // the second parent of the related menu
                GetMenus SecondChild = new GetMenus();
                // the thid parent of the related menu
                GetMenus ThirdChild = new GetMenus();
                // the fourth parent of the related menu
                GetMenus FourthChild = new GetMenus();
                operation.Type = 1;
                var result = operation.QueryAsync().Result;
                var Menus  = (List <Menu>)result;
                foreach (var item in Menus)
                {
                    FirstChild.Type = 2;
                    var firstChild = (List <Menu>)FirstChild.QueryAsync().Result;
                    if (firstChild.Count > 0)
                    {
                        foreach (var child in firstChild)
                        {
                            item.ModuleMenuID   = child.ID;
                            item.ModuleMenuName = child.Name;
                            SecondChild.Type    = 3;
                            var secondChild = (List <Menu>)SecondChild.QueryAsync().Result;
                            if (secondChild.Count > 0)
                            {
                                foreach (var child2 in secondChild)
                                {
                                    item.SubModuleMenuID   = child2.ID;
                                    item.SubModuleMenuName = child2.Name;
                                    ThirdChild.Type        = 4;
                                    var thirdChild = (List <Menu>)ThirdChild.QueryAsync().Result;
                                    if (thirdChild.Count > 0)
                                    {
                                        foreach (var child3 in thirdChild)
                                        {
                                            item.PageMenuID   = child3.ID;
                                            item.PageMenuName = child3.Name;
                                            FourthChild.Type  = 5;
                                            var fourthChild = (List <Menu>)FourthChild.QueryAsync().Result;
                                            if (fourthChild.Count > 0)
                                            {
                                                foreach (var child4 in fourthChild)
                                                {
                                                    item.ActionMenuID   = child4.ID;
                                                    item.ActionMenuName = child4.Name;
                                                    MenusToReturn.Add(item);
                                                }
                                            }
                                            else
                                            {
                                                MenusToReturn.Add(item);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        MenusToReturn.Add(item);
                                    }
                                }
                            }
                            else
                            {
                                MenusToReturn.Add(item);
                            }
                        }
                    }
                    else
                    {
                        MenusToReturn.Add(item);
                    }
                }
                return(Ok(MenusToReturn));
            }
        }
        public IActionResult LoadActions(long?groupID, long?LanguageID)
        {
            GetGroupRelation operation = new GetGroupRelation();
            GetMenus         getMenus  = new GetMenus();

            getMenus.Type = 5;

            operation.GroupID = groupID;

            if (LanguageID.HasValue)
            {
                operation.LangID = LanguageID;
                getMenus.LangID  = LanguageID;
            }
            else
            {
                operation.LangID = 1;
                getMenus.LangID  = 1;
            }

            var         result  = operation.QueryAsync().Result;
            var         Actions = (List <Menu>)getMenus.QueryAsync().Result;
            var         groups  = (List <GroupRelation>)result;
            List <Menu> returnedRelatedActions   = new List <Menu>();
            List <Menu> returnedUnRelatedActions = new List <Menu>();

            if (groups.Count > 0)
            {
                foreach (var item in Actions)
                {
                    foreach (var group in groups)
                    {
                        if (group.RefrenceID == item.ID)
                        {
                            bool alreadyExist             = returnedRelatedActions.Contains(item);
                            bool alreadyExistInSecondList = returnedUnRelatedActions.Contains(item);
                            if (!alreadyExist && !alreadyExistInSecondList)
                            {
                                item.GroupRelationID = group.ID.Value;
                                returnedRelatedActions.Add(item);
                            }
                            else
                            {
                                item.GroupRelationID = group.ID.Value;
                                returnedRelatedActions.Add(item);
                                returnedUnRelatedActions.Remove(item);
                            }
                        }
                        else
                        {
                            bool alreadyExist            = returnedUnRelatedActions.Contains(item);
                            bool alreadyExistInFirstList = returnedRelatedActions.Contains(item);
                            if (!alreadyExist && !alreadyExistInFirstList)
                            {
                                item.GroupRelationID = group.ID.Value;
                                returnedUnRelatedActions.Add(item);
                            }
                        }
                    }
                }
            }
            else
            {
                returnedUnRelatedActions = Actions;
            }
            if (result is ValidationsOutput)
            {
                return(Ok(new ApiResult <List <ValidationItem> >()
                {
                    Data = ((ValidationsOutput)result).Errors
                }));
            }
            else
            {
                return(Ok(new { RelatedActions = returnedRelatedActions, UnRelatedActions = returnedUnRelatedActions }));
            }
        }