update rd,fd,saving and current product update validation end date and and this all account nominee facility code
This commit is contained in:
@@ -50,8 +50,10 @@
|
||||
<mat-step>
|
||||
<ng-template matStepLabel>Currency</ng-template>
|
||||
|
||||
<mifosx-savings-account-currency-step [savingsAccountProductTemplate]="savingsAccountProductTemplate">
|
||||
</mifosx-savings-account-currency-step>
|
||||
<mifosx-savings-account-currency-step
|
||||
[savingsAccountProductTemplate]="savingsAccountProductTemplate"
|
||||
[primaryClientId]="savingsAccountTemplate?.clientId ?? null"
|
||||
></mifosx-savings-account-currency-step>
|
||||
|
||||
<div class="layout-row align-center gap-2percent margin-t responsive-column">
|
||||
<button mat-raised-button matStepperPrevious>
|
||||
|
||||
@@ -108,7 +108,7 @@ export class CreateSavingsAccountComponent {
|
||||
}
|
||||
|
||||
get savingsAccountNominee() {
|
||||
return this.savingsAccountCurrencyStep?.nomineeData ?? null;
|
||||
return this.savingsAccountCurrencyStep?.liveNomineeData ?? null;
|
||||
}
|
||||
|
||||
submit() {
|
||||
@@ -137,16 +137,25 @@ export class CreateSavingsAccountComponent {
|
||||
savingsAccount.accountFacilityConfig = this.savingsAccountDigital.accountFacilityConfig;
|
||||
}
|
||||
|
||||
// Nominee
|
||||
if (this.savingsAccountNominee) {
|
||||
savingsAccount.nominee = this.savingsAccountNominee;
|
||||
}
|
||||
|
||||
if (this.savingsAccountTemplate.clientId) {
|
||||
savingsAccount.clientId = this.savingsAccountTemplate.clientId;
|
||||
} else {
|
||||
savingsAccount.groupId = this.savingsAccountTemplate.groupId;
|
||||
}
|
||||
|
||||
const nominee = this.savingsAccountNominee;
|
||||
if (nominee) {
|
||||
savingsAccount.nominee = {
|
||||
nomineeClientId: nominee.nomineeClientId,
|
||||
nominationType: nominee.nominationType,
|
||||
relationshipId: nominee.relationshipId,
|
||||
percentageShare: nominee.percentageShare,
|
||||
nomineeIsMinor: nominee.nomineeIsMinor,
|
||||
...(nominee.guardianClientId ? { guardianClientId: nominee.guardianClientId } : {}),
|
||||
remarks: nominee.remarks
|
||||
};
|
||||
}
|
||||
|
||||
this.savingsService.createSavingsAccount(savingsAccount).subscribe((response: any) => {
|
||||
this.router.navigate(
|
||||
[
|
||||
|
||||
+5
-1
@@ -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>
|
||||
|
||||
+7
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -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 & 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">
|
||||
|
||||
+6
-1
@@ -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) {
|
||||
|
||||
+28
-43
@@ -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) {
|
||||
|
||||
@@ -213,6 +213,15 @@
|
||||
</a>
|
||||
}
|
||||
</ng-container>
|
||||
<a
|
||||
mat-tab-link
|
||||
[routerLink]="['./nominees']"
|
||||
routerLinkActive
|
||||
#nominees="routerLinkActive"
|
||||
[active]="nominees.isActive"
|
||||
>
|
||||
Nominees
|
||||
</a>
|
||||
@for (savingsDatatable of savingsDatatables; track savingsDatatable) {
|
||||
<a
|
||||
mat-tab-link
|
||||
|
||||
@@ -52,6 +52,7 @@ import { SavingDocumentsResolver } from './common-resolvers/saving-documents.res
|
||||
import { SavingsTransactionGeneralTabComponent } from './savings-account-view/transactions/view-transaction/savings-transaction-general-tab/savings-transaction-general-tab.component';
|
||||
import { GeneralTabComponent } from './savings-account-view/general-tab/general-tab.component';
|
||||
import { PassbookTabComponent } from './savings-account-view/passbook-tab/passbook-tab.component';
|
||||
import { AccountNomineesTabComponent } from 'app/shared/account-nominees-tab/account-nominees-tab.component';
|
||||
|
||||
/** Savings Routes */
|
||||
const routes: Routes = [
|
||||
@@ -136,6 +137,17 @@ const routes: Routes = [
|
||||
savingsDocuments: SavingDocumentsResolver
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'nominees',
|
||||
component: AccountNomineesTabComponent,
|
||||
data: {
|
||||
title: 'Savings Account Nominees',
|
||||
breadcrumb: 'Nominees',
|
||||
routeParamBreadcrumb: false,
|
||||
accountDataKey: 'savingsAccountData',
|
||||
accountType: 'SB'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'datatables',
|
||||
children: [
|
||||
|
||||
Reference in New Issue
Block a user