update rd,fd,saving and current product update validation end date and and this all account nominee facility code

This commit is contained in:
Nitesh Yadav
2026-05-15 12:53:47 +05:30
parent 8758b9222f
commit 52e216fbe5
62 changed files with 3069 additions and 886 deletions
@@ -49,7 +49,11 @@
</span>
</div>
@if (savingsAccountProductTemplate?.nominationFacility) {
<mifosx-nominee-form (nomineeChange)="onNomineeChange($event)"></mifosx-nominee-form>
<mifosx-nominee-form
[primaryClientId]="primaryClientId"
[showActions]="false"
(nomineeChange)="onNomineeChange($event)"
></mifosx-nominee-form>
}
</div>
</div>
@@ -6,7 +6,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
import { Component, Input } from '@angular/core';
import { Component, Input, ViewChild } from '@angular/core';
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
import { NomineeFormComponent } from 'app/shared/nominee-form/nominee-form.component';
import { DormancyAlertPanelComponent } from 'app/shared/dormancy-alert-panel/dormancy-alert-panel.component';
@@ -23,10 +23,16 @@ import { DormancyAlertPanelComponent } from 'app/shared/dormancy-alert-panel/dor
})
export class SavingsAccountCurrencyStepComponent {
@Input() savingsAccountProductTemplate: any;
@Input() primaryClientId: number | null = null;
@ViewChild(NomineeFormComponent) nomineeFormComp: NomineeFormComponent;
nomineeData: any = null;
onNomineeChange(event: any): void {
this.nomineeData = event;
}
get liveNomineeData(): any {
return this.nomineeFormComp?.currentNomineeData ?? this.nomineeData;
}
}
@@ -132,7 +132,10 @@
</div>
@if (productTemplate?.introducerRequired) {
<mifosx-introducer-search (introducerChange)="onIntroducerChange($event)"></mifosx-introducer-search>
<mifosx-introducer-search
[excludedClientIds]="primaryClientId ? [primaryClientId] : []"
(introducerChange)="onIntroducerChange($event)"
></mifosx-introducer-search>
}
}
@@ -490,7 +493,10 @@
<mat-icon>manage_accounts</mat-icon>
<span>Search &amp; Link Guardian (existing client)</span>
</div>
<mifosx-introducer-search (introducerChange)="onGuardianChange($event)"></mifosx-introducer-search>
<mifosx-introducer-search
[excludedClientIds]="primaryClientId ? [primaryClientId] : []"
(introducerChange)="onGuardianChange($event)"
></mifosx-introducer-search>
@if (guardianName) {
<div class="soa-guardian-selected">
@@ -330,10 +330,15 @@ export class SavingsAccountDetailsStepComponent implements OnInit {
// ── Joint Account helpers ──────────────────────────────────────────────
openAddJointHolderDialog(): void {
const excludedClientIds = [
...(this.primaryClientId ? [this.primaryClientId] : []),
...this.jointHolders.map((h: any) => h.clientId).filter(Boolean)
];
const ref = this.dialog.open(AddRelatedClientDialogComponent, {
width: '500px',
panelClass: 'arc-dialog-panel',
disableClose: true
disableClose: true,
data: { excludedClientIds }
});
ref.afterClosed().subscribe((result) => {
if (result) {
@@ -478,79 +478,64 @@
<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?.mode === 'linked' ? 'Linked Client' : 'Manual Entry' }}
</span>
<span class="preview-section__badge">{{ savingsAccountNominee?.nominationType || 'DA1' }}</span>
</div>
<div class="preview-body">
<div class="preview-grid preview-grid--three">
<!-- Name: fullName for manual, displayName for linked -->
<div class="preview-field">
<span class="preview-label">Name</span>
<span class="preview-value">{{
savingsAccountNominee?.fullName || savingsAccountNominee?.displayName || '—'
}}</span>
<span class="preview-value">{{ savingsAccountNominee?.nomineeDisplayName || '—' }}</span>
</div>
<div class="preview-field">
<span class="preview-label">Client ID</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeClientId || '—' }}</span>
</div>
@if (savingsAccountNominee?.cifNumber) {
<div class="preview-field">
<span class="preview-label">CIF No</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee.cifNumber }}</span>
</div>
}
<div class="preview-field">
<span class="preview-label">Relationship</span>
<span class="preview-value">{{ savingsAccountNominee?.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?.nomineeShare ?? '—' }}%</span>
<span class="preview-value">{{ savingsAccountNominee?.percentageShare ?? '—' }}%</span>
</div>
@if (savingsAccountNominee?.dateOfBirth) {
<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?.dateOfBirth | dateFormat }}</span>
<span class="preview-value">{{ savingsAccountNominee?.nomineeDateOfBirth | dateFormat }}</span>
</div>
}
@if (savingsAccountNominee?.nationality) {
<div class="preview-field">
<span class="preview-label">Nationality</span>
<span class="preview-value">{{ savingsAccountNominee?.nationality }}</span>
</div>
}
@if (savingsAccountNominee?.mobileNo) {
@if (savingsAccountNominee?.nomineeMobileNo) {
<div class="preview-field">
<span class="preview-label">Mobile No</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.mobileNo }}</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeMobileNo }}</span>
</div>
}
@if (savingsAccountNominee?.aadhaarNumber) {
@if (savingsAccountNominee?.nomineeAadhaar) {
<div class="preview-field">
<span class="preview-label">Aadhaar No</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.aadhaarNumber }}</span>
<span class="preview-label">Aadhaar</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineeAadhaar }}</span>
</div>
}
@if (savingsAccountNominee?.panNumber) {
@if (savingsAccountNominee?.nomineePan) {
<div class="preview-field">
<span class="preview-label">PAN No</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.panNumber }}</span>
<span class="preview-label">PAN</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.nomineePan }}</span>
</div>
}
@if (savingsAccountNominee?.isDependent) {
@if (savingsAccountNominee?.guardianDisplayName) {
<div class="preview-field">
<span class="preview-label">Dependent</span>
<span class="preview-value preview-badge preview-badge--warn">Yes</span>
<span class="preview-label">Guardian</span>
<span class="preview-value">{{ savingsAccountNominee?.guardianDisplayName }}</span>
</div>
}
@if (savingsAccountNominee?.guardianName) {
@if (savingsAccountNominee?.guardianClientId) {
<div class="preview-field">
<span class="preview-label">Guardian Name</span>
<span class="preview-value">{{ savingsAccountNominee?.guardianName }}</span>
</div>
}
@if (savingsAccountNominee?.guardianRelationship) {
<div class="preview-field">
<span class="preview-label">Guardian Relationship</span>
<span class="preview-value">{{ savingsAccountNominee?.guardianRelationship }}</span>
<span class="preview-label">Guardian Client ID</span>
<span class="preview-value preview-mono">{{ savingsAccountNominee?.guardianClientId }}</span>
</div>
}
@if (savingsAccountNominee?.remarks) {