feat: non-individual entity UI improvements — hide individual-only sections, fix legal form display, send extended fields to API
- Hide Family Members tab/section for non-individual entities in client view, create flow, and preview - Hide Financial & Classification section for non-individual entities in personal data and preview - Fix legal form column in clients list — fetch legalForm from client API for correct display - Add person/business icon before client name in list rows - Remove unsupportedNpd filter — send authorizedSignatory, additionalInfo, dateOfRegistration to API - Add registration number format hint (mat-hint) based on constitution type - Add spacing between verification row and constitution type dropdowns - Reduce table cell padding and prevent action buttons from being clipped - Add missing MPL-2.0 license headers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
ab01111424
commit
b890d24bb7
@@ -25,7 +25,8 @@
|
||||
|
||||
<!-- Content -->
|
||||
<mat-sidenav-content class="sidenav">
|
||||
<!-- Sidebar Toggle Handle -->
|
||||
<!-- Sidebar Toggle Handle (hidden on small/handset screens) -->
|
||||
@if ((isHandset$ | async) === false) {
|
||||
<div
|
||||
class="sidebar-handle"
|
||||
[class.collapsed]="sidenavCollapsed"
|
||||
@@ -42,99 +43,100 @@
|
||||
}
|
||||
</svg>
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Toolbar -->
|
||||
<mifosx-toolbar [sidenav]="sidenav" (collapse)="toggleCollapse($event)"></mifosx-toolbar>
|
||||
|
||||
<!-- Main Header — 2-Row Navigation -->
|
||||
<div class="main-header">
|
||||
<!-- Row 1 — 11 items -->
|
||||
<!-- Row 1 — 11 items (permission-gated) -->
|
||||
<div class="nav-row r1">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="institutionMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="institutionMenu" *mifosxHasPermission="'MENU_INSTITUTION'">
|
||||
<fa-icon icon="university" class="ni-ico"></fa-icon>Institution
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" routerLink="/checker-inbox-and-tasks/checker-inbox">
|
||||
<a class="ni" tabindex="0" routerLink="/checker-inbox-and-tasks/checker-inbox" *mifosxHasPermission="'MENU_TASKS'">
|
||||
<fa-icon icon="check" class="ni-ico"></fa-icon>Tasks
|
||||
</a>
|
||||
<a class="ni" tabindex="0" routerLink="/accounting">
|
||||
<a class="ni" tabindex="0" routerLink="/accounting" *mifosxHasPermission="'MENU_ACCOUNTING'">
|
||||
<fa-icon icon="money-bill-alt" class="ni-ico"></fa-icon>Accounting
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="reportsMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="reportsMenu" *mifosxHasPermission="'MENU_REPORTS'">
|
||||
<fa-icon icon="chart-bar" class="ni-ico"></fa-icon>Reports
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="adminMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="adminMenu" *mifosxHasPermission="'MENU_ADMIN'">
|
||||
<fa-icon icon="shield-alt" class="ni-ico"></fa-icon>Admin
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" (click)="subLedgerOpen = !subLedgerOpen; glMenuOpen = false">
|
||||
<a class="ni" tabindex="0" (click)="subLedgerOpen = !subLedgerOpen; glMenuOpen = false" *mifosxHasPermission="'MENU_SUB_LEDGER'">
|
||||
<fa-icon icon="book" class="ni-ico"></fa-icon>Sub Ledger
|
||||
<fa-icon [icon]="subLedgerOpen ? 'caret-up' : 'caret-down'" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" (click)="glMenuOpen = !glMenuOpen; subLedgerOpen = false">
|
||||
<a class="ni" tabindex="0" (click)="glMenuOpen = !glMenuOpen; subLedgerOpen = false" *mifosxHasPermission="'MENU_GENERAL_LEDGER'">
|
||||
<fa-icon icon="book-open" class="ni-ico"></fa-icon>General Ledger
|
||||
<fa-icon [icon]="glMenuOpen ? 'caret-up' : 'caret-down'" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="cashierMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="cashierMenu" *mifosxHasPermission="'MENU_CASHIER'">
|
||||
<fa-icon icon="money-bill" class="ni-ico"></fa-icon>Cashier
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0">
|
||||
<a class="ni" tabindex="0" *mifosxHasPermission="'MENU_OFFICER'">
|
||||
<fa-icon icon="user-tie" class="ni-ico"></fa-icon>Officer
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="depositsMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="depositsMenu" *mifosxHasPermission="'MENU_DEPOSITS'">
|
||||
<fa-icon icon="piggy-bank" class="ni-ico"></fa-icon>Deposits
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="clearingMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="clearingMenu" *mifosxHasPermission="'MENU_CLEARING'">
|
||||
<fa-icon icon="exchange" class="ni-ico"></fa-icon>Clearing
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Row 2 — 11 items -->
|
||||
<!-- Row 2 — 11 items (permission-gated) -->
|
||||
<div class="nav-row r2">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="hrmMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="hrmMenu" *mifosxHasPermission="'MENU_HRM'">
|
||||
<fa-icon icon="money-check" class="ni-ico"></fa-icon>HRM
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="shareMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="shareMenu" *mifosxHasPermission="'MENU_SHARE'">
|
||||
<fa-icon icon="coins" class="ni-ico"></fa-icon>Share
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="othersMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="othersMenu" *mifosxHasPermission="'MENU_OTHERS'">
|
||||
<fa-icon icon="folder-open" class="ni-ico"></fa-icon>Others
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="npaMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="npaMenu" *mifosxHasPermission="'MENU_NPA'">
|
||||
<fa-icon icon="exclamation-triangle" class="ni-ico"></fa-icon>NPA
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="advancesMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="advancesMenu" *mifosxHasPermission="'MENU_ADVANCES'">
|
||||
<fa-icon icon="hand-holding-usd" class="ni-ico"></fa-icon>Advances
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="insuranceMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="insuranceMenu" *mifosxHasPermission="'MENU_INSURANCE'">
|
||||
<fa-icon icon="shield-alt" class="ni-ico"></fa-icon>Insurance
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" (click)="rbiMenuOpen = !rbiMenuOpen; glMenuOpen = false">
|
||||
<a class="ni" tabindex="0" (click)="rbiMenuOpen = !rbiMenuOpen; glMenuOpen = false" *mifosxHasPermission="'MENU_RBI'">
|
||||
<fa-icon icon="university" class="ni-ico"></fa-icon>RBI
|
||||
<fa-icon [icon]="rbiMenuOpen ? 'caret-up' : 'caret-down'" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="digitalMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="digitalMenu" *mifosxHasPermission="'MENU_DIGITAL'">
|
||||
<fa-icon icon="mobile-alt" class="ni-ico"></fa-icon>Digital
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" (click)="openConfigWizard()">
|
||||
<a class="ni" tabindex="0" (click)="openConfigWizard()" *mifosxHasPermission="'MENU_CONFIG_WIZARD'">
|
||||
<fa-icon icon="cog" class="ni-ico"></fa-icon>Config Wizard
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="ckycMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="ckycMenu" *mifosxHasPermission="'MENU_CKYC_MGMT'">
|
||||
<fa-icon icon="fingerprint" class="ni-ico"></fa-icon>CKYC Mgmt
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="letterMgmtMenu">
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="letterMgmtMenu" *mifosxHasPermission="'MENU_LETTER_MGMT'">
|
||||
<fa-icon icon="envelope" class="ni-ico"></fa-icon>Letter Mgmt
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
@@ -142,33 +144,65 @@
|
||||
</div>
|
||||
|
||||
<!-- Row 1 Menus -->
|
||||
<mat-menu #institutionMenu="matMenu" [overlapTrigger]="false">
|
||||
<button mat-menu-item routerLink="/clients" tabindex="0">Clients</button>
|
||||
<button mat-menu-item routerLink="/groups" tabindex="0">Groups</button>
|
||||
<button mat-menu-item routerLink="/centers" tabindex="0">Centers</button>
|
||||
<mat-menu #institutionMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item routerLink="/clients" tabindex="0">
|
||||
<i class="fa fa-users menu-item-icon"></i> Clients
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/groups" tabindex="0">
|
||||
<i class="fa fa-object-group menu-item-icon"></i> Groups
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/centers" tabindex="0">
|
||||
<i class="fa fa-building menu-item-icon"></i> Centers
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #reportsMenu="matMenu" [overlapTrigger]="false">
|
||||
<button mat-menu-item [routerLink]="['/reports']" tabindex="0">All</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Client']" tabindex="0">Clients</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Loan']" tabindex="0">Loans</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Savings']" tabindex="0">Savings</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Fund']" tabindex="0">Funds</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Accounting']" tabindex="0">Accounting</button>
|
||||
<mat-menu #reportsMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item [routerLink]="['/reports']" tabindex="0">
|
||||
<i class="fa fa-th-list menu-item-icon"></i> All Reports
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Client']" tabindex="0">
|
||||
<i class="fa fa-user menu-item-icon"></i> Clients
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Loan']" tabindex="0">
|
||||
<i class="fa fa-credit-card menu-item-icon"></i> Loans
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Savings']" tabindex="0">
|
||||
<i class="fa fa-piggy-bank menu-item-icon"></i> Savings
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Fund']" tabindex="0">
|
||||
<i class="fa fa-hand-holding-usd menu-item-icon"></i> Funds
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/reports', 'Accounting']" tabindex="0">
|
||||
<i class="fa fa-calculator menu-item-icon"></i> Accounting
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #adminMenu="matMenu" [overlapTrigger]="false">
|
||||
<button mat-menu-item [routerLink]="['/appusers']" tabindex="0">Users</button>
|
||||
<button mat-menu-item [routerLink]="['/organization']" tabindex="0">Organization</button>
|
||||
<button mat-menu-item [routerLink]="['/system']" tabindex="0">System</button>
|
||||
<button mat-menu-item [routerLink]="['/products']" tabindex="0">Products</button>
|
||||
<button mat-menu-item routerLink="/templates" tabindex="0">Templates</button>
|
||||
<mat-menu #adminMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item [routerLink]="['/appusers']" tabindex="0">
|
||||
<i class="fa fa-user-cog menu-item-icon"></i> Users
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/organization']" tabindex="0">
|
||||
<i class="fa fa-sitemap menu-item-icon"></i> Organization
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/system']" tabindex="0">
|
||||
<i class="fa fa-server menu-item-icon"></i> System
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="['/products']" tabindex="0">
|
||||
<i class="fa fa-box menu-item-icon"></i> Products
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/templates" tabindex="0">
|
||||
<i class="fa fa-file-alt menu-item-icon"></i> Templates
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<!-- Sub Ledger Mega Menu -->
|
||||
@if (subLedgerOpen) {
|
||||
<div class="gl-backdrop" (click)="subLedgerOpen = false"></div>
|
||||
<div class="gl-mega-menu">
|
||||
<div class="gl-mega-menu-header">
|
||||
<fa-icon icon="book" class="gl-mega-menu-header-icon"></fa-icon>
|
||||
<span>Sub Ledger</span>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="gl-search"
|
||||
@@ -323,6 +357,10 @@
|
||||
@if (glMenuOpen) {
|
||||
<div class="gl-backdrop" (click)="glMenuOpen = false"></div>
|
||||
<div class="gl-mega-menu">
|
||||
<div class="gl-mega-menu-header">
|
||||
<fa-icon icon="book-open" class="gl-mega-menu-header-icon"></fa-icon>
|
||||
<span>General Ledger</span>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="gl-search"
|
||||
@@ -392,7 +430,7 @@
|
||||
}
|
||||
|
||||
<!-- Sub Menu Dropdowns -->
|
||||
<mat-menu #cashierMenu="matMenu" [overlapTrigger]="false">
|
||||
<mat-menu #cashierMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="exchange" class="menu-item-icon"></fa-icon> Cash Exchange Entry
|
||||
</button>
|
||||
@@ -467,7 +505,7 @@
|
||||
</div>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #clearingMenu="matMenu" [overlapTrigger]="false">
|
||||
<mat-menu #clearingMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="check-circle" class="menu-item-icon"></fa-icon> Cheque Honoured
|
||||
</button>
|
||||
@@ -698,7 +736,7 @@
|
||||
</div>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #ckycMenu="matMenu" [overlapTrigger]="false">
|
||||
<mat-menu #ckycMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="camera" class="menu-item-icon"></fa-icon> Photo</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="pen" class="menu-item-icon"></fa-icon> Sign Upload</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
@@ -819,7 +857,7 @@
|
||||
</div>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #insuranceMenu="matMenu" [overlapTrigger]="false">
|
||||
<mat-menu #insuranceMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="building" class="menu-item-icon"></fa-icon> DICGC</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="heart" class="menu-item-icon"></fa-icon> PMJBY</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="heart" class="menu-item-icon"></fa-icon> PMSBY</button>
|
||||
@@ -840,7 +878,7 @@
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #digitalMenu="matMenu" [overlapTrigger]="false">
|
||||
<mat-menu #digitalMenu="matMenu" [overlapTrigger]="false" class="nav-dropdown">
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="exchange" class="menu-item-icon"></fa-icon> NEFT / RTGS</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="bolt" class="menu-item-icon"></fa-icon> IMPS / BANL</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="mobile-alt" class="menu-item-icon"></fa-icon> UPI</button>
|
||||
@@ -863,6 +901,10 @@
|
||||
@if (rbiMenuOpen) {
|
||||
<div class="gl-backdrop" (click)="rbiMenuOpen = false"></div>
|
||||
<div class="gl-mega-menu rbi-mega-menu">
|
||||
<div class="gl-mega-menu-header">
|
||||
<fa-icon icon="university" class="gl-mega-menu-header-icon"></fa-icon>
|
||||
<span>RBI</span>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="gl-search"
|
||||
|
||||
@@ -187,10 +187,42 @@ $gray-700: #334155;
|
||||
}
|
||||
|
||||
.menu-item-icon {
|
||||
margin-right: 10px;
|
||||
margin-right: 8px;
|
||||
width: 16px;
|
||||
color: #667085;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
color: $brand;
|
||||
font-size: 12px;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
// ===== Nav Dropdown Menus =====
|
||||
::ng-deep .nav-dropdown {
|
||||
border-radius: 8px !important;
|
||||
border: 1px solid $gray-200 !important;
|
||||
box-shadow: 0 6px 24px rgb(0 0 0 / 10%) !important;
|
||||
min-width: 180px !important;
|
||||
padding: 4px 0 !important;
|
||||
margin-top: 2px !important;
|
||||
|
||||
.mat-mdc-menu-item {
|
||||
font-size: 12.5px !important;
|
||||
font-weight: 500 !important;
|
||||
height: 34px !important;
|
||||
min-height: 34px !important;
|
||||
padding: 0 14px !important;
|
||||
color: $gray-700 !important;
|
||||
font-family: 'DM Sans', 'Roboto', sans-serif !important;
|
||||
|
||||
&:hover {
|
||||
background: $brand-hover !important;
|
||||
color: $brand !important;
|
||||
|
||||
.menu-item-icon {
|
||||
opacity: 1;
|
||||
color: $brand;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Deposits Mega Panel (inside mat-menu overlay) */
|
||||
@@ -240,6 +272,27 @@ $gray-700: #334155;
|
||||
border-top: 3px solid #0d47a1;
|
||||
}
|
||||
|
||||
.gl-mega-menu-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 14px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
|
||||
span {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #0d47a1;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
}
|
||||
|
||||
.gl-mega-menu-header-icon {
|
||||
font-size: 18px;
|
||||
color: #0d47a1;
|
||||
}
|
||||
|
||||
.gl-search {
|
||||
width: 100%;
|
||||
padding: 10px 14px;
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
matTooltip="{{ 'tooltips.Dashboard' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'SIDEBAR_DASHBOARD'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="tachometer-alt" size="sm"></fa-icon>
|
||||
@@ -44,7 +45,7 @@
|
||||
matTooltip="{{ 'tooltips.Navigation' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_CLIENT'"
|
||||
*mifosxHasPermission="'SIDEBAR_NAVIGATION'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="location-arrow" size="sm"></fa-icon>
|
||||
@@ -57,20 +58,33 @@
|
||||
matTooltip="{{ 'tooltips.CKYC' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_CLIENT'"
|
||||
*mifosxHasPermission="'SIDEBAR_CKYC'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="id-card" size="sm"></fa-icon>
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.CKYC' | translate }}</a>
|
||||
</mat-list-item>
|
||||
<mat-list-item
|
||||
[routerLink]="['/bank-calendar']"
|
||||
[matTooltipPosition]="tooltipPosition"
|
||||
matTooltip="Bank Calendar"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'SIDEBAR_CALENDAR'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="calendar-alt" size="sm"></fa-icon>
|
||||
</mat-icon>
|
||||
<a matLine>Calendar</a>
|
||||
</mat-list-item>
|
||||
<mat-list-item
|
||||
[routerLink]="['/checker-inbox-and-tasks/checker-inbox']"
|
||||
[matTooltipPosition]="tooltipPosition"
|
||||
matTooltip="{{ 'tooltips.Checker Inbox and Tasks' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_MAKERCHECKER'"
|
||||
*mifosxHasPermission="'SIDEBAR_CHECKER_INBOX'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<i class="fa fa-check"></i>
|
||||
@@ -83,7 +97,7 @@
|
||||
matTooltip="{{ 'labels.menus.Collection Sheet' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_COLLECTIONSHEET'"
|
||||
*mifosxHasPermission="'SIDEBAR_COLLECTION_SHEET'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<i class="fa fa-tasks"></i>
|
||||
@@ -96,13 +110,14 @@
|
||||
matTooltip="{{ 'tooltips.Individual Collection Sheet' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_COLLECTIONSHEET'"
|
||||
*mifosxHasPermission="'SIDEBAR_COLLECTION_SHEET'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<i class="fa fa-tasks"></i>
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.Individual Collection Sheet' | translate }}</a>
|
||||
</mat-list-item>
|
||||
<ng-container *mifosxHasPermission="'SIDEBAR_REMITTANCES'">
|
||||
<mat-list-item
|
||||
*ngIf="mifosRemittanceEnabled"
|
||||
[routerLink]="['/remittances/process']"
|
||||
@@ -116,6 +131,8 @@
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.Remittances' | translate }}</a>
|
||||
</mat-list-item>
|
||||
</ng-container>
|
||||
<ng-container *mifosxHasPermission="'SIDEBAR_ANALYTICS'">
|
||||
<mat-list-item
|
||||
*ngIf="supersetEnabled"
|
||||
[routerLink]="['/analytics']"
|
||||
@@ -129,7 +146,9 @@
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.Analytics' | translate }}</a>
|
||||
</mat-list-item>
|
||||
</ng-container>
|
||||
<!-- CFCFRMS Section -->
|
||||
<ng-container *mifosxHasPermission="'SIDEBAR_CFCFRMS'">
|
||||
<div class="nav-item-sep mt-1">
|
||||
<mat-divider></mat-divider>
|
||||
<span class="text-muted">{{ 'labels.menus.CFCFRMS' | translate }}</span>
|
||||
@@ -206,8 +225,10 @@
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.Report Fraud Txn' | translate }}</a>
|
||||
</mat-list-item>
|
||||
</ng-container>
|
||||
|
||||
<!-- RBI Integration Section -->
|
||||
<ng-container *mifosxHasPermission="'SIDEBAR_RBI_INTEGRATION'">
|
||||
<div class="nav-item-sep mt-1">
|
||||
<mat-divider></mat-divider>
|
||||
<span class="text-muted">{{ 'labels.menus.RBI Integration' | translate }}</span>
|
||||
@@ -236,6 +257,7 @@
|
||||
</mat-icon>
|
||||
<a matLine>{{ 'labels.menus.CFR Lookup' | translate }}</a>
|
||||
</mat-list-item>
|
||||
</ng-container>
|
||||
|
||||
<div class="nav-item-sep mt-1">
|
||||
<mat-divider></mat-divider>
|
||||
@@ -248,6 +270,7 @@
|
||||
matTooltip="{{ 'tooltips.RBI Circulars' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'SIDEBAR_RBI_CIRCULARS'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="newspaper" size="sm"></fa-icon>
|
||||
@@ -260,7 +283,7 @@
|
||||
matTooltip="{{ 'tooltips.Notifications' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_NOTIFICATION'"
|
||||
*mifosxHasPermission="'SIDEBAR_NOTIFICATIONS'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="bell" size="sm"></fa-icon>
|
||||
@@ -273,7 +296,7 @@
|
||||
matTooltip="{{ 'tooltips.Frequent Postings' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'CREATE_JOURNALENTRY'"
|
||||
*mifosxHasPermission="'SIDEBAR_FREQUENT_POSTINGS'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="sync" size="sm"></fa-icon>
|
||||
@@ -286,7 +309,7 @@
|
||||
matTooltip="{{ 'tooltips.Create Journal Entry' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'CREATE_JOURNALENTRY'"
|
||||
*mifosxHasPermission="'SIDEBAR_JOURNAL_ENTRY'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="plus" size="sm"></fa-icon>
|
||||
@@ -299,7 +322,7 @@
|
||||
matTooltip="{{ 'tooltips.Chart Of Accounts' | translate }}"
|
||||
routerLinkActive="active-menu"
|
||||
[routerLinkActiveOptions]="{ exact: false }"
|
||||
*mifosxHasPermission="'READ_GLACCOUNT'"
|
||||
*mifosxHasPermission="'SIDEBAR_CHART_OF_ACCOUNTS'"
|
||||
>
|
||||
<mat-icon matListIcon>
|
||||
<fa-icon icon="sitemap" size="sm"></fa-icon>
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
<div class="t-chip">Branch: <strong>HO</strong></div>
|
||||
<div class="t-chip">Date: <strong>{{ today | date:'dd MMM yyyy' }}</strong></div>
|
||||
<div class="t-chip">Last login: <strong>{{ lastLoginTime }}</strong></div>
|
||||
<div class="t-sep"></div>
|
||||
<div class="t-chip t-chip--secure"><i class="fas fa-lock t-chip-icon t-chip-icon--green"></i>SSL/TLS <strong>256-bit</strong></div>
|
||||
<div class="t-chip t-chip--secure"><i class="fas fa-certificate t-chip-icon t-chip-icon--blue"></i>ISO 27001 <strong>Certified</strong></div>
|
||||
<div class="t-chip t-chip--timer"><i class="fas fa-clock t-chip-icon t-chip-icon--amber"></i>Session <strong>{{ sessionTimer }}</strong></div>
|
||||
</div>
|
||||
|
||||
<!-- Right Actions -->
|
||||
@@ -48,6 +52,10 @@
|
||||
@if (subLedgerOpen) {
|
||||
<div class="subledger-backdrop" (click)="subLedgerOpen = false"></div>
|
||||
<div class="subledger-mega-menu">
|
||||
<div class="subledger-mega-menu-header">
|
||||
<fa-icon icon="book" class="subledger-mega-menu-header-icon"></fa-icon>
|
||||
<span>Sub Ledger</span>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="subledger-search"
|
||||
@@ -164,6 +172,10 @@
|
||||
@if (glMenuOpen) {
|
||||
<div class="subledger-backdrop" (click)="glMenuOpen = false"></div>
|
||||
<div class="subledger-mega-menu">
|
||||
<div class="subledger-mega-menu-header">
|
||||
<fa-icon icon="book-open" class="subledger-mega-menu-header-icon"></fa-icon>
|
||||
<span>General Ledger</span>
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="subledger-search"
|
||||
|
||||
@@ -104,6 +104,32 @@ $top-h: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.t-sep {
|
||||
width: 1px;
|
||||
height: 16px;
|
||||
background: rgb(255 255 255 / 15%);
|
||||
margin: 0 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.t-chip-icon {
|
||||
font-size: 9px;
|
||||
|
||||
&--green { color: #34d399; }
|
||||
&--blue { color: #60a5fa; }
|
||||
&--amber { color: #fbbf24; }
|
||||
}
|
||||
|
||||
.t-chip--secure {
|
||||
color: rgb(255 255 255 / 55%);
|
||||
}
|
||||
|
||||
.t-chip--timer {
|
||||
color: rgb(255 255 255 / 55%);
|
||||
|
||||
strong { color: #fbbf24 !important; font-weight: 600; }
|
||||
}
|
||||
|
||||
.t-live {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
@@ -265,6 +291,27 @@ $icon-hover-bg: rgb(255 255 255 / 10%);
|
||||
animation: slideDown 0.13s ease;
|
||||
}
|
||||
|
||||
.subledger-mega-menu-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 14px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
|
||||
span {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #0d47a1;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
}
|
||||
|
||||
.subledger-mega-menu-header-icon {
|
||||
font-size: 18px;
|
||||
color: #0d47a1;
|
||||
}
|
||||
|
||||
@keyframes slideDown {
|
||||
from { opacity: 0; transform: translateX(-50%) translateY(-4px); }
|
||||
to { opacity: 1; transform: translateX(-50%) translateY(0); }
|
||||
|
||||
@@ -116,6 +116,11 @@ export class ToolbarComponent implements OnInit, AfterViewInit, AfterContentChec
|
||||
return `Today, ${h}:${m} ${ampm}`;
|
||||
}
|
||||
|
||||
/** Session timer */
|
||||
sessionTimer = '15:00';
|
||||
private sessionSeconds = 15 * 60;
|
||||
private sessionInterval: any;
|
||||
|
||||
/** Sub Ledger mega menu state */
|
||||
subLedgerOpen = false;
|
||||
subLedgerSearch = '';
|
||||
@@ -143,6 +148,21 @@ export class ToolbarComponent implements OnInit, AfterViewInit, AfterContentChec
|
||||
this.toggleSidenavCollapse(false);
|
||||
}
|
||||
});
|
||||
this.startSessionTimer();
|
||||
}
|
||||
|
||||
private startSessionTimer() {
|
||||
this.sessionInterval = setInterval(() => {
|
||||
if (this.sessionSeconds > 0) {
|
||||
this.sessionSeconds--;
|
||||
const m = Math.floor(this.sessionSeconds / 60);
|
||||
const s = this.sessionSeconds % 60;
|
||||
this.sessionTimer = `${m}:${s < 10 ? '0' + s : s}`;
|
||||
} else {
|
||||
clearInterval(this.sessionInterval);
|
||||
this.sessionTimer = '0:00';
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
ngAfterContentChecked(): void {
|
||||
|
||||
Reference in New Issue
Block a user