836 lines
38 KiB
HTML
836 lines
38 KiB
HTML
<!--
|
|
Copyright since 2025 Mifos Initiative
|
|
|
|
This Source Code Form is subject to the terms of the Mozilla Public
|
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
-->
|
|
|
|
<div class="preview-wrapper">
|
|
<!-- ══ 1. Account Details ════════════════════════════════════════ -->
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-info-circle preview-section__icon"></i>
|
|
<span class="preview-section__title">{{ 'labels.heading.Details' | translate }}</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<div class="preview-grid preview-grid--three">
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Product' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositAccountData?.productId
|
|
| find: recurringDepositsAccountTemplate?.productOptions : 'id' : 'name'
|
|
}}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Submitted On' | translate }}</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData?.submittedOnDate | dateFormat }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Field Officer' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositAccountData?.fieldOfficerId
|
|
| find: recurringDepositsAccountProductTemplate?.fieldOfficerOptions : 'id' : 'displayName'
|
|
}}</span>
|
|
</div>
|
|
@if (recurringDepositAccountData?.externalId) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.External Id' | translate }}</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData.externalId }}</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══ 1b. Status of Account ════════════════════════════════════ -->
|
|
@if (recurringDepositAccountData?.accountStatus) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-id-card preview-section__icon"></i>
|
|
<span class="preview-section__title">Status of Account</span>
|
|
<span class="preview-section__badge">RBI Guidelines</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<!-- Status Tile -->
|
|
<div class="preview-soa-status-row">
|
|
<span class="preview-soa-tile">
|
|
@switch (recurringDepositAccountData.accountStatus) {
|
|
@case ('INDIVIDUAL_MALE') {
|
|
<i class="fas fa-male"></i> Individual (Male)
|
|
}
|
|
@case ('INDIVIDUAL_FEMALE') {
|
|
<i class="fas fa-female"></i> Individual (Female)
|
|
}
|
|
@case ('SINGLE') {
|
|
<i class="fas fa-user-circle"></i> Single Account
|
|
}
|
|
@case ('JOINT') {
|
|
<i class="fas fa-users"></i> Joint Account
|
|
}
|
|
@case ('MINOR') {
|
|
<i class="fas fa-child"></i> Minor Account
|
|
}
|
|
@case ('SENIOR_CITIZEN') {
|
|
<i class="fas fa-user-clock"></i> Senior Citizen
|
|
}
|
|
@default {
|
|
{{ recurringDepositAccountData.accountStatus }}
|
|
}
|
|
}
|
|
</span>
|
|
</div>
|
|
|
|
<!-- JOINT: Mode of Operation + Holders Table -->
|
|
@if (recurringDepositAccountData.accountStatus === 'JOINT') {
|
|
<div class="preview-grid preview-grid--three" style="margin-top: 12px">
|
|
<div class="preview-field">
|
|
<span class="preview-label">Mode of Operation</span>
|
|
<span class="preview-value">
|
|
@switch (recurringDepositAccountData.modeOfOperation) {
|
|
@case ('EITHER_OR_SURVIVOR') {
|
|
Either or Survivor
|
|
}
|
|
@case ('FORMER_OR_SURVIVOR') {
|
|
Former or Survivor
|
|
}
|
|
@case ('JOINTLY') {
|
|
Jointly
|
|
}
|
|
@case ('ANYONE_OR_SURVIVOR') {
|
|
Anyone or Survivor
|
|
}
|
|
@default {
|
|
{{ recurringDepositAccountData.modeOfOperation || '—' }}
|
|
}
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
@if (recurringDepositAccountData.jointHolders?.length) {
|
|
<div class="preview-soa-table-wrap">
|
|
<table class="preview-soa-tbl">
|
|
<thead>
|
|
<tr>
|
|
<th class="preview-soa-th">Sr.</th>
|
|
<th class="preview-soa-th">Holder Name</th>
|
|
<th class="preview-soa-th">CIF No.</th>
|
|
<th class="preview-soa-th">Ownership %</th>
|
|
<th class="preview-soa-th">Signing</th>
|
|
<th class="preview-soa-th">Role</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@for (holder of recurringDepositAccountData.jointHolders; track holder.clientId; let i = $index) {
|
|
<tr [class.preview-soa-tr--primary]="holder.isPrimary">
|
|
<td class="preview-soa-td">{{ i + 1 }}</td>
|
|
<td class="preview-soa-td">
|
|
{{ holder.displayName || holder.clientName || '—' }}
|
|
@if (holder.isPrimary) {
|
|
<span class="preview-soa-primary-tag">Primary</span>
|
|
}
|
|
</td>
|
|
<td class="preview-soa-td preview-mono">{{ holder.cifNumber || holder.clientCif || '—' }}</td>
|
|
<td class="preview-soa-td">{{ holder.sharePercentage ?? '—' }}%</td>
|
|
<td class="preview-soa-td">{{ holder.isMandatory ? 'Mandatory' : 'Optional' }}</td>
|
|
<td class="preview-soa-td">{{ holder.isPrimary ? 'Primary Account Holder' : 'Co-Holder' }}</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
}
|
|
}
|
|
|
|
<!-- INDIVIDUAL_MALE: Special Category -->
|
|
@if (
|
|
recurringDepositAccountData.accountStatus === 'INDIVIDUAL_MALE' && recurringDepositAccountData.specialCategory
|
|
) {
|
|
<div class="preview-grid preview-grid--three" style="margin-top: 12px">
|
|
<div class="preview-field">
|
|
<span class="preview-label">Special Category</span>
|
|
<span class="preview-value">
|
|
@switch (recurringDepositAccountData.specialCategory) {
|
|
@case ('DEFENCE') {
|
|
Defence Personnel
|
|
}
|
|
@case ('EX_SERVICEMAN') {
|
|
Ex-Serviceman
|
|
}
|
|
@case ('GOVT_EMPLOYEE') {
|
|
Government Employee
|
|
}
|
|
@case ('PHYSICALLY_CHALLENGED') {
|
|
Physically Challenged
|
|
}
|
|
@case ('NRI') {
|
|
NRI (Non-Resident Indian)
|
|
}
|
|
@case ('NONE') {
|
|
None / General
|
|
}
|
|
@default {
|
|
{{ recurringDepositAccountData.specialCategory }}
|
|
}
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- INDIVIDUAL_FEMALE: Weaker Section -->
|
|
@if (
|
|
recurringDepositAccountData.accountStatus === 'INDIVIDUAL_FEMALE' && recurringDepositAccountData.weakerSection
|
|
) {
|
|
<div class="preview-grid preview-grid--three" style="margin-top: 12px">
|
|
<div class="preview-field">
|
|
<span class="preview-label">Weaker Section</span>
|
|
<span class="preview-value">
|
|
@switch (recurringDepositAccountData.weakerSection) {
|
|
@case ('BPL') {
|
|
BPL (Below Poverty Line)
|
|
}
|
|
@case ('SC_ST') {
|
|
SC / ST Category
|
|
}
|
|
@case ('MINORITY') {
|
|
Minority Community
|
|
}
|
|
@case ('SHG') {
|
|
Self Help Group Member
|
|
}
|
|
@case ('PMJDY') {
|
|
PMJDY Beneficiary
|
|
}
|
|
@case ('NONE') {
|
|
None / General
|
|
}
|
|
@default {
|
|
{{ recurringDepositAccountData.weakerSection }}
|
|
}
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- MINOR: Guardian Details -->
|
|
@if (recurringDepositAccountData.accountStatus === 'MINOR') {
|
|
<div class="preview-grid preview-grid--three" style="margin-top: 12px">
|
|
@if (recurringDepositAccountData.guardianName) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Guardian Name</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData.guardianName }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositAccountData.guardianCifNumber) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Guardian CIF</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositAccountData.guardianCifNumber }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositAccountData.guardianRelationship) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Relationship</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData.guardianRelationship }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositAccountData.minorDateOfBirth) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Minor DOB</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData.minorDateOfBirth }}</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 1c. Linked Account ════════════════════════════════════════ -->
|
|
@if (recurringDepositAccountData?.linkedAccountId) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-link preview-section__icon"></i>
|
|
<span class="preview-section__title">Linked Deposit Account</span>
|
|
<span class="preview-section__badge">{{ recurringDepositAccountData.linkedAccountType }}</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<div class="preview-grid preview-grid--three">
|
|
<div class="preview-field">
|
|
<span class="preview-label">Account No</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositAccountData.linkedAccountNo }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">Account Type</span>
|
|
<span class="preview-value">{{ recurringDepositAccountData.linkedAccountType }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">Account ID</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositAccountData.linkedAccountId }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 2. Product Classification ════════════════════════════════ -->
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.accountType ||
|
|
recurringDepositsAccountProductTemplate?.customerSegment ||
|
|
recurringDepositsAccountProductTemplate?.productCode ||
|
|
recurringDepositsAccountProductTemplate?.effectiveDate ||
|
|
recurringDepositsAccountProductTemplate?.endDate ||
|
|
recurringDepositsAccountProductTemplate?.introducerRequired !== undefined ||
|
|
recurringDepositsAccountProductTemplate?.shareLinkingEnabled !== undefined
|
|
) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-tags preview-section__icon"></i>
|
|
<span class="preview-section__title">Product Classification</span>
|
|
<span class="preview-section__badge">From Product</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<div class="preview-grid preview-grid--three">
|
|
@if (recurringDepositsAccountProductTemplate?.accountType) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Account Type</span>
|
|
<span class="preview-value">{{ recurringDepositsAccountProductTemplate.accountType }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.customerSegment) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Customer Segment</span>
|
|
<span class="preview-value">{{ recurringDepositsAccountProductTemplate.customerSegment }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.productCode) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Product Code</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositsAccountProductTemplate.productCode }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.effectiveDate) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Effective Date</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositsAccountProductTemplate.effectiveDate | dateFormat
|
|
}}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.endDate) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">End Date</span>
|
|
<span class="preview-value">{{ recurringDepositsAccountProductTemplate.endDate | dateFormat }}</span>
|
|
</div>
|
|
}
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.introducerRequired !== undefined &&
|
|
recurringDepositsAccountProductTemplate?.introducerRequired !== null
|
|
) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Introducer Required</span>
|
|
<span
|
|
class="preview-value preview-badge"
|
|
[class.preview-badge--yes]="recurringDepositsAccountProductTemplate.introducerRequired"
|
|
>
|
|
{{ recurringDepositsAccountProductTemplate.introducerRequired | yesNo }}
|
|
</span>
|
|
</div>
|
|
}
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.shareLinkingEnabled !== undefined &&
|
|
recurringDepositsAccountProductTemplate?.shareLinkingEnabled !== null
|
|
) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Deposit Account Link</span>
|
|
<span
|
|
class="preview-value preview-badge"
|
|
[class.preview-badge--yes]="recurringDepositsAccountProductTemplate.shareLinkingEnabled"
|
|
>
|
|
{{ recurringDepositsAccountProductTemplate.shareLinkingEnabled | yesNo }}
|
|
</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 3. Introducer Details (if selected) ══════════════════════ -->
|
|
@if (recurringDepositAccountData?.introducerId) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-user-tie preview-section__icon"></i>
|
|
<span class="preview-section__title">Introducer Details</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">{{ recurringDepositAccountData?.introducerName || '—' }}</span>
|
|
</div>
|
|
@if (recurringDepositAccountData?.introducerCif) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">CIF No</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositAccountData.introducerCif }}</span>
|
|
</div>
|
|
}
|
|
<div class="preview-field">
|
|
<span class="preview-label">Client ID</span>
|
|
<span class="preview-value preview-mono">{{ recurringDepositAccountData.introducerId }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 4. Currency & Account Flags ══════════════════════════════ -->
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-coins preview-section__icon"></i>
|
|
<span class="preview-section__title">{{ 'labels.heading.Currency' | translate }}</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<div class="preview-grid preview-grid--three">
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Currency' | translate }}</span>
|
|
<span class="preview-value">{{ currencyName }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Decimal Places' | translate }}</span>
|
|
<span class="preview-value">{{ decimalPlaces }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Currency In Multiples Of' | translate }}</span>
|
|
<span class="preview-value">{{ inMultiplesOf }}</span>
|
|
</div>
|
|
@if (recurringDepositsAccountProductTemplate?.withHoldTax) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Is Withhold Tax Applicable' | translate }}</span>
|
|
<span
|
|
class="preview-value preview-badge"
|
|
[class.preview-badge--yes]="recurringDepositAccountData?.withHoldTax"
|
|
>
|
|
{{ recurringDepositAccountData?.withHoldTax | yesNo }}
|
|
</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositAccountData?.withHoldTax && recurringDepositsAccountProductTemplate?.taxGroup?.name) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Tax Group' | translate }}</span>
|
|
<span class="preview-value">{{ recurringDepositsAccountProductTemplate.taxGroup.name }}</span>
|
|
</div>
|
|
}
|
|
<div class="preview-field">
|
|
<span class="preview-label">Balance Swap Option</span>
|
|
<span class="preview-value preview-badge" [class.preview-badge--yes]="rdCurrencyFlags?.balanceSwapOption">
|
|
{{ rdCurrencyFlags?.balanceSwapOption | yesNo }}
|
|
</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">MSME</span>
|
|
<span class="preview-value preview-badge" [class.preview-badge--yes]="rdCurrencyFlags?.msme">
|
|
{{ rdCurrencyFlags?.msme | yesNo }}
|
|
</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">Auto Debit Facility</span>
|
|
<span class="preview-value preview-badge" [class.preview-badge--yes]="rdCurrencyFlags?.autoDebitFacility">
|
|
{{ rdCurrencyFlags?.autoDebitFacility | yesNo }}
|
|
</span>
|
|
</div>
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.dormancyAlert !== undefined &&
|
|
recurringDepositsAccountProductTemplate?.dormancyAlert !== null
|
|
) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Dormancy Alert</span>
|
|
<span
|
|
class="preview-value preview-badge"
|
|
[class.preview-badge--yes]="recurringDepositsAccountProductTemplate.dormancyAlert"
|
|
>
|
|
{{ recurringDepositsAccountProductTemplate.dormancyAlert | yesNo }}
|
|
</span>
|
|
</div>
|
|
}
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.nominationFacility !== undefined &&
|
|
recurringDepositsAccountProductTemplate?.nominationFacility !== null
|
|
) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Nomination Facility</span>
|
|
<span
|
|
class="preview-value preview-badge"
|
|
[class.preview-badge--yes]="recurringDepositsAccountProductTemplate.nominationFacility"
|
|
>
|
|
{{ recurringDepositsAccountProductTemplate.nominationFacility | yesNo }}
|
|
</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══ 5. Dormancy Monitoring ════════════════════════════════════ -->
|
|
@if (
|
|
recurringDepositsAccountProductTemplate?.dormancyAlert ||
|
|
recurringDepositsAccountProductTemplate?.isDormancyTrackingActiveFromProduct
|
|
) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-moon preview-section__icon"></i>
|
|
<span class="preview-section__title">Dormancy Monitoring</span>
|
|
<span
|
|
class="preview-section__badge"
|
|
[class.preview-section__badge--active]="
|
|
recurringDepositsAccountProductTemplate?.isDormancyTrackingActiveFromProduct
|
|
"
|
|
>
|
|
{{ recurringDepositsAccountProductTemplate?.isDormancyTrackingActiveFromProduct ? 'Active' : 'Inactive' }}
|
|
</span>
|
|
</div>
|
|
<div class="preview-body">
|
|
<div class="preview-dormancy-timeline">
|
|
<div class="preview-dorm-step">
|
|
<div class="preview-dorm-step__dot preview-dorm-step__dot--inactive"></div>
|
|
<div class="preview-dorm-step__body">
|
|
<span class="preview-dorm-step__label">Inactive</span>
|
|
<span class="preview-dorm-step__days">
|
|
@if (recurringDepositsAccountProductTemplate?.daysToInactiveFromProduct != null) {
|
|
After {{ recurringDepositsAccountProductTemplate.daysToInactiveFromProduct }} days of no transaction
|
|
} @else {
|
|
Not configured
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="preview-dorm-connector"></div>
|
|
<div class="preview-dorm-step">
|
|
<div class="preview-dorm-step__dot preview-dorm-step__dot--dormant"></div>
|
|
<div class="preview-dorm-step__body">
|
|
<span class="preview-dorm-step__label">Dormant</span>
|
|
<span class="preview-dorm-step__days">
|
|
@if (recurringDepositsAccountProductTemplate?.daysToDormancyFromProduct != null) {
|
|
{{ recurringDepositsAccountProductTemplate.daysToDormancyFromProduct }} days after inactive
|
|
} @else {
|
|
Not configured
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="preview-dorm-connector"></div>
|
|
<div class="preview-dorm-step">
|
|
<div class="preview-dorm-step__dot preview-dorm-step__dot--escheat"></div>
|
|
<div class="preview-dorm-step__body">
|
|
<span class="preview-dorm-step__label">Escheat</span>
|
|
<span class="preview-dorm-step__days">
|
|
@if (recurringDepositsAccountProductTemplate?.daysToEscheatFromProduct != null) {
|
|
{{ recurringDepositsAccountProductTemplate.daysToEscheatFromProduct }} days after dormant
|
|
} @else {
|
|
Not configured
|
|
}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="preview-dorm-flags">
|
|
<span
|
|
class="preview-dorm-flag"
|
|
[class.preview-dorm-flag--on]="recurringDepositsAccountProductTemplate?.dormancyAlert"
|
|
>
|
|
<i class="fas fa-bell"></i> Alert
|
|
{{ recurringDepositsAccountProductTemplate?.dormancyAlert ? 'Enabled' : 'Disabled' }}
|
|
</span>
|
|
<span
|
|
class="preview-dorm-flag"
|
|
[class.preview-dorm-flag--on]="recurringDepositsAccountProductTemplate?.isDormancyTrackingActiveFromProduct"
|
|
>
|
|
<i class="fas fa-eye"></i> Tracking
|
|
{{ recurringDepositsAccountProductTemplate?.isDormancyTrackingActiveFromProduct ? 'Active' : 'Inactive' }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 6. Nominee Details (if filled) ═══════════════════════════ -->
|
|
@if (rdNominee) {
|
|
<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">
|
|
{{ rdNominee?.mode === 'linked' ? 'Linked Client' : 'Manual Entry' }}
|
|
</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">{{ rdNominee?.fullName || rdNominee?.displayName || '—' }}</span>
|
|
</div>
|
|
@if (rdNominee?.cifNumber) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">CIF No</span>
|
|
<span class="preview-value preview-mono">{{ rdNominee.cifNumber }}</span>
|
|
</div>
|
|
}
|
|
<div class="preview-field">
|
|
<span class="preview-label">Relationship</span>
|
|
<span class="preview-value">{{ rdNominee?.relationship || '—' }}</span>
|
|
</div>
|
|
<div class="preview-field">
|
|
<span class="preview-label">Share %</span>
|
|
<span class="preview-value">{{ rdNominee?.nomineeShare ?? '—' }}%</span>
|
|
</div>
|
|
@if (rdNominee?.dateOfBirth) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Date of Birth</span>
|
|
<span class="preview-value">{{ rdNominee?.dateOfBirth | dateFormat }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.nationality) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Nationality</span>
|
|
<span class="preview-value">{{ rdNominee.nationality }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.mobileNo) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Mobile No</span>
|
|
<span class="preview-value preview-mono">{{ rdNominee.mobileNo }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.aadhaarNumber) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Aadhaar No</span>
|
|
<span class="preview-value preview-mono">{{ rdNominee.aadhaarNumber }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.panNumber) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">PAN No</span>
|
|
<span class="preview-value preview-mono">{{ rdNominee.panNumber }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.guardianName) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Guardian Name</span>
|
|
<span class="preview-value">{{ rdNominee.guardianName }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.guardianRelationship) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Guardian Relationship</span>
|
|
<span class="preview-value">{{ rdNominee.guardianRelationship }}</span>
|
|
</div>
|
|
}
|
|
@if (rdNominee?.remarks) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">Remarks</span>
|
|
<span class="preview-value">{{ rdNominee.remarks }}</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<!-- ══ 7. Interest Rate (Tenure-based result) ════════════════════ -->
|
|
@if (_activeRdVersion || recurringDepositsAccountProductTemplate?.accountChart) {
|
|
<div class="preview-section">
|
|
<div class="preview-section__header">
|
|
<i class="fas fa-chart-line preview-section__icon"></i>
|
|
<span class="preview-section__title">Interest Rate</span>
|
|
@if (_activeRdVersion) {
|
|
<span class="preview-section__badge">{{ _activeRdVersion.versionLabel }}</span>
|
|
}
|
|
</div>
|
|
<div class="preview-body">
|
|
@if (_activeRdVersion) {
|
|
@if (rdTenureDays && rdApplicableSlab) {
|
|
<div class="preview-tenure-result">
|
|
<div class="preview-tenure-result__row">
|
|
<span class="preview-label">Tenure</span>
|
|
<span class="preview-value">{{ rdTenureDays }} Days</span>
|
|
</div>
|
|
<div class="preview-tenure-result__row">
|
|
<span class="preview-label">Applicable Slab</span>
|
|
<span class="preview-value">{{ rdApplicableSlab.description }}</span>
|
|
</div>
|
|
<div class="preview-tenure-result__row preview-tenure-result__row--highlight">
|
|
<span class="preview-label">Annual Interest Rate</span>
|
|
<span class="preview-tenure-result__rate"
|
|
>{{ rdApplicableSlab.annualInterestRate | formatNumber }}%</span
|
|
>
|
|
</div>
|
|
</div>
|
|
} @else {
|
|
<span class="preview-muted">No tenure entered — interest rate not calculated</span>
|
|
}
|
|
} @else {
|
|
<div class="preview-grid preview-grid--three">
|
|
@if (recurringDepositsAccountProductTemplate?.accountChart?.name) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.name' | translate }}</span>
|
|
<span class="preview-value">{{ recurringDepositsAccountProductTemplate.accountChart.name }}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.accountChart?.fromDate) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Valid from Date' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositsAccountProductTemplate.accountChart.fromDate | dateFormat
|
|
}}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.accountChart?.endDate) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.End Date' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositsAccountProductTemplate.accountChart.endDate | dateFormat
|
|
}}</span>
|
|
</div>
|
|
}
|
|
@if (recurringDepositsAccountProductTemplate?.accountChart?.description) {
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Description' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositsAccountProductTemplate.accountChart.description
|
|
}}</span>
|
|
</div>
|
|
}
|
|
<div class="preview-field">
|
|
<span class="preview-label">{{ 'labels.inputs.Primary Grouping by Amount' | translate }}</span>
|
|
<span class="preview-value">{{
|
|
recurringDepositsAccountProductTemplate?.accountChart?.isPrimaryGroupingByAmount | yesNo
|
|
}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
@if (interestRateChartData?.length) {
|
|
<table
|
|
class="mat-elevation-z1 irc-table preview-table"
|
|
mat-table
|
|
[dataSource]="interestRateChartData"
|
|
multiTemplateDataRows
|
|
>
|
|
<ng-container matColumnDef="period">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Period' | translate }}</th>
|
|
<td mat-cell *matCellDef="let chartSlab">
|
|
{{ chartSlab.fromPeriod }} - {{ chartSlab.toPeriod }} {{
|
|
chartSlab.periodType?.value | translateKey: 'catalogs'
|
|
}}
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="amountRange">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount Range' | translate }}</th>
|
|
<td mat-cell *matCellDef="let chartSlab">
|
|
{{ chartSlab.amountRangeFrom | formatNumber }} - {{ chartSlab.amountRangeTo | formatNumber }}
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="interest">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Interest' | translate }}</th>
|
|
<td mat-cell *matCellDef="let chartSlab">{{ chartSlab.annualInterestRate | formatNumber }} %</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="description">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Description' | translate }}</th>
|
|
<td mat-cell *matCellDef="let chartSlab">{{ chartSlab.description }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="actions">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
|
|
<td mat-cell *matCellDef="let chartSlab; let chartSlabIndex = dataIndex">
|
|
<button
|
|
mat-button
|
|
color="primary"
|
|
(click)="expandChartSlabIndex = expandChartSlabIndex === chartSlabIndex ? null : chartSlabIndex"
|
|
>
|
|
<span *ngIf="expandChartSlabIndex !== chartSlabIndex">
|
|
<fa-icon icon="eye" class="m-r-10"></fa-icon>
|
|
{{ 'labels.buttons.View Incentives' | translate }}
|
|
</span>
|
|
<span *ngIf="expandChartSlabIndex === chartSlabIndex">
|
|
<fa-icon icon="eye-slash" class="m-r-10"></fa-icon>
|
|
{{ 'labels.buttons.Hide Incentives' | translate }}
|
|
</span>
|
|
</button>
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="incentives">
|
|
<td
|
|
mat-cell
|
|
*matCellDef="let chartSlab; let chartSlabIndex = dataIndex"
|
|
[attr.colspan]="chartSlabsDisplayedColumns.length"
|
|
>
|
|
<div
|
|
class="layout-row-wrap flex-100 incentives"
|
|
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex ? 'expanded' : 'collapsed'"
|
|
>
|
|
<mat-card class="layout-row-wrap flex-100">
|
|
<h4 class="m-b-10 flex-13">{{ 'labels.heading.Incentives' | translate }}</h4>
|
|
<table
|
|
class="flex-100 mat-elevation-z1"
|
|
mat-table
|
|
[dataSource]="chartSlab.incentives"
|
|
*ngIf="chartSlab.incentives?.length"
|
|
>
|
|
<ng-container matColumnDef="entityType">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity Type' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.entityType?.value }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="attributeName">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Name' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.attributeName?.value }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="conditionType">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Condition Type' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.conditionType?.value | titlecase }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="attributeValue">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Value' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.attributeValueDesc }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="incentiveType">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Incentive Type' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.incentiveType?.value }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="amount">
|
|
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Interest' | translate }}</th>
|
|
<td mat-cell *matCellDef="let incentive">{{ incentive.amount }}</td>
|
|
</ng-container>
|
|
<tr mat-header-row *matHeaderRowDef="incentivesDisplayedColumns"></tr>
|
|
<tr mat-row *matRowDef="let row; columns: incentivesDisplayedColumns"></tr>
|
|
</table>
|
|
</mat-card>
|
|
</div>
|
|
</td>
|
|
</ng-container>
|
|
<tr mat-header-row *matHeaderRowDef="chartSlabsDisplayedColumns"></tr>
|
|
<tr mat-row *matRowDef="let row; columns: chartSlabsDisplayedColumns"></tr>
|
|
<tr
|
|
mat-row
|
|
*matRowDef="let row; columns: chartSlabsIncentivesDisplayedColumns"
|
|
class="incentives-row"
|
|
></tr>
|
|
</table>
|
|
}
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<div class="layout-row responsive-column align-center gap-2px margin-t">
|
|
<button mat-raised-button matStepperPrevious>
|
|
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
|
|
{{ 'labels.buttons.Previous' | translate }}
|
|
</button>
|
|
<button mat-raised-button [routerLink]="['../..']">
|
|
{{ 'labels.buttons.Cancel' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="submitEvent.emit()">
|
|
{{ 'labels.buttons.Submit' | translate }}
|
|
</button>
|
|
</div>
|