Charges with translations

This commit is contained in:
Jose Alberto Hernandez
2024-04-27 17:39:40 -06:00
committed by Jose Alberto Hernandez
parent 8ac82cc6a6
commit b380f7f630
56 changed files with 2139 additions and 415 deletions
@@ -27,17 +27,17 @@
<ng-container matColumnDef="chargeAppliesTo">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Applies To" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeAppliesTo.value }} </td>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeAppliesTo.value | translateCatalog }} </td>
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Time" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value | translateCatalog }} </td>
</ng-container>
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Calculation" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </td>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value | translateCatalog }} </td>
</ng-container>
<ng-container matColumnDef="amount">
@@ -13,7 +13,7 @@
<mat-select required formControlName="chargeAppliesTo">
<mat-option *ngFor="let chargeAppliesTo of chargesTemplateData.chargeAppliesToOptions"
[value]="chargeAppliesTo.id">
{{ chargeAppliesTo.value }}
{{ chargeAppliesTo.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargeAppliesTo.hasError('required')">
@@ -50,7 +50,7 @@
<mat-label>{{"labels.inputs.Charge Time Type" | translate}}</mat-label>
<mat-select required formControlName="chargeTimeType">
<mat-option *ngFor="let chargeTimeType of chargeTimeTypeData" [value]="chargeTimeType.id">
{{ chargeTimeType.value }}
{{ chargeTimeType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargeTimeType.hasError('required')">
@@ -63,7 +63,7 @@
<mat-select required formControlName="chargeCalculationType">
<mat-option *ngFor="let chargeCalculationType of filteredChargeCalculationType()"
[value]="chargeCalculationType.id">
{{ chargeCalculationType.value }}
{{ chargeCalculationType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargeCalculationType.hasError('required')">
@@ -76,7 +76,7 @@
<mat-select required formControlName="chargePaymentMode">
<mat-option *ngFor="let chargePaymentMode of chargesTemplateData.chargePaymetModeOptions"
[value]="chargePaymentMode.id">
{{ chargePaymentMode.value }}
{{ chargePaymentMode.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargePaymentMode.hasError('required')">
@@ -110,7 +110,7 @@
<mat-select required formControlName="feeFrequency">
<mat-option *ngFor="let feeFrequency of chargesTemplateData.feeFrequencyOptions"
[value]="feeFrequency.id">
{{ feeFrequency.value }}
{{ feeFrequency.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.feeFrequency.hasError('required')">
@@ -13,7 +13,7 @@
<mat-select required formControlName="chargeAppliesTo">
<mat-option *ngFor="let chargeAppliesTo of chargeData.chargeAppliesToOptions"
[value]="chargeAppliesTo.id">
{{ chargeAppliesTo.value }}
{{ chargeAppliesTo.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -47,7 +47,7 @@
<mat-label>{{"labels.inputs.Charge Time Type" | translate}}</mat-label>
<mat-select required formControlName="chargeTimeType">
<mat-option *ngFor="let chargeTime of chargeTimeTypeOptions" [value]="chargeTime.id">
{{ chargeTime.value }}
{{ chargeTime.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargeTimeType.hasError('required')">
@@ -60,7 +60,7 @@
<mat-label>{{"labels.inputs.Charge Calculation" | translate}}</mat-label>
<mat-select required formControlName="chargeCalculationType">
<mat-option *ngFor="let chargeCalculation of chargeCalculationTypeOptions" [value]="chargeCalculation.id">
{{ chargeCalculation.value }}
{{ chargeCalculation.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargeCalculationType.hasError('required')">
@@ -73,7 +73,7 @@
<mat-select required formControlName="chargePaymentMode">
<mat-option *ngFor="let chargePaymentMode of chargeData.chargePaymetModeOptions"
[value]="chargePaymentMode.id">
{{ chargePaymentMode.value }}
{{ chargePaymentMode.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.chargePaymentMode.hasError('required')">
@@ -152,7 +152,7 @@
<mat-label>{{"labels.inputs.Charge Frequency" | translate}}</mat-label>
<mat-select required formControlName="feeFrequency">
<mat-option *ngFor="let chargeFrequency of chargeData.feeFrequencyOptions" [value]="chargeFrequency.id">
{{ chargeFrequency.value }}
{{ chargeFrequency.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeForm.controls.feeFrequency.hasError('required')">
@@ -26,11 +26,19 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Charge Type" | translate}}
{{"labels.inputs.Charge Applies To" | translate}}
</div>
<div fxFlex="50%">
{{ chargeData.penalty === true ? 'Penalty' : 'Charge' }}
{{ chargeData.chargeAppliesTo.value | translateCatalog }}
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Penalty" | translate}}
</div>
<div fxFlex="50%">
{{ chargeData.penalty === true | yesNo }}
</div>
<div fxFlex="50%" class="mat-body-strong">
@@ -46,7 +54,7 @@
</div>
<div fxFlex="50%">
{{ chargeData.amount }}
{{ chargeData.amount | formatNumber }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="minCap">
@@ -70,15 +78,7 @@
</div>
<div fxFlex="50%">
{{ chargeData.chargeTimeType.value }}
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Charge Applies To" | translate}}
</div>
<div fxFlex="50%">
{{ chargeData.chargeAppliesTo.value }}
{{ chargeData.chargeTimeType.value | translateCatalog }}
</div>
<div fxFlex="50%" class="mat-body-strong">
@@ -86,7 +86,7 @@
</div>
<div fxFlex="50%">
{{ chargeData.chargeCalculationType.value }}
{{ chargeData.chargeCalculationType.value | translateCatalog }}
</div>
<div fxFlex="50%" class="mat-body-strong">
@@ -94,7 +94,7 @@
</div>
<div fxFlex="50%">
{{ chargeData.chargePaymentMode.value }}
{{ chargeData.chargePaymentMode.value | translateCatalog }}
</div>
<div fxFlex="50%" class="mat-body-strong">
@@ -111,7 +111,7 @@
<div fxFlex="50%"
*ngIf="chargeData.chargeTimeType.id == 9 && chargeData.feeFrequency && chargeData.feeFrequency">
{{ chargeData.feeFrequency.value }}
{{ chargeData.feeFrequency.value | translateCatalog }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="chargeData.chargeTimeType.id == 9 && chargeData.feeInterval">
@@ -1,79 +1,79 @@
<div class="tab-container mat-typography" *ngIf="loanProduct">
<h3 class="mat-h3" fxFlexFill>Details</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Details' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Name:</span>
<span fxFlex="47%">{{ 'labels.inputs.Name' | translate}}:</span>
<span fxFlex="53%"><b>{{ loanProduct.name }}</b></span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Short Name:</span>
<span fxFlex="47%">{{ 'labels.inputs.Short Name' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.shortName }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.fundId">
<span fxFlex="47%">Fund Name:</span>
<span fxFlex="47%">{{ 'labels.inputs.Fund Name' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.fundName }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Include in Customer Loan Counter:</span>
<span fxFlex="47%">{{ 'labels.inputs.Include in Customer Loan Counter' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.includeInBorrowerCycle | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.startDate">
<span fxFlex="47%">Start Date:</span>
<span fxFlex="47%">{{ 'labels.inputs.Start Date' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.startDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.closeDate">
<span fxFlex="47%">Close Date:</span>
<span fxFlex="47%">{{ 'labels.inputs.Close Date' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.closeDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.description">
<span fxFlex="47%">Description:</span>
<span fxFlex="47%">{{ 'labels.inputs.Description' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.description }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Currency</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Currency' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Currency:</span>
<span fxFlex="47%">{{ 'labels.inputs.Currency' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.currency.code }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Currency:</span>
<span fxFlex="47%">{{ 'labels.inputs.Currency' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.currency.displayLabel }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Decimal Places:</span>
<span fxFlex="47%">{{ 'labels.inputs.Decimal Places' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.currency.decimalPlaces }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Currency in multiples of:</span>
<span fxFlex="47%">{{ 'labels.inputs.Currency in multiples of' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.currency.inMultiplesOf }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Installment in multiples of:</span>
<span fxFlex="47%">{{ 'labels.inputs.Installment in multiples of' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.installmentAmountInMultiplesOf }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Terms</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Terms' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Principal:</span>
<span fxFlex="47%">{{ 'labels.inputs.Principal' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.principal | formatNumber }}
(Min {{ (loanProduct.minPrincipal ? loanProduct.minPrincipal : loanProduct.principal) | formatNumber }}
: Max {{ (loanProduct.maxPrincipal ? loanProduct.maxPrincipal : loanProduct.principal) | formatNumber }})
@@ -81,27 +81,26 @@
</div>
<div fxFlexFill>
<span fxFlex="47%">Allow Approved / Disbursed Amounts Over Applied:</span>
<span fxFlex="47%">{{ 'labels.inputs.Allow Approved / Disbursed Amounts Over Applied' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.allowApprovedDisbursedAmountsOverApplied | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.allowApprovedDisbursedAmountsOverApplied">
<span fxFlex="47%">Over Applied Amount:</span>
<span fxFlex="47%">{{ 'labels.inputs.Over Applied Amount' | translate}}:</span>
<span fxFlex="53%" *ngIf="loanProduct.overAppliedCalculationType === 'percentage'">{{ loanProduct.overAppliedNumber
| formatNumber
| formatNumber:0
}} %</span>
<span fxFlex="53%" *ngIf="loanProduct.overAppliedCalculationType === 'flat'">{{ loanProduct.overAppliedNumber |
formatNumber }} {{
loanProduct.currencyCode }}</span>
formatNumber }} {{ loanProduct.currencyCode }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Installment day calculation from:</span>
<span fxFlex="53%">{{ loanProduct.repaymentStartDateType?.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Installment day calculation from' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.repaymentStartDateType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Number of Repayments:</span>
<span fxFlex="47%">{{ 'labels.inputs.Number of Repayments' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.numberOfRepayments + ' (Min: ' + (loanProduct.minNumberOfRepayments ?
loanProduct.minNumberOfRepayments : loanProduct.numberOfRepayments) + ', Max: ' +
(loanProduct.maxNumberOfRepayments ? loanProduct.maxNumberOfRepayments : loanProduct.numberOfRepayments) + ')'
@@ -109,26 +108,26 @@
</div>
<div fxFlexFill>
<span fxFlex="47%">Linked to floating interest rates:</span>
<span fxFlex="47%">{{ 'labels.inputs.Linked to floating interest rates' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.isLinkedToFloatingInterestRates | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="!loanProduct.isLinkedToFloatingInterestRates">
<span fxFlex="47%">Nominal interest rate:</span>
<span fxFlex="47%">{{ 'labels.inputs.Nominal interest rate' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRatePerPeriod + ' (Min: ' + (loanProduct.minInterestRatePerPeriod ?
loanProduct.minInterestRatePerPeriod : loanProduct.interestRatePerPeriod) + ', Max: ' +
(loanProduct.maxInterestRatePerPeriod ? loanProduct.maxInterestRatePerPeriod : loanProduct.interestRatePerPeriod)
+ ')' + ' ' + loanProduct.interestRateFrequencyType?.value }}</span>
+ ')'}} {{ loanProduct.interestRateFrequencyType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.isLinkedToFloatingInterestRates" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Floating Lending Interest Rate:</span>
<span fxFlex="47%">{{ 'labels.inputs.Floating Lending Interest Rate' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.floatingRateName }}</span>
<span fxFlex="47%">Interest Rate Differential:</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest Rate Differential' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRateDifferential }}</span>
<span fxFlex="47%">Floating Interest Rate Calculation Allowed:</span>
<span fxFlex="47%">{{ 'labels.inputs.Floating Interest Rate Calculation Allowed' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.isFloatingInterestRateCalculationAllowed | yesNo }}</span>
<span fxFlex="47%">Floating Interest Rate:</span>
<span fxFlex="47%">{{ 'labels.inputs.Floating Interest Rate' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.defaultDifferentialLendingRate + ' (Min: ' +
(loanProduct.minDifferentialLendingRate ? loanProduct.minDifferentialLendingRate :
loanProduct.defaultDifferentialLendingRate) + ', Max: ' + (loanProduct.maxDifferentialLendingRate ?
@@ -136,48 +135,48 @@
</div>
<div fxFlexFill>
<span fxFlex="47%">Terms vary based on loan cycle:</span>
<span fxFlex="47%">{{ 'labels.inputs.Terms vary based on loan cycle' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.useBorrowerCycle | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.principalVariationsForBorrowerCycle?.length">
<h4 class="mat-h4" fxFlexFill>Principal by loan cycle</h4>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.inputs.Principal by loan cycle' | translate}}</h4>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="loanProduct.principalVariationsForBorrowerCycle">
<ng-container matColumnDef="valueConditionType">
<th mat-header-cell *matHeaderCellDef> Condition </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Condition' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.valueConditionType.value }}
{{ variation.valueConditionType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="borrowerCycleNumber">
<th mat-header-cell *matHeaderCellDef> Loan Cycle </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Loan Cycle' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.borrowerCycleNumber }}
</td>
</ng-container>
<ng-container matColumnDef="minValue">
<th mat-header-cell *matHeaderCellDef> Minimum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Minimum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.minValue }}
{{ variation.minValue | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="defaultValue">
<th mat-header-cell *matHeaderCellDef> Default </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Default' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.defaultValue }}
{{ variation.defaultValue | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="maxValue">
<th mat-header-cell *matHeaderCellDef> Maximum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Maximum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.maxValue }}
{{ variation.maxValue | formatNumber }}
</td>
</ng-container>
@@ -190,41 +189,41 @@
<div fxFlexFill *ngIf="loanProduct.numberOfRepaymentVariationsForBorrowerCycle?.length">
<h4 class="mat-h4" fxFlexFill>Number of Repayments by loan cycle</h4>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.inputs.Number of Repayments by loan cycle' | translate}}</h4>
<table fxFlexFill class="mat-elevation-z1" mat-table
[dataSource]="loanProduct.numberOfRepaymentVariationsForBorrowerCycle">
<ng-container matColumnDef="valueConditionType">
<th mat-header-cell *matHeaderCellDef> Condition </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Condition' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.valueConditionType.value }}
{{ variation.valueConditionType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="borrowerCycleNumber">
<th mat-header-cell *matHeaderCellDef> Loan Cycle </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Loan Cycle' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.borrowerCycleNumber }}
</td>
</ng-container>
<ng-container matColumnDef="minValue">
<th mat-header-cell *matHeaderCellDef> Minimum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Minimum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.minValue }}
</td>
</ng-container>
<ng-container matColumnDef="defaultValue">
<th mat-header-cell *matHeaderCellDef> Default </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Default' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.defaultValue }}
</td>
</ng-container>
<ng-container matColumnDef="maxValue">
<th mat-header-cell *matHeaderCellDef> Maximum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Maximum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.maxValue }}
</td>
@@ -239,41 +238,41 @@
<div fxFlexFill *ngIf="loanProduct.interestRateVariationsForBorrowerCycle?.length">
<h4 class="mat-h4" fxFlexFill>Nominal Interest Rate by loan cycle</h4>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.inputs.Nominal Interest Rate by loan cycle' | translate}}</h4>
<table fxFlexFill class="mat-elevation-z1" mat-table
[dataSource]="loanProduct.interestRateVariationsForBorrowerCycle">
<ng-container matColumnDef="valueConditionType">
<th mat-header-cell *matHeaderCellDef> Condition </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Condition' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.valueConditionType.value }}
{{ variation.valueConditionType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="borrowerCycleNumber">
<th mat-header-cell *matHeaderCellDef> Loan Cycle </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Loan Cycle' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.borrowerCycleNumber }}
</td>
</ng-container>
<ng-container matColumnDef="minValue">
<th mat-header-cell *matHeaderCellDef> Minimum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Minimum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.minValue }}
</td>
</ng-container>
<ng-container matColumnDef="defaultValue">
<th mat-header-cell *matHeaderCellDef> Default </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Default' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.defaultValue }}
</td>
</ng-container>
<ng-container matColumnDef="maxValue">
<th mat-header-cell *matHeaderCellDef> Maximum </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Maximum' | translate}} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.maxValue }}
</td>
@@ -287,70 +286,70 @@
</div>
<div fxFlexFill>
<span fxFlex="47%">Repay Every:</span>
<span fxFlex="53%">{{ loanProduct.repaymentEvery + ' ' + loanProduct.repaymentFrequencyType.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Repay Every' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.repaymentEvery }} {{ loanProduct.repaymentFrequencyType.value | translateCatalog }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.fixedLength">
<span fxFlex="47%">Fixed Length:</span>
<span fxFlex="53%">{{ loanProduct.fixedLength + ' ' + loanProduct.repaymentFrequencyType.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Fixed Length' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.fixedLength }} {{ loanProduct.repaymentFrequencyType.value | translateCatalog }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.minimumDaysBetweenDisbursalAndFirstRepayment">
<span fxFlex="47%">Minimum days between disbursal and first repayment date:</span>
<span fxFlex="53%">{{ loanProduct.minimumDaysBetweenDisbursalAndFirstRepayment }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Minimum days between disbursal and first repayment date' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.minimumDaysBetweenDisbursalAndFirstRepayment | formatNumber }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Settings</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Settings' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill *ngIf="loanProduct.amortizationType?.value">
<span fxFlex="47%">Amortization:</span>
<span fxFlex="53%">{{ loanProduct.amortizationType.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Amortization' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.amortizationType.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Is Equal Amortization:</span>
<span fxFlex="47%">{{ 'labels.inputs.Is Equal Amortization' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.isEqualAmortization | yesNo }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Interest Method:</span>
<span fxFlex="53%">{{ loanProduct.interestType?.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest Method' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Interest Calculation Period:</span>
<span fxFlex="53%">{{ loanProduct.interestCalculationPeriodType?.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest Calculation Period' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestCalculationPeriodType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.allowPartialPeriodInterestCalculation">
<span fxFlex="47%">Allow Partial Interest Calculation with same as repayment:</span>
<span fxFlex="47%">{{ 'labels.inputs.Allow Partial Interest Calculation with same as repayment' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.allowPartialPeriodInterestCalculation | yesNo }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Loan Schedule</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Loan Schedule' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Loan Schedule Type:</span>
<span fxFlex="53%">{{ loanProduct.loanScheduleType.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Loan Schedule Type' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.loanScheduleType.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Repayment Strategy:</span>
<span fxFlex="47%">{{ 'labels.inputs.Repayment Strategy' | translate}}:</span>
<span fxFlex="53%" class="repayment-strategy">{{ loanProduct.transactionProcessingStrategyName }}</span>
</div>
<div fxFlexFill *ngIf="isAdvancedPaymentAllocation">
<span fxFlex="47%">Loan Schedule Processing Type:</span>
<span fxFlex="47%">{{ 'labels.inputs.Loan Schedule Processing Type' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.loanScheduleProcessingType.value }}</span>
</div>
<div fxFlexFill *ngIf="isAdvancedPaymentAllocation">
<span fxFlex="47%">Advanced Payment Allocation Transactions:</span>
<span fxFlex="47%">{{ 'labels.inputs.Advanced Payment Allocation Transactions' | translate}}:</span>
<span fxFlex="53%">
<mat-accordion>
<mifosx-view-advance-paymeny-allocation *ngFor="let paymentAllocation of paymentAllocations"
@@ -362,7 +361,7 @@
</div>
<div fxFlexFill *ngIf="isAdvancedPaymentAllocation && creditAllocations.length > 0">
<span fxFlex="47%">Advanced Credit Allocation Transactions:</span>
<span fxFlex="47%">{{ 'labels.inputs.Advanced Credit Allocation Transactions' | translate}}:</span>
<span fxFlex="53%">
<mat-accordion>
<mifosx-view-advance-paymeny-allocation *ngFor="let creditAllocation of creditAllocations"
@@ -373,133 +372,133 @@
</span>
</div>
<h3 class="mat-h3" fxFlexFill>Down Payments</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Down Payments' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Enable Down Payments:</span>
<span fxFlex="47%">{{ 'labels.inputs.Enable Down Payments' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.enableDownPayment | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.enableDownPayment" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Disbursed Amount Percentage Down Payment (%):</span>
<span fxFlex="47%">{{ 'labels.inputs.Disbursed Amount Percentage Down Payment' | translate}} (%):</span>
<span fxFlex="53%">{{ loanProduct.disbursedAmountPercentageForDownPayment }} %</span>
</div>
<div fxFlexFill *ngIf="loanProduct.enableDownPayment" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Enable Auto Repayment for Down Payment:</span>
<span fxFlex="47%">{{ 'labels.inputs.Enable Auto Repayment for Down Payment' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.enableAutoRepaymentForDownPayment | yesNo }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Moratorium</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Moratorium' | translate}}</h3>
<div fxFlexFill *ngIf="loanProduct.delinquencyBucket">
<span fxFlex="47%">Delinquency Bucket:</span>
<span fxFlex="47%">{{ 'labels.inputs.Delinquency Bucket' | translate}}:</span>
<span fxFlex="53%" *ngIf="loanProduct.delinquencyBucket.name">{{ loanProduct.delinquencyBucket.name }}</span>
<span fxFlex="53%" *ngIf="!loanProduct.delinquencyBucket.name">{{ 'labels.inputs.Unassigned' | translate }}</span>
</div>
<div fxFlexFill *ngIf="!loanProduct.delinquencyBucket">
<span fxFlex="47%">Delinquency Bucket:</span>
<span fxFlex="47%">{{ 'labels.inputs.Delinquency Bucket' | translate}}:</span>
<span fxFlex="53%">{{ 'labels.inputs.Unassigned' | translate }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Enable installment level Delinquency:</span>
<span fxFlex="47%">{{ 'labels.inputs.Enable installment level Delinquency' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.enableInstallmentLevelDelinquency | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.graceOnPrincipalPayment">
<span fxFlex="47%">Grace on principal payment:</span>
<span fxFlex="47%">{{ 'labels.inputs.Grace on principal payment' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.graceOnPrincipalPayment }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.graceOnInterestPayment">
<span fxFlex="47%">Grace on interest payment:</span>
<span fxFlex="47%">{{ 'labels.inputs.Grace on interest payment' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.graceOnInterestPayment }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.graceOnInterestCharged">
<span fxFlex="47%">Interest free period:</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest free period' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.graceOnInterestCharged }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.inArrearsTolerance">
<span fxFlex="47%">Arrears tolerance:</span>
<span fxFlex="47%">{{ 'labels.inputs.Arrears tolerance' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.inArrearsTolerance }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Days in year:</span>
<span fxFlex="53%">{{ loanProduct.daysInYearType?.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Days in year' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.daysInYearType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Days in month:</span>
<span fxFlex="53%">{{ loanProduct.daysInMonthType?.value }}</span>
<span fxFlex="47%">{{ 'labels.inputs.Days in month' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.daysInMonthType?.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Allow fixing of the installment amount:</span>
<span fxFlex="47%">{{ 'labels.inputs.Allow fixing of the installment amount' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.canDefineInstallmentAmount | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.graceOnArrearsAgeing">
<span fxFlex="47%">Number of days a loan may be overdue before moving into arrears:</span>
<span fxFlex="47%">{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.graceOnArrearsAgeing }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.overdueDaysForNPA">
<span fxFlex="47%">Maximum number of days a loan may be overdue before becoming a NPA (non performing asset):</span>
<span fxFlex="47%">{{ 'labels.inputs.Maximum number of days a loan may be overdue before becoming a NPA (non performing asset)' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.overdueDaysForNPA }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Account moves out of NPA only after all arrears have been cleared:</span>
<span fxFlex="47%">{{ 'labels.inputs.Account moves out of NPA only after all arrears have been cleared' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.accountMovesOutOfNPAOnlyOnArrearsCompletion | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.principalThresholdForLastInstallment">
<span fxFlex="47%">Principal Threshold (%) for Last Instalment:</span>
<span fxFlex="47%">{{ 'labels.inputs.Principal Threshold (%) for Last Instalment' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.principalThresholdForLastInstallment }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Variable Installments allowed:</span>
<span fxFlex="47%">{{ 'labels.inputs.Variable Installments allowed' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.allowVariableInstallments | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.allowVariableInstallments">
<span fxFlex="47%">Variable Installments:</span>
<span fxFlex="47%">{{ 'labels.inputs.Variable Installments' | translate}}:</span>
<span fxFlex="53%">{{ '(Min: ' + loanProduct.minimumGap + ', Max: ' + (loanProduct.maximumGap ?
loanProduct.maximumGap : loanProduct.minimumGap) + ')' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Allowed to be used for providing Topup Loans:</span>
<span fxFlex="47%">{{ 'labels.inputs.Allowed to be used for providing Topup Loans' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.canUseForTopup | yesNo }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Interest Recalculation</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Interest Recalculation' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Recalculate Interest:</span>
<span fxFlex="47%">{{ 'labels.inputs.Recalculate Interest' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.isInterestRecalculationEnabled | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.isInterestRecalculationEnabled" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Pre-closure interest calculation rule:</span>
<span fxFlex="47%">{{ 'labels.inputs.Pre-closure interest calculation rule' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRecalculationData.preClosureInterestCalculationStrategy.value }}</span>
<span fxFlex="47%">Advance payments adjustment type:</span>
<span fxFlex="47%">{{ 'labels.inputs.Advance payments adjustment type' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRecalculationData.rescheduleStrategyType.value }}</span>
<span fxFlex="47%">Interest recalculation compounding on:</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest recalculation compounding on' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRecalculationData.interestRecalculationCompoundingType.value }}</span>
<div fxFlexFill *ngIf="loanProduct.interestRecalculationData.interestRecalculationCompoundingType.id !== 0"
fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Frequency for compounding:</span>
<span fxFlex="47%">{{ 'labels.inputs.Frequency for compounding' | translate}}:</span>
<span fxFlex="53%">
{{ loanProduct.interestRecalculationData.recalculationCompoundingFrequencyType.value }}
<span
@@ -514,12 +513,12 @@
</span>
<div fxFlexFill *ngIf="loanProduct.interestRecalculationData.recalculationCompoundingFrequencyType.id !== 1"
fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Frequency Interval for compounding:</span>
<span fxFlex="47%">{{ 'labels.inputs.Frequency Interval for compounding' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRecalculationData.recalculationCompoundingFrequencyInterval }}</span>
</div>
</div>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Frequency for recalculate Outstanding Principal:</span>
<span fxFlex="47%">{{ 'labels.inputs.Frequency for recalculate Outstanding Principal' | translate}}:</span>
<span fxFlex="53%">
{{ loanProduct.interestRecalculationData.recalculationRestFrequencyType.value }}
<span
@@ -535,7 +534,7 @@
</div>
<div fxFlexFill *ngIf="loanProduct.interestRecalculationData.recalculationRestFrequencyType.id !== 1"
fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Frequency Interval for recalculation:</span>
<span fxFlex="47%">{{ 'labels.inputs.Frequency Interval for recalculation' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.interestRecalculationData.recalculationRestFrequencyInterval }}</span>
<div fxFlexFill *ngIf="loanProduct.recalculationRestFrequencyDate">
<span fxFlex="47%">Rest Frequency Date:</span>
@@ -543,103 +542,103 @@
</div>
</div>
<div fxFlexFill>
<span fxFlex="47%">Is Arrears recognization based on original schedule:</span>
<span fxFlex="47%">{{ 'labels.inputs.Is Arrears recognization based on original schedule' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.isArrearsBasedOnOriginalSchedule | yesNo }}</span>
</div>
</div>
<h3 class="mat-h3" fxFlexFill>Guarantee Requirements</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Guarantee Requirements' | translate}}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Place Guarantee Funds On-Hold:</span>
<span fxFlex="47%">{{ 'labels.inputs.Place Guarantee Funds On-Hold' | translate}}:</span>
<span fxFlex="53%">{{ loanProduct.holdGuaranteeFunds | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.holdGuaranteeFunds" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Mandatory Guarantee(%):</span>
<span fxFlex="47%">{{ 'labels.inputs.Mandatory Guarantee' | translate}} (%):</span>
<span fxFlex="53%">{{ loanProduct.productGuaranteeData.mandatoryGuarantee }}</span>
<div fxFlexFill *ngIf="loanProduct.productGuaranteeData.minimumGuaranteeFromOwnFunds">
<span fxFlex="47%">Minimum Guarantee from Own Funds(%):</span>
<span fxFlex="47%">{{ 'labels.inputs.Minimum Guarantee from Own Funds' | translate}} (%):</span>
<span fxFlex="53%">{{ loanProduct.productGuaranteeData.minimumGuaranteeFromOwnFunds }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.productGuaranteeData.minimumGuaranteeFromGuarantor">
<span fxFlex="47%">Minimum Guarantee from Guarantor Funds(%):</span>
<span fxFlex="47%">{{ 'labels.inputs.Minimum Guarantee from Guarantor Funds' | translate}} (%):</span>
<span fxFlex="53%">{{ loanProduct.productGuaranteeData.minimumGuaranteeFromGuarantor }}</span>
</div>
</div>
<h3 class="mat-h3" fxFlexFill>Loan Tranche Details</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Loan Tranche Details' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Enable Multiple Disbursals:</span>
<span fxFlex="47%">{{ 'labels.inputs.Enable Multiple Disbursals' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.multiDisburseLoan | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.multiDisburseLoan" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Maximum Tranche count:</span>
<span fxFlex="47%">{{ 'labels.inputs.Maximum Tranche count' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.maxTrancheCount }}</span>
<div fxFlexFill *ngIf="loanProduct.outstandingLoanBalance">
<span fxFlex="47%">Maximum allowed outstanding balance:</span>
<span fxFlex="47%">{{ 'labels.inputs.Maximum allowed outstanding balance' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.outstandingLoanBalance }}</span>
</div>
<div fxFlexFill>
<span fxFlex="47%">Disallow Expected Disbursements:</span>
<span fxFlex="47%">{{ 'labels.inputs.Disallow Expected Disbursements' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.disallowExpectedDisbursements | yesNo }}</span>
</div>
</div>
<h3 class="mat-h3" fxFlexFill>Event Settings</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Event Settings' | translate }}</h3>
<div fxFlexFill>
<span fxFlex="47%">Use the Global Configurations values to the Repayment Event (notifications):</span>
<span fxFlex="47%">{{ 'labels.inputs.Use the Global Configurations values to the Repayment Event (notifications)' | translate }}:</span>
<span fxFlex="53%">{{ useDueForRepaymentsConfigurations | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.dueDaysForRepaymentEvent">
<span fxFlex="47%">Due days for repayment event:</span>
<span fxFlex="47%">{{ 'labels.inputs.Due days for repayment event' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.dueDaysForRepaymentEvent | number }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.overDueDaysForRepaymentEvent">
<span fxFlex="47%">OverDue days for repayment event:</span>
<span fxFlex="47%">{{ 'labels.inputs.OverDue days for repayment event' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.overDueDaysForRepaymentEvent | number }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>Configurable Terms and Settings</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Configurable Terms and Settings' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Allow overriding select terms and settings in loan accounts:</span>
<span fxFlex="47%">{{ 'labels.inputs.Allow overriding select terms and settings in loan accounts' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeConfiguration | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.allowAttributeConfiguration" fxLayout="row wrap" fxLayout.lt-md="column">
<span fxFlex="47%">Amortization:</span>
<span fxFlex="47%">{{ 'labels.inputs.Amortization' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.amortizationType | yesNo }}</span>
<span fxFlex="47%">Interest method:</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest method' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.interestType | yesNo }}</span>
<span fxFlex="47%">Repayment strategy:</span>
<span fxFlex="47%">{{ 'labels.inputs.Repayment strategy' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.transactionProcessingStrategyCode | yesNo }}</span>
<span fxFlex="47%">Interest calculation period:</span>
<span fxFlex="47%">{{ 'labels.inputs.Interest calculation period' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.interestCalculationPeriodType | yesNo }}</span>
<span fxFlex="47%">Arrears tolerance:</span>
<span fxFlex="47%">{{ 'labels.inputs.Arrears tolerance' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.inArrearsTolerance | yesNo }}</span>
<span fxFlex="47%">Repaid every:</span>
<span fxFlex="47%">{{ 'labels.inputs.Repaid every' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.repaymentEvery | yesNo }}</span>
<span fxFlex="47%">Moratorium:</span>
<span fxFlex="47%">{{ 'labels.inputs.Moratorium' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.graceOnPrincipalAndInterestPayment | yesNo }}</span>
<span fxFlex="47%">Number of days a loan may be overdue before moving into arrears:</span>
<span fxFlex="47%">{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate }}:</span>
<span fxFlex="53%">{{ loanProduct.allowAttributeOverrides.graceOnArrearsAgeing | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loanProduct.charges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>Charges</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Charges' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
@@ -647,30 +646,30 @@
[dataSource]="loanProduct.charges | chargesPenaltyFilter:false">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<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> Type </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Charge Type' | translate }} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
{{ charge.chargeCalculationType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> Amount </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Amount' | translate }} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.amount }}
{{ charge.amount | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef> Collected On </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Collected On' | translate }} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeTimeType.value }}
{{ charge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -679,37 +678,37 @@
</table>
<h3 class="mat-h3" fxFlexFill>Overdue Charges</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Overdue Charges' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="loanProduct.charges | chargesPenaltyFilter:true">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Name' | translate }} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.name + ', ' + overdueCharge.currency.displaySymbol }}
</td>
</ng-container>
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> Type </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Charge Type' | translate }} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.chargeCalculationType.value }}
{{ overdueCharge.chargeCalculationType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> Amount </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Amount' | translate }} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.amount }}
{{ overdueCharge.amount | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef> Collected On </th>
<th mat-header-cell *matHeaderCellDef> {{ 'labels.inputs.Collected On' | translate }} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.chargeTimeType.value }}
{{ overdueCharge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -720,19 +719,19 @@
</div>
<h3 class="mat-h3" fxFlexFill>Accounting</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Accounting' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="47%">Type:</span>
<span fxFlex="53%">{{ accountingRuleData[accountingRule() - 1] }}</span>
<span fxFlex="47%">{{'labels.inputs.Type' | translate}}:</span>
<span fxFlex="53%">{{ 'labels.accounting.' + getAccountingRuleName(accountingRuleData[accountingRule() - 1]) | translate }}</span>
</div>
<div fxFlexFill *ngIf="isAccountingEnabled()" fxLayout="row wrap"
fxLayout.lt-md="column">
<h4 fxFlexFill class="mat-h4">Assets / Liabilities</h4>
<h4 fxFlexFill class="mat-h4">{{'labels.heading.Assets' | translate}} / {{'labels.heading.Liabilities' | translate}}</h4>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<mifosx-gl-account-display fxFlex="100%"
@@ -323,4 +323,8 @@ export class LoanProductSummaryComponent implements OnInit, OnChanges {
|| this.loanProduct.penaltyToIncomeAccountMappings?.length > 0);
}
getAccountingRuleName(value: string): string {
return this.accounting.getAccountRuleName(value.toUpperCase());
}
}
@@ -31,21 +31,21 @@
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Type' | translate}} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
{{ charge.chargeCalculationType.value | translateCatalog }}
</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 }}
{{ 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 }}
{{ charge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -100,21 +100,21 @@
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Type' | translate}} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.chargeCalculationType.value }}
{{ overdueCharge.chargeCalculationType.value | translateCatalog }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Amount' | translate}} </th>
<td mat-cell *matCellDef="let overdueCharge">
{{ overdueCharge.amount }}
{{ overdueCharge.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 overdueCharge">
{{ overdueCharge.chargeTimeType.value }}
{{ overdueCharge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -26,7 +26,7 @@
<ng-container matColumnDef="allocationRule">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Payment Allocation Rule' | translate }}</th>
<td mat-cell *matCellDef="let paymentAllocation"> {{ paymentAllocation.value }} </td>
<td mat-cell *matCellDef="let paymentAllocation"> {{ paymentAllocation.value | translateCatalog }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
@@ -52,7 +52,7 @@
<ng-container matColumnDef="allocationRule">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Credit Allocation Rule' | translate }}</th>
<td mat-cell *matCellDef="let creditAllocation"> {{ creditAllocation.value }} </td>
<td mat-cell *matCellDef="let creditAllocation"> {{ creditAllocation.value | translateCatalog }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
@@ -65,7 +65,7 @@
<mat-select [formControl]="futureInstallmentAllocationRule">
<mat-option *ngFor="let futureInstallmentAllocationRule of advancedPaymentAllocation.futureInstallmentAllocationRules"
[value]="futureInstallmentAllocationRule.code">
{{ futureInstallmentAllocationRule.value | translate }}
{{ futureInstallmentAllocationRule.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -18,7 +18,7 @@
<mat-label>{{'labels.inputs.Interest Method' | translate}}</mat-label>
<mat-select formControlName="interestType" matTooltip="The Interest method value is input to calculating the payments amount for repayment of the loan. " required>
<mat-option *ngFor="let interestType of interestTypeData" [value]="interestType.id">
{{ interestType.value }}
{{ interestType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -31,7 +31,7 @@
<mat-select formControlName="interestCalculationPeriodType" matTooltip="Daily - Will Calculate the interest on DAILY basis ex: Month of February has 28days
and it will calculate interest for 28days, SAME AS REPAYMENT PERIOD- it calculates for the month,that is, 30days." required>
<mat-option *ngFor="let interestCalculationPeriodType of interestCalculationPeriodTypeData" [value]="interestCalculationPeriodType.id">
{{ interestCalculationPeriodType.value }}
{{ interestCalculationPeriodType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -58,7 +58,7 @@
<mat-label>{{'labels.inputs.Loan Schedule Type' | translate}}</mat-label>
<mat-select formControlName="loanScheduleType" required>
<mat-option *ngFor="let loanScheduleType of loanScheduleTypeData" [value]="loanScheduleType.code">
{{ loanScheduleType.value }}
{{ loanScheduleType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -68,7 +68,7 @@
<mat-select formControlName="transactionProcessingStrategyCode" matTooltip="The repayment strategy determines the sequence in which each of the components is paid."
required [disabled]="advancedTransactionProcessingStrategyDisabled">
<mat-option *ngFor="let transactionProcessingStrategy of transactionProcessingStrategyData" [value]="transactionProcessingStrategy.code">
{{ transactionProcessingStrategy.name }}
{{ transactionProcessingStrategy.name | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -80,7 +80,7 @@
<mat-label>{{'labels.inputs.Loan Schedule Processing Type' | translate}}</mat-label>
<mat-select formControlName="loanScheduleProcessingType" required>
<mat-option *ngFor="let loanScheduleProcessingType of loanScheduleProcessingTypeData" [value]="loanScheduleProcessingType.code">
{{ loanScheduleProcessingType.value }}
{{ loanScheduleProcessingType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -189,7 +189,7 @@
<mat-label>{{'labels.inputs.Days in year' | translate}}</mat-label>
<mat-select matTooltip="The setting for number of days in year to use to calculate interest" formControlName="daysInYearType" required>
<mat-option *ngFor="let daysInYearType of daysInYearTypeData" [value]="daysInYearType.id">
{{ daysInYearType.value }}
{{ daysInYearType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -201,7 +201,7 @@
<mat-label>{{'labels.inputs.Days in month' | translate}}</mat-label>
<mat-select matTooltip="Number of days in month." formControlName="daysInMonthType" required>
<mat-option *ngFor="let daysInMonthType of daysInMonthTypeData" [value]="daysInMonthType.id">
{{ daysInMonthType.value }}
{{ daysInMonthType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -282,7 +282,7 @@
<mat-label>{{'labels.inputs.Pre-closure interest calculation rule' | translate}}</mat-label>
<mat-select formControlName="preClosureInterestCalculationStrategy" required>
<mat-option *ngFor="let preClosureInterestCalculationStrategy of preClosureInterestCalculationStrategyData" [value]="preClosureInterestCalculationStrategy.id">
{{ preClosureInterestCalculationStrategy.value }}
{{ preClosureInterestCalculationStrategy.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -294,7 +294,7 @@
<mat-label>{{'labels.inputs.Advance payments adjustment type' | translate}}</mat-label>
<mat-select formControlName="rescheduleStrategyMethod" required>
<mat-option *ngFor="let rescheduleStrategyType of rescheduleStrategyTypeData" [value]="rescheduleStrategyType.id">
{{ rescheduleStrategyType.value }}
{{ rescheduleStrategyType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -306,7 +306,7 @@
<mat-label>{{'labels.inputs.Interest recalculation compounding on' | translate}}</mat-label>
<mat-select formControlName="interestRecalculationCompoundingMethod" required>
<mat-option *ngFor="let interestRecalculationCompoundingType of interestRecalculationCompoundingTypeData" [value]="interestRecalculationCompoundingType.id">
{{ interestRecalculationCompoundingType.value }}
{{ interestRecalculationCompoundingType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -352,7 +352,7 @@
<mat-form-field fxFlexFill>
<mat-select formControlName="recalculationCompoundingFrequencyNthDayType">
<mat-option *ngFor="let interestRecalculationNthDayType of interestRecalculationNthDayTypeData" [value]="interestRecalculationNthDayType.id">
{{ interestRecalculationNthDayType.value }}
{{ interestRecalculationNthDayType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -365,7 +365,7 @@
<mat-form-field fxFlexFill>
<mat-select formControlName="recalculationCompoundingFrequencyDayOfWeekType">
<mat-option *ngFor="let interestRecalculationDayOfWeekType of interestRecalculationDayOfWeekTypeData" [value]="interestRecalculationDayOfWeekType.id">
{{ interestRecalculationDayOfWeekType.value }}
{{ interestRecalculationDayOfWeekType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -391,7 +391,7 @@
<mat-label>{{'labels.inputs.Frequency for recalculate Outstanding Principal' | translate}}</mat-label>
<mat-select formControlName="recalculationRestFrequencyType" required>
<mat-option *ngFor="let interestRecalculationFrequencyType of interestRecalculationFrequencyTypeData" [value]="interestRecalculationFrequencyType.id">
{{ interestRecalculationFrequencyType.value }}
{{ interestRecalculationFrequencyType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -404,7 +404,7 @@
<mat-form-field fxFlexFill>
<mat-select formControlName="recalculationRestFrequencyNthDayType">
<mat-option *ngFor="let interestRecalculationNthDayType of interestRecalculationNthDayTypeData" [value]="interestRecalculationNthDayType.id">
{{ interestRecalculationNthDayType.value }}
{{ interestRecalculationNthDayType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -417,7 +417,7 @@
<mat-form-field fxFlexFill>
<mat-select formControlName="recalculationRestFrequencyDayOfWeekType">
<mat-option *ngFor="let interestRecalculationDayOfWeekType of interestRecalculationDayOfWeekTypeData" [value]="interestRecalculationDayOfWeekType.id">
{{ interestRecalculationDayOfWeekType.value }}
{{ interestRecalculationDayOfWeekType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -496,9 +496,9 @@
<mat-divider fxFlex="98%"></mat-divider>
<h3 fxFlex="23%" class="mat-h3">{{'labels.inputs.Configurable Terms and Settings' | translate}}</h3>
<h3 fxFlex="43%" class="mat-h3">{{'labels.inputs.Configurable Terms and Settings' | translate}}</h3>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="allowAttributeConfiguration" class="margin-b">
<mat-checkbox fxFlex="53%" labelPosition="before" formControlName="allowAttributeConfiguration" class="margin-b">
{{'labels.inputs.Allow overriding select terms and settings in loan accounts' | translate}}
</mat-checkbox>
@@ -37,7 +37,7 @@
<mat-label>{{'labels.inputs.Over Amount Calculation Type' | translate}}</mat-label>
<mat-select formControlName="overAppliedCalculationType" required>
<mat-option *ngFor="let overAppliedCalculationType of overAppliedCalculationTypeData" [value]="overAppliedCalculationType.id">
{{ overAppliedCalculationType.value }}
{{ overAppliedCalculationType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -127,7 +127,7 @@
<mat-label>{{'labels.inputs.Frequency' | translate}}</mat-label>
<mat-select formControlName="interestRateFrequencyType" required [disabled]="isZeroInterest()">
<mat-option *ngFor="let interestRateFrequencyType of interestRateFrequencyTypeData" [value]="interestRateFrequencyType.id">
{{ interestRateFrequencyType.value }}
{{ interestRateFrequencyType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -201,9 +201,9 @@
<div *ngIf="loanProductTermsForm.value.useBorrowerCycle" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="23%" class="mat-h4">{{'labels.inputs.Principal by loan cycle' | translate}}</h4>
<h4 fxFlex="73%" class="mat-h4">{{'labels.inputs.Principal by loan cycle' | translate}}</h4>
<div fxFlex="73%">
<div fxFlex="23%">
<button type="button" mat-raised-button color="primary" (click)="addVariationsForBorrowerCycle('Principal', principalVariationsForBorrowerCycle)">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Add' | translate}}
@@ -264,9 +264,9 @@
</table>
<h4 fxFlex="23%" class="mat-h4">{{'labels.inputs.Number of repayments by loan cycle' | translate}}</h4>
<h4 fxFlex="73%" class="mat-h4">{{'labels.inputs.Number of repayments by loan cycle' | translate}}</h4>
<div fxFlex="73%">
<div fxFlex="23%">
<button type="button" mat-raised-button color="primary" (click)="addVariationsForBorrowerCycle('NumberOfRepayments', numberOfRepaymentVariationsForBorrowerCycle)">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Add' | translate}}
@@ -327,9 +327,9 @@
</table>
<h4 fxFlex="23%" class="mat-h4">{{'labels.inputs.Nominal interest rate by loan cycle' | translate}}</h4>
<h4 fxFlex="73%" class="mat-h4">{{'labels.inputs.Nominal interest rate by loan cycle' | translate}}</h4>
<div fxFlex="73%">
<div fxFlex="23%">
<button type="button" mat-raised-button color="primary" (click)="addVariationsForBorrowerCycle('NominalInterestRate', interestRateVariationsForBorrowerCycle)">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{'labels.buttons.Add' | translate}}
@@ -339,42 +339,42 @@
<table fxFlex="98%" class="mat-elevation-z1" mat-table [dataSource]="interestRateVariationsForBorrowerCycle.value" *ngIf="interestRateVariationsForBorrowerCycle.value.length">
<ng-container matColumnDef="valueConditionType">
<th mat-header-cell *matHeaderCellDef> Condition </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Condition' | translate }} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.valueConditionType | find:valueConditionTypeData:'id':'value' }}
</td>
</ng-container>
<ng-container matColumnDef="borrowerCycleNumber">
<th mat-header-cell *matHeaderCellDef> Loan Cycle </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Loan Cycle' | translate }} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.borrowerCycleNumber }}
</td>
</ng-container>
<ng-container matColumnDef="minValue">
<th mat-header-cell *matHeaderCellDef> Minimum </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Minimum' | translate }} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.minValue }}
</td>
</ng-container>
<ng-container matColumnDef="defaultValue">
<th mat-header-cell *matHeaderCellDef> Default </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Default' | translate }} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.defaultValue }}
</td>
</ng-container>
<ng-container matColumnDef="maxValue">
<th mat-header-cell *matHeaderCellDef> Maximum </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Maximum' | translate }} </th>
<td mat-cell *matCellDef="let variation">
{{ variation.maxValue }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> Actions </th>
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Actions' | translate }} </th>
<td mat-cell *matCellDef="let element; let i = index">
<button mat-icon-button color="primary" (click)="editVariationsForBorrowerCycle('NominalInterestRate', interestRateVariationsForBorrowerCycle, i)">
<fa-icon icon="edit"></fa-icon>
@@ -408,7 +408,7 @@
<mat-label>{{'labels.inputs.Frequency Type' | translate}}</mat-label>
<mat-select formControlName="repaymentFrequencyType" required>
<mat-option *ngFor="let repaymentFrequencyType of repaymentFrequencyTypeData" [value]="repaymentFrequencyType.id">
{{ repaymentFrequencyType.value }}
{{ repaymentFrequencyType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -423,7 +423,7 @@
<mat-label>{{'labels.inputs.Fixed Length' | translate}}</mat-label>
<input type="number" matInput formControlName="fixedLength">
</mat-form-field>
<span fxFlex="30%" *ngIf="allowFixedLength()" class="label-field">{{ loanProductTermsForm.value.repaymentFrequencyType | find:repaymentFrequencyTypeData:'id':'value' }}</span>
<span fxFlex="30%" *ngIf="allowFixedLength()" class="label-field">{{ loanProductTermsForm.value.repaymentFrequencyType | find:repaymentFrequencyTypeData:'id':'value' | translateCatalog }}</span>
<mat-form-field fxFlex="48%">
<mat-label>{{'labels.inputs.Minimum days between disbursal and first repayment date' | translate}}</mat-label>
@@ -1,7 +1,6 @@
import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators, UntypedFormArray, UntypedFormControl } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { TooltipPosition } from '@angular/material/tooltip';
import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component';
import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component';
@@ -9,8 +8,8 @@ import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.co
import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base';
import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base';
import { SelectBase } from 'app/shared/form-dialog/formfield/model/select-base';
import { LoanProducts } from '../../loan-products';
import { ProcessingStrategyService } from '../../services/processing-strategy.service';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'mifosx-loan-product-terms-step',
@@ -38,7 +37,8 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
constructor(private formBuilder: UntypedFormBuilder,
private processingStrategyService: ProcessingStrategyService,
private dialog: MatDialog) {
private dialog: MatDialog,
private translateService: TranslateService) {
this.createLoanProductTermsForm();
this.setConditionalControls();
}
@@ -255,9 +255,15 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
getData(formType: string, values?: any) {
switch (formType) {
case 'Principal': return { title: 'Principal by loan cycle', formfields: this.getFormfields(values) };
case 'NumberOfRepayments': return { title: 'Number of repayments by loan cycle', formfields: this.getFormfields(values) };
case 'NominalInterestRate': return { title: 'Nominal interest rate by loan cycle', formfields: this.getFormfields(values) };
case 'Principal': return {
title: this.translateService.instant('labels.heading.Principal by loan cycle'), formfields: this.getFormfields(values)
};
case 'NumberOfRepayments': return {
title: this.translateService.instant('labels.heading.Number of Repayments by loan cycle'), formfields: this.getFormfields(values)
};
case 'NominalInterestRate': return {
title: this.translateService.instant('labels.heading.Nominal Interest Rate by loan cycle'), formfields: this.getFormfields(values)
};
}
}
@@ -265,7 +271,7 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
const formfields: FormfieldBase[] = [
new SelectBase({
controlName: 'valueConditionType',
label: 'Condition',
label: this.translateService.instant('labels.inputs.Condition'),
value: values ? values.valueConditionType : this.valueConditionTypeData[0].id,
options: { label: 'value', value: 'id', data: this.valueConditionTypeData },
required: true,
@@ -273,7 +279,7 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
}),
new InputBase({
controlName: 'borrowerCycleNumber',
label: 'Loan Cycle',
label: this.translateService.instant('labels.inputs.Loan Cycle'),
value: values ? values.borrowerCycleNumber : undefined,
type: 'number',
required: true,
@@ -281,14 +287,14 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
}),
new InputBase({
controlName: 'minValue',
label: 'Minimum',
label: this.translateService.instant('labels.inputs.Minimum'),
value: values ? values.minValue : undefined,
type: 'number',
order: 3
}),
new InputBase({
controlName: 'defaultValue',
label: 'Default',
label: this.translateService.instant('labels.inputs.Default'),
value: values ? values.defaultValue : undefined,
type: 'number',
required: true,
@@ -296,7 +302,7 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges {
}),
new InputBase({
controlName: 'maxValue',
label: 'Maximum',
label: this.translateService.instant('labels.inputs.Maximum'),
value: values ? values.maxValue : undefined,
type: 'number',
order: 5
@@ -28,21 +28,21 @@
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Type' | translate}} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
{{ charge.chargeCalculationType.value | translateCatalog }}
</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 }}
{{ 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 }}
{{ charge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -48,22 +48,22 @@
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Compounding Period' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCompoundingPeriodType | find:savingProductsTemplate.interestCompoundingPeriodTypeOptions:'id':'value' }}</span>
<span fxFlex="60%">{{ savingProduct.interestCompoundingPeriodType | find:savingProductsTemplate.interestCompoundingPeriodTypeOptions:'id':'value' | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Posting Period' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestPostingPeriodType | find:savingProductsTemplate.interestPostingPeriodTypeOptions:'id':'value' }}</span>
<span fxFlex="60%">{{ savingProduct.interestPostingPeriodType | find:savingProductsTemplate.interestPostingPeriodTypeOptions:'id':'value' | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Calculated using' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationType | find:savingProductsTemplate.interestCalculationTypeOptions:'id':'value' }}</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationType | find:savingProductsTemplate.interestCalculationTypeOptions:'id':'value' | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Days in Year' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationDaysInYearType | find:savingProductsTemplate.interestCalculationDaysInYearTypeOptions:'id':'value' }}</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationDaysInYearType | find:savingProductsTemplate.interestCalculationDaysInYearTypeOptions:'id':'value' | translateCatalog }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{'labels.inputs.Settings' | translate}}</h3>
@@ -72,12 +72,12 @@
<div fxFlexFill *ngIf="savingProduct.minRequiredOpeningBalance">
<span fxFlex="40%">{{'labels.inputs.Minimum Opening Balance' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minRequiredOpeningBalance }}</span>
<span fxFlex="60%">{{ savingProduct.minRequiredOpeningBalance | formatNumber }}</span>
</div>
<div fxFlexFill *ngIf="savingProduct.lockinPeriodFrequency">
<span fxFlex="40%">{{'labels.inputs.Lock-in Period' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.lockinPeriodFrequency + ' ' + (savingProduct.lockinPeriodFrequencyType | find:savingProductsTemplate.lockinPeriodFrequencyTypeOptions:'id':'value') }}</span>
<span fxFlex="60%">{{ savingProduct.lockinPeriodFrequency + ' ' + (savingProduct.lockinPeriodFrequencyType | find:savingProductsTemplate.lockinPeriodFrequencyTypeOptions:'id':'value') | translateCatalog }}</span>
</div>
<div fxFlexFill>
@@ -87,7 +87,7 @@
<div fxFlexFill *ngIf="savingProduct.minBalanceForInterestCalculation">
<span fxFlex="40%">{{'labels.inputs.Balance Required for Interest Calculation' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minBalanceForInterestCalculation }}</span>
<span fxFlex="60%">{{ savingProduct.minBalanceForInterestCalculation | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -97,7 +97,7 @@
<div fxFlexFill *ngIf="savingProduct.minRequiredBalance">
<span fxFlex="40%">{{'labels.inputs.Minimum Balance' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minRequiredBalance }}</span>
<span fxFlex="60%">{{ savingProduct.minRequiredBalance | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -117,17 +117,17 @@
<div fxFlexFill *ngIf="savingProduct.minOverdraftForInterestCalculation">
<span fxFlex="40%">{{'labels.inputs.Minimum Overdraft Required for Interest Calculation' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minOverdraftForInterestCalculation }}</span>
<span fxFlex="60%">{{ savingProduct.minOverdraftForInterestCalculation | formatNumber }}</span>
</div>
<div fxFlexFill *ngIf="savingProduct.nominalAnnualInterestRateOverdraft">
<span fxFlex="40%">{{'labels.inputs.Nominal Annual Interest for Overdraft' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.nominalAnnualInterestRateOverdraft }}</span>
<span fxFlex="60%">{{ savingProduct.nominalAnnualInterestRateOverdraft | formatNumber }} %</span>
</div>
<div fxFlexFill *ngIf="savingProduct.overdraftLimit">
<span fxFlex="40%">{{'labels.inputs.Maximum Overdraft Amount Limit' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.overdraftLimit }}</span>
<span fxFlex="60%">{{ savingProduct.overdraftLimit | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -162,21 +162,21 @@
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Type' | translate}} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
{{ charge.chargeCalculationType.value | translateCatalog }}
</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 }}
{{ 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 }}
{{ charge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>
@@ -187,11 +187,11 @@
</div>
<h3 class="mat-h3" fxFlexFill>{{'labels.inputs.Accounting' | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{'labels.heading.Accounting' | translate}}</h3>
<mat-divider fxFlexFill></mat-divider>
<mifosx-view-savings-accounting-details
<mifosx-view-savings-accounting-details fxFlex="100%"
[accountingRule]="accountingRule"
[accountingMappings]="accountingMappings"
>
@@ -33,9 +33,8 @@ export class SavingProductPreviewStepComponent implements OnInit, OnChanges {
}
setCurrentValues(): void {
this.accountingRule = this.accounting.getAccountingRuleFrom(this.savingProduct.accountingRule);
if (this.isCashOrAccrualAccounting()) {
this.accountingRule = this.accounting.getAccountingRuleFrom(this.savingProduct.accountingRule);
const assetAccountData = this.savingProductsTemplate.accountingMappingOptions.assetAccountOptions || [];
const incomeAccountData = this.savingProductsTemplate.accountingMappingOptions.incomeAccountOptions || [];
@@ -17,7 +17,7 @@
<mat-form-field fxFlex="48%">
<mat-select formControlName="lockinPeriodFrequencyType">
<mat-option *ngFor="let lockinPeriodFrequencyType of lockinPeriodFrequencyTypeData" [value]="lockinPeriodFrequencyType.id">
{{ lockinPeriodFrequencyType.value }}
{{ lockinPeriodFrequencyType.value | translateCatalog }}
</mat-option>
</mat-select>
</mat-form-field>
@@ -16,7 +16,7 @@
<mat-label>{{'labels.inputs.Interest Compounding Period' | translate}}</mat-label>
<mat-select formControlName="interestCompoundingPeriodType" matTooltip="The period at which interest rate is compounded" required>
<mat-option *ngFor="let interestCompoundingPeriodType of interestCompoundingPeriodTypeData" [value]="interestCompoundingPeriodType.id">
{{ interestCompoundingPeriodType.value }}
{{ interestCompoundingPeriodType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -28,7 +28,7 @@
<mat-label>{{'labels.inputs.Interest Posting Period' | translate}}</mat-label>
<mat-select formControlName="interestPostingPeriodType" matTooltip="The period at which interest rate is posted or credited to a saving account" required>
<mat-option *ngFor="let interestPostingPeriodType of interestPostingPeriodTypeData" [value]="interestPostingPeriodType.id">
{{ interestPostingPeriodType.value }}
{{ interestPostingPeriodType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -40,7 +40,7 @@
<mat-label>{{'labels.inputs.Interest Calculated using' | translate}}</mat-label>
<mat-select formControlName="interestCalculationType" matTooltip="The method used to calculate interest" required>
<mat-option *ngFor="let interestCalculationType of interestCalculationTypeData" [value]="interestCalculationType.id">
{{ interestCalculationType.value }}
{{ interestCalculationType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -52,7 +52,7 @@
<mat-label>{{'labels.inputs.Days in Year' | translate}}</mat-label>
<mat-select formControlName="interestCalculationDaysInYearType" matTooltip="The setting for number of days in year to use to calculate interest" required>
<mat-option *ngFor="let interestCalculationDaysInYearType of interestCalculationDaysInYearTypeData" [value]="interestCalculationDaysInYearType.id">
{{ interestCalculationDaysInYearType.value }}
{{ interestCalculationDaysInYearType.value | translateCatalog }}
</mat-option>
</mat-select>
<mat-error>
@@ -57,22 +57,22 @@
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Compounding Period' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCompoundingPeriodType.value }}</span>
<span fxFlex="60%">{{ savingProduct.interestCompoundingPeriodType.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Posting Period' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestPostingPeriodType.value }}</span>
<span fxFlex="60%">{{ savingProduct.interestPostingPeriodType.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Interest Calculated using' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationType.value }}</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationType.value | translateCatalog }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{'labels.inputs.Days in Year' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationDaysInYearType.value }}</span>
<span fxFlex="60%">{{ savingProduct.interestCalculationDaysInYearType.value | translateCatalog }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{'labels.heading.Settings' | translate}}</h3>
@@ -81,7 +81,7 @@
<div fxFlexFill *ngIf="savingProduct.minRequiredOpeningBalance">
<span fxFlex="40%">{{'labels.inputs.Minimum Opening Balance' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minRequiredOpeningBalance }}</span>
<span fxFlex="60%">{{ savingProduct.minRequiredOpeningBalance | formatNumber }}</span>
</div>
<div fxFlexFill *ngIf="savingProduct.lockinPeriodFrequency">
@@ -97,7 +97,7 @@
<div fxFlexFill *ngIf="savingProduct.minBalanceForInterestCalculation">
<span fxFlex="40%">{{'labels.inputs.Balance Required for Interest Calculation' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minBalanceForInterestCalculation }}</span>
<span fxFlex="60%">{{ savingProduct.minBalanceForInterestCalculation | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -107,7 +107,7 @@
<div fxFlexFill *ngIf="savingProduct.minRequiredBalance">
<span fxFlex="40%">{{'labels.inputs.Minimum Balance' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.minRequiredBalance }}</span>
<span fxFlex="60%">{{ savingProduct.minRequiredBalance | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -132,12 +132,12 @@
<div fxFlexFill *ngIf="savingProduct.nominalAnnualInterestRateOverdraft">
<span fxFlex="40%">{{'labels.inputs.Nominal Annual Interest for Overdraft' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.nominalAnnualInterestRateOverdraft }}</span>
<span fxFlex="60%">{{ savingProduct.nominalAnnualInterestRateOverdraft }} %</span>
</div>
<div fxFlexFill *ngIf="savingProduct.overdraftLimit">
<span fxFlex="40%">{{'labels.inputs.Maximum Overdraft Amount Limit' | translate}}:</span>
<span fxFlex="60%">{{ savingProduct.overdraftLimit }}</span>
<span fxFlex="60%">{{ savingProduct.overdraftLimit | formatNumber }}</span>
</div>
<div fxFlexFill>
@@ -172,21 +172,21 @@
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef> {{'labels.inputs.Type' | translate}} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
{{ charge.chargeCalculationType.value | translateCatalog }}
</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 }}
{{ 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 }}
{{ charge.chargeTimeType.value | translateCatalog }}
</td>
</ng-container>