feat: add nominee, auto-debit, charges UI for SB/CA/FD/RD accounts; enforce required fields
- SB/CA/FD/RD Currency Step: add Nomination Facility toggle with multi-nominee form (NomineeFormComponent), auto-debit facility toggle, dormancy alert panel - SB/CA/FD/RD Preview Step: display nominees list, auto-debit status, dormancy info - FD/RD create component: validate Deposit Tenure, Monthly Installment (RD), and Customer Segment are filled before submit; show clear alert messages on missing fields - FD account details step: remove duplicate Currency section (already shown in Currency & Account Status Configuration step) - CA/SB create component: handle duplicate externalId API error with user-friendly alert instead of raw error display Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
37ac15f42c
commit
3df7d100df
+40
-65
@@ -473,78 +473,53 @@
|
||||
}
|
||||
|
||||
<!-- ══ 7. Nominee Details (if filled) ═══════════════════════════ -->
|
||||
@if (savingsAccountNominee) {
|
||||
@if (savingsAccountNominees?.length > 0) {
|
||||
<div class="preview-section">
|
||||
<div class="preview-section__header">
|
||||
<i class="fas fa-user-shield preview-section__icon"></i>
|
||||
<span class="preview-section__title">Nominee Details</span>
|
||||
<span class="preview-section__badge">{{ savingsAccountNominee?.nominationType || 'DA1' }}</span>
|
||||
<span class="preview-section__badge">{{ savingsAccountNominees.length }} Nominee(s)</span>
|
||||
</div>
|
||||
<div class="preview-body">
|
||||
<div class="preview-grid preview-grid--three">
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Name</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.nomineeDisplayName || '—' }}</span>
|
||||
@for (nom of savingsAccountNominees; track nom.nomineeClientId; let i = $index) {
|
||||
@if (i > 0) {
|
||||
<hr class="preview-nom-divider" />
|
||||
}
|
||||
<div class="preview-grid preview-grid--three">
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Name</span>
|
||||
<span class="preview-value">{{ nom.nomineeDisplayName || '—' }}</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Client ID</span>
|
||||
<span class="preview-value preview-mono">{{ nom.nomineeClientId || '—' }}</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Relationship</span>
|
||||
<span class="preview-value">{{ nom.relationshipName || '—' }}</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Share %</span>
|
||||
<span class="preview-value">{{ nom.percentageShare ?? '—' }}%</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Minor</span>
|
||||
<span class="preview-value">{{ nom.nomineeIsMinor ? 'Yes' : 'No' }}</span>
|
||||
</div>
|
||||
@if (nom.guardianDisplayName) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Guardian</span>
|
||||
<span class="preview-value">{{ nom.guardianDisplayName }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (nom.remarks) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Remarks</span>
|
||||
<span class="preview-value">{{ nom.remarks }}</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Client ID</span>
|
||||
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeClientId || '—' }}</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Relationship</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.relationshipName || '—' }}</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Share %</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.percentageShare ?? '—' }}%</span>
|
||||
</div>
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Minor</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.nomineeIsMinor ? 'Yes' : 'No' }}</span>
|
||||
</div>
|
||||
@if (savingsAccountNominee?.nomineeDateOfBirth) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Date of Birth</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.nomineeDateOfBirth | dateFormat }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.nomineeMobileNo) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Mobile No</span>
|
||||
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeMobileNo }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.nomineeAadhaar) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Aadhaar</span>
|
||||
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeAadhaar }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.nomineePan) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">PAN</span>
|
||||
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineePan }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.guardianDisplayName) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Guardian</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.guardianDisplayName }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.guardianClientId) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Guardian Client ID</span>
|
||||
<span class="preview-value preview-mono">{{ savingsAccountNominee?.guardianClientId }}</span>
|
||||
</div>
|
||||
}
|
||||
@if (savingsAccountNominee?.remarks) {
|
||||
<div class="preview-field">
|
||||
<span class="preview-label">Remarks</span>
|
||||
<span class="preview-value">{{ savingsAccountNominee?.remarks }}</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
+2
-2
@@ -90,8 +90,8 @@ export class SavingsAccountPreviewStepComponent implements OnChanges {
|
||||
@Input() savingsAccount: any;
|
||||
/** Digital facilities — user-modified values from digital step */
|
||||
@Input() savingsAccountDigital: any;
|
||||
/** Nominee data from currency step */
|
||||
@Input() savingsAccountNominee: any;
|
||||
/** Nominees list from currency step */
|
||||
@Input() savingsAccountNominees: any[] = [];
|
||||
/** active Client Members in case of GSIM Account */
|
||||
@Input() activeClientMembers?: any;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user