- Add /digital/neft-rtgs (entry) and /digital/neft-rtgs-report (analytics): KPIs, tabbed views (Trends, Bank-wise, Date-wise, Pending/Pass/Return, Branch/Mobile, User-wise), filterable transaction table with CSV export, and a non-dismissible Initiate dialog launched from a floating action. - Make BANL verification mandatory before NEFT/RTGS submit; auto-fill and lock beneficiary name from the lookup response, invalidate match on A/C or IFSC edit, demo fallback for unknown accounts. - Add Digital menu links (NEFT/RTGS + Report) in shell top-nav. - Replace toolbar theme toggle with AI / Intelligence Modules mega menu: 4 colour-coded columns covering Lending & Risk, Investment & Profit, Compliance & Advisory, Governance (9 modules total). Wire RBI Notifications Monitoring to /rbi-circulars. - Unify notifications, settings, AI, and profile toolbar buttons into a 26px ring style; colourful gradient bell SVG for notifications, custom gear+petals AI mark, online dot on the avatar. - Trim ISO 27001 chip in the top bar. - Add MPL header to generated .env.ts and its template in version.js. - Bundles other pending working-tree changes (clients family/nominee tab tweaks, auth/2FA fixes, translations) into the same push. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
94 lines
3.4 KiB
HTML
94 lines
3.4 KiB
HTML
<!--
|
|
Copyright since 2025 Mifos Initiative
|
|
|
|
This Source Code Form is subject to the terms of the Mozilla Public
|
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
-->
|
|
|
|
<button
|
|
mat-icon-button
|
|
class="ml-1"
|
|
[attr.aria-label]="'tooltips.Notifications' | translate"
|
|
matTooltip="{{ 'tooltips.Notifications' | translate }}"
|
|
[matMenuTriggerFor]="notificationsMenu"
|
|
(menuClosed)="menuClosed()"
|
|
[matBadge]="unreadNotifications.length"
|
|
[matBadgeHidden]="!unreadNotifications.length"
|
|
matBadgeColor="warn"
|
|
matBadgeSize="medium"
|
|
>
|
|
<span class="sr-only">{{ 'tooltips.Notifications' | translate }}</span>
|
|
<!-- Custom colorful bell mark — same size language as the AI icon -->
|
|
<svg class="t-notif-svg" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
<defs>
|
|
<linearGradient id="cbsNotifBell" x1="32" y1="14" x2="32" y2="50" gradientUnits="userSpaceOnUse">
|
|
<stop offset="0%" stop-color="#fde68a" />
|
|
<stop offset="55%" stop-color="#fbbf24" />
|
|
<stop offset="100%" stop-color="#f59e0b" />
|
|
</linearGradient>
|
|
</defs>
|
|
<!-- top loop / handle -->
|
|
<circle cx="32" cy="12" r="3.2" fill="#b45309" />
|
|
<!-- bell body -->
|
|
<path
|
|
d="M32 15 c-10 0 -15 7 -15 17 v8 c0 1 -1 2 -2 2 h-2 v3 h38 v-3 h-2 c-1 0 -2 -1 -2 -2 v-8 c0 -10 -5 -17 -15 -17 z"
|
|
fill="url(#cbsNotifBell)"
|
|
stroke="#b45309"
|
|
stroke-width="1.4"
|
|
/>
|
|
<!-- inside highlight -->
|
|
<path
|
|
d="M22 23 c-2 4 -2 9 -2 12"
|
|
stroke="#ffffff"
|
|
stroke-width="2.6"
|
|
stroke-linecap="round"
|
|
fill="none"
|
|
opacity="0.55"
|
|
/>
|
|
<!-- clapper -->
|
|
<circle cx="32" cy="52" r="3.6" fill="#b45309" />
|
|
</svg>
|
|
</button>
|
|
|
|
<mat-menu
|
|
class="mifosx-notifications-menu"
|
|
#notificationsMenu="matMenu"
|
|
[overlapTrigger]="false"
|
|
xPosition="before"
|
|
yPosition="below"
|
|
>
|
|
<div class="notifications-container">
|
|
@if (unreadNotifications.length === 0 && displayedReadNotifications.length === 0) {
|
|
<div class="no-notifications">
|
|
<mat-icon class="no-notifications-icon">notifications_none</mat-icon>
|
|
<p class="no-notifications-text">{{ 'labels.text.No notifications' | translate }}</p>
|
|
</div>
|
|
} @else {
|
|
<div class="notifications-header">
|
|
<h3 class="notifications-title">{{ 'labels.menus.Notifications' | translate }}</h3>
|
|
</div>
|
|
<div class="notifications-list">
|
|
@for (notification of unreadNotifications; track notification) {
|
|
<button mat-menu-item class="notification-item unread" (click)="navigateToNotification(notification, $event)">
|
|
<div class="notification-content">
|
|
<span class="notification-text">{{ notification.content }}</span>
|
|
<span class="unread-indicator">●</span>
|
|
</div>
|
|
<span class="notification-time">{{ notification.createdAt }}</span>
|
|
</button>
|
|
}
|
|
|
|
@for (notification of displayedReadNotifications; track notification) {
|
|
<button mat-menu-item class="notification-item read" (click)="navigateToNotification(notification, $event)">
|
|
<div class="notification-content">
|
|
<span class="notification-text">{{ notification.content }}</span>
|
|
</div>
|
|
<span class="notification-time">{{ notification.createdAt }}</span>
|
|
</button>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
</mat-menu>
|