Files
cbsnexora/src/app/current-accounts/current-account-stepper/current-account-preview-step/current-account-preview-step.component.html
T

530 lines
23 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">
<!-- Details -->
<div class="preview-section">
<div class="preview-section__header">
<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">{{
currentAccount?.productId | find: currentAccountTemplate?.productOptions : 'id' : 'name'
}}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Submitted On' | translate }}</span>
<span class="preview-value">{{ currentAccount?.submittedOnDate | dateFormat }}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Field Officer' | translate }}</span>
<span class="preview-value">{{
currentAccount?.fieldOfficerId
| find: currentAccountProductTemplate?.fieldOfficerOptions : 'id' : 'displayName'
}}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.External Id' | translate }}</span>
@if (currentAccount?.externalId) {
<span class="preview-value">
<mifosx-external-identifier externalId="{{ currentAccount.externalId }}"></mifosx-external-identifier>
</span>
} @else {
<span class="preview-value">{{ 'labels.inputs.Unassigned' | translate }}</span>
}
</div>
</div>
</div>
</div>
<!-- Product Classification -->
@if (
currentAccountProductTemplate?.accountType ||
currentAccountProductTemplate?.customerSegment ||
currentAccountProductTemplate?.productCode ||
currentAccountProductTemplate?.effectiveDate ||
currentAccountProductTemplate?.effectiveTo ||
currentAccountProductTemplate?.endDate ||
currentAccountProductTemplate?.introducerRequired !== undefined ||
currentAccountProductTemplate?.shareLinkingEnabled !== undefined
) {
<div class="preview-section">
<div class="preview-section__header">
<span class="preview-section__title">Product Classification</span>
</div>
<div class="preview-body">
<div class="preview-grid preview-grid--three">
@if (currentAccountProductTemplate?.accountType) {
<div class="preview-field">
<span class="preview-label">Account Type</span>
<span class="preview-value">{{ currentAccountProductTemplate?.accountType }}</span>
</div>
}
@if (currentAccountProductTemplate?.customerSegment) {
<div class="preview-field">
<span class="preview-label">Customer Segment</span>
<span class="preview-value">{{ currentAccountProductTemplate?.customerSegment }}</span>
</div>
}
@if (currentAccountProductTemplate?.productCode) {
<div class="preview-field">
<span class="preview-label">Product Code</span>
<span class="preview-value">{{ currentAccountProductTemplate?.productCode }}</span>
</div>
}
@if (currentAccountProductTemplate?.effectiveDate) {
<div class="preview-field">
<span class="preview-label">Effective Date</span>
<span class="preview-value">{{ currentAccountProductTemplate?.effectiveDate | dateFormat }}</span>
</div>
}
@if (currentAccountProductTemplate?.effectiveTo) {
<div class="preview-field">
<span class="preview-label">Effective To</span>
<span class="preview-value">{{ currentAccountProductTemplate?.effectiveTo | dateFormat }}</span>
</div>
}
@if (currentAccountProductTemplate?.endDate) {
<div class="preview-field">
<span class="preview-label">End Date</span>
<span class="preview-value">{{ currentAccountProductTemplate?.endDate | dateFormat }}</span>
</div>
}
@if (
currentAccountProductTemplate?.introducerRequired !== undefined &&
currentAccountProductTemplate?.introducerRequired !== null
) {
<div class="preview-field">
<span class="preview-label">Introducer Required</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.introducerRequired"
>
{{ currentAccountProductTemplate?.introducerRequired | yesNo }}
</span>
</div>
}
@if (
currentAccountProductTemplate?.shareLinkingEnabled !== undefined &&
currentAccountProductTemplate?.shareLinkingEnabled !== null
) {
<div class="preview-field">
<span class="preview-label">Share Linking Enabled</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.shareLinkingEnabled"
>
{{ currentAccountProductTemplate?.shareLinkingEnabled | yesNo }}
</span>
</div>
}
</div>
</div>
</div>
}
<!-- Currency -->
<div class="preview-section">
<div class="preview-section__header">
<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">{{ currentAccountTermsForm?.get('currencyCode')?.value }}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Decimal Places' | translate }}</span>
<span class="preview-value">{{ currentAccountProductTemplate?.currency?.decimalPlaces }}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Currency In Multiples Of' | translate }}</span>
<span class="preview-value">{{ currentAccountProductTemplate?.currency?.inMultiplesOf }}</span>
</div>
@if (
currentAccountProductTemplate?.dormancyAlert !== undefined &&
currentAccountProductTemplate?.dormancyAlert !== null
) {
<div class="preview-field">
<span class="preview-label">Dormancy Alert</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.dormancyAlert"
>
{{ currentAccountProductTemplate?.dormancyAlert | yesNo }}
</span>
</div>
}
@if (
currentAccountProductTemplate?.balanceSwapOption !== undefined &&
currentAccountProductTemplate?.balanceSwapOption !== null
) {
<div class="preview-field">
<span class="preview-label">Balance Swap Option</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.balanceSwapOption"
>
{{ currentAccountProductTemplate?.balanceSwapOption | yesNo }}
</span>
</div>
}
@if (currentAccountProductTemplate?.msme !== undefined && currentAccountProductTemplate?.msme !== null) {
<div class="preview-field">
<span class="preview-label">MSME</span>
<span class="preview-value preview-badge" [class.preview-badge--yes]="currentAccountProductTemplate?.msme">
{{ currentAccountProductTemplate?.msme | yesNo }}
</span>
</div>
}
@if (
currentAccountProductTemplate?.nominationFacility !== undefined &&
currentAccountProductTemplate?.nominationFacility !== null
) {
<div class="preview-field">
<span class="preview-label">Nomination Facility</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.nominationFacility"
>
{{ currentAccountProductTemplate?.nominationFacility | yesNo }}
</span>
</div>
}
@if (
currentAccountProductTemplate?.autoDebitFacility !== undefined &&
currentAccountProductTemplate?.autoDebitFacility !== null
) {
<div class="preview-field">
<span class="preview-label">Auto Debit Facility</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="currentAccountProductTemplate?.autoDebitFacility"
>
{{ currentAccountProductTemplate?.autoDebitFacility | yesNo }}
</span>
</div>
}
</div>
</div>
</div>
<!-- Terms -->
<div class="preview-section">
<div class="preview-section__header">
<span class="preview-section__title">{{ 'labels.heading.Terms' | translate }}</span>
</div>
<div class="preview-body">
<div class="preview-grid preview-grid--three">
<div class="preview-field">
<span class="preview-label">Interest Posting Frequency</span>
<span class="preview-value">{{
termPreview?.interestPostingPeriodType
| find: currentAccountProductTemplate?.interestPostingPeriodTypeOptions : 'id' : 'value'
| translateKey: 'catalogs'
}}</span>
</div>
<div class="preview-field">
<span class="preview-label">Auto Interest Post</span>
<span class="preview-value preview-badge" [class.preview-badge--yes]="termPreview?.autoPost">
{{ termPreview?.autoPost | yesNo }}
</span>
</div>
@if (termPreview?.frequencyFixDay !== undefined && termPreview?.frequencyFixDay !== null) {
<div class="preview-field">
<span class="preview-label">Frequency Fix Day</span>
<span class="preview-value">{{ termPreview?.frequencyFixDay }} Days</span>
</div>
}
@if (termPreview?.lastInterestDate) {
<div class="preview-field">
<span class="preview-label">Last Interest Date</span>
<span class="preview-value">{{ termPreview?.lastInterestDate | dateFormat }}</span>
</div>
}
</div>
</div>
</div>
<!-- Settings -->
<div class="preview-section">
<div class="preview-section__header">
<span class="preview-section__title">{{ 'labels.heading.Settings' | translate }}</span>
</div>
<div class="preview-body">
<div class="preview-grid preview-grid--three">
@if (
settingsPreview?.minRequiredOpeningBalance !== undefined &&
settingsPreview?.minRequiredOpeningBalance !== null &&
settingsPreview?.minRequiredOpeningBalance !== ''
) {
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Minimum Opening Balance' | translate }}</span>
<span class="preview-value">{{ settingsPreview?.minRequiredOpeningBalance | formatNumber }}</span>
</div>
}
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Enforce Minimum Balance' | translate }}</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="settingsPreview?.enforceMinRequiredBalance"
>
{{ settingsPreview?.enforceMinRequiredBalance | yesNo }}
</span>
</div>
@if (
settingsPreview?.minRequiredBalance !== undefined &&
settingsPreview?.minRequiredBalance !== null &&
settingsPreview?.minRequiredBalance !== ''
) {
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Minimum Balance' | translate }}</span>
<span class="preview-value">{{ settingsPreview?.minRequiredBalance | formatNumber }}</span>
</div>
}
<div class="preview-field">
<span class="preview-label">Balance Frequency</span>
<span class="preview-value">{{ settingsPreview?.balanceFrequency || 'Unassigned' }}</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Apply Withdrawal Fee for Transfers' | translate }}</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="settingsPreview?.withdrawalFeeForTransfers"
>
{{ settingsPreview?.withdrawalFeeForTransfers | yesNo }}
</span>
</div>
<div class="preview-field">
<span class="preview-label">Enable Lock-in Period</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="settingsPreview?.enableLockinPeriod || !!settingsPreview?.lockinPeriodFrequency"
>
{{ settingsPreview?.enableLockinPeriod || !!settingsPreview?.lockinPeriodFrequency | yesNo }}
</span>
</div>
@if (settingsPreview?.lockinPeriodFrequency) {
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Lock-in Period' | translate }}</span>
<span class="preview-value">
{{ settingsPreview?.lockinPeriodFrequency }}
{{
settingsPreview?.lockinPeriodFrequencyType
| find: currentAccountProductTemplate?.lockinPeriodFrequencyTypeOptions : 'id' : 'value'
| translateKey: 'catalogs'
}}
</span>
</div>
}
<div class="preview-field">
<span class="preview-label">Account Closed Zero Balance In Day Closing</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="settingsPreview?.accountClosedZeroBalanceInDayClosing"
>
{{ settingsPreview?.accountClosedZeroBalanceInDayClosing | yesNo }}
</span>
</div>
<div class="preview-field">
<span class="preview-label">{{ 'labels.inputs.Is Overdraft Allowed' | translate }}</span>
<span class="preview-value preview-badge" [class.preview-badge--yes]="settingsPreview?.allowOverdraft">
{{ settingsPreview?.allowOverdraft | yesNo }}
</span>
</div>
@if (settingsPreview?.allowOverdraft) {
<div class="preview-field">
<span class="preview-label">Avg Balance Calc Period</span>
<span class="preview-value">{{ settingsPreview?.avgBalanceCalcPeriod || 'Unassigned' }}</span>
</div>
<div class="preview-field">
<span class="preview-label">Valid For Period</span>
<span class="preview-value">{{ settingsPreview?.validForPeriod || 'Unassigned' }}</span>
</div>
@if (
settingsPreview?.overdraftLimit !== undefined &&
settingsPreview?.overdraftLimit !== null &&
settingsPreview?.overdraftLimit !== ''
) {
<div class="preview-field">
<span class="preview-label">OD Limit %</span>
<span class="preview-value">{{ settingsPreview?.overdraftLimit | formatNumber }}</span>
</div>
}
@if (
settingsPreview?.nominalAnnualInterestRateOverdraft !== undefined &&
settingsPreview?.nominalAnnualInterestRateOverdraft !== null &&
settingsPreview?.nominalAnnualInterestRateOverdraft !== ''
) {
<div class="preview-field">
<span class="preview-label">Interest on OD %</span>
<span class="preview-value">{{
settingsPreview?.nominalAnnualInterestRateOverdraft | formatNumber
}}</span>
</div>
}
<div class="preview-field">
<span class="preview-label">OD Account Closed Zero Balance In Day Closing</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="settingsPreview?.odAccountClosedZeroBalanceInDayClosing"
>
{{ settingsPreview?.odAccountClosedZeroBalanceInDayClosing | yesNo }}
</span>
</div>
}
</div>
</div>
</div>
@if (hasDigitalSection) {
<div class="preview-section">
<div class="preview-section__header">
<span class="preview-section__title">Digital</span>
</div>
<div class="preview-body">
<div class="preview-grid preview-grid--three">
@for (facility of digitalFacilityLabels; track facility.key) {
<div class="preview-field">
<span class="preview-label">{{ facility.label }}</span>
<span
class="preview-value preview-badge"
[class.preview-badge--yes]="digitalPreview?.accountFacilityConfig?.[facility.key]"
>
{{ digitalPreview?.accountFacilityConfig?.[facility.key] | yesNo }}
</span>
</div>
}
</div>
@if (digitalPreview?.accountFacilityLimits?.length) {
<table class="mat-elevation-z1 preview-table">
<thead>
<tr>
<th>Limit Type</th>
<th>General Limit</th>
<th>Minor Account Limit</th>
<th>Small Saving Limit</th>
</tr>
</thead>
<tbody>
@for (row of digitalPreview.accountFacilityLimits; track row.limitType) {
<tr>
<td>{{ row.limitType }}</td>
<td>{{ row.generalLimit || 'Unassigned' }}</td>
<td>{{ row.minorAccountLimit || 'Unassigned' }}</td>
<td>{{ row.smallSavingLimit || 'Unassigned' }}</td>
</tr>
}
</tbody>
</table>
}
@if (digitalPreview?.depositLimitKyc?.general) {
<table class="mat-elevation-z1 preview-table">
<thead>
<tr>
<th>Account Type</th>
<th>KYC Type</th>
<th>Limit</th>
</tr>
</thead>
<tbody>
<tr>
<td>General</td>
<td>{{ digitalPreview.depositLimitKyc.general.kycType || 'Unassigned' }}</td>
<td>{{ digitalPreview.depositLimitKyc.general.limit || 'Unassigned' }}</td>
</tr>
<tr>
<td>Minor</td>
<td>{{ digitalPreview.depositLimitKyc.minor?.kycType || 'Unassigned' }}</td>
<td>{{ digitalPreview.depositLimitKyc.minor?.limit || 'Unassigned' }}</td>
</tr>
<tr>
<td>Small Saving</td>
<td>{{ digitalPreview.depositLimitKyc.smallSaving?.kycType || 'Unassigned' }}</td>
<td>{{ digitalPreview.depositLimitKyc.smallSaving?.limit || 'Unassigned' }}</td>
</tr>
</tbody>
</table>
}
</div>
</div>
}
<!-- Charges -->
@if (currentAccount?.charges?.length) {
<div class="preview-section">
<div class="preview-section__header">
<span class="preview-section__title">{{ 'labels.inputs.Charges' | translate }}</span>
</div>
<div class="preview-body">
<table class="mat-elevation-z1 preview-table" mat-table [dataSource]="currentAccount.charges">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.name + ', ' + charge.currency?.displaySymbol }}</td>
</ng-container>
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType?.value | translateKey: 'catalogs' }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.amount | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Collected On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType?.value }}</td>
</ng-container>
<ng-container matColumnDef="date">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell *matCellDef="let charge">
@if (
charge.chargeTimeType?.value === 'Specified due date' || charge.chargeTimeType?.value === 'Weekly Fee'
) {
<span>{{ (charge.dueDate | dateFormat) || 'Unassigned' }}</span>
} @else if (
charge.chargeTimeType?.value === 'Monthly Fee' || charge.chargeTimeType?.value === 'Annual Fee'
) {
<span>{{ (charge.feeOnMonthDay | dateFormat) || 'Unassigned' }}</span>
} @else {
<span>N/A</span>
}
</td>
</ng-container>
<ng-container matColumnDef="repaymentsEvery">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Repayments Every' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.feeInterval || 'Not Provided' }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="chargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns"></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>