Client-stepper: pre-fill existing KYC/address proofs in edit, fix identifier saves
Edit-mode now shows the previously selected KYC document type + uploaded file thumbnail
(loads from /clients/{id}/identifiers + /client_identifiers/{id}/documents). Same for
address proof on the India address step. Closes the gap where editing a client showed
an empty file picker even when proof had been uploaded on create.
Identifier-save hardened across all three callsites (create-client, edit-client,
identities-tab.createIdentifierWithDocs) - the KYC chip picker proofId is a CODE
string ('AADHAAR'), but backend ClientIdentifierRequest.documentTypeId is Long, which
Spring rejects with HttpMessageNotReadableException -> 400. resolveDocumentTypeId
helper looks up the code against /kyc/proof-types?type=id and substitutes the numeric
CodeValue id before posting. Skips silently for constitution-specific non-individual
docs that have no CodeValue mapping.
KYC payload normalises panNumber / enterprisePan / gstinNumber / cinNumber via
toUpperCase + whitespace strip so user-typed lowercase or trailing spaces don't trip
the backend regex (validation.msg.CLIENTKYC.panNumber.does.not.match.regexp).
State name match in client-address save now normalises both sides (lowercase, collapse
underscores + spaces) so legacy MADHYA_PRADESH resolves to 'Madhya Pradesh' returned
by api.postalpincode.in. Backed by tenant migration 0297.
Identities-tab resolver flattened - was returning identifiers before the per-row
forkJoin(getClientIdentificationDocuments) completed, so the view rendered empty
documents arrays. Now uses switchMap + forkJoin so the resolver awaits completion.
Also bundles concurrent work-in-progress on letter-mgmt, organization, users,
bank-calendar, shell, nominee/notes/identifier dialogs, and theming.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
325228c514
commit
83ea57ccf0
@@ -190,8 +190,9 @@
|
||||
<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()" *mifosxHasPermission="'MENU_CONFIG_WIZARD'">
|
||||
<fa-icon icon="cog" class="ni-ico"></fa-icon>Config Wizard
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="reconciliationMenu" *mifosxHasPermission="'MENU_CONFIG_WIZARD'">
|
||||
<fa-icon icon="sync-alt" class="ni-ico"></fa-icon>Reconciliation
|
||||
<fa-icon icon="caret-down" class="ni-caret"></fa-icon>
|
||||
</a>
|
||||
<a class="ni" tabindex="0" [matMenuTriggerFor]="ckycMenu" *mifosxHasPermission="'MENU_CKYC_MGMT'">
|
||||
<fa-icon icon="fingerprint" class="ni-ico"></fa-icon>CKYC Mgmt
|
||||
@@ -270,6 +271,16 @@
|
||||
<button mat-menu-item routerLink="/otp-audit-logs" tabindex="0">
|
||||
<i class="fa fa-key menu-item-icon"></i> OTP Audit Logs
|
||||
</button>
|
||||
<mat-divider></mat-divider>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="building" class="menu-item-icon" style="color: #7c3aed"></fa-icon> Bank Profile
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="user-tie" class="menu-item-icon" style="color: #7c3aed"></fa-icon> Statutory Auditor Appointment
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="clipboard-check" class="menu-item-icon" style="color: #7c3aed"></fa-icon> Internal Audit Report
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<!-- Sub Ledger Mega Menu -->
|
||||
@@ -745,6 +756,9 @@
|
||||
<!-- General -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">General</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="user-slash" class="menu-item-icon" style="color: #c2410c"></fa-icon> Non-Customer Entry
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="lock" class="menu-item-icon"></fa-icon> Locker</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="chart-line" class="menu-item-icon"></fa-icon> SLR and Non SLR Investment Report
|
||||
@@ -853,6 +867,108 @@
|
||||
<button mat-menu-item tabindex="0" (click)="openCkycReportsDialog('CERSAI')">
|
||||
<fa-icon icon="shield-alt" class="menu-item-icon" style="color: #be185d"></fa-icon> CERSAI Report
|
||||
</button>
|
||||
<mat-divider></mat-divider>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="database" class="menu-item-icon" style="color: #be185d"></fa-icon> Dump KYC & Loan Data
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<!-- Reconciliation Mega Menu -->
|
||||
<mat-menu #reconciliationMenu="matMenu" class="reconciliation-mega-panel" [overlapTrigger]="false">
|
||||
<div class="deposit-menu-grid reconciliation-grid" (click)="$event.stopPropagation()">
|
||||
<!-- Core / Books -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Core & Books</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="receipt" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Voucher Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="random" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Sundry Dr / Cr Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="chart-line" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
P&L Impact Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="book-open" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
GL Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="cube" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Fixed Assets Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="sitemap" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Inter-Company Reconciliation
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Bank & Clearing -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Bank & Clearing</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="university" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Bank Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="code-branch" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
API Based Bank Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="exchange" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
NEFT / RTGS Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="hand-holding-usd" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Clearing Reconciliation
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Digital / Payments -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Digital & Payments</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="mobile-alt" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
UDIR (IMPS / UPI / ATM)
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="project-diagram" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Three-way Digital Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="sync-alt" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
NACH Reconciliation
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Instruments & Members -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Instruments & Members</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="money-check-alt" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
DD / Pay Order Reconciliation
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="coins" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Share Member Reconciliation
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Compliance & Financials -->
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Compliance & Financials</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="file-invoice" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Invoice Payment
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="percentage" class="menu-item-icon" style="color: #0d9488"></fa-icon>
|
||||
Tax Reconciliation
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #advancesMenu="matMenu" class="advances-mega-panel" [overlapTrigger]="false">
|
||||
@@ -885,6 +1001,9 @@
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="check-circle" class="menu-item-icon"></fa-icon> Loan Sanction
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="shield-alt" class="menu-item-icon"></fa-icon> Security Wise Report
|
||||
</button>
|
||||
</div>
|
||||
<!-- Recovery & Cash Flow -->
|
||||
<div class="deposit-menu-group">
|
||||
@@ -922,14 +1041,25 @@
|
||||
<div class="deposit-menu-group">
|
||||
<div class="deposit-group-title">Printing</div>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="print" class="menu-item-icon"></fa-icon> FD Printing / Renewal
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0"><fa-icon icon="book" class="menu-item-icon"></fa-icon> Passbook</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="file-alt" class="menu-item-icon"></fa-icon> Statement
|
||||
<fa-icon icon="receipt" class="menu-item-icon" style="color: #15803d"></fa-icon> Voucher
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="receipt" class="menu-item-icon"></fa-icon> Voucher Printing
|
||||
<fa-icon icon="book" class="menu-item-icon" style="color: #15803d"></fa-icon> Passbook
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="file-alt" class="menu-item-icon" style="color: #15803d"></fa-icon> Statement
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="print" class="menu-item-icon" style="color: #15803d"></fa-icon> FD / Renewal
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="coins" class="menu-item-icon" style="color: #15803d"></fa-icon> Share Member
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="money-check-alt" class="menu-item-icon" style="color: #15803d"></fa-icon> Demand Draft (DD)
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="envelope" class="menu-item-icon" style="color: #15803d"></fa-icon> Letter
|
||||
</button>
|
||||
</div>
|
||||
<!-- Certificates -->
|
||||
@@ -942,6 +1072,9 @@
|
||||
<button mat-menu-item routerLink="/letter-mgmt/form-60" tabindex="0">
|
||||
<fa-icon icon="file-signature" class="menu-item-icon" style="color: #15803d"></fa-icon> Form 60
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="file-signature" class="menu-item-icon" style="color: #15803d"></fa-icon> Form 61
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/letter-mgmt/form-15gh" tabindex="0">
|
||||
<fa-icon icon="file-signature" class="menu-item-icon" style="color: #15803d"></fa-icon> Form 15G and H
|
||||
</button>
|
||||
@@ -956,10 +1089,6 @@
|
||||
<button mat-menu-item routerLink="/letter-mgmt/noc" tabindex="0">
|
||||
<fa-icon icon="id-card" class="menu-item-icon" style="color: #15803d"></fa-icon> NOC
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/kyc-management" tabindex="0">
|
||||
<fa-icon icon="fingerprint" class="menu-item-icon" style="color: #15803d"></fa-icon>
|
||||
KYC & ReKYC Management
|
||||
</button>
|
||||
<button mat-menu-item tabindex="0">
|
||||
<fa-icon icon="money-bill-wave" class="menu-item-icon"></fa-icon> Digital Transaction UTR
|
||||
</button>
|
||||
@@ -1078,6 +1207,41 @@
|
||||
Returns)
|
||||
</a>
|
||||
</div>
|
||||
<!-- Income Tax & Ratios -->
|
||||
<div class="gl-group">
|
||||
<div class="gl-group-title">Income Tax & Ratios</div>
|
||||
<a class="gl-link" [class.hidden]="!matchesRbiSearch('Form 24Q 26Q TDS')" (click)="rbiMenuOpen = false">
|
||||
<fa-icon icon="file-signature" class="gl-icon" style="color: #1d4ed8"></fa-icon> Form 24Q and 26Q
|
||||
</a>
|
||||
<a class="gl-link" [class.hidden]="!matchesRbiSearch('MCPR Reporting')" (click)="rbiMenuOpen = false">
|
||||
<fa-icon icon="clipboard-check" class="gl-icon" style="color: #1d4ed8"></fa-icon> MCPR Reporting
|
||||
</a>
|
||||
<a
|
||||
class="gl-link"
|
||||
[class.hidden]="!matchesRbiSearch('FSWM Financially Sound')"
|
||||
(click)="rbiMenuOpen = false"
|
||||
>
|
||||
<fa-icon icon="shield-alt" class="gl-icon" style="color: #1d4ed8"></fa-icon> FSWM
|
||||
</a>
|
||||
<a class="gl-link" [class.hidden]="!matchesRbiSearch('CD Ratio')" (click)="rbiMenuOpen = false">
|
||||
<fa-icon icon="percentage" class="gl-icon" style="color: #1d4ed8"></fa-icon> CD Ratio
|
||||
</a>
|
||||
<a
|
||||
class="gl-link"
|
||||
[class.hidden]="!matchesRbiSearch('Capital Tier 1 Tier 2 CRAR')"
|
||||
(click)="rbiMenuOpen = false"
|
||||
>
|
||||
<fa-icon icon="layer-group" class="gl-icon" style="color: #1d4ed8"></fa-icon> Capital Tier 1 / Tier 2
|
||||
</a>
|
||||
<a
|
||||
class="gl-link"
|
||||
[class.hidden]="!matchesRbiSearch('Deposit Portion Advance Ratio')"
|
||||
(click)="rbiMenuOpen = false"
|
||||
>
|
||||
<fa-icon icon="balance-scale" class="gl-icon" style="color: #1d4ed8"></fa-icon> Deposit Portion / Advance
|
||||
Ratio
|
||||
</a>
|
||||
</div>
|
||||
<!-- Statement Reports -->
|
||||
<div class="gl-group">
|
||||
<div class="gl-group-title">Statement Reports</div>
|
||||
|
||||
@@ -537,6 +537,18 @@ $gray-700: #334155;
|
||||
}
|
||||
}
|
||||
|
||||
/* Reconciliation Mega Panel — 5 columns, teal accent to match the icon palette */
|
||||
.reconciliation-grid {
|
||||
grid-template-columns: repeat(5, minmax(190px, 1fr));
|
||||
min-width: 1040px;
|
||||
max-width: 96vw;
|
||||
|
||||
.deposit-group-title {
|
||||
color: #0d9488;
|
||||
border-bottom-color: #0d9488;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Ledger Mega Menu */
|
||||
.gl-backdrop {
|
||||
position: fixed;
|
||||
|
||||
@@ -26,6 +26,7 @@ import { ContentComponent } from './content/content.component';
|
||||
import { FooterComponent } from '../../shared/footer/footer.component';
|
||||
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { MatDividerModule } from '@angular/material/divider';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
|
||||
|
||||
@@ -50,6 +51,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
|
||||
AsyncPipe,
|
||||
FaIconComponent,
|
||||
MatMenuModule,
|
||||
MatDividerModule,
|
||||
MatTooltipModule
|
||||
]
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user