diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application.Contracts/PaymentRequests/AccountCodingDto.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application.Contracts/PaymentRequests/AccountCodingDto.cs index a3e5eeb27e..54d3ea1d0d 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application.Contracts/PaymentRequests/AccountCodingDto.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application.Contracts/PaymentRequests/AccountCodingDto.cs @@ -6,12 +6,12 @@ namespace Unity.Payments.PaymentRequests [Serializable] public class AccountCodingDto : AuditedEntityDto { - public string MinistryClient { get; private set; } - public string Responsibility { get; private set; } - public string ServiceLine { get; private set; } - public string Stob { get; private set; } - public string ProjectNumber { get; private set; } - public string? Description { get; private set; } + public string MinistryClient { get; init; } + public string Responsibility { get; init; } + public string ServiceLine { get; init; } + public string Stob { get; init; } + public string ProjectNumber { get; init; } + public string? Description { get; init; } public AccountCodingDto() { MinistryClient = string.Empty; diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs index b48f667800..4e8e7cf72d 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs @@ -11,11 +11,11 @@ namespace Unity.Payments.Domain.AccountCodings public class AccountCoding : AuditedAggregateRoot, IMultiTenant { public Guid? TenantId { get; set; } - public string MinistryClient { get; private set; } - public string Responsibility { get; private set; } - public string ServiceLine { get; private set; } - public string Stob { get; private set; } - public string ProjectNumber { get; private set; } + public string MinistryClient { get; set; } + public string Responsibility { get; set; } + public string ServiceLine { get; set; } + public string Stob { get; set; } + public string ProjectNumber { get; set; } public string FullAccountCode() { diff --git a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/Themes/UX2/Layouts/Application.cshtml b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/Themes/UX2/Layouts/Application.cshtml index 23a1592dd7..dd5831ac86 100644 --- a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/Themes/UX2/Layouts/Application.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/Themes/UX2/Layouts/Application.cshtml @@ -66,7 +66,7 @@ @await Component.InvokeLayoutHookAsync(LayoutHooks.Head.Last, StandardLayouts.Application) - +
UGM @(Assembly diff --git a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/js/AnalyticsUtils.js b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/js/AnalyticsUtils.js index bc86ff95b8..5798b99ede 100644 --- a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/js/AnalyticsUtils.js +++ b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/js/AnalyticsUtils.js @@ -111,12 +111,6 @@ const AnalyticsUtils = (function () { * @param {string|number} siteId - Matomo site ID. */ function initMatomo(url, siteId) { - console.debug( - '[Analytics] initMatomo called — url:', - url, - '| siteId:', - siteId - ); if (!url || !siteId) { console.warn( diff --git a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/themes/ux2/layout.js b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/themes/ux2/layout.js index 1e7d45f077..0e09e67257 100644 --- a/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/themes/ux2/layout.js +++ b/applications/Unity.GrantManager/modules/Unity.Theme.UX2/src/Unity.Theme.UX2/wwwroot/themes/ux2/layout.js @@ -84,11 +84,34 @@ $(function () { }); window.addEventListener('DOMContentLoaded', (event) => { - const currentUrl = window.location.pathname; - const currentNav = document.querySelector(`a[href="${currentUrl}"]`); + const currentUrl = window.location.pathname; + + // Exact match first + let currentNav = document.querySelector(`.unity-navbar-nav a[href="${currentUrl}"]`); + + // Fall back to longest-prefix match (handles detail/sub-pages) + if (!currentNav) { + let longestMatch = ''; + document.querySelectorAll('.unity-navbar-nav a[href]').forEach(link => { + const href = link.getAttribute('href'); + if (href && href !== '/' && href !== '#' && currentUrl.startsWith(href) && href.length > longestMatch.length) { + longestMatch = href; + currentNav = link; + } + }); + } + + // Page-level override for pages whose URL shares no prefix with their nav item + if (!currentNav) { + const activeNavHref = document.body.dataset.activeNav; + if (activeNavHref) { + currentNav = document.querySelector(`.unity-navbar-nav a[href="${activeNavHref}"]`); + } + } + if (currentNav) { currentNav.parentElement.classList.add('active'); - } + } }); document.addEventListener('DOMContentLoaded', function () { diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details-shadow-dom.css b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details-shadow-dom.css index 66bd099703..5bdb92b8e0 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details-shadow-dom.css +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details-shadow-dom.css @@ -5,14 +5,18 @@ */ /* ===== Card Accordion Styling ===== */ -.card-header { - padding-bottom: 1.5rem !important; -} .card-title { font-weight: 600 !important; } +/* Outer accordion headers: compact padding + flex for vertical centering */ +.card-header:not(.card-body .card-header) { + display: flex !important; + align-items: center !important; + padding: 0.75rem 1.25rem !important; +} + /* Accordion arrow icon (collapsed state) */ .card-header:not(.card-body .card-header)::before { content: ' '; @@ -21,22 +25,26 @@ border-right: 1px solid #313132; height: 10px; width: 10px; + flex-shrink: 0; + order: 1; + margin-left: auto; transform: rotate(45deg); - float: right !important; - transition: all 0.5s !important; + transition: transform 0.5s !important; } /* Accordion arrow icon (expanded state) */ .card-header:not(.card-body .card-header).custom-active::before { - content: ' '; - display: block; - border-bottom: 1px solid #313132; - border-right: 1px solid #313132; - height: 10px; - width: 10px; transform: rotate(-135deg); - float: right !important; - transition: all 0.5s !important; +} + +/* White arrow on dark background card headers */ +.card-header.bg-primary:not(.card-body .card-header)::before, +.card-header.bg-success:not(.card-body .card-header)::before, +.card-header.bg-info:not(.card-body .card-header)::before, +.card-header.bg-warning:not(.card-body .card-header)::before, +.card-header.bg-danger:not(.card-body .card-header)::before { + border-bottom-color: white; + border-right-color: white; } /* Accordion body animation */ @@ -47,7 +55,6 @@ .card-header.bg-default { background-color: white !important; - margin-top: 1.2rem; } /* ===== Form.io Component Styling ===== */ diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/PaymentHistory/Details.cshtml b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/PaymentHistory/Details.cshtml index 3e1d65dee1..557fb5bb3f 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/PaymentHistory/Details.cshtml +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/PaymentHistory/Details.cshtml @@ -7,8 +7,9 @@ @inject IPageLayout PageLayout @{ + ViewData["ActiveNavHref"] = "/PaymentRequests"; PageLayout.Content.MenuItemName = "GrantManager.Payments"; - PageLayout.Content.Title = "Payment History"; + PageLayout.Content.Title = "Payment History"; ViewBag.PageTitle = "Payment History"; } diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Settings/TagManagement/TagManagement.js b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Settings/TagManagement/TagManagement.js index 3cfaf63254..d172cf2665 100644 --- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Settings/TagManagement/TagManagement.js +++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Settings/TagManagement/TagManagement.js @@ -166,8 +166,6 @@ $(function () { viewUrl: 'Tags/CreateTagsModal' }); - abp.log.debug('TagManagement.js initialized!'); - abp.modals.RenameTag = function () { let formElements = {}; let initialFormState = {}; @@ -288,19 +286,19 @@ $(function () { }); } _renameTagModal.onResult(function () { - const updatedTagName = $('#ViewModel_ReplacementTag').val(); + const updatedTagName = $('#ViewModel_ReplacementTag').val(); abp.notify.success(`"The tag "${updatedTagName}" has been updated.`); refreshGlobalTagsTable(); }); - if (abp.auth.isGranted('Unity.GrantManager.SettingManagement.Tags.Create')) { + if (abp.auth.isGranted('Unity.GrantManager.SettingManagement.Tags.Create')) { $('#addNewTag').click(function () { addNewTagModal.open(); - }); + }); } addNewTagModal.onResult(function () { - const newTagName = $('#NewTags').val() + const newTagName = $('#NewTags').val() abp.notify.success(`"The tag "${newTagName}" has been created.`); refreshGlobalTagsTable(); });