private ModuleMenuItems BuildDocumentMenu()
        {
            ModuleMenuItems moduleMenuItems = new ModuleMenuItems();

            ModuleMenuItem moduleMenuItem = new ModuleMenuItem();

            moduleMenuItem.Name        = MenuNameConstants.DocumentManagement;
            moduleMenuItem.DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.ApplicationName);
            moduleMenuItem.Order       = 0;

            if (_permissionChecker.IsGranted("admindocumentmvc_permission", "write"))
            {
                #region Release Document

                MenuItem menuReleaseDocument = new MenuItem();
                menuReleaseDocument.Name        = MenuNameConstants.ReleaseDocument;
                menuReleaseDocument.DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReleaseDocument);
                menuReleaseDocument.Order       = 0;
                menuReleaseDocument.Url         = "#";
                menuReleaseDocument.Icon        = "fa fa-cog";
                menuReleaseDocument.CssClass    = "treeview";

                menuReleaseDocument.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.ReleaseNewDocument,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReleaseNewDocument),
                    Url         = "/document/index",
                    Order       = 0
                });

                menuReleaseDocument.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.ReviewDocument,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReviewDocument),
                    Url         = "/document/reviewdocument",
                    Order       = 1
                });
                #endregion
                moduleMenuItem.Items.Add(menuReleaseDocument);
                #region Appendice
                MenuItem menuAppendiceDocument = new MenuItem();
                menuAppendiceDocument.Name        = MenuNameConstants.ReleaseAppendice;
                menuAppendiceDocument.DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReleaseAppendice);
                menuAppendiceDocument.Order       = 0;
                menuAppendiceDocument.Url         = "#";
                menuAppendiceDocument.Icon        = "fa fa-cog";
                menuAppendiceDocument.CssClass    = "treeview";

                menuAppendiceDocument.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.ReleaseNewAppendice,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReleaseNewAppendice),
                    Url         = "/appendice/index",
                    Order       = 0
                });

                menuAppendiceDocument.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.ReviewAppendice,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuReviewAppendice),
                    Url         = "/document/reviewdocument",
                    Order       = 1
                });
                #endregion
                moduleMenuItem.Items.Add(menuAppendiceDocument);

                #region Categories
                MenuItem menuCategory = new MenuItem();
                menuCategory.Name        = MenuNameConstants.Category;
                menuCategory.DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuCategory);
                menuCategory.Order       = 0;
                menuCategory.Url         = "#";
                menuCategory.Icon        = "fa  fa-list";
                menuCategory.CssClass    = "treeview";

                menuCategory.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.Module,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuModule),
                    Url         = "/module/index",
                    Order       = 0
                });

                menuCategory.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.DocumentType,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuDocumentType),
                    Url         = "/documenttype/index",
                    Order       = 1
                });

                menuCategory.Items.Add(new MenuItem
                {
                    Name        = MenuNameConstants.PromulgateStatus,
                    DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuPromulgateStatus),
                    Url         = "/promulgatestatus/index",
                    Order       = 2
                });
                #endregion
                moduleMenuItem.Items.Add(menuCategory);
            }

            #region Operation Data
            MenuItem menuOperationData = new MenuItem();
            menuOperationData.Name        = MenuNameConstants.OperationData;
            menuOperationData.DisplayName = _localizationManager.GetString(DocumentResourceNames.DocumentResourceName, DocumentResourceNames.MenuOperationData);
            menuOperationData.Order       = 0;
            menuOperationData.Url         = "#";
            menuOperationData.Icon        = "fa  fa-list";
            menuOperationData.CssClass    = "treeview";

            var documentTypes = SimpleCache.DocumentTypes;
            if (documentTypes != null && documentTypes.Any())
            {
                foreach (var documentType in documentTypes)
                {
                    menuOperationData.Items.Add(new MenuItem
                    {
                        Name        = documentType.Code,
                        DisplayName = documentType.Name,
                        Url         = $"/OperationData/list?code={documentType.Code}",
                        Order       = 2
                    });
                }
            }

            #endregion
            moduleMenuItem.Items.Add(menuOperationData);

            moduleMenuItems.Add(moduleMenuItem);

            return(moduleMenuItems);
        }
        public string RenderToHtml()
        {
            StringBuilder htmlBuilder = new StringBuilder();

            ModuleMenuItems menu = MenuConfigurationContext.Menu;

            if (menu != null)
            {
                foreach (ModuleMenuItem moduleMenu in menu)
                {
                    // Begin Menu
                    htmlBuilder.AppendLine(SidebarMenuBeginTemplate);

                    // Header Menu
                    htmlBuilder.AppendLine(string.Format(SidebarHeaderTemplate, moduleMenu.DisplayName));

                    if (moduleMenu.Items.Any())
                    {
                        foreach (MenuItem menuItem in moduleMenu.Items)
                        {
                            if (menuItem.IsLeaf)
                            {
                                if (!string.IsNullOrEmpty(SelectedMenu) &&
                                    SelectedMenu == menuItem.Name)
                                {
                                    htmlBuilder.AppendLine(string.Format(LeafMenuTemplate,
                                                                         menuItem.Url,
                                                                         menuItem.Icon,
                                                                         menuItem.DisplayName,
                                                                         "active"));
                                }
                                else
                                {
                                    htmlBuilder.AppendLine(string.Format(LeafMenuTemplate,
                                                                         menuItem.Url,
                                                                         menuItem.Icon,
                                                                         menuItem.DisplayName,
                                                                         string.Empty));
                                }
                            }
                            else
                            {
                                var hasSelectedMenu = menuItem.Items.Any(m => m.Name == SelectedMenu);

                                if (hasSelectedMenu)
                                {
                                    htmlBuilder.AppendLine(@"<li class=""treeview active menu-open"">");
                                }
                                else
                                {
                                    htmlBuilder.AppendLine(@"<li class=""treeview"">");
                                }

                                htmlBuilder.AppendLine(string.Format(@" <a href=""{0}"">
                                                        <i class=""{1}""></i>
                                                        <span>{2}</span> 
<span class=""pull-right-container"">
                        <i class=""fa fa-angle-left pull-right""></i>
                    </span>
                                                    </a>",
                                                                     menuItem.Url,
                                                                     menuItem.Icon,
                                                                     menuItem.DisplayName));

                                htmlBuilder.AppendLine(@"<ul class=""treeview-menu"">");

                                foreach (var childMenuItem in menuItem.Items)
                                {
                                    if (!string.IsNullOrEmpty(SelectedMenu) &&
                                        SelectedMenu == childMenuItem.Name)
                                    {
                                        htmlBuilder.AppendLine(string.Format(LeafMenuTemplate,
                                                                             childMenuItem.Url,
                                                                             childMenuItem.Icon,
                                                                             childMenuItem.DisplayName,
                                                                             "active"));
                                    }
                                    else
                                    {
                                        htmlBuilder.AppendLine(string.Format(LeafMenuTemplate,
                                                                             childMenuItem.Url,
                                                                             childMenuItem.Icon,
                                                                             childMenuItem.DisplayName,
                                                                             string.Empty));
                                    }
                                }
                                htmlBuilder.AppendLine(@"</ul>");

                                htmlBuilder.AppendLine("</li>");
                            }
                        }
                    }
                    // End Menu
                    htmlBuilder.AppendLine(SidebarMenuEndTemplate);
                }
            }

            return(htmlBuilder.ToString());
        }