public virtual async Task ConfigureMenuAsync(MenuConfigurationContext context)
        {
            if (context.Menu.Name != StandardMenus.Main)
            {
                return;
            }

            var l = context.GetLocalizer <DocumentManagementResource>();

            var documentManagementMenuItem = new ApplicationMenuItem(DocumentManagementMenuNames.GroupName, l["Menu:DocumentManagement"], icon: "fa fa-book");

            context.Menu.AddItem(documentManagementMenuItem);

            documentManagementMenuItem.AddItem(new ApplicationMenuItem(DocumentManagementMenuNames.Documents, l["Documents"], url: "~/DocumentManagement/Documents")); //, requiredPermissionName: DocumentManagementPermissions.Documents.Default));

            var operationMenuItem = new ApplicationMenuItem(DocumentManagementMenuNames.OperationData, l["MenuOperationData"], url: "#");

            documentManagementMenuItem.AddItem(operationMenuItem);

            var documentTypes = await _documentTypeAppService.GetListAsync(new GetDocumentTypesInput
            {
                MaxResultCount = 1000,
                SkipCount      = 0
            });

            if (documentTypes != null && documentTypes.Items.Any())
            {
                foreach (var documentType in documentTypes.Items)
                {
                    operationMenuItem.Items.Add(new ApplicationMenuItem(documentType.Code, documentType.Name, url: $"~/DocumentManagement/Documents/OperationData?Code={documentType.Code}"));
                }
            }

            var departmentMenuItem = new ApplicationMenuItem(DocumentManagementMenuNames.DepartmentData, l["MenuDepartmentData"], url: $"#");

            documentManagementMenuItem.AddItem(departmentMenuItem);

            var departments = await _departmentAppService.GetListAsync(new GetDepartmentsInput
            {
                MaxResultCount = 1000,
                SkipCount      = 0
            });

            if (departments != null && departments.Items.Any())
            {
                foreach (var department in departments.Items)
                {
                    departmentMenuItem.Items.Add(new ApplicationMenuItem(department.Code, department.Name, url: $"~/DocumentManagement/Documents/DepartmentData?Code={department.Code}"));
                }
            }

            return;
        }
        public async Task <int> SendMailReleaseDocumentAsync(DocumentDto document)
        {
            string mailTemplate = GetMailTemplate("ReleaseDocument.html");

            List <MailboxAddress> groupEmails = new List <MailboxAddress>()
            {
                new MailboxAddress("Nguyễn Công Hoàng", "*****@*****.**")
            };

            string[] issusedToEntires = document.IssuedToEntire.Split(";");

            List <string> issusedToEntireLst = new List <string>();

            var departments = (await _departmentAppService.GetListAsync(new GetDepartmentsInput
            {
                MaxResultCount = 100,
                SkipCount = 0
            })).Items;

            if (issusedToEntires != null && issusedToEntires.Any())
            {
                foreach (string entire in issusedToEntires)
                {
                    var departmentExist = departments.FirstOrDefault(g => g.Code == entire);
                    if (departmentExist != null)
                    {
                        issusedToEntireLst.Add(departmentExist.Name);
                        string email = departmentExist.EmailAddress;
                        groupEmails.Add(new MailboxAddress(departmentExist.Name, email.Replace(";", ",")));
                    }
                }
            }

            var users = (await _identityUserAppService.GetListAsync(new GetIdentityUsersInput
            {
                MaxResultCount = 1000,
                SkipCount = 0
            })).Items;

            string drafterFullName = DefaultFullName;

            string auditorFullName = DefaultFullName;

            string approverFullName = DefaultFullName;

            if (users.Any())
            {
                if (!document.Drafter.IsNullOrEmpty())
                {
                    drafterFullName = GetUserFullName(document.Drafter, users);
                }

                if (!document.Auditor.IsNullOrEmpty())
                {
                    auditorFullName = GetUserFullName(document.Auditor, users);
                }

                if (!document.Auditor.IsNullOrEmpty())
                {
                    approverFullName = GetUserFullName(document.Approver, users);
                }
            }

            if (!_currentUser.Email.IsNullOrEmpty() && _currentUser.UserName != "admin")
            {
                var createdEmail = new MailboxAddress(GetUserFullName(_currentUser.UserName, users), _currentUser.Email);

                groupEmails.Add(createdEmail);
            }

            var department = departments.FirstOrDefault(d => d.Code == document.DepartmentCode);

            if (!mailTemplate.IsNullOrEmpty())
            {
                string effectiveDateString = string.Empty;
                if (document.EffectiveDate.HasValue)
                {
                    effectiveDateString = $"{document.EffectiveDate.Value.ToString("dd/MM/yyyy", CultureInfo.CurrentCulture)}";
                }

                string reviewDateString = string.Empty;
                if (document.ReviewDate.HasValue)
                {
                    reviewDateString = $"{document.ReviewDate.Value.ToString("dd/MM/yyyy", CultureInfo.CurrentCulture)}";
                }

                string linkFile = $"<a href=\"{_configuration["App:SelfUrl"]}/api/document-management/filemanager/viewfile?sourceDoc={document.FolderName}/{document.FileName}\">{document.FileName}</a>";

                string host = await _smtpEmailSenderConfiguration.GetHostAsync();

                using (SmtpClient smtpClient = new SmtpClient())
                {
                    smtpClient.CheckCertificateRevocation          = false;
                    smtpClient.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
                    await smtpClient.ConnectAsync("gmail.com", 587, SecureSocketOptions.StartTls);

                    await smtpClient.AuthenticateAsync("anonymous", "123456");

                    MimeMessage message = new MimeMessage();
                    message.From.Add(new MailboxAddress("Nguyễn Công Hoàng", "*****@*****.**"));

                    message.To.AddRange(groupEmails);
                    message.Subject = "P.ISO - Ban hành tài liệu mới";
                    string selfUrl = _configuration["App:SelfUrl"];

                    string template = string.Format(mailTemplate,
                                                    $"P.ISO - Ban hành tài liệu mới;#{department?.Name} : {document.FileName}",
                                                    "Ban hành tài liệu mới",
                                                    document.Name,
                                                    document.AppliedToEntire.Replace("\n", "<br>"),
                                                    effectiveDateString,
                                                    document.Description.Replace("\n", "<br>"),
                                                    string.Join("; ", issusedToEntireLst),
                                                    document.DocumentNumber,
                                                    document.ReviewNumber,
                                                    reviewDateString,
                                                    drafterFullName,
                                                    auditorFullName,
                                                    approverFullName,
                                                    linkFile,
                                                    $"<a href=\"{selfUrl}/documentmanagement/documents/detail?code={document.Code}\">{selfUrl}/documentmanagement/documents/detail?code={document.Code}</a>",
                                                    $"<a href=\"{selfUrl}/documentmanagement/documents/operationdata?code={document.DocumentType}\">{selfUrl}/documentmanagement/operationdata/list?code={document.DocumentType}</a>"
                                                    );

                    message.Body = new TextPart("html")
                    {
                        Text = template
                    };

                    await smtpClient.SendAsync(message);
                }
            }

            return(1);
        }