build: Use prettier for html

Stop ignoring html files in prettier and fix existing issues.
This commit is contained in:
Ralph Hopman
2024-12-19 09:36:50 +01:00
committed by Adam Saghy
parent c5fc3925fb
commit 2ec9ba81d6
651 changed files with 28935 additions and 20624 deletions
@@ -1,5 +1,4 @@
<div class="container">
<mat-horizontal-stepper class="mat-elevation-z8" labelPosition="bottom" #loansAccountStepper>
<ng-template matStepperIcon="number">
<fa-icon icon="pencil-alt" size="sm"></fa-icon>
@@ -22,65 +21,71 @@
</ng-template>
<mat-step [stepControl]="loansAccountDetailsForm">
<ng-template matStepLabel>{{ 'labels.inputs.DETAILS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.DETAILS" | translate}}</ng-template>
<mifosx-loans-account-details-step [loansAccountTemplate]="loansAccountTemplate"
(loansAccountProductTemplate)="setTemplate($event)" #loansAccountDetailsForm>
<mifosx-loans-account-details-step
[loansAccountTemplate]="loansAccountTemplate"
(loansAccountProductTemplate)="setTemplate($event)"
#loansAccountDetailsForm
>
</mifosx-loans-account-details-step>
</mat-step>
<mat-step [stepControl]="loansAccountTermsForm">
<ng-template matStepLabel>{{ 'labels.inputs.TERMS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.TERMS" | translate}}</ng-template>
<mifosx-loans-account-terms-step #loanAccountTerms [loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate] = "loansAccountTemplate" [collateralOptions]="collateralOptions"
[loansAccountFormValid]="loansAccountFormValid" [loanPrincipal]="loanPrincipal">
<mifosx-loans-account-terms-step
#loanAccountTerms
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountTemplate"
[collateralOptions]="collateralOptions"
[loansAccountFormValid]="loansAccountFormValid"
[loanPrincipal]="loanPrincipal"
>
</mifosx-loans-account-terms-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.CHARGES' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.CHARGES" | translate}}</ng-template>
<mifosx-loans-account-charges-step #loanAccountCharges [loansAccountProductTemplate]="loansAccountProductTemplate"
<mifosx-loans-account-charges-step
#loanAccountCharges
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountTemplate"
[loansAccountFormValid]="loansAccountFormValid">
[loansAccountFormValid]="loansAccountFormValid"
>
</mifosx-loans-account-charges-step>
</mat-step>
<mat-step state="repayment" *ngIf="loansAccountFormValid" completed>
<ng-template matStepLabel>{{ 'labels.inputs.REPAYMENT SCHEDULE' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.REPAYMENT SCHEDULE" | translate}}</ng-template>
<mifosx-loans-account-schedule-step #loanAccountSchedule [loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate" [loansAccount]="loansAccount" [currencyCode]="currencyCode">
<mifosx-loans-account-schedule-step
#loanAccountSchedule
[loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccount]="loansAccount"
[currencyCode]="currencyCode"
>
</mifosx-loans-account-schedule-step>
</mat-step>
<mat-step *ngFor="let datatable of datatables">
<ng-template matStepLabel>{{datatable.registeredTableName}}</ng-template>
<ng-template matStepLabel>{{ datatable.registeredTableName }}</ng-template>
<mifosx-loans-account-datatable-step [datatableData]="datatable" #dtloan></mifosx-loans-account-datatable-step>
</mat-step>
<mat-step state="preview" *ngIf="loansAccountFormValid" completed>
<ng-template matStepLabel>{{ 'labels.inputs.PREVIEW' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.PREVIEW" | translate}}</ng-template>
<mifosx-loans-account-preview-step [loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate" [loansAccount]="loansAccount" (submitEvent)="submit()">
<mifosx-loans-account-preview-step
[loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccount]="loansAccount"
(submitEvent)="submit()"
>
</mifosx-loans-account-preview-step>
</mat-step>
</mat-horizontal-stepper>
</div>
@@ -1,34 +1,51 @@
<h2 mat-dialog-title>{{"labels.heading.Loan Delinquency Actions" | translate}}</h2>
<h2 mat-dialog-title>{{ 'labels.heading.Loan Delinquency Actions' | translate }}</h2>
<div mat-dialog-content [formGroup]="delinquencyActionForm" fxLayout="column">
<mat-form-field fxFlex="48%" (click)="validFromDatePicker.open()">
<mat-label>{{"labels.inputs.Start Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="validFromDatePicker" required
formControlName="startDate">
<mat-label>{{ 'labels.inputs.Start Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="validFromDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="validFromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #validFromDatePicker></mat-datepicker>
<mat-error *ngIf="delinquencyActionForm.controls.startDate.hasError('required')">
{{"labels.inputs.Start Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Start Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="validTillDatePicker.open()">
<mat-label>{{"labels.inputs.End Date" | translate}}</mat-label>
<input matInput [min]="delinquencyActionForm.value.startDate" [max]="maxDate" [matDatepicker]="validTillDatePicker" required
formControlName="endDate">
<mat-form-field fxFlex="48%" (click)="validTillDatePicker.open()">
<mat-label>{{ 'labels.inputs.End Date' | translate }}</mat-label>
<input
matInput
[min]="delinquencyActionForm.value.startDate"
[max]="maxDate"
[matDatepicker]="validTillDatePicker"
required
formControlName="endDate"
/>
<mat-datepicker-toggle matSuffix [for]="validTillDatePicker"></mat-datepicker-toggle>
<mat-datepicker #validTillDatePicker></mat-datepicker>
<mat-error *ngIf="delinquencyActionForm.controls.endDate.hasError('required')">
{{"labels.inputs.End Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.End Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mat-dialog-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button mat-dialog-close> {{"labels.buttons.Cancel" | translate}} </button>
<button mat-raised-button color="primary" [mat-dialog-close]="{ data: delinquencyActionForm }"
[disabled]="!delinquencyActionForm.valid || delinquencyActionForm.pristine">{{"labels.buttons.Submit" | translate}}</button>
<button mat-raised-button mat-dialog-close>{{ 'labels.buttons.Cancel' | translate }}</button>
<button
mat-raised-button
color="primary"
[mat-dialog-close]="{ data: delinquencyActionForm }"
[disabled]="!delinquencyActionForm.valid || delinquencyActionForm.pristine"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-dialog-actions>
@@ -1,44 +1,50 @@
<h1 mat-dialog-title>{{"labels.heading.Add Loan Collateral" | translate}}</h1>
<h1 mat-dialog-title>{{ 'labels.heading.Add Loan Collateral' | translate }}</h1>
<div mat-dialog-content [formGroup]="addCollateralForm" fxLayout="column">
<mat-form-field>
<mat-label>{{"labels.inputs.Collateral" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Collateral' | translate }}</mat-label>
<mat-select formControlName="collateral" required>
<mat-option *ngFor="let collateralType of collateralTypeData" [value]="collateralType" >
<mat-option *ngFor="let collateralType of collateralTypeData" [value]="collateralType">
{{ collateralType.name }}
</mat-option>
</mat-select>
<mat-error>
{{"labels.inputs.Collateral" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Collateral' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Quantity" | translate}}</mat-label>
<input type="number" [max]="maxQuantity" [min]="0" matInput formControlName="quantity" required>
<mat-label>{{ 'labels.inputs.Quantity' | translate }}</mat-label>
<input type="number" [max]="maxQuantity" [min]="0" matInput formControlName="quantity" required />
<mat-error *ngIf="addCollateralForm.controls.quantity.hasError('required')">
{{"labels.inputs.Quantity" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Quantity' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
<mat-error *ngIf="addCollateralForm.controls.quantity.hasError('max')">
{{"labels.inputs.Quantity can not be more than" | translate}} <strong>{{ maxQuantity }}</strong>
{{ 'labels.inputs.Quantity can not be more than' | translate }} <strong>{{ maxQuantity }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Total Value" | translate}}</mat-label>
<input type="text" matInput formControlName="totalValue" [disabled]="true">
<mat-label>{{ 'labels.inputs.Total Value' | translate }}</mat-label>
<input type="text" matInput formControlName="totalValue" [disabled]="true" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Total Collateral Value" | translate}}</mat-label>
<input type="text" matInput formControlName="totalCollateralValue" [disabled]="true">
<mat-label>{{ 'labels.inputs.Total Collateral Value' | translate }}</mat-label>
<input type="text" matInput formControlName="totalCollateralValue" [disabled]="true" />
</mat-form-field>
</div>
<mat-dialog-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button mat-dialog-close> {{"labels.buttons.Cancel" | translate}} </button>
<button mat-raised-button color="primary" [mat-dialog-close]="{ data: addCollateralForm }"
[disabled]="!addCollateralForm.valid || addCollateralForm.pristine">{{ layout.addButtonText }}</button>
<button mat-raised-button mat-dialog-close>{{ 'labels.buttons.Cancel' | translate }}</button>
<button
mat-raised-button
color="primary"
[mat-dialog-close]="{ data: addCollateralForm }"
[disabled]="!addCollateralForm.valid || addCollateralForm.pristine"
>
{{ layout.addButtonText }}
</button>
</mat-dialog-actions>
@@ -1,44 +1,41 @@
<h1 mat-dialog-title>{{"labels.heading.Guarantor Detail" | translate}}</h1>
<h1 mat-dialog-title>{{ 'labels.heading.Guarantor Detail' | translate }}</h1>
<div mat-dialog-content fxLayout="column">
<div fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.First Name" | translate}}:</span>
<span fxFlex="50%">{{ 'labels.inputs.First Name' | translate }}:</span>
<span fxFlex="50%">{{ data.guarantorData.firstname }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Last Name" | translate}}:</span>
<span fxFlex="50%">{{ 'labels.inputs.Last Name' | translate }}:</span>
<span fxFlex="50%">{{ data.guarantorData.lastname }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Relationship" | translate}}:</span>
<span fxFlex="50%">{{ 'labels.inputs.Relationship' | translate }}:</span>
<span fxFlex="50%">{{ data.guarantorData.clientRelationshipType.name }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Guarantor Type" | translate}}:</span>
<span fxFlex="50%">{{ 'labels.inputs.Guarantor Type' | translate }}:</span>
<span fxFlex="50%">{{ data.guarantorData.guarantorType.value }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Status" | translate}}:</span>
<span fxFlex="50%">{{ 'labels.inputs.Status' | translate }}:</span>
<span fxFlex="50%">
<span *ngIf="data.guarantorData.status">
{{"labels.inputs.Active" | translate}}
{{ 'labels.inputs.Active' | translate }}
</span>
<span *ngIf="!data.guarantorData.status">
{{"labels.inputs.Deleted" | translate}}
</span></span>
{{ 'labels.inputs.Deleted' | translate }}
</span></span
>
</div>
</div>
</div>
<mat-dialog-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button mat-dialog-close> {{"labels.buttons.Cancel" | translate}} </button>
<button mat-raised-button mat-dialog-close>{{ 'labels.buttons.Cancel' | translate }}</button>
</mat-dialog-actions>
@@ -1,5 +1,4 @@
<div class="container">
<mat-horizontal-stepper class="mat-elevation-z8" labelPosition="bottom" #loansAccountStepper>
<ng-template matStepperIcon="number">
<fa-icon icon="pencil-alt" size="sm"></fa-icon>
@@ -22,57 +21,59 @@
</ng-template>
<mat-step [stepControl]="loansAccountDetailsForm">
<ng-template matStepLabel>{{ 'labels.inputs.DETAILS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.DETAILS" | translate}}</ng-template>
<mifosx-loans-account-details-step [loansAccountTemplate]="loansAccountAndTemplate"
(loansAccountProductTemplate)="setTemplate($event)">
<mifosx-loans-account-details-step
[loansAccountTemplate]="loansAccountAndTemplate"
(loansAccountProductTemplate)="setTemplate($event)"
>
</mifosx-loans-account-details-step>
</mat-step>
<mat-step [stepControl]="loansAccountTermsForm">
<ng-template matStepLabel>{{ 'labels.inputs.TERMS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.TERMS" | translate}}</ng-template>
<mifosx-loans-account-terms-step [loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountAndTemplate" [collateralOptions]="collateralOptions">
</mifosx-loans-account-terms-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{"labels.inputs.CHARGES" | translate}}</ng-template>
<mifosx-loans-account-charges-step [loansAccountProductTemplate]="loansAccountProductTemplate"
<mifosx-loans-account-terms-step
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountFormValid]="loansAccountFormValidAndNotPristine">
</mifosx-loans-account-charges-step>
[collateralOptions]="collateralOptions"
>
</mifosx-loans-account-terms-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.CHARGES' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.REPAYMENT SCHEDULE" | translate}}</ng-template>
<mifosx-loans-account-charges-step
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountFormValid]="loansAccountFormValidAndNotPristine"
>
</mifosx-loans-account-charges-step>
</mat-step>
<mifosx-loans-account-schedule-step [loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate" [loansAccount]="loansAccount"
[currencyCode]="currencyCode">
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.REPAYMENT SCHEDULE' | translate }}</ng-template>
<mifosx-loans-account-schedule-step
[loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccount]="loansAccount"
[currencyCode]="currencyCode"
>
</mifosx-loans-account-schedule-step>
</mat-step>
<mat-step state="preview" *ngIf="loansAccountFormValidAndNotPristine" completed>
<ng-template matStepLabel>{{ 'labels.inputs.PREVIEW' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.PREVIEW" | translate}}</ng-template>
<mifosx-loans-account-preview-step [loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate" [loansAccount]="loansAccount" (submitEvent)="submit()">
<mifosx-loans-account-preview-step
[loansAccountTemplate]="loansAccountAndTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccount]="loansAccount"
(submitEvent)="submit()"
>
</mifosx-loans-account-preview-step>
</mat-step>
</mat-horizontal-stepper>
</div>
@@ -1,5 +1,4 @@
<div class="container">
<mat-horizontal-stepper class="mat-elevation-z8" labelPosition="bottom" #loansAccountStepper>
<ng-template matStepperIcon="number">
<fa-icon icon="pencil-alt" size="sm"></fa-icon>
@@ -22,47 +21,47 @@
</ng-template>
<mat-step [stepControl]="loansAccountDetailsForm">
<ng-template matStepLabel>{{ 'labels.inputs.DETAILS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.DETAILS" | translate}}</ng-template>
<mifosx-glim-details-step [loansAccountTemplate]="loansAccountTemplate"
(loansAccountProductTemplate)="setTemplate($event)" [gsimData]="gsimData">
<mifosx-glim-details-step
[loansAccountTemplate]="loansAccountTemplate"
(loansAccountProductTemplate)="setTemplate($event)"
[gsimData]="gsimData"
>
</mifosx-glim-details-step>
</mat-step>
<mat-step [stepControl]="loansAccountTermsForm">
<ng-template matStepLabel>{{ 'labels.inputs.TERMS' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.TERMS" | translate}}</ng-template>
<mifosx-glim-terms-step [loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate] = "loansAccountTemplate">
<mifosx-glim-terms-step
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountTemplate"
>
</mifosx-glim-terms-step>
</mat-step>
<mat-step>
<ng-template matStepLabel>{{ 'labels.inputs.CHARGES' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.CHARGES" | translate}}</ng-template>
<mifosx-glim-charges-step [loansAccountProductTemplate]="loansAccountProductTemplate"
<mifosx-glim-charges-step
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccountTemplate]="loansAccountTemplate"
[activeClientMembers]="activeClientMembers"
>
[activeClientMembers]="activeClientMembers"
>
</mifosx-glim-charges-step>
</mat-step>
<mat-step state="preview" *ngIf="loansAccountFormValid" completed>
<ng-template matStepLabel>{{ 'labels.inputs.PREVIEW' | translate }}</ng-template>
<ng-template matStepLabel>{{"labels.inputs.PREVIEW" | translate}}</ng-template>
<mifosx-loans-account-preview-step [loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate" [loansAccount]="loansAccount" (submitEvent)="submit()">
<mifosx-loans-account-preview-step
[loansAccountTemplate]="loansAccountTemplate"
[loansAccountProductTemplate]="loansAccountProductTemplate"
[loansAccount]="loansAccount"
(submitEvent)="submit()"
>
</mifosx-loans-account-preview-step>
</mat-step>
</mat-horizontal-stepper>
</div>
@@ -1,169 +1,186 @@
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Charge' | translate }}</mat-label>
<mat-select #charge>
<mat-option *ngFor="let charge of chargeData" [value]="charge">
{{ charge.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Charge" | translate}}</mat-label>
<mat-select #charge>
<mat-option *ngFor="let charge of chargeData" [value]="charge">
{{ charge.name }}
</mat-option>
</mat-select>
</mat-form-field>
<div fxFlex="48%" fxFlexAlign="center">
<button type="button" mat-raised-button color="primary" (click)="addCharge(charge)" [disabled]="!charge.value">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
</button>
</div>
<div fxFlex="48%" fxFlexAlign="center">
<button type="button" mat-raised-button color="primary" (click)="addCharge(charge)" [disabled]="!charge.value">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{"labels.buttons.Add" | translate}}
</button>
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
mat-table
[dataSource]="chargesDataSource"
[hidden]="chargesDataSource.length === 0"
>
<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>
<table fxFlex="98%" class="mat-elevation-z1" mat-table [dataSource]="chargesDataSource" [hidden]="chargesDataSource.length === 0">
<ng-container matColumnDef="chargeCalculationType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
</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 }}
<button mat-icon-button color="primary" (click)="editChargeAmount(charge)">
<fa-icon icon="pen"></fa-icon>
</button>
</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">
<span
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'"
>
{{ (charge.dueDate | dateFormat) || 'Unassigned' }}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{ (charge.feeOnMonthDay | dateFormat) || 'Unassigned' }}
</span>
<span
*ngIf="
!(
charge.chargeTimeType.value === 'Monthly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date' ||
charge.chargeTimeType.value === 'Weekly Fee'
)
"
>
{{ 'labels.inputs.N/A' | translate }}
</span>
<button
mat-icon-button
color="primary"
*ngIf="
charge.chargeTimeType.value === 'Weekly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date'
"
(click)="editChargeDate(charge)"
>
<fa-icon icon="pen"></fa-icon>
</button>
</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' }}
<button
mat-icon-button
color="primary"
*ngIf="charge.chargeTimeType.value === 'Weekly Fee' || charge.chargeTimeType.value === 'Monthly Fee'"
(click)="editChargeFeeInterval(charge)"
>
<fa-icon icon="pen"></fa-icon>
</button>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<button mat-icon-button color="warn" (click)="deleteCharge(charge)">
<fa-icon icon="trash"></fa-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<div fxFlex="98%" *ngIf="activeClientMembers">
<table fxFlex="98%" mat-table [dataSource]="dataSource">
<!-- Check Column -->
<ng-container matColumnDef="check">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox (change)="toggleSelects()" [(ngModel)]="selectAllItems"></mat-checkbox>
</th>
<td mat-cell *matCellDef="let element">
<mat-checkbox (change)="toggleSelect()" [(ngModel)]="element.selected"></mat-checkbox>
</td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client ID' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.id }}</td>
</ng-container>
<!-- Name Column -->
<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>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client Name' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.displayName }}</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 }}
<!-- Weight Column -->
<ng-container matColumnDef="purpose">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Loan Purpose' | translate }}</th>
<td mat-cell *matCellDef="let element">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Select Purpose' | translate }}</mat-label>
<mat-select [(ngModel)]="element.loanPurposeId">
<mat-option *ngFor="let purpose of loanPurposeOptions" [value]="purpose.id">
{{ purpose.name }}
</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<td mat-cell *matCellDef="let charge">
{{ charge.amount }}
<button mat-icon-button color="primary" (click)="editChargeAmount(charge)">
<fa-icon icon="pen"></fa-icon>
</button>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Original Loan' | translate }}</th>
<td mat-cell *matCellDef="let element">
<mat-form-field>
<input type="number" matInput [(ngModel)]="element.principal" />
</mat-form-field>
</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">
<span *ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'">
{{(charge.dueDate | dateFormat) || 'Unassigned'}}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{(charge.feeOnMonthDay | dateFormat) || 'Unassigned'}}
</span>
<span
*ngIf="!(charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee')">
{{"labels.inputs.N/A" | translate}}
</span>
<button mat-icon-button color="primary"
*ngIf="charge.chargeTimeType.value === 'Weekly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date'"
(click)="editChargeDate(charge)">
<fa-icon icon="pen"></fa-icon>
</button>
</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' }}
<button mat-icon-button color="primary"
*ngIf="charge.chargeTimeType.value === 'Weekly Fee' || charge.chargeTimeType.value === 'Monthly Fee'"
(click)="editChargeFeeInterval(charge)">
<fa-icon icon="pen"></fa-icon>
</button>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<td mat-cell *matCellDef="let charge">
<button mat-icon-button color="warn" (click)="deleteCharge(charge)">
<fa-icon icon="trash"></fa-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-header-row *matHeaderRowDef="displayedColumn"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumn"></tr>
</table>
<div fxFlex="98%" *ngIf="activeClientMembers">
<table fxFlex="98%" mat-table [dataSource]="dataSource">
<!-- Check Column -->
<ng-container matColumnDef="check">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox (change)="toggleSelects()" [(ngModel)]="selectAllItems"></mat-checkbox>
</th>
<td mat-cell *matCellDef="let element">
<mat-checkbox (change)="toggleSelect()" [(ngModel)]="element.selected"></mat-checkbox>
</td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client ID" | translate}} </th>
<td mat-cell *matCellDef="let element"> {{element.id}} </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client Name" | translate}} </th>
<td mat-cell *matCellDef="let element"> {{element.displayName}} </td>
</ng-container>
<!-- Weight Column -->
<ng-container matColumnDef="purpose">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Loan Purpose" | translate}} </th>
<td mat-cell *matCellDef="let element">
<mat-form-field>
<mat-label>{{"labels.inputs.Select Purpose" | translate}}</mat-label>
<mat-select [(ngModel)]="element.loanPurposeId">
<mat-option *ngFor="let purpose of loanPurposeOptions" [value]="purpose.id">
{{ purpose.name }}
</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Original Loan" | translate}} </th>
<td mat-cell *matCellDef="let element">
<mat-form-field>
<input type="number" matInput [(ngModel)]="element.principal">
</mat-form-field>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumn"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumn;"></tr>
</table>
</div>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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 matStepperNext>
{{"labels.buttons.Next" | translate}}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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 matStepperNext>
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
@@ -1,88 +1,94 @@
<form [formGroup]="loansAccountDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Product Name' | translate }}</mat-label>
<mat-select formControlName="productId" required>
<mat-option *ngFor="let product of productData" [value]="product.id">
{{ product.name }}
</mat-option>
</mat-select>
<mat-error>
{{ 'labels.inputs.Product Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Loan officer' | translate }}</mat-label>
<mat-select formControlName="loanOfficerId">
<mat-option *ngFor="let loanOfficer of loanOfficerOptions" [value]="loanOfficer.id">
{{ loanOfficer.displayName }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Product Name" | translate}}</mat-label>
<mat-select formControlName="productId" required>
<mat-option *ngFor="let product of productData" [value]="product.id">
{{ product.name }}
</mat-option>
</mat-select>
<mat-error>
{{"labels.inputs.Product Name" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Fund' | translate }}</mat-label>
<mat-select formControlName="fundId">
<mat-option *ngFor="let fund of fundOptions" [value]="fund.id">
{{ fund.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Loan officer" | translate}}</mat-label>
<mat-select formControlName="loanOfficerId">
<mat-option *ngFor="let loanOfficer of loanOfficerOptions" [value]="loanOfficer.id">
{{ loanOfficer.displayName }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="submitPicker.open()">
<mat-label>{{ 'labels.inputs.Submitted on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="submitPicker"
required
formControlName="submittedOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="submitPicker"></mat-datepicker-toggle>
<mat-datepicker #submitPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{ 'labels.inputs.Submitted on' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="disbursementPicker.open()">
<mat-label>{{ 'labels.inputs.Disbursement on' | translate }}</mat-label>
<input
matInput
[min]="loansAccountDetailsForm.value.submittedOnDate"
[max]="maxDate"
[matDatepicker]="disbursementPicker"
required
formControlName="expectedDisbursementDate"
/>
<mat-datepicker-toggle matSuffix [for]="disbursementPicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{ 'labels.inputs.Disbursement on' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Fund" | translate}}</mat-label>
<mat-select formControlName="fundId">
<mat-option *ngFor="let fund of fundOptions" [value]="fund.id">
{{ fund.name }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-form-field fxFlex="48%" (click)="submitPicker.open()">
<mat-label>{{"labels.inputs.Submitted on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="submitPicker" required
formControlName="submittedOnDate">
<mat-datepicker-toggle matSuffix [for]="submitPicker"></mat-datepicker-toggle>
<mat-datepicker #submitPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{"labels.inputs.Submitted on" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Savings Linkage' | translate }}</h3>
<mat-form-field fxFlex="48%" (click)="disbursementPicker.open()">
<mat-label>{{"labels.inputs.Disbursement on" | translate}}</mat-label>
<input matInput [min]="loansAccountDetailsForm.value.submittedOnDate" [max]="maxDate" [matDatepicker]="disbursementPicker" required
formControlName="expectedDisbursementDate">
<mat-datepicker-toggle matSuffix [for]="disbursementPicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{"labels.inputs.Disbursement on" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Link savings' | translate }}</mat-label>
<mat-select formControlName="linkAccountId">
<mat-option *ngFor="let savingaccount of gsimData" [value]="savingaccount.id">
{{ savingaccount.accountNumber }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Savings Linkage" | translate}}</h3>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Link savings" | translate}}</mat-label>
<mat-select formControlName="linkAccountId">
<mat-option *ngFor="let savingaccount of gsimData" [value]="savingaccount.id">
{{ savingaccount.accountNumber }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
</button>
<button mat-raised-button matStepperNext>
{{"labels.buttons.Next" | translate}}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</form>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</form>
@@ -1,275 +1,300 @@
<div fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Details' | translate }}</h3>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Details" | translate}}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Product" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.productId | find:loansAccountTemplate.productOptions:'id':'name' }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.loanOfficerId">
<span fxFlex="40%">{{"labels.inputs.Loan officer" | translate}}:</span>
<span
fxFlex="60%">{{ loansAccount.loanOfficerId | find:loansAccountProductTemplate.loanOfficerOptions:'id':'displayName'}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.loanPurposeId">
<span fxFlex="40%">{{"labels.inputs.Loan purpose" | translate}}:</span>
<span
fxFlex="60%">{{ loansAccount.loanPurposeId | find:loansAccountProductTemplate.loanPurposeOptions:'id':'name'}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.fundId">
<span fxFlex="40%">{{"labels.inputs.Fund" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.fundId | find:loansAccountProductTemplate.fundOptions:'id':'name'}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Submitted on" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.submittedOnDate | dateFormat }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Disbursement on" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.expectedDisbursementDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.externalId">
<span fxFlex="40%">{{"labels.inputs.External id" | translate}}:</span>
<span fxFlex="60%">
<mifosx-external-identifier externalId="{{loansAccount.externalId}}"></mifosx-external-identifier>
</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Terms" | translate}}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Principal" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.principal }} {{loansAccountProductTemplate.currency.DisplaySymbol}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Loan term" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.loanTermFrequency }}
{{loansAccount.loanTermFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions:'id':'name'}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Number of repayments" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.numberOfRepayments }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Repaid every" | translate}}:</span>
<span fxFlex="60%">{{loansAccount.repaymentEvery}}
{{loansAccount.repaymentFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions:'id':'name'}}
{{loansAccount.repaymentFrequencyNthDayType | find: loansAccountProductTemplate.repaymentFrequencyNthDayTypeOptions:'id': 'name'}}
{{loansAccount.repaymentFrequencyDayOfWeekType | find: loansAccountProductTemplate.repaymentFrequencyDaysOfWeekTypeOptions:'id': 'name'}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.repaymentsStartingFromDate">
<span fxFlex="40%">{{"labels.inputs.First repayment on" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.repaymentsStartingFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestChargedFromDate">
<span fxFlex="40%">{{"labels.inputs.Interest charged from" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.interestChargedFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestRatePerPeriod">
<span fxFlex="40%">{{"labels.inputs.Nominal interest rate" | translate}}:</span>
<span
fxFlex="60%">{{loansAccount.interestRatePerPeriod}}&nbsp;&nbsp;{{loansAccountProductTemplate.interestRateFrequencyType.value}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestType">
<span fxFlex="40%">{{"labels.inputs.Interest method" | translate}}: </span>
<span fxFlex="60%">{{loansAccount.interestType}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.isEqualAmortization">
<span fxFlex="40%">{{"labels.inputs.Is Equal Amortization" | translate}}:</span>
<span fxFlex="60%">{{loansAccount.isEqualAmortization}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Amortization" | translate}}</span>
<span
fxFlex="60%">{{ loansAccount.amortizationType | find:loansAccountProductTemplate.amortizationTypeOptions:'id':'value' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Interest calculation period" | translate}}: </span>
<span
fxFlex="60%">{{ loansAccount.interestCalculationPeriodType | find:loansAccountProductTemplate.interestCalculationPeriodTypeOptions:'id':'value' }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.allowPartialPeriodInterestCalcualtion">
<span fxFlex="40%">{{"labels.inputs.Calculate interest for exact days in partial period" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.allowPartialPeriodInterestCalcualtion }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.inArrearsTolerance">
<span fxFlex="40%">{{"labels.inputs.Arrears tolerance" | translate}}: </span>
<span
fxFlex="60%">{{loansAccount.inArrearsTolerance}}&nbsp;{{loansAccountProductTemplate.currency.displaySymbol}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestCharged">
<span fxFlex="40%">{{"labels.inputs.Interest free period" | translate}}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestCharged }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Repayment strategy" | translate}}: </span>
<span
fxFlex="60%">{{ loansAccount.transactionProcessingStrategyCode | find:loansAccountTemplate.transactionProcessingStrategyOptions:'code':'name' }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Moratorium" | translate}}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill *ngIf="loansAccount.graceOnPrincipalPayment">
<span fxFlex="40%">{{"labels.inputs.On principal payment" | translate}}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnPrincipalPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestPayment">
<span fxFlex="40%">{{"labels.inputs.On interest payment" | translate}}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnArrearsAgeing">
<span fxFlex="40%">{{"labels.inputs.On Arrears Aging" | translate}}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnArrearsAgeing }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.isTopup">
<span fxFlex="40%">{{"labels.inputs.Is Topup Loan" | translate}}? </span>
<span fxFlex="60%">{{ loansAccount.isTopup }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Recalculate Interest" | translate}}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.isInterestRecalculationEnabled| yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate?.daysInMonthType">
<span fxFlex="40%">{{"labels.inputs.Days in month" | translate}}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.daysInMonthType.value }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.charges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Charges" | translate}}</h3>
<mat-divider fxFlexFill></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="loansAccount.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 }}
</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 }}
</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">
<span
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'">
{{(charge.dueDate | dateFormat) || 'Unassigned'}}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{(charge.feeOnMonthDay | dateFormat) || 'Unassigned'}}
</span>
<span
*ngIf="!(charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee')">
{{"labels.inputs.N/A" | translate}}
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="chargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns;"></tr>
</table>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate.overdueCharges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 fxFlex="98%" class="mat-h3">{{"labels.heading.Overdue Charges" | translate}}</h3>
<mat-divider fxFlex="98%"></mat-divider>
<table mat-table class="mat-elevation-z1" [dataSource]="loansAccountProductTemplate.overdueCharges">
<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="type">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Type" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </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="collectedon">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Collected On" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="overdueChargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns;"></tr>
</table>
</div>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Product' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.productId | find: loansAccountTemplate.productOptions : 'id' : 'name' }}</span>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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 fxFlexFill *ngIf="loansAccount.loanOfficerId">
<span fxFlex="40%">{{ 'labels.inputs.Loan officer' | translate }}:</span>
<span fxFlex="60%">{{
loansAccount.loanOfficerId | find: loansAccountProductTemplate.loanOfficerOptions : 'id' : 'displayName'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.loanPurposeId">
<span fxFlex="40%">{{ 'labels.inputs.Loan purpose' | translate }}:</span>
<span fxFlex="60%">{{
loansAccount.loanPurposeId | find: loansAccountProductTemplate.loanPurposeOptions : 'id' : 'name'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.fundId">
<span fxFlex="40%">{{ 'labels.inputs.Fund' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.fundId | find: loansAccountProductTemplate.fundOptions : 'id' : 'name' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Submitted on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.submittedOnDate | dateFormat }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Disbursement on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.expectedDisbursementDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.externalId">
<span fxFlex="40%">{{ 'labels.inputs.External id' | translate }}:</span>
<span fxFlex="60%">
<mifosx-external-identifier externalId="{{ loansAccount.externalId }}"></mifosx-external-identifier>
</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Terms' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Principal' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.principal }} {{ loansAccountProductTemplate.currency.DisplaySymbol }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Loan term' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.loanTermFrequency }}
{{
loansAccount.loanTermFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions : 'id' : 'name'
}}</span
>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Number of repayments' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.numberOfRepayments }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Repaid every' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.repaymentEvery }}
{{
loansAccount.repaymentFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions : 'id' : 'name'
}}
{{
loansAccount.repaymentFrequencyNthDayType
| find: loansAccountProductTemplate.repaymentFrequencyNthDayTypeOptions : 'id' : 'name'
}}
{{
loansAccount.repaymentFrequencyDayOfWeekType
| find: loansAccountProductTemplate.repaymentFrequencyDaysOfWeekTypeOptions : 'id' : 'name'
}}</span
>
</div>
<div fxFlexFill *ngIf="loansAccount.repaymentsStartingFromDate">
<span fxFlex="40%">{{ 'labels.inputs.First repayment on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.repaymentsStartingFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestChargedFromDate">
<span fxFlex="40%">{{ 'labels.inputs.Interest charged from' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.interestChargedFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestRatePerPeriod">
<span fxFlex="40%">{{ 'labels.inputs.Nominal interest rate' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.interestRatePerPeriod }}&nbsp;&nbsp;{{
loansAccountProductTemplate.interestRateFrequencyType.value
}}</span
>
</div>
<div fxFlexFill *ngIf="loansAccount.interestType">
<span fxFlex="40%">{{ 'labels.inputs.Interest method' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.interestType }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.isEqualAmortization">
<span fxFlex="40%">{{ 'labels.inputs.Is Equal Amortization' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.isEqualAmortization }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Amortization' | translate }}</span>
<span fxFlex="60%">{{
loansAccount.amortizationType | find: loansAccountProductTemplate.amortizationTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest calculation period' | translate }}: </span>
<span fxFlex="60%">{{
loansAccount.interestCalculationPeriodType
| find: loansAccountProductTemplate.interestCalculationPeriodTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.allowPartialPeriodInterestCalcualtion">
<span fxFlex="40%">{{ 'labels.inputs.Calculate interest for exact days in partial period' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.allowPartialPeriodInterestCalcualtion }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.inArrearsTolerance">
<span fxFlex="40%">{{ 'labels.inputs.Arrears tolerance' | translate }}: </span>
<span fxFlex="60%"
>{{ loansAccount.inArrearsTolerance }}&nbsp;{{ loansAccountProductTemplate.currency.displaySymbol }}</span
>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestCharged">
<span fxFlex="40%">{{ 'labels.inputs.Interest free period' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestCharged }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Repayment strategy' | translate }}: </span>
<span fxFlex="60%">{{
loansAccount.transactionProcessingStrategyCode
| find: loansAccountTemplate.transactionProcessingStrategyOptions : 'code' : 'name'
}}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Moratorium' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill *ngIf="loansAccount.graceOnPrincipalPayment">
<span fxFlex="40%">{{ 'labels.inputs.On principal payment' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnPrincipalPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestPayment">
<span fxFlex="40%">{{ 'labels.inputs.On interest payment' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnArrearsAgeing">
<span fxFlex="40%">{{ 'labels.inputs.On Arrears Aging' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnArrearsAgeing }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.isTopup">
<span fxFlex="40%">{{ 'labels.inputs.Is Topup Loan' | translate }}? </span>
<span fxFlex="60%">{{ loansAccount.isTopup }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Recalculate Interest' | translate }}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.isInterestRecalculationEnabled | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate?.daysInMonthType">
<span fxFlex="40%">{{ 'labels.inputs.Days in month' | translate }}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.daysInMonthType.value }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.charges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Charges' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="loansAccount.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 }}
</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 }}
</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">
<span
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'"
>
{{ (charge.dueDate | dateFormat) || 'Unassigned' }}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{ (charge.feeOnMonthDay | dateFormat) || 'Unassigned' }}
</span>
<span
*ngIf="
!(
charge.chargeTimeType.value === 'Monthly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date' ||
charge.chargeTimeType.value === 'Weekly Fee'
)
"
>
{{ 'labels.inputs.N/A' | translate }}
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="chargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns"></tr>
</table>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate.overdueCharges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 fxFlex="98%" class="mat-h3">{{ 'labels.heading.Overdue Charges' | translate }}</h3>
<mat-divider fxFlex="98%"></mat-divider>
<table mat-table class="mat-elevation-z1" [dataSource]="loansAccountProductTemplate.overdueCharges">
<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="type">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeCalculationType.value }}</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="collectedon">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Collected On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType.value }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="overdueChargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns"></tr>
</table>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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>
@@ -1,129 +1,144 @@
<form [formGroup]="loansAccountTermsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Term Options' | translate }}</h4>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Loan Term' | translate }}</mat-label>
<input matInput required formControlName="loanTermFrequency" />
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequency.hasError('required')">
{{ 'labels.inputs.Loan Term' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Term Options" | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select required formControlName="loanTermFrequencyType">
<mat-option *ngFor="let type of termFrequencyTypeData" [value]="type.id">
{{ type.value }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequencyType.hasError('required')">
{{ 'labels.inputs.Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Loan Term" | translate}}</mat-label>
<input matInput required formControlName="loanTermFrequency">
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequency.hasError('required')">
{{"labels.inputs.Loan Term" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Number of repayments' | translate }}</mat-label>
<input type="number" matInput formControlName="numberOfRepayments" />
<mat-error *ngIf="loansAccountTermsForm.controls.numberOfRepayments.hasError('required')">
{{ 'labels.inputs.Number of repayments' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Frequency" | translate}}</mat-label>
<mat-select required formControlName="loanTermFrequencyType">
<mat-option *ngFor="let type of termFrequencyTypeData" [value]="type.id">
{{ type.value }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequencyType.hasError('required')">
{{"labels.inputs.Frequency" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="repaymentsPicker.open()">
<mat-label>{{ 'labels.inputs.First repayment on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="repaymentsPicker"
formControlName="repaymentsStartingFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="repaymentsPicker"></mat-datepicker-toggle>
<mat-datepicker #repaymentsPicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Number of repayments" | translate}}</mat-label>
<input type="number" matInput formControlName="numberOfRepayments">
<mat-error *ngIf="loansAccountTermsForm.controls.numberOfRepayments.hasError('required')">
{{"labels.inputs.Number of repayments" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Repaid Every' | translate }}</h4>
<mat-form-field fxFlex="48%" (click)="repaymentsPicker.open()">
<mat-label>{{"labels.inputs.First repayment on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="repaymentsPicker"
formControlName="repaymentsStartingFromDate">
<mat-datepicker-toggle matSuffix [for]="repaymentsPicker"></mat-datepicker-toggle>
<mat-datepicker #repaymentsPicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Repaid every' | translate }}</mat-label>
<input
matInput
required
formControlName="repaymentEvery"
[disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.repaymentEvery"
/>
<mat-error *ngIf="loansAccountTermsForm.controls.repaymentEvery.hasError('required')">
{{ 'labels.inputs.Repaid every' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Repaid Every" | translate}}</h4>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select
formControlName="repaymentFrequencyType"
required
[disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.repaymentEvery"
>
<mat-option *ngFor="let repaymentFrequencyType of termFrequencyTypeData" [value]="repaymentFrequencyType.id">
{{ repaymentFrequencyType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Repaid every" | translate}}</mat-label>
<input matInput required formControlName="repaymentEvery"
[disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.repaymentEvery">
<mat-error *ngIf="loansAccountTermsForm.controls.repaymentEvery.hasError('required')">
{{"labels.inputs.Repaid every" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{ 'labels.inputs.Select On' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyNthDayType">
<mat-option
*ngFor="let repaymentFrequencyNthDayType of repaymentFrequencyNthDayTypeData"
[value]="repaymentFrequencyNthDayType.id"
>
{{ repaymentFrequencyNthDayType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Frequency" | translate}}</mat-label>
<mat-select formControlName="repaymentFrequencyType" required
[disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.repaymentEvery">
<mat-option *ngFor="let repaymentFrequencyType of termFrequencyTypeData"
[value]="repaymentFrequencyType.id">
{{ repaymentFrequencyType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{ 'labels.inputs.Select Day' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyDayOfWeekType">
<mat-option
*ngFor="let repaymentFrequencyDayOfWeekType of repaymentFrequencyDaysOfWeekTypeData"
[value]="repaymentFrequencyDayOfWeekType.id"
>
{{ repaymentFrequencyDayOfWeekType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{"labels.inputs.Select On" | translate}}</mat-label>
<mat-select formControlName="repaymentFrequencyNthDayType">
<mat-option
*ngFor="let repaymentFrequencyNthDayType of repaymentFrequencyNthDayTypeData"
[value]="repaymentFrequencyNthDayType.id">
{{ repaymentFrequencyNthDayType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{"labels.inputs.Select Day" | translate}}</mat-label>
<mat-select formControlName="repaymentFrequencyDayOfWeekType">
<mat-option
*ngFor="let repaymentFrequencyDayOfWeekType of repaymentFrequencyDaysOfWeekTypeData"
[value]="repaymentFrequencyDayOfWeekType.id">
{{ repaymentFrequencyDayOfWeekType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="interestPicker.open()">
<mat-label>{{"labels.inputs.Interest charged from" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="interestPicker"
formControlName="interestChargedFromDate">
<mat-datepicker-toggle matSuffix [for]="interestPicker"></mat-datepicker-toggle>
<mat-datepicker #interestPicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="interestPicker.open()">
<mat-label>{{ 'labels.inputs.Interest charged from' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="interestPicker"
formControlName="interestChargedFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="interestPicker"></mat-datepicker-toggle>
<mat-datepicker #interestPicker></mat-datepicker>
</mat-form-field>
<ng-container *ngIf="!loansAccountProductTemplate?.isLoanProductLinkedToFloatingRate">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Nominal interest rate" | translate}}</mat-label>
<input type="number" matInput formControlName="interestRatePerPeriod">
<mat-label>{{ 'labels.inputs.Nominal interest rate' | translate }}</mat-label>
<input type="number" matInput formControlName="interestRatePerPeriod" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Interest method" | translate}}</mat-label>
<mat-select [disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.interestType"
formControlName="interestType">
<mat-option *ngFor="let interestType of interestTypeData"
[value]="interestType.id">
{{ interestType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{ 'labels.inputs.Interest method' | translate }}</mat-label>
<mat-select
[disabled]="!loansAccountProductTemplate?.product.allowAttributeOverrides.interestType"
formControlName="interestType"
>
<mat-option *ngFor="let interestType of interestTypeData" [value]="interestType.id">
{{ interestType.value }}
</mat-option>
</mat-select>
</mat-form-field>
</ng-container>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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 matStepperNext>
{{"labels.buttons.Next" | translate}}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<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 matStepperNext>
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</form>
@@ -1,46 +1,46 @@
<mat-card class="loan-card">
<mat-card-content>
<h2> {{"labels.heading.GLIM Account Overview" | translate}}</h2>
<h2>{{ 'labels.heading.GLIM Account Overview' | translate }}</h2>
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="loanId">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Loan Id" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Loan Id' | translate }}</th>
<td mat-cell *matCellDef="let element">
{{element.childLoanId}} </td>
{{ element.childLoanId }}
</td>
</ng-container>
<ng-container matColumnDef="clientId">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client ID" | translate}} </th>
<td mat-cell *matCellDef="let element">{{element.clientId}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client ID' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.clientId }}</td>
</ng-container>
<ng-container matColumnDef="clientName">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client Name" | translate}} </th>
<td mat-cell *matCellDef="let element">{{element.clientName}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client Name' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.clientName }}</td>
</ng-container>
<ng-container matColumnDef="loanAccountNumber">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Loan Account Number" | translate}} </th>
<td mat-cell *matCellDef="let element"> {{element.childLoanAccountNo}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Loan Account Number' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.childLoanAccountNo }}</td>
</ng-container>
<ng-container matColumnDef="clientPrincipalLoan">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client Principal Loan" | translate}} </th>
<td mat-cell *matCellDef="let element" > {{element.childPrincipalAmount}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client Principal Loan' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.childPrincipalAmount }}</td>
</ng-container>
<ng-container matColumnDef="groupPrincipalLoan">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Group Principal Loan" | translate}} </th>
<td mat-cell *matCellDef="let element" > {{element.parentPrincipalAmount}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Group Principal Loan' | translate }}</th>
<td mat-cell *matCellDef="let element">{{ element.parentPrincipalAmount }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row [routerLink]="['../../', row.childLoanId, 'general']" *matRowDef="let row; columns: displayedColumns;"></tr>
<tr
mat-row
[routerLink]="['../../', row.childLoanId, 'general']"
*matRowDef="let row; columns: displayedColumns"
></tr>
</table>
</mat-card-content>
</mat-card>
@@ -1,7 +1,6 @@
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Charge" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Charge' | translate }}</mat-label>
<mat-select #charge>
<mat-option *ngFor="let charge of chargeData" [value]="charge">
{{ charge.name }}
@@ -12,29 +11,33 @@
<div fxFlex="48%" fxFlexAlign="center">
<button type="button" mat-raised-button color="primary" (click)="addCharge(charge)" [disabled]="!charge.value">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{"labels.buttons.Add" | translate}}
{{ 'labels.buttons.Add' | translate }}
</button>
</div>
<table fxFlex="98%" class="mat-elevation-z1" mat-table [dataSource]="chargesDataSource"
[hidden]="chargesDataSource.length === 0">
<table
fxFlex="98%"
class="mat-elevation-z1"
mat-table
[dataSource]="chargesDataSource"
[hidden]="chargesDataSource.length === 0"
>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.name" | translate}} </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> {{"labels.inputs.Type" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.amount }}
<button mat-icon-button color="primary" (click)="editChargeAmount(charge)">
@@ -44,36 +47,52 @@
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Collected On" | translate}} </th>
<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>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<span
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'">
{{(charge.dueDate | dateFormat) || 'Unassigned'}}
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'"
>
{{ (charge.dueDate | dateFormat) || 'Unassigned' }}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{(charge.feeOnMonthDay | dateFormat) || 'Unassigned'}}
{{ (charge.feeOnMonthDay | dateFormat) || 'Unassigned' }}
</span>
<span
*ngIf="!(charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee')">
{{"labels.inputs.N/A" | translate}}
*ngIf="
!(
charge.chargeTimeType.value === 'Monthly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date' ||
charge.chargeTimeType.value === 'Weekly Fee'
)
"
>
{{ 'labels.inputs.N/A' | translate }}
</span>
<button mat-icon-button color="primary" *ngIf="charge.chargeTimeType.value === 'Weekly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date'" (click)="editChargeDate(charge)">
<button
mat-icon-button
color="primary"
*ngIf="
charge.chargeTimeType.value === 'Weekly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date'
"
(click)="editChargeDate(charge)"
>
<fa-icon icon="pen"></fa-icon>
</button>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<button mat-icon-button color="warn" (click)="deleteCharge(charge)">
<fa-icon icon="trash"></fa-icon>
@@ -82,52 +101,49 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="chargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns"></tr>
</table>
<mat-divider fxFlex="98%"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Overdue Charges" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Overdue Charges' | translate }}</h4>
<table mat-table class="mat-elevation-z1" [dataSource]="overDueChargesDataSource">
<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>
<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="type">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Type" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeCalculationType.value }}</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>
<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="collectedon">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Collected On" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Collected On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType.value }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="overdueChargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns"></tr>
</table>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext [disabled]="!loansAccountFormValid">
{{"labels.buttons.Next" | translate}}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
<button mat-raised-button *ngIf="loanId" [routerLink]="['../', 'general']">
{{"labels.buttons.Cancel" | translate}}
{{ 'labels.buttons.Cancel' | translate }}
</button>
</div>
@@ -1,51 +1,68 @@
<form [formGroup]="datatableForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div *ngFor="let datatableInput of datatableInputs" fxFlex="48%">
<mat-form-field fxFlex="100%" *ngIf="!isBoolean(datatableInput.columnDisplayType)">
<mat-label>{{ getInputName(datatableInput) }}</mat-label>
<mat-label>{{getInputName(datatableInput)}}</mat-label>
<mat-select *ngIf="isDropdown(datatableInput.columnDisplayType)" formControlName="{{datatableInput.controlName}}">
<mat-select
*ngIf="isDropdown(datatableInput.columnDisplayType)"
formControlName="{{ datatableInput.controlName }}"
>
<mat-option *ngFor="let code of datatableInput.columnValues" [value]="code.id">
{{ code.value }}
</mat-option>
</mat-select>
<input matInput type="number" *ngIf="isNumeric(datatableInput.columnDisplayType)"
formControlName="{{datatableInput.controlName}}">
<input
matInput
type="number"
*ngIf="isNumeric(datatableInput.columnDisplayType)"
formControlName="{{ datatableInput.controlName }}"
/>
<input matInput *ngIf="isString(datatableInput.columnDisplayType)"
formControlName="{{datatableInput.controlName}}">
<input
matInput
*ngIf="isString(datatableInput.columnDisplayType)"
formControlName="{{ datatableInput.controlName }}"
/>
<textarea matInput *ngIf="isText(datatableInput.columnDisplayType)"
formControlName="{{datatableInput.controlName}}"></textarea>
<textarea
matInput
*ngIf="isText(datatableInput.columnDisplayType)"
formControlName="{{ datatableInput.controlName }}"
></textarea>
<span *ngIf="isDate(datatableInput.columnDisplayType)" (click)="datePicker.open()">
<input matInput [matDatepicker]="datePicker" formControlName="{{datatableInput.controlName}}" class="date-picker">
<input
matInput
[matDatepicker]="datePicker"
formControlName="{{ datatableInput.controlName }}"
class="date-picker"
/>
<mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
<mat-datepicker #datePicker></mat-datepicker>
</span>
</mat-form-field>
<mat-checkbox *ngIf="isBoolean(datatableInput.columnDisplayType)" formControlName="{{datatableInput.controlName}}"
labelPosition="before" class="margin-v">
{{getInputName(datatableInput)}}
<mat-checkbox
*ngIf="isBoolean(datatableInput.columnDisplayType)"
formControlName="{{ datatableInput.controlName }}"
labelPosition="before"
class="margin-v"
>
{{ getInputName(datatableInput) }}
</mat-checkbox>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{"labels.buttons.Next" | translate}}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
</form>
@@ -1,10 +1,12 @@
<form [formGroup]="loansAccountDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="72%">
<mat-label>{{"labels.inputs.Product Name" | translate}}</mat-label>
<mat-select required matTooltip="{{ 'tooltips.Name of the loan product' | translate}}" formControlName="productId">
<mat-label>{{ 'labels.inputs.Product Name' | translate }}</mat-label>
<mat-select
required
matTooltip="{{ 'tooltips.Name of the loan product' | translate }}"
formControlName="productId"
>
<mat-option>
<ngx-mat-select-search [formControl]="filterFormCtrl"></ngx-mat-select-search>
</mat-option>
@@ -13,21 +15,24 @@
</mat-option>
</mat-select>
<mat-error>
{{"labels.inputs.Product Name" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Product Name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" *ngIf="loanProductSelected">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.External id" | translate}}</mat-label>
<input matInput formControlName="externalId" matTooltip="{{ 'tooltips.Provides an external id' | translate}}">
<mat-label>{{ 'labels.inputs.External id' | translate }}</mat-label>
<input matInput formControlName="externalId" matTooltip="{{ 'tooltips.Provides an external id' | translate }}" />
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loanProductSelected">
<mat-label>{{"labels.inputs.Loan officer" | translate}}</mat-label>
<mat-select formControlName="loanOfficerId" matTooltip="{{ 'tooltips.Financial institution representative' | translate}}">
<mat-label>{{ 'labels.inputs.Loan officer' | translate }}</mat-label>
<mat-select
formControlName="loanOfficerId"
matTooltip="{{ 'tooltips.Financial institution representative' | translate }}"
>
<mat-option *ngFor="let loanOfficer of loanOfficerOptions" [value]="loanOfficer.id">
{{ loanOfficer.displayName }}
</mat-option>
@@ -35,8 +40,8 @@
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Loan Purpose" | translate}}</mat-label>
<mat-select formControlName="loanPurposeId" matTooltip="{{ 'tooltips.Provides an indication' | translate}}">
<mat-label>{{ 'labels.inputs.Loan Purpose' | translate }}</mat-label>
<mat-select formControlName="loanPurposeId" matTooltip="{{ 'tooltips.Provides an indication' | translate }}">
<mat-option *ngFor="let loanPurpose of loanPurposeOptions" [value]="loanPurpose.id">
{{ loanPurpose.name }}
</mat-option>
@@ -44,7 +49,7 @@
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Fund" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Fund' | translate }}</mat-label>
<mat-select formControlName="fundId">
<mat-option *ngFor="let fund of fundOptions" [value]="fund.id">
{{ fund.name }}
@@ -53,33 +58,49 @@
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="submitPicker.open()">
<mat-label>{{"labels.inputs.Submitted on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="submitPicker" matTooltip="{{ 'tooltips.Date the loan account application' | translate}}" required
formControlName="submittedOnDate">
<mat-label>{{ 'labels.inputs.Submitted on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="submitPicker"
matTooltip="{{ 'tooltips.Date the loan account application' | translate }}"
required
formControlName="submittedOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="submitPicker"></mat-datepicker-toggle>
<mat-datepicker #submitPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{"labels.inputs.Submitted on" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Submitted on' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="disbursementPicker.open()">
<mat-label>{{"labels.inputs.Disbursement on" | translate}}</mat-label>
<input matInput [min]="loansAccountDetailsForm.value.submittedOnDate" [max]="maxDate" [matDatepicker]="disbursementPicker" matTooltip="{{ 'tooltips.Date that the loan account disbursed' | translate}}" required
formControlName="expectedDisbursementDate">
<mat-label>{{ 'labels.inputs.Disbursement on' | translate }}</mat-label>
<input
matInput
[min]="loansAccountDetailsForm.value.submittedOnDate"
[max]="maxDate"
[matDatepicker]="disbursementPicker"
matTooltip="{{ 'tooltips.Date that the loan account disbursed' | translate }}"
required
formControlName="expectedDisbursementDate"
/>
<mat-datepicker-toggle matSuffix [for]="disbursementPicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementPicker></mat-datepicker>
<mat-error *ngIf="loansAccountDetailsForm.controls.submittedOnDate?.hasError('required')">
{{"labels.inputs.Disbursement on" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Disbursement on' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Savings Linkage" | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Savings Linkage' | translate }}</h3>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Link savings" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Link savings' | translate }}</mat-label>
<mat-select formControlName="linkAccountId">
<mat-option *ngFor="let savingaccount of accountLinkingOptions" [value]="savingaccount.id">
({{ savingaccount.accountNo }}) {{ savingaccount.productName }}
@@ -88,22 +109,21 @@
</mat-form-field>
<mat-checkbox fxFlex="48%" formControlName="createStandingInstructionAtDisbursement">
<p>{{"labels.inputs.Create standing instructions at disbursement" | translate}}</p>
<p>{{ 'labels.inputs.Create standing instructions at disbursement' | translate }}</p>
</mat-checkbox>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{"labels.buttons.Next" | translate}}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
<button mat-raised-button *ngIf="loanId" [routerLink]="['../', 'general']">
{{"labels.buttons.Cancel" | translate}}
{{ 'labels.buttons.Cancel' | translate }}
</button>
</div>
</form>
@@ -1,296 +1,321 @@
<div fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Details" | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Details' | translate }}</h3>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Product" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.productId | find:loansAccountTemplate.productOptions:'id':'name' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Product' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.productId | find: loansAccountTemplate.productOptions : 'id' : 'name' }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.loanOfficerId">
<span fxFlex="40%">{{"labels.inputs.Loan officer" | translate}}:</span>
<span
fxFlex="60%">{{ loansAccount.loanOfficerId | find:loansAccountProductTemplate.loanOfficerOptions:'id':'displayName'}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Loan officer' | translate }}:</span>
<span fxFlex="60%">{{
loansAccount.loanOfficerId | find: loansAccountProductTemplate.loanOfficerOptions : 'id' : 'displayName'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.loanPurposeId">
<span fxFlex="40%">{{"labels.inputs.Loan purpose" | translate}}:</span>
<span
fxFlex="60%">{{ loansAccount.loanPurposeId | find:loansAccountProductTemplate.loanPurposeOptions:'id':'name'}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Loan purpose' | translate }}:</span>
<span fxFlex="60%">{{
loansAccount.loanPurposeId | find: loansAccountProductTemplate.loanPurposeOptions : 'id' : 'name'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.fundId">
<span fxFlex="40%">{{"labels.inputs.Fund" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.fundId | find:loansAccountProductTemplate.fundOptions:'id':'name'}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Fund' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.fundId | find: loansAccountProductTemplate.fundOptions : 'id' : 'name' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Submitted on" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Submitted on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.submittedOnDate | dateFormat }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Disbursement on" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Disbursement on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.expectedDisbursementDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.externalId">
<span fxFlex="40%">{{"labels.inputs.External id" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.External id' | translate }}:</span>
<span fxFlex="60%">
<mifosx-external-identifier externalId="{{loansAccount.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ loansAccount.externalId }}"></mifosx-external-identifier>
</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Terms" | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Terms' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Principal" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Principal' | translate }}:</span>
<span fxFlex="60%">
{{ loansAccount.principalAmount | currency:loansAccountProductTemplate.currency.code:'symbol-narrow':'1.2-2'}}
<span class="m-l-5">{{loansAccountProductTemplate.currency.code}}</span>
{{
loansAccount.principalAmount | currency: loansAccountProductTemplate.currency.code : 'symbol-narrow' : '1.2-2'
}}
<span class="m-l-5">{{ loansAccountProductTemplate.currency.code }}</span>
</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Loan Term" | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.loanTermFrequency }}
{{loansAccount.loanTermFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions:'id':'name'}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Loan Term' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.loanTermFrequency }}
{{
loansAccount.loanTermFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions : 'id' : 'name'
}}</span
>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Number of repayments" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Number of repayments' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.numberOfRepayments }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Repaid every" | translate}}:</span>
<span fxFlex="60%">{{loansAccount.repaymentEvery}}
{{loansAccount.repaymentFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions:'id':'name'}}
{{loansAccount.repaymentFrequencyNthDayType | find: loansAccountProductTemplate.repaymentFrequencyNthDayTypeOptions:'id': 'name'}}
{{loansAccount.repaymentFrequencyDayOfWeekType | find: loansAccountProductTemplate.repaymentFrequencyDaysOfWeekTypeOptions:'id': 'name'}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Repaid every' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.repaymentEvery }}
{{
loansAccount.repaymentFrequencyType | find: loansAccountProductTemplate.termFrequencyTypeOptions : 'id' : 'name'
}}
{{
loansAccount.repaymentFrequencyNthDayType
| find: loansAccountProductTemplate.repaymentFrequencyNthDayTypeOptions : 'id' : 'name'
}}
{{
loansAccount.repaymentFrequencyDayOfWeekType
| find: loansAccountProductTemplate.repaymentFrequencyDaysOfWeekTypeOptions : 'id' : 'name'
}}</span
>
</div>
<div fxFlexFill *ngIf="productEnableDownPayment">
<span fxFlex="40%">{{ 'labels.inputs.Enable Down Payments' | translate}}:</span>
<span fxFlex="60%">{{ loansAccount.enableDownPayment | yesNo }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Enable Down Payments' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.enableDownPayment | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.repaymentsStartingFromDate">
<span fxFlex="40%">{{"labels.inputs.First repayment on" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.First repayment on' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.repaymentsStartingFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestChargedFromDate">
<span fxFlex="40%">{{"labels.inputs.Interest charged from" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Interest charged from' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.interestChargedFromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.interestRatePerPeriod">
<span fxFlex="40%">{{"labels.inputs.Nominal interest rate" | translate}}:</span>
<span
fxFlex="60%">{{loansAccount.interestRatePerPeriod}}&nbsp;&nbsp;{{loansAccountProductTemplate.interestRateFrequencyType.value}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Nominal interest rate' | translate }}:</span>
<span fxFlex="60%"
>{{ loansAccount.interestRatePerPeriod }}&nbsp;&nbsp;{{
loansAccountProductTemplate.interestRateFrequencyType.value
}}</span
>
</div>
<div fxFlexFill *ngIf="loansAccount.interestType">
<span fxFlex="40%">{{"labels.inputs.Interest method" | translate}}: </span>
<span fxFlex="60%">{{loansAccount.interestType}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Interest method' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.interestType }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.isEqualAmortization">
<span fxFlex="40%">{{"labels.inputs.Is Equal Amortization" | translate}}:</span>
<span fxFlex="60%">{{loansAccount.isEqualAmortization}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Is Equal Amortization' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.isEqualAmortization }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Amortization" | translate}}</span>
<span
fxFlex="60%">{{ loansAccount.amortizationType | find:loansAccountProductTemplate.amortizationTypeOptions:'id':'value' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Amortization' | translate }}</span>
<span fxFlex="60%">{{
loansAccount.amortizationType | find: loansAccountProductTemplate.amortizationTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Interest calculation period" | translate}}: </span>
<span
fxFlex="60%">{{ loansAccount.interestCalculationPeriodType | find:loansAccountProductTemplate.interestCalculationPeriodTypeOptions:'id':'value' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Interest calculation period' | translate }}: </span>
<span fxFlex="60%">{{
loansAccount.interestCalculationPeriodType
| find: loansAccountProductTemplate.interestCalculationPeriodTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.allowPartialPeriodInterestCalcualtion">
<span fxFlex="40%">{{"labels.inputs.Calculate interest for exact days in partial period" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Calculate interest for exact days in partial period' | translate }}:</span>
<span fxFlex="60%">{{ loansAccount.allowPartialPeriodInterestCalcualtion }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.inArrearsTolerance">
<span fxFlex="40%">{{"labels.inputs.Arrears tolerance" | translate}}: </span>
<span
fxFlex="60%">{{loansAccount.inArrearsTolerance}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Arrears tolerance' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.inArrearsTolerance }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestCharged">
<span fxFlex="40%">{{"labels.inputs.Interest free period" | translate}}: </span>
<span fxFlex="40%">{{ 'labels.inputs.Interest free period' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestCharged }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Repayment strategy" | translate}}: </span>
<span
fxFlex="60%">{{ loansAccount.transactionProcessingStrategyCode | find:loansAccountProductTemplate.transactionProcessingStrategyOptions:'code':'name' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Repayment strategy' | translate }}: </span>
<span fxFlex="60%">{{
loansAccount.transactionProcessingStrategyCode
| find: loansAccountProductTemplate.transactionProcessingStrategyOptions : 'code' : 'name'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%"> {{"labels.inputs.Installment Amount" | translate}} </span>
<span fxFlex="40%"> {{ 'labels.inputs.Installment Amount' | translate }} </span>
<span fxFlex="60%"> {{ loansAccount.fixedEmiAmount | formatNumber }} </span>
</div>
<div fxFlexFill>
<span fxFlex="40%"> {{"labels.inputs.Balloon Repayment Amount" | translate}} </span>
<span fxFlex="40%"> {{ 'labels.inputs.Balloon Repayment Amount' | translate }} </span>
<span fxFlex="60%"> {{ loansAccount.balloonRepaymentAmount | formatNumber }} </span>
</div>
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Moratorium" | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Moratorium' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill *ngIf="loansAccount.graceOnPrincipalPayment">
<span fxFlex="40%">{{"labels.inputs.On principal payment" | translate}}: </span>
<span fxFlex="40%">{{ 'labels.inputs.On principal payment' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnPrincipalPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnInterestPayment">
<span fxFlex="40%">{{"labels.inputs.On interest payment" | translate}}: </span>
<span fxFlex="40%">{{ 'labels.inputs.On interest payment' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnInterestPayment }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.graceOnArrearsAgeing">
<span fxFlex="40%">{{"labels.inputs.On Arrears Aging" | translate}}: </span>
<span fxFlex="40%">{{ 'labels.inputs.On Arrears Aging' | translate }}: </span>
<span fxFlex="60%">{{ loansAccount.graceOnArrearsAgeing }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%"> {{"labels.inputs.Enable installment level Delinquency" | translate}} </span>
<span fxFlex="40%"> {{ 'labels.inputs.Enable installment level Delinquency' | translate }} </span>
<span fxFlex="60%"> {{ loansAccount.enableInstallmentLevelDelinquency | yesNo }} </span>
</div>
<div fxFlexFill *ngIf="loansAccount.isTopup">
<span fxFlex="40%">{{"labels.inputs.Is Topup Loan" | translate}}? </span>
<span fxFlex="40%">{{ 'labels.inputs.Is Topup Loan' | translate }}? </span>
<span fxFlex="60%">{{ loansAccount.isTopup }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Recalculate Interest" | translate}}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.isInterestRecalculationEnabled| yesNo }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Recalculate Interest' | translate }}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.isInterestRecalculationEnabled | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate?.daysInMonthType">
<span fxFlex="40%">{{"labels.inputs.Days in month" | translate}}: </span>
<span fxFlex="40%">{{ 'labels.inputs.Days in month' | translate }}: </span>
<span fxFlex="60%">{{ loansAccountProductTemplate?.daysInMonthType.value }}</span>
</div>
<div fxFlexFill *ngIf="loansAccount.charges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{"labels.heading.Charges" | translate}}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Charges' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="loansAccount.charges">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.name" | translate}} </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> {{"labels.inputs.Type" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.chargeCalculationType.value }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let charge">
{{ charge.amount }}
</td>
</ng-container>
<ng-container matColumnDef="chargeTimeType">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Collected On" | translate}} </th>
<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>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<span
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'">
{{(charge.dueDate | dateFormat) || 'Unassigned'}}
*ngIf="charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee'"
>
{{ (charge.dueDate | dateFormat) || 'Unassigned' }}
</span>
<span *ngIf="charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'">
{{(charge.feeOnMonthDay | dateFormat) || 'Unassigned'}}
{{ (charge.feeOnMonthDay | dateFormat) || 'Unassigned' }}
</span>
<span
*ngIf="!(charge.chargeTimeType.value === 'Monthly Fee' || charge.chargeTimeType.value === 'Annual Fee'
|| charge.chargeTimeType.value === 'Specified due date' || charge.chargeTimeType.value === 'Weekly Fee')">
{{"labels.inputs.N/A" | translate}}
*ngIf="
!(
charge.chargeTimeType.value === 'Monthly Fee' ||
charge.chargeTimeType.value === 'Annual Fee' ||
charge.chargeTimeType.value === 'Specified due date' ||
charge.chargeTimeType.value === 'Weekly Fee'
)
"
>
{{ 'labels.inputs.N/A' | translate }}
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="chargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: chargesDisplayedColumns"></tr>
</table>
</div>
<div fxFlexFill *ngIf="loansAccountProductTemplate.overdueCharges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 fxFlex="98%" class="mat-h3">{{"labels.heading.Overdue Charges" | translate}}</h3>
<h3 fxFlex="98%" class="mat-h3">{{ 'labels.heading.Overdue Charges' | translate }}</h3>
<mat-divider fxFlex="98%"></mat-divider>
<table mat-table class="mat-elevation-z1" [dataSource]="loansAccountProductTemplate.overdueCharges">
<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>
<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="type">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Type" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeCalculationType.value }}</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>
<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="collectedon">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Collected On" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Collected On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType.value }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="overdueChargesDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: overdueChargesDisplayedColumns"></tr>
</table>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button [routerLink]="['../..']">
{{"labels.buttons.Cancel" | translate}}
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" (click)="submitEvent.emit()">
{{"labels.buttons.Submit" | translate}}
{{ 'labels.buttons.Submit' | translate }}
</button>
</div>
@@ -1,25 +1,26 @@
<div fxLayout="row wrap" fxLayout.lt-md="column">
<button mat-flat-button color="primary" (click)="showRepaymentInfo()">
<fa-icon icon="calendar" class="m-r-10"></fa-icon>{{"labels.inputs.Generate Repayment Schedule" | translate}}
<fa-icon icon="calendar" class="m-r-10"></fa-icon>{{ 'labels.inputs.Generate Repayment Schedule' | translate }}
</button>
<mifosx-repayment-schedule-tab fxFlex="100%" [repaymentScheduleDetails]="repaymentScheduleDetails"
[currencyCode]="currencyCode">
<mifosx-repayment-schedule-tab
fxFlex="100%"
[repaymentScheduleDetails]="repaymentScheduleDetails"
[currencyCode]="currencyCode"
>
</mifosx-repayment-schedule-tab>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{"labels.buttons.Next" | translate}}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
<button mat-raised-button *ngIf="loanId" [routerLink]="['../', 'general']">
{{"labels.buttons.Cancel" | translate}}
{{ 'labels.buttons.Cancel' | translate }}
</button>
</div>
@@ -1,476 +1,634 @@
<form [formGroup]="loansAccountTermsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mifosx-input-amount fxFlex="48%" *ngIf="currency" [currency]="currency" [isRequired]="true"
<mifosx-input-amount
fxFlex="48%"
*ngIf="currency"
[currency]="currency"
[isRequired]="true"
[inputFormControl]="loansAccountTermsForm.controls.principalAmount"
[inputLabel]="'Principal'">
[inputLabel]="'Principal'"
>
</mifosx-input-amount>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Term Options" | translate}} <i class="fas fa-question" matTooltip="The loan term parameter in loan accounts
is the default-calculated field based on the number of repayments and repaid every value entered by the user"></i></h4>
<h4 fxFlex="98%" class="mat-h4">
{{ 'labels.heading.Term Options' | translate }}
<i
class="fas fa-question"
matTooltip="The loan term parameter in loan accounts
is the default-calculated field based on the number of repayments and repaid every value entered by the user"
></i>
</h4>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Loan Term" | translate}}</mat-label>
<input type="number" matInput required disabled formControlName="loanTermFrequency">
<mat-label>{{ 'labels.inputs.Loan Term' | translate }}</mat-label>
<input type="number" matInput required disabled formControlName="loanTermFrequency" />
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequency.hasError('required')">
{{"labels.inputs.Loan Term" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Loan Term' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Frequency" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select required formControlName="loanTermFrequencyType">
<mat-option *ngFor="let type of termFrequencyTypeData" [value]="type.id">
{{ type.value | translateKey:'catalogs' }}
{{ type.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.loanTermFrequencyType.hasError('required')">
{{"labels.inputs.Frequency" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="20%" *ngIf="hasFixedLength()">
<mat-label>{{"labels.inputs.Fixed Length" | translate}}</mat-label>
<input type="number" matInput formControlName="fixedLength">
<mat-label>{{ 'labels.inputs.Fixed Length' | translate }}</mat-label>
<input type="number" matInput formControlName="fixedLength" />
</mat-form-field>
<span fxFlex="20%" *ngIf="hasFixedLength()" class="label-field">{{ loansAccountTermsForm.value.loanTermFrequencyType | find:termFrequencyTypeData:'id':'value' }}</span>
<span fxFlex="20%" *ngIf="hasFixedLength()" class="label-field">{{
loansAccountTermsForm.value.loanTermFrequencyType | find: termFrequencyTypeData : 'id' : 'value'
}}</span>
<h4 fxFlex="98%" class="mat-h4">Repayments </h4>
<h4 fxFlex="98%" class="mat-h4">Repayments</h4>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Number of repayments" | translate}}</mat-label>
<input type="number" matInput formControlName="numberOfRepayments" matTooltip="Enter the total count of repayments that loan schedule has excluding the down-payment. Example:
If the loan account has 4 Installments including down-payment then number of repayments is equal to 3">
<mat-label>{{ 'labels.inputs.Number of repayments' | translate }}</mat-label>
<input
type="number"
matInput
formControlName="numberOfRepayments"
matTooltip="Enter the total count of repayments that loan schedule has excluding the down-payment. Example:
If the loan account has 4 Installments including down-payment then number of repayments is equal to 3"
/>
<mat-error *ngIf="loansAccountTermsForm.controls.numberOfRepayments.hasError('required')">
{{"labels.inputs.Number of repayments" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Number of repayments' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%" (click)="repaymentsPicker.open()">
<mat-label>{{"labels.inputs.First repayment on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" matTooltip="{{ 'tooltips.May be entered to override' | translate}}" [matDatepicker]="repaymentsPicker"
formControlName="repaymentsStartingFromDate">
<mat-label>{{ 'labels.inputs.First repayment on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
matTooltip="{{ 'tooltips.May be entered to override' | translate }}"
[matDatepicker]="repaymentsPicker"
formControlName="repaymentsStartingFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="repaymentsPicker"></mat-datepicker-toggle>
<mat-datepicker #repaymentsPicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="23%" (click)="interestPicker.open()">
<mat-label>{{"labels.inputs.Interest charged from" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="interestPicker" matTooltip="{{ 'tooltips.May be entered to override the date' | translate}}"
formControlName="interestChargedFromDate">
<mat-label>{{ 'labels.inputs.Interest charged from' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="interestPicker"
matTooltip="{{ 'tooltips.May be entered to override the date' | translate }}"
formControlName="interestChargedFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="interestPicker"></mat-datepicker-toggle>
<mat-datepicker #interestPicker></mat-datepicker>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Repaid Every" | translate}} <i class="fas fa-question" matTooltip="{{ 'tooltips.Fields are input to calculating the repayment schedule' | translate}}"></i></h4>
<h4 fxFlex="98%" class="mat-h4">
{{ 'labels.heading.Repaid Every' | translate }}
<i
class="fas fa-question"
matTooltip="{{ 'tooltips.Fields are input to calculating the repayment schedule' | translate }}"
></i>
</h4>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Repaid every" | translate}}</mat-label>
<input type="number" matInput required formControlName="repaymentEvery"
matTooltip="{{ 'tooltips.Fields are input to calculating the repayment schedule' | translate}}">
<mat-label>{{ 'labels.inputs.Repaid every' | translate }}</mat-label>
<input
type="number"
matInput
required
formControlName="repaymentEvery"
matTooltip="{{ 'tooltips.Fields are input to calculating the repayment schedule' | translate }}"
/>
<mat-error *ngIf="loansAccountTermsForm.controls.repaymentEvery.hasError('required')">
{{"labels.inputs.Repaid every" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Repaid every' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Frequency" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyType" disabled required>
<mat-option *ngFor="let repaymentFrequencyType of termFrequencyTypeData" [value]="repaymentFrequencyType.id">
{{ repaymentFrequencyType.value | translateKey:'catalogs' }}
{{ repaymentFrequencyType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="14%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{"labels.inputs.Select On" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Select On' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyNthDayType">
<mat-option *ngFor="let repaymentFrequencyNthDayType of repaymentFrequencyNthDayTypeData"
[value]="repaymentFrequencyNthDayType.id">
{{ repaymentFrequencyNthDayType.value | translateKey:'catalogs' }}
<mat-option
*ngFor="let repaymentFrequencyNthDayType of repaymentFrequencyNthDayTypeData"
[value]="repaymentFrequencyNthDayType.id"
>
{{ repaymentFrequencyNthDayType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="14%" *ngIf="loansAccountTermsForm.controls.repaymentFrequencyType.value === 2">
<mat-label>{{"labels.inputs.Select Day" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Select Day' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyDayOfWeekType">
<mat-option *ngFor="let repaymentFrequencyDayOfWeekType of repaymentFrequencyDaysOfWeekTypeData"
[value]="repaymentFrequencyDayOfWeekType.id">
{{ repaymentFrequencyDayOfWeekType.value | translateKey:'catalogs' }}
<mat-option
*ngFor="let repaymentFrequencyDayOfWeekType of repaymentFrequencyDaysOfWeekTypeData"
[value]="repaymentFrequencyDayOfWeekType.id"
>
{{ repaymentFrequencyDayOfWeekType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="enableDownPayment" matTooltip="Leave this checkbox checked if the loan has Down Payment, A Down Payment is
a sum a buyer pays upfront when purchasing a good. It represents a percentage of the total purchase price, and the balance is usually financed" class="margin-b" *ngIf="productEnableDownPayment">
{{'labels.inputs.Enable Down Payment' | translate}}
<mat-checkbox
fxFlex="73%"
labelPosition="before"
formControlName="enableDownPayment"
matTooltip="Leave this checkbox checked if the loan has Down Payment, A Down Payment is
a sum a buyer pays upfront when purchasing a good. It represents a percentage of the total purchase price, and the balance is usually financed"
class="margin-b"
*ngIf="productEnableDownPayment"
>
{{ 'labels.inputs.Enable Down Payment' | translate }}
</mat-checkbox>
<h4 fxFlex="98%" class="mat-h4">{{"labels.inputs.Nominal interest rate" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Nominal interest rate' | translate }}</h4>
<ng-container *ngIf="!loansAccountTermsData?.isLoanProductLinkedToFloatingRate">
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Nominal interest rate" | translate}} %</mat-label>
<input type="number" matInput formControlName="interestRatePerPeriod">
<mat-label>{{ 'labels.inputs.Nominal interest rate' | translate }} %</mat-label>
<input type="number" matInput formControlName="interestRatePerPeriod" />
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{'labels.inputs.Frequency' | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select formControlName="interestRateFrequencyType">
<mat-option *ngFor="let interestRateFrequencyType of interestRateFrequencyTypeData" [value]="interestRateFrequencyType.id">
{{ interestRateFrequencyType.value | translateKey:'catalogs' }}
<mat-option
*ngFor="let interestRateFrequencyType of interestRateFrequencyTypeData"
[value]="interestRateFrequencyType.id"
>
{{ interestRateFrequencyType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
<mat-error>
{{'labels.inputs.Nominal interest rate frequency' | translate}} {{'labels.commons.is' | translate}} <strong>{{'labels.commons.required' | translate}}</strong>
{{ 'labels.inputs.Nominal interest rate frequency' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Interest method" | translate}}</mat-label>
<mat-select formControlName="interestType" matTooltip="{{ 'tooltips.The Interest method value' | translate}}">
<mat-label>{{ 'labels.inputs.Interest method' | translate }}</mat-label>
<mat-select formControlName="interestType" matTooltip="{{ 'tooltips.The Interest method value' | translate }}">
<mat-option *ngFor="let interestType of interestTypeData" [value]="interestType.id">
{{ interestType.value | translateKey:'catalogs' }}
{{ interestType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Amortization" | translate}}</mat-label>
<mat-select required matTooltip="{{ 'tooltips.The Amortization value' | translate}}" formControlName="amortizationType">
<mat-label>{{ 'labels.inputs.Amortization' | translate }}</mat-label>
<mat-select
required
matTooltip="{{ 'tooltips.The Amortization value' | translate }}"
formControlName="amortizationType"
>
<mat-option *ngFor="let amortizationType of amortizationTypeData" [value]="amortizationType.id">
{{ amortizationType.value | translateKey:'catalogs' }}
{{ amortizationType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.amortizationType.hasError('required')">
{{"labels.inputs.Amortization Type" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Amortization Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%" *ngIf="isEqualPrincipalPayments()">
<mat-label>{{"labels.inputs.Principal Percentage Per Installment" | translate}}</mat-label>
<input type="number" matInput formControlName="fixedPrincipalPercentagePerInstallment">
<mat-label>{{ 'labels.inputs.Principal Percentage Per Installment' | translate }}</mat-label>
<input type="number" matInput formControlName="fixedPrincipalPercentagePerInstallment" />
</mat-form-field>
<mat-checkbox fxFlex="23%" formControlName="isEqualAmortization"
[checked]="loansAccountTermsData?.isEqualAmortization">
<p>{{"labels.inputs.Is Equal Amortization" | translate}}</p>
<mat-checkbox
fxFlex="23%"
formControlName="isEqualAmortization"
[checked]="loansAccountTermsData?.isEqualAmortization"
>
<p>{{ 'labels.inputs.Is Equal Amortization' | translate }}</p>
</mat-checkbox>
</ng-container>
<ng-container *ngIf="loansAccountTermsData?.isLoanProductLinkedToFloatingRate">
<div fxFlex="48%" fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Interest Method" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Interest Method' | translate }}</mat-label>
<mat-select formControlName="interestType">
<mat-option *ngFor="let interestType of interestTypeData" [value]="interestType.id">
{{ interestType.value | translateKey:'catalogs' }}
{{ interestType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Amortization" | translate}}</mat-label>
<mat-select required matTooltip="{{ 'tooltips.The Amortization value' | translate}}" formControlName="amortizationType">
<mat-label>{{ 'labels.inputs.Amortization' | translate }}</mat-label>
<mat-select
required
matTooltip="{{ 'tooltips.The Amortization value' | translate }}"
formControlName="amortizationType"
>
<mat-option *ngFor="let amortizationType of amortizationTypeData" [value]="amortizationType.id">
{{ amortizationType.value | translateKey:'catalogs' }}
{{ amortizationType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.amortizationType.hasError('required')">
{{"labels.inputs.Amortization Type" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Amortization Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="48%" formControlName="isFloatingInterestRate">
<p>{{"labels.inputs.Is Floating Rate" | translate}}?</p>
<p>{{ 'labels.inputs.Is Floating Rate' | translate }}?</p>
</mat-checkbox>
</div>
</ng-container>
<h4 fxFlex="98%" class="mat-h4">{{"labels.inputs.Loan Schedule" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Loan Schedule' | translate }}</h4>
<div fxFlex="48%" *ngIf="loanScheduleType">
<span fxFlex="40%"><p>{{"labels.inputs.Loan Schedule Type" | translate}}</p></span>
<span fxFlex="60%"><p>{{ loanScheduleType.value | translateKey:'catalogs' }}</p></span>
<span fxFlex="40%"
><p>{{ 'labels.inputs.Loan Schedule Type' | translate }}</p></span
>
<span fxFlex="60%"
><p>{{ loanScheduleType.value | translateKey: 'catalogs' }}</p></span
>
</div>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Repayment Strategy" | translate}}</mat-label>
<mat-select formControlName="transactionProcessingStrategyCode" matTooltip="{{ 'tooltips.The repayment strategy' | translate}}" [disabled]="repaymentStrategyDisabled">
<mat-option *ngFor="let transactionProcessingStrategy of transactionProcessingStrategyOptions" [value]="transactionProcessingStrategy.code">
{{ transactionProcessingStrategy.name | translateKey:'catalogs' }}
<mat-label>{{ 'labels.inputs.Repayment Strategy' | translate }}</mat-label>
<mat-select
formControlName="transactionProcessingStrategyCode"
matTooltip="{{ 'tooltips.The repayment strategy' | translate }}"
[disabled]="repaymentStrategyDisabled"
>
<mat-option
*ngFor="let transactionProcessingStrategy of transactionProcessingStrategyOptions"
[value]="transactionProcessingStrategy.code"
>
{{ transactionProcessingStrategy.name | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loansAccountTermsForm.controls.transactionProcessingStrategyCode.hasError('required')">
{{"labels.inputs.Repayment Strategy" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Repayment Strategy' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loansAccountTermsData?.canDefineInstallmentAmount">
<mat-label>{{"labels.inputs.Installment Amount" | translate}}</mat-label>
<input type="number" matInput formControlName="fixedEmiAmount">
<mat-label>{{ 'labels.inputs.Installment Amount' | translate }}</mat-label>
<input type="number" matInput formControlName="fixedEmiAmount" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Balloon Repayment Amount" | translate}}</mat-label>
<input type="number" matInput formControlName="balloonRepaymentAmount">
<mat-label>{{ 'labels.inputs.Balloon Repayment Amount' | translate }}</mat-label>
<input type="number" matInput formControlName="balloonRepaymentAmount" />
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Interest Calculations" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Interest Calculations' | translate }}</h4>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Interest calculation period" | translate}}</mat-label>
<mat-select formControlName="interestCalculationPeriodType" matTooltip="{{ 'tooltips.Daily - Will Calculate the interest' | translate}}">
<mat-option *ngFor="let interestCalculationPeriodType of interestCalculationPeriodTypeData"
[value]="interestCalculationPeriodType.id">
{{ interestCalculationPeriodType.value | translateKey:'catalogs' }}
<mat-label>{{ 'labels.inputs.Interest calculation period' | translate }}</mat-label>
<mat-select
formControlName="interestCalculationPeriodType"
matTooltip="{{ 'tooltips.Daily - Will Calculate the interest' | translate }}"
>
<mat-option
*ngFor="let interestCalculationPeriodType of interestCalculationPeriodTypeData"
[value]="interestCalculationPeriodType.id"
>
{{ interestCalculationPeriodType.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox fxFlex="48%" formControlName="allowPartialPeriodInterestCalcualtion" matTooltip="{{ 'tooltips.To be used with SAME AS REPAYMENT PERIOD' | translate}}">
<p>{{"labels.inputs.Calculate interest for exact days in partial period" | translate}}</p>
<mat-checkbox
fxFlex="48%"
formControlName="allowPartialPeriodInterestCalcualtion"
matTooltip="{{ 'tooltips.To be used with SAME AS REPAYMENT PERIOD' | translate }}"
>
<p>{{ 'labels.inputs.Calculate interest for exact days in partial period' | translate }}</p>
</mat-checkbox>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Arrears tolerance" | translate}} </mat-label>
<input matInput type="number" formControlName="inArrearsTolerance" matTooltip="{{ 'tooltips.With Arrears tolerance' | translate}}">
<mat-label>{{ 'labels.inputs.Arrears tolerance' | translate }} </mat-label>
<input
matInput
type="number"
formControlName="inArrearsTolerance"
matTooltip="{{ 'tooltips.With Arrears tolerance' | translate }}"
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Interest free period" | translate}}</mat-label>
<input matInput formControlName="graceOnInterestCharged" matTooltip="{{ 'tooltips.If the Interest Free Period' | translate}}">
<mat-label>{{ 'labels.inputs.Interest free period' | translate }}</mat-label>
<input
matInput
formControlName="graceOnInterestCharged"
matTooltip="{{ 'tooltips.If the Interest Free Period' | translate }}"
/>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Moratorium" | translate}} <i class="fas fa-question" matTooltip="{{ 'tooltips.The moratorium information' | translate}}"></i></h4>
<h4 fxFlex="98%" class="mat-h4">
{{ 'labels.heading.Moratorium' | translate }}
<i class="fas fa-question" matTooltip="{{ 'tooltips.The moratorium information' | translate }}"></i>
</h4>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Grace on principal payment" | translate}}</mat-label>
<input type="number" matInput formControlName="graceOnPrincipalPayment">
<mat-label>{{ 'labels.inputs.Grace on principal payment' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnPrincipalPayment" />
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-label>{{"labels.inputs.Grace on interest payment" | translate}}</mat-label>
<input type="number" matInput formControlName="graceOnInterestPayment">
<mat-label>{{ 'labels.inputs.Grace on interest payment' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnInterestPayment" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.On arrears ageing" | translate}}</mat-label>
<input type="number" matInput formControlName="graceOnArrearsAgeing">
<mat-label>{{ 'labels.inputs.On arrears ageing' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnArrearsAgeing" />
</mat-form-field>
<div fxFlexFill fxFlex="48%" *ngIf="isDelinquencyEnabled()">
<p><span fxFlex="53%"><b>{{"labels.inputs.Delinquency Bucket" | translate}}</b></span>
<span fxFlex="48%">{{ loanProduct?.delinquencyBucket.name }}</span></p>
<p>
<span fxFlex="53%"
><b>{{ 'labels.inputs.Delinquency Bucket' | translate }}</b></span
>
<span fxFlex="48%">{{ loanProduct?.delinquencyBucket.name }}</span>
</p>
</div>
<ng-container fxFlex="48%" *ngIf="isDelinquencyEnabled()">
<mat-checkbox formControlName="enableInstallmentLevelDelinquency">
<p>{{'labels.inputs.Enable installment level Delinquency' | translate}}</p>
<p>{{ 'labels.inputs.Enable installment level Delinquency' | translate }}</p>
</mat-checkbox>
</ng-container>
<ng-container fxFlex="48%" *ngIf="loansAccountTermsData?.isTopup">
<mat-checkbox fxFlex="20%" formControlName="isTopup">
<p>{{"labels.inputs.Is Topup Loan" | translate}}?</p>
<p>{{ 'labels.inputs.Is Topup Loan' | translate }}?</p>
</mat-checkbox>
<mat-form-field fxFlex="24%" *ngIf="loansAccountTermsForm.controls.isTopup.value">
<mat-label>{{"labels.inputs.Loan closed with Topup" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Loan closed with Topup' | translate }}</mat-label>
<mat-select formControlName="loanIdToClose">
<mat-option *ngFor="let clientActiveLoan of clientActiveLoanData" [value]="clientActiveLoan.id">
{{ clientActiveLoan.accountNo }}
</mat-option>
</mat-select>
</mat-form-field>
</ng-container>
<mat-divider fxFlex="98%"></mat-divider>
<div fxFlexFill>
<span fxFlex="40%"><b>{{"labels.inputs.Recalculate Interest" | translate}}</b></span>
<span fxFlex="60%">{{ loansAccountTermsData?.isInterestRecalculationEnabled| yesNo }}</span>
<span fxFlex="40%"
><b>{{ 'labels.inputs.Recalculate Interest' | translate }}</b></span
>
<span fxFlex="60%">{{ loansAccountTermsData?.isInterestRecalculationEnabled | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="loansAccountTermsData?.isInterestRecalculationEnabled">
<span fxFlex="40%">{{"labels.inputs.Days in year" | translate}}</span>
<span fxFlex="60%">{{ loansAccountTermsData.daysInYearType.value | translateKey:'catalogs' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Days in year' | translate }}</span>
<span fxFlex="60%">{{ loansAccountTermsData.daysInYearType.value | translateKey: 'catalogs' }}</span>
</div>
<ng-container *ngIf="loansAccountTermsData?.isInterestRecalculationEnabled">
<div fxFlexFill *ngIf="loansAccountTermsData?.isInterestRecalculationEnabled">
<span fxFlex="40%">{{"labels.inputs.Advance payments adjustment type" | translate}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Advance payments adjustment type' | translate }}</span>
<span fxFlex="60%">{{ loansAccountTermsData.interestRecalculationData.rescheduleStrategyType.value }}</span>
</div>
<div fxFlexFill *ngIf="loansAccountTermsData?.isInterestRecalculationEnabled">
<span fxFlex="40%">{{"labels.inputs.Days in month" | translate}}</span>
<span fxFlex="60%">{{ loansAccountTermsData.daysInMonthType.value | translateKey:'catalogs' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Days in month' | translate }}</span>
<span fxFlex="60%">{{ loansAccountTermsData.daysInMonthType.value | translateKey: 'catalogs' }}</span>
</div>
</ng-container>
<ng-container *ngIf="loansAccountTermsData?.isInterestRecalculationEnabled">
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Interest recalculation compounding on" | translate}}</span>
<span fxFlex="60%">{{ loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.value | translateKey:'catalogs' }}</span>
<span fxFlex="40%">{{ 'labels.inputs.Interest recalculation compounding on' | translate }}</span>
<span fxFlex="60%">{{
loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.value
| translateKey: 'catalogs'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Frequency Interval for recalculation" | translate}}</span>
<span fxFlex="40%">{{ 'labels.inputs.Frequency Interval for recalculation' | translate }}</span>
<span fxFlex="60%">
<span>{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.value}}</span>
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 3 &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday">
on {{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday.value}}</span>
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 4 &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay">on day
{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay}}</span>
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 4 &&
! loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyNthDay">on
{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyNthDay.value}}
{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday.value}}</span>
<span>{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.value }}</span>
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 3 &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday
"
>
on {{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday.value }}</span
>
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 4 &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay
"
>on day {{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay }}</span
>
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id === 4 &&
!loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyOnDay &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyNthDay
"
>on
{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyNthDay.value }}
{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyWeekday.value }}</span
>
</span>
</div>
</ng-container>
<div fxFlexFill
*ngIf="loansAccountTermsData?.isInterestRecalculationEnabled && loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id !== 1">
<span fxFlex="40%">{{"labels.inputs.Frequency Interval for recalculation" | translate}}</span>
<span fxFlex="60%">{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyInterval}}</span>
<div
fxFlexFill
*ngIf="
loansAccountTermsData?.isInterestRecalculationEnabled &&
loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.id !== 1
"
>
<span fxFlex="40%">{{ 'labels.inputs.Frequency Interval for recalculation' | translate }}</span>
<span fxFlex="60%">{{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyInterval }}</span>
</div>
<ng-container *ngIf="multiDisburseLoan">
<mat-divider fxFlex="98%"></mat-divider>
<div fxFlexFill *ngIf="allowAddDisbursementDetails()">
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Loan Tranche Details" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Loan Tranche Details' | translate }}</h4>
<mat-form-field fxFlex="48%">
<mat-label>{{"labels.inputs.Maximum allowed outstanding balance" | translate}}</mat-label>
<input matInput required formControlName="maxOutstandingLoanBalance">
<mat-label>{{ 'labels.inputs.Maximum allowed outstanding balance' | translate }}</mat-label>
<input matInput required formControlName="maxOutstandingLoanBalance" />
</mat-form-field>
<span fxFlex>
<button type="button" mat-icon-button color="primary" required (click)="addDisbursementDataEntry(disbursementData)"
[disabled]="isMultiDisbursedCompleted">
<button
type="button"
mat-icon-button
color="primary"
required
(click)="addDisbursementDataEntry(disbursementData)"
[disabled]="isMultiDisbursedCompleted"
>
<fa-icon icon="plus-circle" size="lg"></fa-icon>
</button>
</span>
</div>
<div fxFlexFill *ngIf="!allowAddDisbursementDetails()">
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Loan Tranche Details are not allowed for this Loan Product" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">
{{ 'labels.heading.Loan Tranche Details are not allowed for this Loan Product' | translate }}
</h4>
</div>
<table mat-table [dataSource]="disbursementDataSource" [hidden]="disbursementDataSource.length === 0">
<ng-container matColumnDef="expectedDisbursementDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Eexpected Disbursement Date" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Eexpected Disbursement Date' | translate }}</th>
<td mat-cell *matCellDef="let row">
{{ row.expectedDisbursementDate | dateFormat }} </td>
{{ row.expectedDisbursementDate | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="principal">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Principal" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Principal' | translate }}</th>
<td mat-cell *matCellDef="let row">
{{ row.principal }} </td>
{{ row.principal }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let row; let rowIndex = index">
<button type="button" mat-icon-button color="warn" (click)="removeDisbursementDataEntry(rowIndex)"
matTooltip="{{ 'tooltips.Delete' | translate}}" matTooltipPosition="left">
<button
type="button"
mat-icon-button
color="warn"
(click)="removeDisbursementDataEntry(rowIndex)"
matTooltip="{{ 'tooltips.Delete' | translate }}"
matTooltipPosition="left"
>
<fa-icon icon="trash"></fa-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="disbursementDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: disbursementDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: disbursementDisplayedColumns"></tr>
</table>
</ng-container>
<ng-container
*ngIf="loansAccountTermsData?.isInterestRecalculationEnabled && loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.id !== 0">
*ngIf="
loansAccountTermsData?.isInterestRecalculationEnabled &&
loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.id !== 0
"
>
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Frequency for compounding" | translate}}</span>
<span fxFlex="60%">{{
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.value}}
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 3 &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday">
on {{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday.value}}
<span fxFlex="40%">{{ 'labels.inputs.Frequency for compounding' | translate }}</span>
<span fxFlex="60%"
>{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.value }}
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 3 &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday
"
>
on {{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday.value }}
</span>
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 4 &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay">on day
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay}}
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 4 &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay
"
>on day
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay }}
</span>
<span *ngIf="loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 4 &&
! loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyNthDay">on
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyNthDay.value}}
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday.value}}
<span
*ngIf="
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id === 4 &&
!loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyOnDay &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyNthDay
"
>on
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyNthDay.value }}
{{ loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyWeekday.value }}
</span>
</span>
</div>
</ng-container>
<div fxFlexFill
*ngIf="loansAccountTermsData?.isInterestRecalculationEnabled && loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.id !== 0 && loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id !== 1">
<span fxFlex="40%">{{"labels.inputs.Frequency Interval for compounding" | translate}}</span>
<div
fxFlexFill
*ngIf="
loansAccountTermsData?.isInterestRecalculationEnabled &&
loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.id !== 0 &&
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyType.id !== 1
"
>
<span fxFlex="40%">{{ 'labels.inputs.Frequency Interval for compounding' | translate }}</span>
<span fxFlex="60%">{{
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyInterval}}</span>
loansAccountTermsData.interestRecalculationData.recalculationCompoundingFrequencyInterval
}}</span>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<div fxFlex="50%">
<div fxLayout="column" fxFlex="50%" class="table_name">
<h4 fxFlex="98%" class="mat-h4">{{"labels.heading.Collaterals Data" | translate}}</h4>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Collaterals Data' | translate }}</h4>
</div>
<div fxLayout="column" fxFlex="50%">
<div fxLayout="row" fxLayoutAlign="flex-end">
<button mat-raised-button color="primary" (click)="addCollateral()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>{{"labels.buttons.Add" | translate}}
<fa-icon icon="plus" class="m-r-10"></fa-icon>{{ 'labels.buttons.Add' | translate }}
</button>
</div>
</div>
</div>
<table mat-table class="mat-elevation-z1" [dataSource]="collateralDataSource">
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.name" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.type.name }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.type.name }}</td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Quantity" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Quantity' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.value }}</td>
</ng-container>
<ng-container matColumnDef="totalValue">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Total Value" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.type.basePrice*ele.value }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Total Value' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.type.basePrice * ele.value }}</td>
</ng-container>
<ng-container matColumnDef="totalCollateralValue">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Total Collateral Value" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.type.pctToBase*ele.type.basePrice*ele.value/100 }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Total Collateral Value' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ (ele.type.pctToBase * ele.type.basePrice * ele.value) / 100 }}</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let ele; let collateralIndex = index">
<button mat-icon-button color="warn" (click)="deleteCollateral(collateralIndex)">
<fa-icon icon="trash"></fa-icon>
@@ -479,22 +637,21 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanCollateralDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanCollateralDisplayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanCollateralDisplayedColumns"></tr>
</table>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{"labels.buttons.Previous" | translate}}
{{ 'labels.buttons.Previous' | translate }}
</button>
<button mat-raised-button matStepperNext>
{{"labels.buttons.Next" | translate}}
{{ 'labels.buttons.Next' | translate }}
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
<button mat-raised-button *ngIf="loanId" [routerLink]="['../', 'general']">
{{"labels.buttons.Cancel" | translate}}
{{ 'labels.buttons.Cancel' | translate }}
</button>
</div>
</form>
@@ -1,191 +1,228 @@
<div class="container p-b-20">
<h3> {{"labels.heading.Loan Details" | translate}} </h3>
<div fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Repayment Strategy" | translate}}</span>
<span fxFlex="50%">{{ loanDetails.transactionProcessingStrategyName | translateKey:'catalogs' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Repayments" | translate}}</span>
<span fxFlex="50%">{{loanDetails.numberOfRepayments}} every {{loanDetails.repaymentEvery}}&nbsp;{{loanDetails.repaymentFrequencyType.value | translateKey:'catalogs' }}
<span *ngIf="loanDetails.repaymentFrequencyType?.id === 2 && loanDetails.repaymentFrequencyNthDayType?.id !== 0 && loanDetails.repaymentFrequencyDayOfWeekType?.id !== 0" class="m-l-10">
<span *ngIf="loanDetails.repaymentFrequencyDayOfWeekType">
<span class="m-l-10">{{"labels.commons.on" | translate}}</span>{{loanDetails.repaymentFrequencyNthDayType?.value}}
<span class="m-l-10">{{loanDetails.repaymentFrequencyDayOfWeekType?.value | translateKey:'catalogs' }}</span>
</span>
</span>
</span>
</div>
<div fxFlexFill *ngIf="loanDetails.fixedLength">
<span fxFlex="50%"> {{"labels.inputs.Fixed Length" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.fixedLength}} {{loanDetails.repaymentFrequencyType.value | translateKey:'catalogs' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Amortization" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.amortizationType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.fixedPrincipalPercentagePerInstallment">
<span fxFlex="50%"> {{"labels.inputs.Principal Percentage Per Installment" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.fixedPrincipalPercentagePerInstallment | formatNumber}} %</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Equal Amortization" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.isEqualAmortization | yesNo}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Interest" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.annualInterestRate | formatNumber}} % {{"labels.text.per annum" | translate}} ({{loanDetails.interestRatePerPeriod}} %&nbsp; {{loanDetails.interestRateFrequencyType.value | translateKey:'catalogs' }}) </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Interest Type" | translate}} </span>
<span fxFlex="50%"> {{"labels.text." + loanDetails.interestType.value | translate}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Enable Down Payments' | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.enableDownPayment | yesNo }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Loan Charge-off behaviour' | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.chargeOffBehaviour.value | translateKey: 'catalogs' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Grace: On Principal Payment" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.graceOnPrincipalPayment}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Grace: On Interest Payment" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.graceOnInterestPayment}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Grace on Arrears Ageing" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.graceOnArrearsAgeing}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Enable installment level Delinquency" | translate}} </span>
<span fxFlex="50%"> {{loanDetails.enableInstallmentLevelDelinquency | yesNo}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Fund Source" | translate}} </span>
<span fxFlex="50%" *ngIf="loanDetails.fundName"> {{loanDetails.fundName}} </span>
<span fxFlex="50%" *ngIf="!loanDetails.fundName"> {{"labels.inputs.Unassigned" | translate}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Interest Free Period" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.graceOnInterestCharged}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Interest Calculation Period" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.interestCalculationPeriodType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Allow Partial Interest Calculation with same as repayment" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.allowPartialPeriodInterestCalcualtion | yesNo}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Submitted on" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.timeline.submittedOnDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Approved on" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.timeline.approvedOnDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Disbursed on" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.timeline.actualDisbursementDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Matures on" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.timeline.expectedMaturityDate | dateFormat }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.canDefineInstallmentAmount">
<span fxFlex="50%"> {{"labels.inputs.Fixed EMI amount" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.fixedEmiAmount | formatNumber}} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{"labels.inputs.Is Topup Loan" | translate}}?</span>
<span fxFlex="50%"> {{loanDetails.isTopup | yesNo}} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{"labels.inputs.Loan closed with Topup" | translate}} </span>
<span fxFlex="50%"> <a href="#">{{loanDetails.closureLoanAccountNo}}</a> </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{"labels.inputs.Topup closure amount" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.topupAmount | formatNumber}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Recalculate Interest based on new terms" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.isInterestRecalculationEnabled | yesNo}} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Days in year" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.daysInYearType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{"labels.inputs.Days in month" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.daysInMonthType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{"labels.inputs.Interest recalculation compounding on" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.interestRecalculationData.interestRecalculationCompoundingType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{"labels.inputs.Advance payments adjustment type" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.interestRecalculationData.rescheduleStrategyType.value | translateKey:'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{"labels.inputs.Frequency for recalculate Outstanding Principal" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.interestRecalculationData.calendarData.humanReadable}} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled && loanDetails.interestRecalculationData.interestRecalculationCompoundingType.id !== 0">
<span fxFlex="50%"> {{"labels.inputs.Frequency for compounding" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.interestRecalculationData.compoundingCalendarData.humanReadable}} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isVariableInstallmentsAllowed">
<span fxFlex="50%"> {{"labels.inputs.Variable Installments Allowed" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.isVariableInstallmentsAllowed | yesNo}} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isVariableInstallmentsAllowed">
<span fxFlex="50%"> {{"labels.inputs.Gap between Installments" | translate}}</span>
<span fxFlex="50%"> {{loanDetails.minimumGap | formatNumber}}&nbsp;{{"labels.text.Days" | translate}}&nbsp;, Max:{{loanDetails.maximumGap | formatNumber}}&nbsp;{{"labels.text.Days" | translate}}) </span>
</div>
<h3>{{ 'labels.heading.Loan Details' | translate }}</h3>
<div fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Repayment Strategy' | translate }}</span>
<span fxFlex="50%">{{ loanDetails.transactionProcessingStrategyName | translateKey: 'catalogs' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Repayments' | translate }}</span>
<span fxFlex="50%"
>{{ loanDetails.numberOfRepayments }} every {{ loanDetails.repaymentEvery }}&nbsp;{{
loanDetails.repaymentFrequencyType.value | translateKey: 'catalogs'
}}
<span
*ngIf="
loanDetails.repaymentFrequencyType?.id === 2 &&
loanDetails.repaymentFrequencyNthDayType?.id !== 0 &&
loanDetails.repaymentFrequencyDayOfWeekType?.id !== 0
"
class="m-l-10"
>
<span *ngIf="loanDetails.repaymentFrequencyDayOfWeekType">
<span class="m-l-10">{{ 'labels.commons.on' | translate }}</span
>{{ loanDetails.repaymentFrequencyNthDayType?.value }}
<span class="m-l-10">{{
loanDetails.repaymentFrequencyDayOfWeekType?.value | translateKey: 'catalogs'
}}</span>
</span>
</span>
</span>
</div>
<div fxFlexFill *ngIf="loanDetails.fixedLength">
<span fxFlex="50%"> {{ 'labels.inputs.Fixed Length' | translate }} </span>
<span fxFlex="50%">
{{ loanDetails.fixedLength }} {{ loanDetails.repaymentFrequencyType.value | translateKey: 'catalogs' }}</span
>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Amortization' | translate }} </span>
<span fxFlex="50%"> {{ loanDetails.amortizationType.value | translateKey: 'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.fixedPrincipalPercentagePerInstallment">
<span fxFlex="50%"> {{ 'labels.inputs.Principal Percentage Per Installment' | translate }} </span>
<span fxFlex="50%"> {{ loanDetails.fixedPrincipalPercentagePerInstallment | formatNumber }} %</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Equal Amortization' | translate }} </span>
<span fxFlex="50%"> {{ loanDetails.isEqualAmortization | yesNo }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Interest' | translate }} </span>
<span fxFlex="50%">
{{ loanDetails.annualInterestRate | formatNumber }} % {{ 'labels.text.per annum' | translate }} ({{
loanDetails.interestRatePerPeriod
}}
%&nbsp; {{ loanDetails.interestRateFrequencyType.value | translateKey: 'catalogs' }})
</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Interest Type' | translate }} </span>
<span fxFlex="50%"> {{ 'labels.text.' + loanDetails.interestType.value | translate }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Enable Down Payments' | translate }}:</span>
<span fxFlex="50%">{{ loanDetails.enableDownPayment | yesNo }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{ 'labels.inputs.Loan Charge-off behaviour' | translate }}:</span>
<span fxFlex="50%">{{ loanDetails.chargeOffBehaviour.value | translateKey: 'catalogs' }}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Grace: On Principal Payment' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.graceOnPrincipalPayment }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Grace: On Interest Payment' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.graceOnInterestPayment }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Grace on Arrears Ageing' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.graceOnArrearsAgeing }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Enable installment level Delinquency' | translate }} </span>
<span fxFlex="50%"> {{ loanDetails.enableInstallmentLevelDelinquency | yesNo }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Fund Source' | translate }} </span>
<span fxFlex="50%" *ngIf="loanDetails.fundName"> {{ loanDetails.fundName }} </span>
<span fxFlex="50%" *ngIf="!loanDetails.fundName"> {{ 'labels.inputs.Unassigned' | translate }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Interest Free Period' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.graceOnInterestCharged }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Interest Calculation Period' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.interestCalculationPeriodType.value | translateKey: 'catalogs' }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%">
{{ 'labels.inputs.Allow Partial Interest Calculation with same as repayment' | translate }}</span
>
<span fxFlex="50%"> {{ loanDetails.allowPartialPeriodInterestCalcualtion | yesNo }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Submitted on' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.timeline.submittedOnDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Approved on' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.timeline.approvedOnDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Disbursed on' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.timeline.actualDisbursementDate | dateFormat }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Matures on' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.timeline.expectedMaturityDate | dateFormat }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.canDefineInstallmentAmount">
<span fxFlex="50%"> {{ 'labels.inputs.Fixed EMI amount' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.fixedEmiAmount | formatNumber }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{ 'labels.inputs.Is Topup Loan' | translate }}?</span>
<span fxFlex="50%"> {{ loanDetails.isTopup | yesNo }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{ 'labels.inputs.Loan closed with Topup' | translate }} </span>
<span fxFlex="50%">
<a href="#">{{ loanDetails.closureLoanAccountNo }}</a>
</span>
</div>
<div fxFlexFill *ngIf="loanDetails.isTopup">
<span fxFlex="50%"> {{ 'labels.inputs.Topup closure amount' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.topupAmount | formatNumber }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Recalculate Interest based on new terms' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.isInterestRecalculationEnabled | yesNo }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Days in year' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.daysInYearType.value | translateKey: 'catalogs' }} </span>
</div>
<div fxFlexFill>
<span fxFlex="50%"> {{ 'labels.inputs.Days in month' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.daysInMonthType.value | translateKey: 'catalogs' }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{ 'labels.inputs.Interest recalculation compounding on' | translate }}</span>
<span fxFlex="50%">
{{
loanDetails.interestRecalculationData.interestRecalculationCompoundingType.value | translateKey: 'catalogs'
}}
</span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{ 'labels.inputs.Advance payments adjustment type' | translate }}</span>
<span fxFlex="50%">
{{ loanDetails.interestRecalculationData.rescheduleStrategyType.value | translateKey: 'catalogs' }}
</span>
</div>
<div fxFlexFill *ngIf="loanDetails.isInterestRecalculationEnabled">
<span fxFlex="50%"> {{ 'labels.inputs.Frequency for recalculate Outstanding Principal' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.interestRecalculationData.calendarData.humanReadable }} </span>
</div>
<div
fxFlexFill
*ngIf="
loanDetails.isInterestRecalculationEnabled &&
loanDetails.interestRecalculationData.interestRecalculationCompoundingType.id !== 0
"
>
<span fxFlex="50%"> {{ 'labels.inputs.Frequency for compounding' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.interestRecalculationData.compoundingCalendarData.humanReadable }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isVariableInstallmentsAllowed">
<span fxFlex="50%"> {{ 'labels.inputs.Variable Installments Allowed' | translate }}</span>
<span fxFlex="50%"> {{ loanDetails.isVariableInstallmentsAllowed | yesNo }} </span>
</div>
<div fxFlexFill *ngIf="loanDetails.isVariableInstallmentsAllowed">
<span fxFlex="50%"> {{ 'labels.inputs.Gap between Installments' | translate }}</span>
<span fxFlex="50%">
{{ loanDetails.minimumGap | formatNumber }}&nbsp;{{ 'labels.text.Days' | translate }}&nbsp;, Max:{{
loanDetails.maximumGap | formatNumber
}}&nbsp;{{ 'labels.text.Days' | translate }})
</span>
</div>
</div>
</div>
@@ -1,34 +1,32 @@
<div class="tab-container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.name" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.name }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.name }}</td>
</ng-container>
<ng-container matColumnDef="feepenalty">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Fee/Penalty" | translate}} </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Fee/Penalty' | translate }}</th>
<td mat-cell *matCellDef="let charge">
<span *ngIf="charge.penalty">{{"labels.inputs.Penalty" | translate}}</span>
<span *ngIf="!charge.penalty">{{"labels.inputs.Fee" | translate}}</span>
<span *ngIf="charge.penalty">{{ 'labels.inputs.Penalty' | translate }}</span>
<span *ngIf="!charge.penalty">{{ 'labels.inputs.Fee' | translate }}</span>
</td>
</ng-container>
<ng-container matColumnDef="paymentdueat">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Payment due at" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Payment due at' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType.value }}</td>
</ng-container>
<ng-container matColumnDef="submittedDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Submitted On" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.submittedOnDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Submitted On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.submittedOnDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="dueDate">
<th mat-header-cell *matHeaderCellDef mat-sort-header [hide]="useDueDate">
<span *ngIf="useDueDate"> {{'labels.inputs.Due As Of' | translate}} </span>
<span *ngIf="!useDueDate"> {{"labels.inputs.Submitted On" | translate}} </span>
<span *ngIf="useDueDate"> {{ 'labels.inputs.Due As Of' | translate }} </span>
<span *ngIf="!useDueDate"> {{ 'labels.inputs.Submitted On' | translate }} </span>
</th>
<td mat-cell *matCellDef="let charge">
<span *ngIf="useDueDate">{{ charge.dueDate | dateFormat }}</span>
@@ -37,68 +35,103 @@
</ng-container>
<ng-container matColumnDef="calculationtype">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Calculation Type" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Calculation Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeCalculationType.value }}</td>
</ng-container>
<ng-container matColumnDef="due">
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header> {{"labels.inputs.Due" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let charge"> {{ charge.amount |
currency:charge.currency.code:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Due' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let charge">
{{ charge.amount | currency: charge.currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="paid">
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header> {{"labels.inputs.Paid" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let charge"> {{ charge.amountPaid |
currency:charge.currency.code:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Paid' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let charge">
{{ charge.amountPaid | currency: charge.currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="waived">
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header> {{"labels.inputs.Waived" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let charge"> {{ charge.amountWaived |
currency:charge.currency.code:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Waived' | translate }}
</th>
<td mat-cell class="r-amount" *matCellDef="let charge">
{{ charge.amountWaived | currency: charge.currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="outstanding">
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header> {{"labels.inputs.Outstanding" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let charge"> {{charge.amountOutstanding |
currency:charge.currency.code:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Outstanding' | translate }}
</th>
<td mat-cell class="r-amount" *matCellDef="let charge">
{{ charge.amountOutstanding | currency: charge.currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef mat-sort-header>
{{ 'labels.inputs.Actions' | translate }}
</th>
<td mat-cell class="center" *matCellDef="let charge">
<span *ngIf="status === 'Submitted and pending approval'">
<button class="account-action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.Edit Charge' | translate}}"
(click)="routeEdit($event); editCharge(charge)">
<button
class="account-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.Edit Charge' | translate }}"
(click)="routeEdit($event); editCharge(charge)"
>
<i class="fa fa-pencil"></i>
</button>
<button class="account-action-button" mat-raised-button color="warn" matTooltip="{{ 'tooltips.Delete Charge' | translate}}"
(click)="routeEdit($event); deleteCharge(charge.id)">
<button
class="account-action-button"
mat-raised-button
color="warn"
matTooltip="{{ 'tooltips.Delete Charge' | translate }}"
(click)="routeEdit($event); deleteCharge(charge.id)"
>
<i class="fa fa-trash"></i>
</button>
</span>
<button class="account-action-button" mat-raised-button color="accent" matTooltip="{{ 'tooltips.Adjust Charge' | translate}}"
*ngIf="!charge.paid && status==='Active'"
(click)="routeEdit($event); adjustCharge(charge.id)">
<button
class="account-action-button"
mat-raised-button
color="accent"
matTooltip="{{ 'tooltips.Adjust Charge' | translate }}"
*ngIf="!charge.paid && status === 'Active'"
(click)="routeEdit($event); adjustCharge(charge.id)"
>
<i class="fa fa-pencil"></i>
</button>
<button class="account-action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.Pay Charge' | translate}}"
*ngIf="charge.chargePayable && !charge.paid && status==='Active'"
(click)="routeEdit($event); payCharge(charge.id)">
<button
class="account-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.Pay Charge' | translate }}"
*ngIf="charge.chargePayable && !charge.paid && status === 'Active'"
(click)="routeEdit($event); payCharge(charge.id)"
>
<i class="fa fa-dollar"></i>
</button>
<button class="account-action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.Waive Charge' | translate}}"
*ngIf="!charge.actionFlag" (click)="routeEdit($event); waiveCharge(charge.id)">
<button
class="account-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.Waive Charge' | translate }}"
*ngIf="!charge.actionFlag"
(click)="routeEdit($event); waiveCharge(charge.id)"
>
<i class="fa fa-flag"></i>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row" [routerLink]="[row.id]"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row" [routerLink]="[row.id]"></tr>
</table>
<mat-paginator [pageSizeOptions]="[50, 100, 200]" showFirstLastButtons></mat-paginator>
</div>
@@ -1,70 +1,95 @@
<div class="tab-container mat-typography">
<div fxFlexFill *ngIf="existActiveTransfer">
<h3>{{"labels.heading.Active Asset Transfer" | translate}}</h3>
<h3>{{ 'labels.heading.Active Asset Transfer' | translate }}</h3>
<div fxLayout="row" fxLayoutGap="32px" class="asset-transfer-container">
<table>
<tbody>
<tr>
<td fxFlex="25%">
<b>{{"labels.inputs.Status" | translate}} :</b>
<b>{{ 'labels.inputs.Status' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
<div [ngClass]="itemStatus(activeTransferData.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-10 external-asset-owner-status">{{activeTransferData.status}}</span>
<span class="m-l-10 external-asset-owner-status">{{ activeTransferData.status }}</span>
</div>
</td>
<td fxFlex="25%">
<b>{{"labels.inputs.Owner External Id" | translate}} :</b>
<b>{{ 'labels.inputs.Owner External Id' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
<mifosx-external-identifier externalId="{{activeTransferData.owner.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ activeTransferData.owner.externalId }}"
completed="true"
></mifosx-external-identifier>
</td>
</tr>
<tr>
<td fxFlex="25%">
<b>{{"labels.inputs.Settlement Date" | translate}} :</b>
<b>{{ 'labels.inputs.Settlement Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{activeTransferData.settlementDate | dateFormat}}
{{ activeTransferData.settlementDate | dateFormat }}
</td>
<td fxFlex="25%">
<b>{{"labels.inputs.Effective Date" | translate}} :</b>
<b>{{ 'labels.inputs.Effective Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{activeTransferData.effectiveFrom | dateFormat}}
{{ activeTransferData.effectiveFrom | dateFormat }}
</td>
</tr>
<tr>
<td fxFlex="25%">
<b>{{"labels.inputs.Details" | translate}} :</b>
<b>{{ 'labels.inputs.Details' | translate }} :</b>
</td>
<td fxFlex="75%" class="left">
<table>
<tbody>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Principal Outstanding" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalPrincipalOutstanding | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Principal Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ activeTransferData.details.totalPrincipalOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Interest Outstanding" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalInterestOutstanding | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Interest Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ activeTransferData.details.totalInterestOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Fees Outstanding" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalFeeChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Fees Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ activeTransferData.details.totalFeeChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Penalties Outstanding" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalPenaltyChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Penalties Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ activeTransferData.details.totalPenaltyChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Outstanding" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalOutstanding | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ activeTransferData.details.totalOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%"><b>{{"labels.inputs.Overpaid" | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalOverpaid | formatNumber}}</td>
<td fxFlex="50%">
<b>{{ 'labels.inputs.Overpaid' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ activeTransferData.details.totalOverpaid | formatNumber }}</td>
</tr>
</tbody>
</table>
@@ -76,82 +101,100 @@
</div>
<div fxLayout="row" fxLayoutAlign="start center">
<h3 fxFlex="90%">{{ 'labels.heading.External Asset Owner' | translate }}</h3>
<h3 fxFlex="90%">{{"labels.heading.External Asset Owner" | translate}}</h3>
<div fxFlex="10%" *ngIf="canBeSold()" >
<div fxFlex="10%" *ngIf="canBeSold()">
<button mat-raised-button class="f-right" color="primary" (click)="saleLoan()" *mifosxHasPermission="'SALE_LOAN'">
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>{{"labels.buttons.Sell Loan" | translate}}
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>{{ 'labels.buttons.Sell Loan' | translate }}
</button>
</div>
<div fxFlex="10%" *ngIf="canBeCancelled()" >
<button mat-raised-button class="f-right" color="warn" (click)="cancelSaleLoan()" *mifosxHasPermission="'SALE_LOAN'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{"labels.buttons.Cancel Sell Loan" | translate}}
<div fxFlex="10%" *ngIf="canBeCancelled()">
<button
mat-raised-button
class="f-right"
color="warn"
(click)="cancelSaleLoan()"
*mifosxHasPermission="'SALE_LOAN'"
>
<fa-icon icon="trash" class="m-r-10"></fa-icon>{{ 'labels.buttons.Cancel Sell Loan' | translate }}
</button>
</div>
<div fxFlex="10%" *ngIf="canBeBuyed()" >
<button mat-raised-button class="f-right" color="primary" (click)="buyBackLoan()" *mifosxHasPermission="'SALE_LOAN'">
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>{{"labels.buttons.Buy Back Loan" | translate}}
<div fxFlex="10%" *ngIf="canBeBuyed()">
<button
mat-raised-button
class="f-right"
color="primary"
(click)="buyBackLoan()"
*mifosxHasPermission="'SALE_LOAN'"
>
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>{{ 'labels.buttons.Buy Back Loan' | translate }}
</button>
</div>
</div>
<table mat-table mat-sort [dataSource]="loanTransfersData" *ngIf="loanTransfersData.length>0">
<table mat-table mat-sort [dataSource]="loanTransfersData" *ngIf="loanTransfersData.length > 0">
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Status" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let item">
<div [ngClass]="itemStatus(item.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-10 status">
{{ itemCurrentStatus(item) | translate}}
{{ itemCurrentStatus(item) | translate }}
</span>
</div>
</td>
</ng-container>
<ng-container matColumnDef="effectiveFrom">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Effective From" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.effectiveFrom | dateFormat }}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Effective From' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.effectiveFrom | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="ownerExternalId">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Owner External Id" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Owner External Id' | translate }}</th>
<td mat-cell *matCellDef="let item">
<mifosx-external-identifier externalId="{{item.owner.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ item.owner.externalId }}"></mifosx-external-identifier>
</td>
</ng-container>
<ng-container matColumnDef="transferExternalId">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Transfer External Id" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Transfer External Id' | translate }}</th>
<td mat-cell *matCellDef="let item">
<mifosx-external-identifier externalId="{{item.transferExternalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ item.transferExternalId }}"></mifosx-external-identifier>
</td>
</ng-container>
<ng-container matColumnDef="settlementDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Settlement Date" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.settlementDate | dateFormat }}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Settlement Date' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.settlementDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="purchasePriceRatio">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Purchase Price Ratio" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.purchasePriceRatio | number }}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Purchase Price Ratio' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.purchasePriceRatio | number }}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell class="center" *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let item" class="center td-min-space">
<button class="account-action-button" *ngIf="!isPendingOrCanceled(item)" mat-raised-button color="primary" matTooltip="{{ 'tooltips.View Journal Entries' | translate}}"
matTooltipPosition="left" (click)="routeJournalEntry($event)" [routerLink]="['/', 'journal-entry', 'view-transfer', item.transferId]">
<button
class="account-action-button"
*ngIf="!isPendingOrCanceled(item)"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.View Journal Entries' | translate }}"
matTooltipPosition="left"
(click)="routeJournalEntry($event)"
[routerLink]="['/', 'journal-entry', 'view-transfer', item.transferId]"
>
<i class="fa fa-arrow-circle-right"></i>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanTransferColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanTransferColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanTransferColumns"></tr>
</table>
</div>
@@ -7,60 +7,79 @@
<td fxFlex="25%" class="m-l-5 left">
<div [ngClass]="itemStatus(transferData.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-5 status">{{transferData.status}}</span>
<span class="m-l-5 status">{{ transferData.status }}</span>
</div>
</td>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Owner External Id' | translate}} :</b>
<b>{{ 'labels.inputs.Owner External Id' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5 left">
<mifosx-external-identifier externalId="{{transferData.owner.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ transferData.owner.externalId }}"
completed="true"
></mifosx-external-identifier>
</td>
</tr>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Settlement Date' | translate}} :</b>
<b>{{ 'labels.inputs.Settlement Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{transferData.settlementDate | dateFormat}}
{{ transferData.settlementDate | dateFormat }}
</td>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Effective Date' | translate}} :</b>
<b>{{ 'labels.inputs.Effective Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{transferData.effectiveFrom | dateFormat}}
{{ transferData.effectiveFrom | dateFormat }}
</td>
</tr>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>{{'labels.inputs.Details' | translate}} :</b>
<b>{{ 'labels.inputs.Details' | translate }} :</b>
</td>
<td fxFlex="75%" class="left">
<table>
<tbody>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Principal Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalPrincipalOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Principal Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ transferData.details.totalPrincipalOutstanding | formatNumber }}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Interest Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalInterestOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Interest Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ transferData.details.totalInterestOutstanding | formatNumber }}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Fees Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalFeeChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Fees Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ transferData.details.totalFeeChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Penalties Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalPenaltyChargesOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Penalties Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">
{{ transferData.details.totalPenaltyChargesOutstanding | formatNumber }}
</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Outstanding' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalOutstanding | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Outstanding' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ transferData.details.totalOutstanding | formatNumber }}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>{{'labels.inputs.Overpaid' | translate}} :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalOverpaid | formatNumber}}</td>
<td fxFlex="50%" class="m-l-5">
<b>{{ 'labels.inputs.Overpaid' | translate }} :</b>
</td>
<td fxFlex="50%" class="r-amount">{{ transferData.details.totalOverpaid | formatNumber }}</td>
</tr>
</tbody>
</table>
@@ -1,19 +1,16 @@
<div class="container">
<table mat-table [dataSource]="interestRateData">
<ng-container matColumnDef="fromDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.From Date" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.fromDate | dateFormat}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.From Date' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.fromDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="interestRate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Interest Rate" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.effectiveInterestRate }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Interest Rate' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.effectiveInterestRate }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
@@ -1,22 +1,21 @@
<div class="tab-container mat-typography">
<ng-container *ngIf="loanDetails.summary">
<h3>{{"labels.heading.Performance History" | translate}}</h3>
<h3>{{ 'labels.heading.Performance History' | translate }}</h3>
<div fxLayout="row" fxLayoutGap="32px" class="performance-history-container">
<table>
<tbody>
<tr>
<td fxFlex="25%">
<b>{{"labels.inputs.Number of Repayments" | translate}} :</b>
<b>{{ 'labels.inputs.Number of Repayments' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{loanDetails?.numberOfRepayments | formatNumber}}
{{ loanDetails?.numberOfRepayments | formatNumber }}
</td>
<td fxFlex="25%">
<b>{{"labels.inputs.Maturity Date" | translate}} :</b>
<b>{{ 'labels.inputs.Maturity Date' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{loanDetails?.timeline.expectedMaturityDate | dateFormat}}
{{ loanDetails?.timeline.expectedMaturityDate | dateFormat }}
</td>
</tr>
</tbody>
@@ -25,193 +24,216 @@
</ng-container>
<div *ngIf="loanDetails.summary">
<h3> {{"labels.heading.Loan Summary" | translate}} </h3>
<h3>{{ 'labels.heading.Loan Summary' | translate }}</h3>
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="Empty">
<th mat-header-cell *matHeaderCellDef> </th>
<td mat-cell *matCellDef="let ele"> {{ ele.property }} </td>
<th mat-header-cell *matHeaderCellDef></th>
<td mat-cell *matCellDef="let ele">{{ ele.property }}</td>
</ng-container>
<ng-container matColumnDef="Original">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Original" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.original | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Original' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">
{{ ele.original | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Paid">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Paid" | translate}} </th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele"> {{ ele.paid | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Paid' | translate }}</th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele">
{{ ele.paid | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Adjustments">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Credit Adjustments" | translate}} </th>
<td mat-cell class="r-amount amount-plus" *matCellDef="let ele"> {{ ele.adjustment | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Credit Adjustments' | translate }}</th>
<td mat-cell class="r-amount amount-plus" *matCellDef="let ele">
{{ ele.adjustment | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Waived">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Waived" | translate}} </th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele"> {{ ele.waived | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Waived' | translate }}</th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele">
{{ ele.waived | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Written Off">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Written Off" | translate}} </th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele"> {{ ele.writtenOff | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Written Off' | translate }}</th>
<td mat-cell class="r-amount amount-minus" *matCellDef="let ele">
{{ ele.writtenOff | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Outstanding">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Outstanding" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.outstanding | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Outstanding' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">
{{ ele.outstanding | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<ng-container matColumnDef="Over Due">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Over Due" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.overdue | currency:currencyCode:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Over Due' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">
{{ ele.overdue | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanSummaryColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanSummaryColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanSummaryColumns"></tr>
</table>
</div>
<div *ngIf="loanDetails.summary">
<h3> {{"labels.heading.Loan Details" | translate}} </h3>
<h3>{{ 'labels.heading.Loan Details' | translate }}</h3>
<table mat-table [dataSource]="detailsDataSource">
<ng-container matColumnDef="Key">
<td mat-cell *matCellDef="let ele"> {{ 'labels.inputs.' + ele.key | translate }} </td>
<td mat-cell *matCellDef="let ele">{{ 'labels.inputs.' + ele.key | translate }}</td>
</ng-container>
<ng-container matColumnDef="Value">
<td mat-cell *matCellDef="let ele">
<ng-container *ngIf="ele.key === 'Disbursement Date'" >
<span *ngIf="loanDetails.timeline.actualDisbursementDate"> {{loanDetails.timeline.actualDisbursementDate | dateFormat}} </span>
<span *ngIf="!loanDetails.timeline.actualDisbursementDate"> {{"labels.inputs.Not Available" | translate}} </span>
<ng-container *ngIf="ele.key === 'Disbursement Date'">
<span *ngIf="loanDetails.timeline.actualDisbursementDate">
{{ loanDetails.timeline.actualDisbursementDate | dateFormat }}
</span>
<span *ngIf="!loanDetails.timeline.actualDisbursementDate">
{{ 'labels.inputs.Not Available' | translate }}
</span>
</ng-container>
<ng-container *ngIf="ele.key === 'Loan Purpose'">
<span *ngIf="loanDetails.loanPurposeName"> {{loanDetails.loanPurposeName}} </span>
<span *ngIf="!loanDetails.loanPurposeName"> {{"labels.inputs.Not Available" | translate}} </span>
<span *ngIf="loanDetails.loanPurposeName"> {{ loanDetails.loanPurposeName }} </span>
<span *ngIf="!loanDetails.loanPurposeName"> {{ 'labels.inputs.Not Available' | translate }} </span>
</ng-container>
<ng-container *ngIf="ele.key === 'Loan Officer'">
<span *ngIf="!loanDetails.loanOfficerName"> {{"labels.inputs.Unassigned" | translate}} </span>
<span *ngIf="loanDetails.loanOfficerName"> {{loanDetails.loanOfficerName}} &nbsp;
<span *ngIf="loanDetails.loanOfficerName">
</span>
<span *ngIf="!loanDetails.loanOfficerName"> {{ 'labels.inputs.Unassigned' | translate }} </span>
<span *ngIf="loanDetails.loanOfficerName">
{{ loanDetails.loanOfficerName }} &nbsp;
<span *ngIf="loanDetails.loanOfficerName"> </span>
</span>
</ng-container>
<ng-container *ngIf="ele.key === 'Currency'">
<span> {{loanDetails.currency.name }} {{loanDetails.currency.code}} </span>
<span> {{ loanDetails.currency.name }} {{ loanDetails.currency.code }} </span>
</ng-container>
<ng-container *ngIf="ele.key === 'External Id'">
<span *ngIf="loanDetails.externalId">
<mifosx-external-identifier externalId="{{loanDetails.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ loanDetails.externalId }}"
completed="true"
></mifosx-external-identifier>
</span>
<span *ngIf="!loanDetails.externalId"> {{"labels.inputs.Not Available" | translate}} </span>
<span *ngIf="!loanDetails.externalId"> {{ 'labels.inputs.Not Available' | translate }} </span>
</ng-container>
<ng-container *ngIf="ele.key === 'Proposed Amount' || ele.key === 'Approved Amount' || ele.key === 'Disburse Amount'">
<ng-container
*ngIf="ele.key === 'Proposed Amount' || ele.key === 'Approved Amount' || ele.key === 'Disburse Amount'"
>
{{ ele.value }}
</ng-container>
</td>
</ng-container>
<tr mat-row *matRowDef="let row; columns: loanDetailsColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanDetailsColumns"></tr>
</table>
</div>
<div *ngIf="!loanDetails.summary">
<h3> {{"labels.heading.Loan Details" | translate}} </h3>
<h3>{{ 'labels.heading.Loan Details' | translate }}</h3>
<table mat-table [dataSource]="detailsDataSource">
<ng-container matColumnDef="Key">
<td mat-cell *matCellDef="let ele"> {{ 'labels.inputs.' + ele.key | translate }} </td>
<td mat-cell *matCellDef="let ele">{{ 'labels.inputs.' + ele.key | translate }}</td>
</ng-container>
<ng-container matColumnDef="Value">
<td mat-cell *matCellDef="let ele">
<ng-container *ngIf="ele.key === 'Disbursement Date'" >
<span *ngIf="loanDetails.timeline.actualDisbursementDate"> {{loanDetails.timeline.actualDisbursementDate | dateFormat}} </span>
<span *ngIf="!loanDetails.timeline.actualDisbursementDate"> {{"labels.inputs.Not Available" | translate}} </span>
<ng-container *ngIf="ele.key === 'Disbursement Date'">
<span *ngIf="loanDetails.timeline.actualDisbursementDate">
{{ loanDetails.timeline.actualDisbursementDate | dateFormat }}
</span>
<span *ngIf="!loanDetails.timeline.actualDisbursementDate">
{{ 'labels.inputs.Not Available' | translate }}
</span>
</ng-container>
<ng-container *ngIf="ele.key === 'Loan Officer'">
<span *ngIf="!loanDetails.loanOfficerName"> {{"labels.inputs.Unassigned" | translate}} </span>
<span *ngIf="loanDetails.loanOfficerName"> {{loanDetails.loanOfficerName}} &nbsp;
<span *ngIf="loanDetails.loanOfficerName">
</span>
<span *ngIf="!loanDetails.loanOfficerName"> {{ 'labels.inputs.Unassigned' | translate }} </span>
<span *ngIf="loanDetails.loanOfficerName">
{{ loanDetails.loanOfficerName }} &nbsp;
<span *ngIf="loanDetails.loanOfficerName"> </span>
</span>
</ng-container>
<ng-container *ngIf="ele.key === 'Currency'">
<span> {{loanDetails.currency.name }} {{loanDetails.currency.code}} </span>
<span> {{ loanDetails.currency.name }} {{ loanDetails.currency.code }} </span>
</ng-container>
<ng-container *ngIf="ele.key === 'External Id'">
<span *ngIf="loanDetails.externalId">
<mifosx-external-identifier externalId="{{loanDetails.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ loanDetails.externalId }}"
completed="true"
></mifosx-external-identifier>
</span>
<span *ngIf="!loanDetails.externalId"> {{"labels.inputs.Not Available" | translate}} </span>
<span *ngIf="!loanDetails.externalId"> {{ 'labels.inputs.Not Available' | translate }} </span>
</ng-container>
</td>
</ng-container>
<tr mat-row *matRowDef="let row; columns: loanDetailsColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanDetailsColumns"></tr>
</table>
</div>
<div *ngIf="!loanDetails.summary">
<h3> {{"labels.heading.Loan Purpose" | translate}} </h3>
<h3>{{ 'labels.heading.Loan Purpose' | translate }}</h3>
<div class="container">
<div fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Loan Purpose" | translate}}:</span>
<span fxFlex="50%" *ngIf="loanDetails.loanPurposeName">
{{ loanDetails.loanPurposeName }}
</span>
<span fxFlex="50%" *ngIf="!loanDetails.loanPurposeName">
{{"labels.inputs.Not Provided" | translate}}
</span>
<span fxFlex="50%">{{ 'labels.inputs.Loan Purpose' | translate }}:</span>
<span fxFlex="50%" *ngIf="loanDetails.loanPurposeName">
{{ loanDetails.loanPurposeName }}
</span>
<span fxFlex="50%" *ngIf="!loanDetails.loanPurposeName">
{{ 'labels.inputs.Not Provided' | translate }}
</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Proposed Amount" | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.proposedPrincipal | currency:currencyCode:'symbol-narrow':'1.2-2'}}</span>
<span fxFlex="50%">{{ 'labels.inputs.Proposed Amount' | translate }}:</span>
<span fxFlex="50%">{{
loanDetails.proposedPrincipal | currency: currencyCode : 'symbol-narrow' : '1.2-2'
}}</span>
</div>
<div fxFlexFill *ngIf="showApprovedAmountBasedOnStatus()">
<span fxFlex="50%">{{"labels.inputs.Approved Amount" | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.approvedPrincipal | currency:currencyCode:'symbol-narrow':'1.2-2' }}</span>
<span fxFlex="50%">{{ 'labels.inputs.Approved Amount' | translate }}:</span>
<span fxFlex="50%">{{
loanDetails.approvedPrincipal | currency: currencyCode : 'symbol-narrow' : '1.2-2'
}}</span>
</div>
<div fxFlexFill *ngIf="showDisbursedAmountBasedOnStatus()">
<span fxFlex="50%">{{"labels.inputs.Disburse Amount" | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.principal | currency:currencyCode:'symbol-narrow':'1.2-2' }}</span>
<span fxFlex="50%">{{ 'labels.inputs.Disburse Amount' | translate }}:</span>
<span fxFlex="50%">{{ loanDetails.principal | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}</span>
</div>
<div fxFlexFill *ngIf="loanDetails.balloonRepaymentAmount > 0">
<span fxFlex="50%">{{"labels.inputs.Balloon Repayment Amount" | translate}}:</span>
<span fxFlex="50%">{{ loanDetails.balloonRepaymentAmount | currency:currencyCode:'symbol-narrow':'1.2-2' }}</span>
<span fxFlex="50%">{{ 'labels.inputs.Balloon Repayment Amount' | translate }}:</span>
<span fxFlex="50%">{{
loanDetails.balloonRepaymentAmount | currency: currencyCode : 'symbol-narrow' : '1.2-2'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="50%">{{"labels.inputs.Arrears By" | translate}}:</span>
<span fxFlex="50%">{{"labels.inputs.Not Provided" | translate}}</span>
<span fxFlex="50%">{{ 'labels.inputs.Arrears By' | translate }}:</span>
<span fxFlex="50%">{{ 'labels.inputs.Not Provided' | translate }}</span>
</div>
</div>
</div>
</div>
</div>
@@ -1,48 +1,50 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="collateralForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{"labels.inputs.Collateral Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Collateral Type' | translate }}</mat-label>
<mat-select required formControlName="collateralTypeId">
<mat-option *ngFor="let collateral of dataObject.allowedCollateralTypes" [value]="collateral.id">
{{ collateral.name }}</mat-option>
{{ collateral.name }}</mat-option
>
</mat-select>
<mat-error *ngIf="collateralForm.controls.collateralTypeId.hasError('required')">
{{"labels.inputs.Collateral Type" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Collateral Type' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Value" | translate}}</mat-label>
<input matInput required formControlName="value">
<mat-label>{{ 'labels.inputs.Value' | translate }}</mat-label>
<input matInput required formControlName="value" />
<mat-error *ngIf="collateralForm.controls.value.hasError('required')">
{{"labels.inputs.Value" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Value' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Description" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../loan-collateral']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!collateralForm.valid"
*mifosxHasPermission="'CREATE_COLLATERAL'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../loan-collateral']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!collateralForm.valid"
*mifosxHasPermission="'CREATE_COLLATERAL'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,65 +1,73 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="loanChargeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{"labels.inputs.Charge" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Charge' | translate }}</mat-label>
<mat-select required formControlName="chargeId">
<mat-option *ngFor="let loanCharge of loanChargeOptions" [value]="loanCharge.id">
{{ loanCharge.name + ' (' + loanCharge?.currency.name + ')' }}
</mat-option>
</mat-select>
<mat-error *ngIf="loanChargeForm.controls.chargeId.hasError('required')">
{{"labels.inputs.Charge" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Charge' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Amount" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input type="number" required matInput formControlName="amount" />
<mat-error *ngIf="loanChargeForm.controls.amount.hasError('required')">
{{"labels.inputs.Amount" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Charge Calculation" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Charge Calculation' | translate }}</mat-label>
<input matInput formControlName="chargeCalculation" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Charge Time" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Charge Time' | translate }}</mat-label>
<input matInput formControlName="chargeTime" />
</mat-form-field>
<mat-form-field *ngIf="loanChargeForm.controls['dueDate']" (click)="dueDatePicker.open()">
<mat-label>{{"labels.inputs.Due On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dueDatePicker" required
formControlName="dueDate">
<mat-label>{{ 'labels.inputs.Due On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="dueDatePicker"
required
formControlName="dueDate"
/>
<mat-datepicker-toggle matSuffix [for]="dueDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dueDatePicker></mat-datepicker>
<mat-error *ngIf="loanChargeForm.controls.dueDate.hasError('required')">
{{"labels.inputs.Due Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Due Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!loanChargeForm.valid"
*mifosxHasPermission="'CREATE_LOANCHARGE'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!loanChargeForm.valid"
*mifosxHasPermission="'CREATE_LOANCHARGE'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,30 +1,26 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="adjustLoanChargeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field appearance="fill">
<mat-label>{{"labels.inputs.Amount" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<span matTextSuffix class="m-l-10">{{ loanDetailsData.currency.code }}</span>
<span fxFlex="auto"></span>
<input type="number" matInput required class="right-input" formControlName="amount">
<input type="number" matInput required class="right-input" formControlName="amount" />
<mat-error *ngIf="adjustLoanChargeForm.controls.amount.hasError('required')">
{{"labels.inputs.Amount" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
@@ -36,7 +32,7 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
@@ -44,48 +40,51 @@
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> {{"labels.inputs.Account" | translate}} #</mat-label>
<input matInput formControlName="accountNumber">
<mat-label> {{ 'labels.inputs.Account' | translate }} #</mat-label>
<input matInput formControlName="accountNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Cheque" | translate}} #</mat-label>
<input matInput formControlName="checkNumber">
<mat-label>{{ 'labels.inputs.Cheque' | translate }} #</mat-label>
<input matInput formControlName="checkNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Routing Code" | translate}}</mat-label>
<input matInput formControlName="routingCode">
<mat-label>{{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input matInput formControlName="routingCode" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reciept" | translate}} #</mat-label>
<input matInput formControlName="receiptNumber">
<mat-label>{{ 'labels.inputs.Reciept' | translate }} #</mat-label>
<input matInput formControlName="receiptNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Bank" | translate}} #</mat-label>
<input matInput formControlName="bankNumber">
<mat-label>{{ 'labels.inputs.Bank' | translate }} #</mat-label>
<input matInput formControlName="bankNumber" />
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../..']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!adjustLoanChargeForm.valid"
*mifosxHasPermission="'ADJUSTMENT_LOANCHARGE'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../..']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!adjustLoanChargeForm.valid"
*mifosxHasPermission="'ADJUSTMENT_LOANCHARGE'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,62 +1,74 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="approveLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="approvedDatePicker.open()">
<mat-label>{{"labels.inputs.Approved On" | translate}}</mat-label>
<input matInput [min]="minDate" [matDatepicker]="approvedDatePicker" required
formControlName="approvedOnDate">
<mat-label>{{ 'labels.inputs.Approved On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="approvedDatePicker"
required
formControlName="approvedOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="approvedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #approvedDatePicker></mat-datepicker>
<mat-error *ngIf="approveLoanForm.controls.approvedOnDate.hasError('required')">
{{"labels.inputs.Approved Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Approved Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="disbursementDatePicker.open()">
<mat-label>{{"labels.inputs.Expected disbursement on" | translate}}</mat-label>
<input matInput [min]="minDate" [matDatepicker]="disbursementDatePicker"
formControlName="expectedDisbursementDate">
<mat-label>{{ 'labels.inputs.Expected disbursement on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="disbursementDatePicker"
formControlName="expectedDisbursementDate"
/>
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="approveLoanForm.controls.approvedLoanAmount"
[inputLabel]="'Approved Amount'">
[inputLabel]="'Approved Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.Transaction Amount" | translate}}</mat-label>
<input matInput type="number" required formControlName="approvedLoanAmount">
<mat-label>{{ 'labels.inputs.Transaction Amount' | translate }}</mat-label>
<input matInput type="number" required formControlName="approvedLoanAmount" />
<mat-error *ngIf="approveLoanForm.controls.approvedLoanAmount.hasError('required')">
{{"labels.inputs.Transaction Amount" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Amount' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,57 +1,59 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="saleLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="settlementDatePicker.open()">
<mat-label>{{"labels.inputs.Settlement Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="settlementDatePicker" required
formControlName="settlementDate">
<mat-label>{{ 'labels.inputs.Settlement Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="settlementDatePicker"
required
formControlName="settlementDate"
/>
<mat-datepicker-toggle matSuffix [for]="settlementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #settlementDatePicker></mat-datepicker>
<mat-error *ngIf="saleLoanForm.controls.settlementDate.hasError('required')">
{{"labels.inputs.Settlement Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Settlement Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="!isBuyBack()">
<mat-label>{{"labels.inputs.Purchase Price Ratio" | translate}}</mat-label>
<input type="number" matInput required formControlName="purchasePriceRatio">
<mat-label>{{ 'labels.inputs.Purchase Price Ratio' | translate }}</mat-label>
<input type="number" matInput required formControlName="purchasePriceRatio" />
<mat-error *ngIf="saleLoanForm.controls.purchasePriceRatio.hasError('required')">
{{"labels.inputs.Purchase Price Ratio" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Purchase Price Ratio' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="!isBuyBack()">
<mat-label>{{"labels.inputs.Owner External Id" | translate}}</mat-label>
<input matInput formControlName="ownerExternalId">
<mat-label>{{ 'labels.inputs.Owner External Id' | translate }}</mat-label>
<input matInput formControlName="ownerExternalId" />
<mat-error *ngIf="saleLoanForm.controls.ownerExternalId.hasError('required')">
{{"labels.inputs.Owner External Id" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Owner External Id' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Transfer External Id" | translate}}</mat-label>
<input matInput formControlName="transferExternalId">
<mat-label>{{ 'labels.inputs.Transfer External Id' | translate }}</mat-label>
<input matInput formControlName="transferExternalId" />
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!saleLoanForm.valid"
*mifosxHasPermission="'SALE_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!saleLoanForm.valid" *mifosxHasPermission="'SALE_LOAN'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,48 +1,54 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="assignOfficerForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label> {{"labels.inputs.To Loan Officer" | translate}}</mat-label>
<mat-label> {{ 'labels.inputs.To Loan Officer' | translate }}</mat-label>
<mat-select required formControlName="toLoanOfficerId">
<mat-option *ngFor="let loanOfficer of loanOfficers" [value]="loanOfficer.id">
{{ loanOfficer.displayName }}
</mat-option>
</mat-select>
<mat-error *ngIf="assignOfficerForm.controls.toLoanOfficerId.hasError('required')">
{{"labels.inputs.Loan Officer" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Loan Officer' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="assignOnDatePicker.open()">
<mat-label>{{"labels.inputs.Assignment Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="assignOnDatePicker" required
formControlName="assignmentDate">
<mat-label>{{ 'labels.inputs.Assignment Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="assignOnDatePicker"
required
formControlName="assignmentDate"
/>
<mat-datepicker-toggle matSuffix [for]="assignOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #assignOnDatePicker></mat-datepicker>
<mat-error *ngIf="assignOfficerForm.controls.assignmentDate.hasError('required')">
{{"labels.inputs.Assignment Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Assignment Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!assignOfficerForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!assignOfficerForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,58 +1,64 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="chargeoffLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="chargeoffLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reason for Charge-Off" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Reason for Charge-Off' | translate }}</mat-label>
<mat-select formControlName="chargeOffReasonId">
<mat-option *ngFor="let chargeOffReason of chargeOffReasonOptions" [value]="chargeOffReason.id">
{{ chargeOffReason.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="chargeoffLoanForm.controls.chargeOffReasonId.hasError('required')">
{{"labels.inputs.Reason for Charge-Off" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Reason for Charge-Off' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!chargeoffLoanForm.valid"
*mifosxHasPermission="'CHARGEOFF_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!chargeoffLoanForm.valid"
*mifosxHasPermission="'CHARGEOFF_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,41 +1,46 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="closeLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="closedDatePicker.open()">
<mat-label>{{"labels.inputs.Closed On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Closed On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="closedDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Closed Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Closed Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,36 +1,35 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="newGuarantorForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-checkbox labelPosition="before" formControlName="existingClient">
{{"labels.inputs.Existing Client" | translate}}
{{ 'labels.inputs.Existing Client' | translate }}
</mat-checkbox>
<ng-container *ngIf="!showClientDetailsForm">
<mat-form-field fxFlex="30%">
<mat-label>{{"labels.inputs.name" | translate}}</mat-label>
<input matInput formControlName="name" [matAutocomplete]="clientsAutocomplete">
<mat-label>{{ 'labels.inputs.name' | translate }}</mat-label>
<input matInput formControlName="name" [matAutocomplete]="clientsAutocomplete" />
<mat-error *ngIf="newGuarantorForm.controls.name.hasError('required')">
{{"labels.inputs.name" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-autocomplete autoActiveFirstOption #clientsAutocomplete="matAutocomplete" [displayWith]="displayClient"
(optionSelected)="clientSelected($event.option.value)">
<mat-autocomplete
autoActiveFirstOption
#clientsAutocomplete="matAutocomplete"
[displayWith]="displayClient"
(optionSelected)="clientSelected($event.option.value)"
>
<mat-option *ngFor="let client of clientsData" [value]="client">
{{ client.displayName }}
</mat-option>
</mat-autocomplete>
<mat-form-field>
<mat-label>{{"labels.inputs.Relationship" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Relationship' | translate }}</mat-label>
<mat-select formControlName="clientRelationshipTypeId">
<mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id">
{{ relationType.name }}
@@ -39,9 +38,8 @@
</mat-form-field>
<ng-container *ngIf="accountOptions.length > 0">
<mat-form-field>
<mat-label>{{"labels.inputs.Account" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Account' | translate }}</mat-label>
<mat-select formControlName="savingsId">
<mat-option *ngFor="let accountOption of accountOptions" [value]="accountOption.id">
{{ accountOption.productName }} - {{ accountOption.accountNo }}
@@ -50,18 +48,15 @@
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Amount" | translate}}</mat-label>
<input type="number" matInput required formControlName="amount">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input type="number" matInput required formControlName="amount" />
</mat-form-field>
</ng-container>
</ng-container>
<ng-container *ngIf="showClientDetailsForm">
<mat-form-field>
<mat-label>{{"labels.inputs.Relationship" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Relationship' | translate }}</mat-label>
<mat-select formControlName="clientRelationshipTypeId">
<mat-option *ngFor="let relationType of relationTypes" [value]="relationType.id">
{{ relationType.name }}
@@ -70,92 +65,96 @@
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.First Name" | translate}}</mat-label>
<input matInput required formControlName="firstname">
<mat-label>{{ 'labels.inputs.First Name' | translate }}</mat-label>
<input matInput required formControlName="firstname" />
<mat-error *ngIf="newGuarantorForm.controls.firstname.hasError('required')">
{{"labels.inputs.First Name" | translate}} {{"labels.commons.is" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.First Name' | translate }} {{ 'labels.commons.is' | translate }}
{{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Last Name" | translate}}</mat-label>
<input matInput required formControlName="lastname">
<mat-label>{{ 'labels.inputs.Last Name' | translate }}</mat-label>
<input matInput required formControlName="lastname" />
<mat-error *ngIf="newGuarantorForm.controls.lastname.hasError('required')">
{{"labels.inputs.Last Name" | translate}} {{"labels.commons.is" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Last Name' | translate }} {{ 'labels.commons.is' | translate }}
{{ 'labels.commons.is' | translate }} <strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="dobDatePicker.open()">
<mat-label>{{"labels.inputs.Date Of Birth" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dobDatePicker" formControlName="dob">
<mat-label>{{ 'labels.inputs.Date Of Birth' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dobDatePicker" formControlName="dob" />
<mat-datepicker-toggle matSuffix [for]="dobDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dobDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Address Line" | translate}} 1</mat-label>
<input matInput formControlName="addressLine1">
<mat-label>{{ 'labels.inputs.Address Line' | translate }} 1</mat-label>
<input matInput formControlName="addressLine1" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Address Line" | translate}} 2</mat-label>
<input matInput formControlName="addressLine2">
<mat-label>{{ 'labels.inputs.Address Line' | translate }} 2</mat-label>
<input matInput formControlName="addressLine2" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.City" | translate}}</mat-label>
<input matInput formControlName="city">
<mat-label>{{ 'labels.inputs.City' | translate }}</mat-label>
<input matInput formControlName="city" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Zip" | translate}}</mat-label>
<input matInput formControlName="zip">
<mat-label>{{ 'labels.inputs.Zip' | translate }}</mat-label>
<input matInput formControlName="zip" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Mobile" | translate}}</mat-label>
<input type="number" matInput formControlName="mobileNumber">
<mat-label>{{ 'labels.inputs.Mobile' | translate }}</mat-label>
<input type="number" matInput formControlName="mobileNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Residence Phone" | translate}} #</mat-label>
<input type="number" matInput formControlName="housePhoneNumber">
<mat-label>{{ 'labels.inputs.Residence Phone' | translate }} #</mat-label>
<input type="number" matInput formControlName="housePhoneNumber" />
</mat-form-field>
</ng-container>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
<ng-container *ngIf="!(newGuarantorForm.controls.name === undefined)">
<div class="mat-table">
<div class="mat-header-row">
<div class="mat-header-cell">{{"labels.inputs.Client Details" | translate}}</div>
<div class="mat-header-cell">{{ 'labels.inputs.Client Details' | translate }}</div>
</div>
<div class="mat-row">
<div class="mat-cell">{{"labels.inputs.name" | translate}}</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.displayName}}</div>
<div class="mat-cell">{{ 'labels.inputs.name' | translate }}</div>
<div class="mat-cell">{{ newGuarantorForm.controls.name.value.displayName }}</div>
</div>
<div class="mat-row">
<div class="mat-cell">{{"labels.inputs.Id" | translate}}</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.id}}</div>
<div class="mat-cell">{{ 'labels.inputs.Id' | translate }}</div>
<div class="mat-cell">{{ newGuarantorForm.controls.name.value.id }}</div>
</div>
<div class="mat-row">
<div class="mat-cell">{{"labels.inputs.Office" | translate}}</div>
<div class="mat-cell">{{newGuarantorForm.controls.name.value.officeName}}</div>
<div class="mat-cell">{{ 'labels.inputs.Office' | translate }}</div>
<div class="mat-cell">{{ newGuarantorForm.controls.name.value.officeName }}</div>
</div>
</div>
</ng-container>
</mat-card>
</div>
@@ -1,51 +1,59 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="disbursementForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="disbursementDatePicker.open()">
<mat-label>{{"labels.inputs.Disbursement On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="disbursementDatePicker" required
formControlName="actualDisbursementDate">
<mat-label>{{ 'labels.inputs.Disbursement On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="disbursementDatePicker"
required
formControlName="actualDisbursementDate"
/>
<mat-datepicker-toggle matSuffix [for]="disbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #disbursementDatePicker></mat-datepicker>
<mat-error *ngIf="disbursementForm.controls.actualDisbursementDate.hasError('required')">
{{"labels.inputs.Disbursement Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Disbursement Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="disbursementForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field *ngIf="dataObject.fixedEmiAmount">
<mat-label>{{"labels.inputs.Fixed EMI amount" | translate}}</mat-label>
<input matInput type="number" formControlName="fixedEmiAmount">
<mat-label>{{ 'labels.inputs.Fixed EMI amount' | translate }}</mat-label>
<input matInput type="number" formControlName="fixedEmiAmount" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!disbursementForm.valid"
*mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!disbursementForm.valid"
*mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,36 +1,41 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="disbursementLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="actualDisbursementDatePicker.open()">
<mat-label>{{"labels.inputs.Disbursed On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="actualDisbursementDatePicker" required
formControlName="actualDisbursementDate">
<mat-label>{{ 'labels.inputs.Disbursed On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="actualDisbursementDatePicker"
required
formControlName="actualDisbursementDate"
/>
<mat-datepicker-toggle matSuffix [for]="actualDisbursementDatePicker"></mat-datepicker-toggle>
<mat-datepicker #actualDisbursementDatePicker></mat-datepicker>
<mat-error *ngIf="disbursementLoanForm.controls.actualDisbursementDate.hasError('required')">
{{"labels.inputs.Disbursed On Date" | translate}}<strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Disbursed On Date' | translate
}}<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="disbursementLoanForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
@@ -42,7 +47,7 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
@@ -50,48 +55,51 @@
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label>{{"labels.inputs.Account" | translate}} #</mat-label>
<input matInput formControlName="accountNumber">
<mat-label>{{ 'labels.inputs.Account' | translate }} #</mat-label>
<input matInput formControlName="accountNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Cheque" | translate}} #</mat-label>
<input matInput formControlName="checkNumber">
<mat-label>{{ 'labels.inputs.Cheque' | translate }} #</mat-label>
<input matInput formControlName="checkNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Routing Code" | translate}}</mat-label>
<input matInput formControlName="routingCode">
<mat-label>{{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input matInput formControlName="routingCode" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reciept" | translate}} #</mat-label>
<input matInput formControlName="receiptNumber">
<mat-label>{{ 'labels.inputs.Reciept' | translate }} #</mat-label>
<input matInput formControlName="receiptNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Bank" | translate}} #</mat-label>
<input matInput formControlName="bankNumber">
<mat-label>{{ 'labels.inputs.Bank' | translate }} #</mat-label>
<input matInput formControlName="bankNumber" />
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!disbursementLoanForm.valid"
*mifosxHasPermission="'DISBURSE_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!disbursementLoanForm.valid"
*mifosxHasPermission="'DISBURSE_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,25 +1,30 @@
<div class="container mat-elevation-z8">
<mat-card>
<mat-card-content>
<div fxLayout="column">
<mifosx-repayment-schedule-tab fxFlex="100%"
<mifosx-repayment-schedule-tab
fxFlex="100%"
[repaymentScheduleDetails]="repaymentScheduleDetails"
[forEditing]="true">
[forEditing]="true"
>
</mifosx-repayment-schedule-tab>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button type="button" (click)="reset()">{{"labels.buttons.Reset" | translate}}</button>
<button type="button" color="primary" mat-raised-button (click)="applyPattern()">{{"labels.buttons.Pattern" | translate}}</button>
<button type="button" color="primary" mat-raised-button [disabled]="!wasChanged" (click)="validate()">{{"labels.buttons.Validate" | translate}}</button>
<button type="button" color="primary" mat-raised-button [disabled]="!wasValidated" (click)="submit()">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button type="button" (click)="reset()">{{ 'labels.buttons.Reset' | translate }}</button>
<button type="button" color="primary" mat-raised-button (click)="applyPattern()">
{{ 'labels.buttons.Pattern' | translate }}
</button>
<button type="button" color="primary" mat-raised-button [disabled]="!wasChanged" (click)="validate()">
{{ 'labels.buttons.Validate' | translate }}
</button>
<button type="button" color="primary" mat-raised-button [disabled]="!wasValidated" (click)="submit()">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div>
@@ -1,66 +1,71 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="foreclosureForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionsDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionsDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionsDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionsDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionsDatePicker></mat-datepicker>
<mat-error *ngIf="foreclosureForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Principal" | translate}}</mat-label>
<input matInput formControlName="outstandingPrincipalPortion">
<mat-label>{{ 'labels.inputs.Principal' | translate }}</mat-label>
<input matInput formControlName="outstandingPrincipalPortion" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Interest" | translate}}</mat-label>
<input matInput formControlName="outstandingInterestPortion">
<mat-label>{{ 'labels.inputs.Interest' | translate }}</mat-label>
<input matInput formControlName="outstandingInterestPortion" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Fee Amount" | translate}}</mat-label>
<input matInput formControlName="outstandingFeeChargesPortion">
<mat-label>{{ 'labels.inputs.Fee Amount' | translate }}</mat-label>
<input matInput formControlName="outstandingFeeChargesPortion" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Penalty Amount" | translate}}</mat-label>
<input matInput required formControlName="outstandingPenaltyChargesPortion">
<mat-label>{{ 'labels.inputs.Penalty Amount' | translate }}</mat-label>
<input matInput required formControlName="outstandingPenaltyChargesPortion" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Transaction Amount" | translate}}</mat-label>
<input matInput required formControlName="transactionAmount">
<mat-label>{{ 'labels.inputs.Transaction Amount' | translate }}</mat-label>
<input matInput required formControlName="transactionAmount" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!foreclosureForm.valid"
*mifosxHasPermission="'FORECLOSURE_LOAN'">{{"labels.buttons.Foreclosure" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!foreclosureForm.valid"
*mifosxHasPermission="'FORECLOSURE_LOAN'"
>
{{ 'labels.buttons.Foreclosure' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,29 +1,56 @@
<mifosx-loans-account-close [dataObject]="actionButtonData" *ngIf="actions['Close']"></mifosx-loans-account-close>
<mifosx-undo-approval *ngIf="actions['Undo Approval']"></mifosx-undo-approval>
<mifosx-assign-loan-officer *ngIf="actions['Assign Loan Officer']" [dataObject]="actionButtonData" ></mifosx-assign-loan-officer>
<mifosx-assign-loan-officer
*ngIf="actions['Assign Loan Officer']"
[dataObject]="actionButtonData"
></mifosx-assign-loan-officer>
<mifosx-foreclosure [dataObject]="actionButtonData" *ngIf="actions['Foreclosure']"></mifosx-foreclosure>
<mifosx-prepay-loan [dataObject]="actionButtonData" *ngIf="actions['Prepay Loan']"></mifosx-prepay-loan>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Make Repayment']"></mifosx-make-repayment>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Goodwill Credit']"></mifosx-make-repayment>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Interest Payment Waiver']"></mifosx-make-repayment>
<mifosx-make-repayment
[dataObject]="actionButtonData"
*ngIf="actions['Interest Payment Waiver']"
></mifosx-make-repayment>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Payout Refund']"></mifosx-make-repayment>
<mifosx-make-repayment [dataObject]="actionButtonData" *ngIf="actions['Merchant Issued Refund']"></mifosx-make-repayment>
<mifosx-loan-credit-balance-refund [dataObject]="actionButtonData" *ngIf="actions['Credit Balance Refund']"></mifosx-loan-credit-balance-refund>
<mifosx-make-repayment
[dataObject]="actionButtonData"
*ngIf="actions['Merchant Issued Refund']"
></mifosx-make-repayment>
<mifosx-loan-credit-balance-refund
[dataObject]="actionButtonData"
*ngIf="actions['Credit Balance Refund']"
></mifosx-loan-credit-balance-refund>
<mifosx-waive-interest [dataObject]="actionButtonData" *ngIf="actions['Waive Interest']"></mifosx-waive-interest>
<mifosx-write-off-page [dataObject]="actionButtonData" *ngIf="actions['Write Off']"></mifosx-write-off-page>
<mifosx-close-as-rescheduled [dataObject]="actionButtonData" *ngIf="actions['Close (as Rescheduled)']"></mifosx-close-as-rescheduled>
<mifosx-close-as-rescheduled
[dataObject]="actionButtonData"
*ngIf="actions['Close (as Rescheduled)']"
></mifosx-close-as-rescheduled>
<mifosx-loan-reschedule [dataObject]="actionButtonData" *ngIf="actions['Reschedule']"></mifosx-loan-reschedule>
<mifosx-recovery-repayment [dataObject]="actionButtonData" *ngIf="actions['Recovery Payment']"></mifosx-recovery-repayment>
<mifosx-recovery-repayment
[dataObject]="actionButtonData"
*ngIf="actions['Recovery Payment']"
></mifosx-recovery-repayment>
<mifosx-view-guarantors [dataObject]="actionButtonData" *ngIf="actions['View Guarantors']"></mifosx-view-guarantors>
<mifosx-create-guarantor [dataObject]="actionButtonData" *ngIf="actions['Create Guarantor']"></mifosx-create-guarantor>
<mifosx-disburse-to-savings-account [dataObject]="actionButtonData" *ngIf="actions['Disburse to Savings']"></mifosx-disburse-to-savings-account>
<mifosx-disburse-to-savings-account
[dataObject]="actionButtonData"
*ngIf="actions['Disburse to Savings']"
></mifosx-disburse-to-savings-account>
<mifosx-reject-loan *ngIf="actions['Reject']"></mifosx-reject-loan>
<mifosx-disburse [dataObject]="actionButtonData" *ngIf="actions['Disburse']"></mifosx-disburse>
<mifosx-withdrawn-by-client *ngIf="actions['Withdrawn by Client']"></mifosx-withdrawn-by-client>
<mifosx-add-collateral [dataObject]="actionButtonData" *ngIf="actions['Add Collateral']"></mifosx-add-collateral>
<mifosx-undo-disbursal *ngIf="actions['Undo Disbursal'] || actions['Undo Last Disbursal']" [actionName]="actionName"></mifosx-undo-disbursal>
<mifosx-loan-screen-reports [dataObject]="actionButtonData" *ngIf="actions['Loan Screen Reports']"></mifosx-loan-screen-reports>
<mifosx-approve-loan *ngIf="actions['Approve']" ></mifosx-approve-loan>
<mifosx-undo-disbursal
*ngIf="actions['Undo Disbursal'] || actions['Undo Last Disbursal']"
[actionName]="actionName"
></mifosx-undo-disbursal>
<mifosx-loan-screen-reports
[dataObject]="actionButtonData"
*ngIf="actions['Loan Screen Reports']"
></mifosx-loan-screen-reports>
<mifosx-approve-loan *ngIf="actions['Approve']"></mifosx-approve-loan>
<mifosx-add-loan-charge *ngIf="actions['Add Loan Charge']"></mifosx-add-loan-charge>
<mifosx-edit-repayment-schedule *ngIf="actions['Edit Repayment Schedule']"></mifosx-edit-repayment-schedule>
<mifosx-charge-off [dataObject]="actionButtonData" *ngIf="actions['Charge-Off']"></mifosx-charge-off>
@@ -1,51 +1,59 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="creditBalanceLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="creditBalanceLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="creditBalanceLoanForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!creditBalanceLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!creditBalanceLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,65 +1,70 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="reagingLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Number of Installments' | translate }}</mat-label>
<input type="number" matInput required formControlName="numberOfInstallments" />
</mat-form-field>
<mat-card>
<mat-form-field>
<mat-label>{{ 'labels.inputs.Frequency Number' | translate }}</mat-label>
<input type="number" matInput required formControlName="frequencyNumber" />
</mat-form-field>
<form [formGroup]="reagingLoanForm" (ngSubmit)="submit()">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Frequency Type' | translate }}</mat-label>
<mat-select formControlName="frequencyType">
<mat-option *ngFor="let frequencyType of frequencyOptions" [value]="frequencyType.code">
{{ frequencyType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-card-content>
<mat-form-field (click)="startDatePicker.open()">
<mat-label>{{ 'labels.inputs.Start Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="startDatePicker"
required
formControlName="startDate"
/>
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
<mat-datepicker #startDatePicker></mat-datepicker>
<mat-error *ngIf="reagingLoanForm.controls.startDate.hasError('required')">
{{ 'labels.inputs.Start Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Reason' | translate }}</mat-label>
<input matInput formControlName="note" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Number of Installments" | translate}}</mat-label>
<input type="number" matInput required formControlName="numberOfInstallments">
</mat-form-field>
<mat-form-field>
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
</div>
<mat-form-field>
<mat-label>{{"labels.inputs.Frequency Number" | translate}}</mat-label>
<input type="number" matInput required formControlName="frequencyNumber">
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Frequency Type" | translate}}</mat-label>
<mat-select formControlName="frequencyType">
<mat-option *ngFor="let frequencyType of frequencyOptions" [value]="frequencyType.code">
{{ frequencyType.value }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field (click)="startDatePicker.open()">
<mat-label>{{"labels.inputs.Start Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="startDatePicker" required
formControlName="startDate">
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
<mat-datepicker #startDatePicker></mat-datepicker>
<mat-error *ngIf="reagingLoanForm.controls.startDate.hasError('required')">
{{"labels.inputs.Start Date" | translate}} {{"labels.commons.is" | translate}}
<strong>{{"labels.commons.required" | translate}}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reason" | translate}}</mat-label>
<input matInput formControlName="note">
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" |
translate}}</button>
<button mat-raised-button color="primary" [disabled]="!reagingLoanForm.valid"
*mifosxHasPermission="'REAGING_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!reagingLoanForm.valid"
*mifosxHasPermission="'REAGING_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,33 +1,35 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="reamortizeLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Reason' | translate }}</mat-label>
<input matInput formControlName="note" />
</mat-form-field>
</div>
<mat-card>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
</div>
<form [formGroup]="reamortizeLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{"labels.inputs.Reason" | translate}}</mat-label>
<input matInput formControlName="note">
</mat-form-field>
</div>
<div fxLayout="column">
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" |
translate}}</button>
<button mat-raised-button color="primary" [disabled]="!reamortizeLoanForm.valid"
*mifosxHasPermission="'REAMORTIZE_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!reamortizeLoanForm.valid"
*mifosxHasPermission="'REAMORTIZE_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,107 +1,130 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="rescheduleLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="rescheduleDatePicker.open()">
<mat-label>{{"labels.inputs.Reschedule from Installment On" | translate}}</mat-label>
<input matInput [min]="minDate" [matDatepicker]="rescheduleDatePicker" required
formControlName="rescheduleFromDate">
<mat-label>{{ 'labels.inputs.Reschedule from Installment On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="rescheduleDatePicker"
required
formControlName="rescheduleFromDate"
/>
<mat-datepicker-toggle matSuffix [for]="rescheduleDatePicker"></mat-datepicker-toggle>
<mat-datepicker #rescheduleDatePicker></mat-datepicker>
<mat-error *ngIf="rescheduleLoanForm.controls.rescheduleFromDate.hasError('required')">
{{"labels.inputs.Reschedule Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Reschedule Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reason for Rescheduling" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Reason for Rescheduling' | translate }}</mat-label>
<mat-select formControlName="rescheduleReasonId">
<mat-option *ngFor="let rescheduleReasonCode of codes" [value]="rescheduleReasonCode.id">
{{ rescheduleReasonCode.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="rescheduleLoanForm.controls.rescheduleReasonId.hasError('required')">
{{"labels.inputs.Reason for Rescheduling" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Reason for Rescheduling' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field (click)="submittedDatePicker.open()">
<mat-label>{{"labels.inputs.Submitted On" | translate}}</mat-label>
<input matInput [min]="minDate" [matDatepicker]="submittedDatePicker" required
formControlName="submittedOnDate">
<mat-label>{{ 'labels.inputs.Submitted On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="submittedDatePicker"
required
formControlName="submittedOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="submittedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #submittedDatePicker></mat-datepicker>
<mat-error *ngIf="rescheduleLoanForm.controls.submittedOnDate.hasError('required')">
{{"labels.inputs.Submitted On Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Submitted On Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Comments" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Comments' | translate }}</mat-label>
<textarea matInput formControlName="rescheduleReasonComment"></textarea>
</mat-form-field>
<mat-checkbox [formControl]="changeRepaymentDate"> {{"labels.inputs.Change Repayment Date" | translate}} </mat-checkbox>
<mat-checkbox [formControl]="changeRepaymentDate">
{{ 'labels.inputs.Change Repayment Date' | translate }}
</mat-checkbox>
<ng-container *ngIf="changeRepaymentDate.value">
<mat-form-field (click)="installmentrescheduledDatePicker.open()">
<mat-label>{{"labels.inputs.Installment Rescheduled to" | translate}}</mat-label>
<input matInput [min]="minDate" [matDatepicker]="installmentrescheduledDatePicker"
formControlName="adjustedDueDate">
<mat-label>{{ 'labels.inputs.Installment Rescheduled to' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[matDatepicker]="installmentrescheduledDatePicker"
formControlName="adjustedDueDate"
/>
<mat-datepicker-toggle matSuffix [for]="installmentrescheduledDatePicker"></mat-datepicker-toggle>
<mat-datepicker #installmentrescheduledDatePicker></mat-datepicker>
</mat-form-field>
</ng-container>
<mat-checkbox [formControl]="introduceGracePeriods"> {{"labels.inputs.Introduce Mid-term grace periods" | translate}} </mat-checkbox>
<mat-checkbox [formControl]="introduceGracePeriods">
{{ 'labels.inputs.Introduce Mid-term grace periods' | translate }}
</mat-checkbox>
<ng-container *ngIf="introduceGracePeriods.value">
<mat-form-field>
<mat-label>{{"labels.inputs.Principal Grace Periods" | translate}} </mat-label>
<input matInput formControlName="graceOnPrincipal">
<mat-label>{{ 'labels.inputs.Principal Grace Periods' | translate }} </mat-label>
<input matInput formControlName="graceOnPrincipal" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Interest Grace Periods" | translate}} </mat-label>
<input matInput formControlName="graceOnInterest">
<mat-label>{{ 'labels.inputs.Interest Grace Periods' | translate }} </mat-label>
<input matInput formControlName="graceOnInterest" />
</mat-form-field>
</ng-container>
<mat-checkbox [formControl]="extendRepaymentPeriod"> {{"labels.inputs.Extend Repayment Period" | translate}} </mat-checkbox>
<mat-checkbox [formControl]="extendRepaymentPeriod">
{{ 'labels.inputs.Extend Repayment Period' | translate }}
</mat-checkbox>
<ng-container *ngIf="extendRepaymentPeriod.value">
<mat-form-field>
<mat-label>{{"labels.inputs.Number Of new Repayments" | translate}}</mat-label>
<input matInput formControlName="extraTerms">
<mat-label>{{ 'labels.inputs.Number Of new Repayments' | translate }}</mat-label>
<input matInput formControlName="extraTerms" />
</mat-form-field>
</ng-container>
<mat-checkbox [formControl]="adjustinterestrates"> {{"labels.inputs.Adjust interest rates for remainder of loan" | translate}} </mat-checkbox>
<mat-checkbox [formControl]="adjustinterestrates">
{{ 'labels.inputs.Adjust interest rates for remainder of loan' | translate }}
</mat-checkbox>
<ng-container *ngIf="adjustinterestrates.value">
<mat-form-field>
<mat-label>{{"labels.inputs.New Interest Rate" | translate}}</mat-label>
<input matInput formControlName="newInterestRate">
<mat-label>{{ 'labels.inputs.New Interest Rate' | translate }}</mat-label>
<input matInput formControlName="newInterestRate" />
</mat-form-field>
</ng-container>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!rescheduleLoanForm.valid"
*mifosxHasPermission="'APPROVE_RESCHEDULELOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!rescheduleLoanForm.valid"
*mifosxHasPermission="'APPROVE_RESCHEDULELOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,57 +1,46 @@
<div class="container m-b-20">
<mat-card>
<form [formGroup]="loanScreenReportForm" (ngSubmit)="generate()">
<mat-card-content>
<div>
<mat-form-field fxFlex>
<mat-label>{{"labels.inputs.Loan Screen Reports" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Loan Screen Reports' | translate }}</mat-label>
<mat-select formControlName="templateId">
<mat-option *ngFor="let template of templatesData" [value]="template.id">
{{ template.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="loanScreenReportForm.controls.templateId.hasError('required')">
{{"labels.inputs.Screen Report" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Screen Report' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!loanScreenReportForm.valid">
<fa-icon icon="cogs" size="sm" class="m-r-10"></fa-icon>{{"labels.buttons.Generate Report" | translate}}
<fa-icon icon="cogs" size="sm" class="m-r-10"></fa-icon>{{ 'labels.buttons.Generate Report' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
<div #output class="container">
<mat-card fxLayout="column" fxLayoutGap="3%">
<div fxLayoutAlign="end">
<button mat-stroked-button color="primary" [disabled]="!template" (click)="print()">
<fa-icon icon="file" class="m-r-10"></fa-icon>
{{"labels.buttons.Print" | translate}}
{{ 'labels.buttons.Print' | translate }}
</button>
</div>
<div #screenReport class="screen-report">
<p>{{"labels.text.Please select a screen report." | translate}}</p>
<p>{{ 'labels.text.Please select a screen report.' | translate }}</p>
</div>
</mat-card>
</div>
@@ -1,41 +1,46 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="closeLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="closedDatePicker.open()">
<mat-label>{{"labels.inputs.Closed On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="closedDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Closed On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="closedDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="closedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #closedDatePicker></mat-datepicker>
<mat-error *ngIf="closeLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Closed Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Closed Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSE_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSE_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,27 +1,29 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="repaymentLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="repaymentLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{ 'Principal' | translate}}
{{ 'Principal' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -29,7 +31,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Interest' | translate}}
{{ 'Interest' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -37,7 +39,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Fees' | translate}}
{{ 'Fees' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -45,7 +47,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Penalties' | translate}}
{{ 'Penalties' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -53,18 +55,21 @@
</div>
</div>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="repaymentLoanForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
@@ -76,7 +81,7 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
@@ -84,48 +89,51 @@
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> {{"labels.inputs.Account" | translate}} #</mat-label>
<input matInput formControlName="accountNumber">
<mat-label> {{ 'labels.inputs.Account' | translate }} #</mat-label>
<input matInput formControlName="accountNumber" />
</mat-form-field>
<mat-form-field>
<mat-label> {{"labels.inputs.Cheque" | translate}} #</mat-label>
<input matInput formControlName="checkNumber">
<mat-label> {{ 'labels.inputs.Cheque' | translate }} #</mat-label>
<input matInput formControlName="checkNumber" />
</mat-form-field>
<mat-form-field>
<mat-label> {{"labels.inputs.Routing Code" | translate}}</mat-label>
<input matInput formControlName="routingCode">
<mat-label> {{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input matInput formControlName="routingCode" />
</mat-form-field>
<mat-form-field>
<mat-label> {{"labels.inputs.Reciept" | translate}} #</mat-label>
<input matInput formControlName="receiptNumber">
<mat-label> {{ 'labels.inputs.Reciept' | translate }} #</mat-label>
<input matInput formControlName="receiptNumber" />
</mat-form-field>
<mat-form-field>
<mat-label> {{"labels.inputs.Bank" | translate}} #</mat-label>
<input matInput formControlName="bankNumber">
<mat-label> {{ 'labels.inputs.Bank' | translate }} #</mat-label>
<input matInput formControlName="bankNumber" />
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label> {{"labels.inputs.Note" | translate}}</mat-label>
<mat-label> {{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!repaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!repaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,27 +1,29 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="prepayLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="prepayLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
{{ 'Principal' | translate}}
{{ 'Principal' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -29,7 +31,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Interest' | translate}}
{{ 'Interest' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -37,7 +39,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Fees' | translate}}
{{ 'Fees' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -45,7 +47,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Penalties' | translate}}
{{ 'Penalties' | translate }}
</div>
<div fxFlex="50%" class="r-amount right-label">
@@ -53,18 +55,21 @@
</div>
</div>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="prepayLoanForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
@@ -76,7 +81,7 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
@@ -84,48 +89,51 @@
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> {{"labels.inputs.Account" | translate}} #</mat-label>
<input matInput formControlName="accountNumber">
<mat-label> {{ 'labels.inputs.Account' | translate }} #</mat-label>
<input matInput formControlName="accountNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Cheque" | translate}} #</mat-label>
<input matInput formControlName="checkNumber">
<mat-label>{{ 'labels.inputs.Cheque' | translate }} #</mat-label>
<input matInput formControlName="checkNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Routing Code" | translate}}</mat-label>
<input matInput formControlName="routingCode">
<mat-label>{{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input matInput formControlName="routingCode" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reciept" | translate}} #</mat-label>
<input matInput formControlName="receiptNumber">
<mat-label>{{ 'labels.inputs.Reciept' | translate }} #</mat-label>
<input matInput formControlName="receiptNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Bank" | translate}} #</mat-label>
<input matInput formControlName="bankNumber">
<mat-label>{{ 'labels.inputs.Bank' | translate }} #</mat-label>
<input matInput formControlName="bankNumber" />
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!prepayLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!prepayLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,36 +1,41 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="recoveryRepaymentLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="transactionDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="transactionDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="transactionDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="transactionDatePicker"></mat-datepicker-toggle>
<mat-datepicker #transactionDatePicker></mat-datepicker>
<mat-error *ngIf="recoveryRepaymentLoanForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="recoveryRepaymentLoanForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypes" [value]="paymentType.id">
{{ paymentType.name }}
@@ -42,7 +47,7 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
@@ -50,48 +55,51 @@
<ng-container *ngIf="showPaymentDetails">
<mat-form-field>
<mat-label> {{"labels.inputs.Account" | translate}} #</mat-label>
<input matInput formControlName="accountNumber">
<mat-label> {{ 'labels.inputs.Account' | translate }} #</mat-label>
<input matInput formControlName="accountNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Cheque" | translate}} #</mat-label>
<input matInput formControlName="checkNumber">
<mat-label>{{ 'labels.inputs.Cheque' | translate }} #</mat-label>
<input matInput formControlName="checkNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Routing Code" | translate}}</mat-label>
<input matInput formControlName="routingCode">
<mat-label>{{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input matInput formControlName="routingCode" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Reciept" | translate}} #</mat-label>
<input matInput formControlName="receiptNumber">
<mat-label>{{ 'labels.inputs.Reciept' | translate }} #</mat-label>
<input matInput formControlName="receiptNumber" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Bank" | translate}} #</mat-label>
<input matInput formControlName="bankNumber">
<mat-label>{{ 'labels.inputs.Bank' | translate }} #</mat-label>
<input matInput formControlName="bankNumber" />
</mat-form-field>
</ng-container>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!recoveryRepaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!recoveryRepaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,41 +1,46 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="rejectLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="rejectedDatePicker.open()">
<mat-label>{{"labels.inputs.Rejected On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="rejectedDatePicker" required
formControlName="rejectedOnDate">
<mat-label>{{ 'labels.inputs.Rejected On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="rejectedDatePicker"
required
formControlName="rejectedOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="rejectedDatePicker"></mat-datepicker-toggle>
<mat-datepicker #rejectedDatePicker></mat-datepicker>
<mat-error *ngIf="rejectLoanForm.controls.rejectedOnDate.hasError('required')">
{{"labels.inputs.Rejected Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Rejected Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!rejectLoanForm.valid"
*mifosxHasPermission="'REJECT_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!rejectLoanForm.valid"
*mifosxHasPermission="'REJECT_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,26 +1,21 @@
<div class="container mat-elevation-z8">
<mat-card>
<mat-card-content>
<div fxLayout="column">
<mat-form-field fxFlex>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput [formControl]="note"></textarea>
</mat-form-field>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'APPROVALUNDO_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'APPROVALUNDO_LOAN'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,26 +1,21 @@
<div class="container mat-elevation-z8">
<mat-card>
<mat-card-content>
<div fxLayout="column">
<mat-form-field fxFlex>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput required [formControl]="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'DISBURSALUNDO_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'DISBURSALUNDO_LOAN'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div>
@@ -1,32 +1,36 @@
<div class="container mat-elevation-z8">
<mat-card>
<div class="view-guarantors-account-tables" fxLayout="row" fxLayoutGap="2%">
<div fxFlex="49%">
<table>
<tbody>
<tr>
<td>{{"labels.inputs.Disbursement Date" | translate}}</td>
<td>{{dataObject.timeline.actualDisbursementDate}}<span
*ngIf="!dataObject.timeline.actualDisbursementDate">{{"labels.inputs.Not Available" | translate}}</span></td>
<td>{{ 'labels.inputs.Disbursement Date' | translate }}</td>
<td>
{{ dataObject.timeline.actualDisbursementDate
}}<span *ngIf="!dataObject.timeline.actualDisbursementDate">{{
'labels.inputs.Not Available' | translate
}}</span>
</td>
</tr>
<tr>
<td>{{"labels.inputs.Currency" | translate}}</td>
<td>{{dataObject.currency.name}}</td>
<td>{{ 'labels.inputs.Currency' | translate }}</td>
<td>{{ dataObject.currency.name }}</td>
</tr>
<tr>
<td>{{"labels.inputs.Loan Officer" | translate}}</td>
<td>{{dataObject.loanOfficerName}} <span *ngIf="!dataObject.loanOfficerName">{{"labels.inputs.Unassigned" | translate}}</span>
<td>{{ 'labels.inputs.Loan Officer' | translate }}</td>
<td>
{{ dataObject.loanOfficerName }}
<span *ngIf="!dataObject.loanOfficerName">{{ 'labels.inputs.Unassigned' | translate }}</span>
<span *ngIf="dataObject.loanOfficerName">
<fa-icon icon="times"></fa-icon>
</span></td>
</span>
</td>
</tr>
<tr>
<td>{{"labels.inputs.External Id" | translate}}</td>
<td>{{ 'labels.inputs.External Id' | translate }}</td>
<td>
<mifosx-external-identifier externalId="{{dataObject.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ dataObject.externalId }}"></mifosx-external-identifier>
</td>
</tr>
</tbody>
@@ -37,27 +41,29 @@
<table>
<tbody>
<tr>
<td>{{"labels.inputs.Loan Purpose" | translate}}</td>
<td>{{ 'labels.inputs.Loan Purpose' | translate }}</td>
<td>
{{dataObject.loanPurposeName}} <span *ngIf="!dataObject.loanPurposeName"> {{"labels.inputs.Not Provided" | translate}} </span>
{{ dataObject.loanPurposeName }}
<span *ngIf="!dataObject.loanPurposeName"> {{ 'labels.inputs.Not Provided' | translate }} </span>
</td>
</tr>
<tr>
<td>{{"labels.inputs.Approved Amount" | translate}}</td>
<td>{{ 'labels.inputs.Approved Amount' | translate }}</td>
<td>
<span>{{dataObject.approvedPrincipal | formatNumber}}</span>
<span>{{ dataObject.approvedPrincipal | formatNumber }}</span>
</td>
</tr>
<tr>
<td>{{"labels.inputs.Disburse Amount" | translate}}</td>
<td>{{ 'labels.inputs.Disburse Amount' | translate }}</td>
<td>
<span>{{dataObject.principal | formatNumber}}</span>
<span>{{ dataObject.principal | formatNumber }}</span>
</td>
</tr>
<tr>
<td>{{"labels.inputs.Arrears By" | translate}}</td>
<td>{{dataObject.summary.totalOverdue | formatNumber}}
<span *ngIf="dataObject.summary.totalOverdue < 0">{{"labels.inputs.Not Provided" | translate}}</span>
<td>{{ 'labels.inputs.Arrears By' | translate }}</td>
<td>
{{ dataObject.summary.totalOverdue | formatNumber }}
<span *ngIf="dataObject.summary.totalOverdue < 0">{{ 'labels.inputs.Not Provided' | translate }}</span>
</td>
</tr>
</tbody>
@@ -66,107 +72,118 @@
</div>
<div fxFlexFill *ngIf="guarantorDetails" fxLayout="row wrap" fxLayout.lt-md="column">
<!-- guarantors details table -->
<div class="heading-content">
<div fxLayout="column" fxFlex="50%">
<div class="heading-name">
<h3>{{"labels.heading.Guarantors Details" | translate}}</h3>
<h3>{{ 'labels.heading.Guarantors Details' | translate }}</h3>
</div>
</div>
<div fxLayout="column" fxFlex="50%">
<div fxLayout="row" fxLayoutAlign="flex-end">
<button mat-raised-button class="f-right" color="primary"
(click)="toggleGuarantorsDetailsOverview()">{{showDeletedGuarantorsAccounts?'Hide Deleted Guarantors':'Show Deleted Guarantors'}}</button>
<button mat-raised-button class="f-right" color="primary" (click)="toggleGuarantorsDetailsOverview()">
{{ showDeletedGuarantorsAccounts ? 'Hide Deleted Guarantors' : 'Show Deleted Guarantors' }}
</button>
</div>
</div>
</div>
<table fxFlexFill mat-table
[dataSource]="guarantorDetails|accountsFilter:'guarantor':showDeletedGuarantorsAccounts">
<table
fxFlexFill
mat-table
[dataSource]="guarantorDetails | accountsFilter: 'guarantor' : showDeletedGuarantorsAccounts"
>
<ng-container matColumnDef="fullname">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.name" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.name' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.firstname}} &nbsp; {{guarantor.lastname}}
{{ guarantor.firstname }} &nbsp; {{ guarantor.lastname }}
</span>
</td>
</ng-container>
<ng-container matColumnDef="relationship">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Relationship" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Relationship' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.clientRelationshipType.name}}
{{ guarantor.clientRelationshipType.name }}
</span>
</td>
</ng-container>
<ng-container matColumnDef="guarantortype">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Guarantor Type" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Guarantor Type' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
{{guarantor.guarantorType.value}}
{{ guarantor.guarantorType.value }}
</span>
</td>
</ng-container>
<ng-container matColumnDef="depositAccount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Deposit Account" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Deposit Account' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
<span *ngIf="!guarantor.guarantorFundingDetails"> </span>
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
<span *ngIf="!guarantor.guarantorFundingDetails"> </span>
</td>
</ng-container>
<ng-container matColumnDef="remainingAmount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Remaining Amount" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Remaining Amount' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
</span>
<span *ngIf="!guarantor.guarantorFundingDetails"> </span>
</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Status" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let guarantor">
<span *ngIf="!guarantor.guarantorFundingDetails">
<span *ngIf="guarantor.status">
{{"labels.inputs.Active" | translate}}
{{ 'labels.inputs.Active' | translate }}
</span>
<span *ngIf="!guarantor.status">
{{"labels.inputs.Deleted" | translate}}
{{ 'labels.inputs.Deleted' | translate }}
</span>
</span>
</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Action" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th>
<td mat-cell *matCellDef="let guarantor; let id = index">
<span *ngIf="!guarantor.guarantorFundingDetails">
<button mat-raised-button class="account-action-button" color="primary"
*mifosxHasPermission="'READ_SAVINGSACCOUNT'" (click)="viewGuarantorDetails(guarantor)">
<button
mat-raised-button
class="account-action-button"
color="primary"
*mifosxHasPermission="'READ_SAVINGSACCOUNT'"
(click)="viewGuarantorDetails(guarantor)"
>
<fa-icon icon="eye" class="m-r-10"></fa-icon>
</button>
<button mat-raised-button class="account-action-button" color="primary"
*ngIf="guarantor.status && guarantor.guarantorType.id === 3 && guarantor.id">
<button
mat-raised-button
class="account-action-button"
color="primary"
*ngIf="guarantor.status && guarantor.guarantorType.id === 3 && guarantor.id"
>
<fa-icon icon="edit" class="m-r-10"></fa-icon>
</button>
<span *ngIf="guarantor.status">
<button mat-raised-button class="account-action-button" color="warn"
*mifosxHasPermission="'DELETE_GUARANTOR'" (click)="deleteGuarantor(guarantor.id)">
<button
mat-raised-button
class="account-action-button"
color="warn"
*mifosxHasPermission="'DELETE_GUARANTOR'"
(click)="deleteGuarantor(guarantor.id)"
>
<fa-icon icon="trash" class="m-r-10"></fa-icon>
</button>
</span>
@@ -176,10 +193,7 @@
<tr mat-header-row *matHeaderRowDef="guarantorsDisplayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: guarantorsDisplayedColumns"></tr>
</table>
</div>
</mat-card>
</div>
@@ -1,46 +1,54 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="loanInterestForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="interestDatePicker.open()">
<mat-label>{{"labels.inputs.Interest waived on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="interestDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Interest waived on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="interestDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="interestDatePicker"></mat-datepicker-toggle>
<mat-datepicker #interestDatePicker></mat-datepicker>
<mat-error *ngIf="loanInterestForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Interest Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Interest Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="loanInterestForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!loanInterestForm.valid"
*mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!loanInterestForm.valid"
*mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,41 +1,46 @@
<div class="container mat-elevation-z8">
<mat-card>
<form [formGroup]="withdrawnByClientLoanForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<mat-form-field (click)="withdrawnOnDatePicker.open()">
<mat-label>{{"labels.inputs.Withdrawn On" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="withdrawnOnDatePicker" required
formControlName="withdrawnOnDate">
<mat-label>{{ 'labels.inputs.Withdrawn On' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="withdrawnOnDatePicker"
required
formControlName="withdrawnOnDate"
/>
<mat-datepicker-toggle matSuffix [for]="withdrawnOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #withdrawnOnDatePicker></mat-datepicker>
<mat-error *ngIf="withdrawnByClientLoanForm.controls.withdrawnOnDate.hasError('required')">
{{"labels.inputs.Withdrawn On Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Withdrawn On Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!withdrawnByClientLoanForm.valid"
*mifosxHasPermission="'WITHDRAW_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button
mat-raised-button
color="primary"
[disabled]="!withdrawnByClientLoanForm.valid"
*mifosxHasPermission="'WITHDRAW_LOAN'"
>
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,46 +1,46 @@
<div class="container mat-elevation-z8">
<mat-card>
<mat-card-content>
<form [formGroup]="writeOffForm">
<div fxLayout="column">
<mat-form-field (click)="writeOffDatePicker.open()">
<mat-label>{{"labels.inputs.Write off on" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="writeOffDatePicker" required
formControlName="transactionDate">
<mat-label>{{ 'labels.inputs.Write off on' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="writeOffDatePicker"
required
formControlName="transactionDate"
/>
<mat-datepicker-toggle matSuffix [for]="writeOffDatePicker"></mat-datepicker-toggle>
<mat-datepicker #writeOffDatePicker></mat-datepicker>
<mat-error *ngIf="writeOffForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Write Off Date" | translate}} {{"labels.commons.is" | translate}} <strong>{{"labels.commons.required" | translate}}</strong>
{{ 'labels.inputs.Write Off Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Amount" | translate}}</mat-label>
<input matInput formControlName="amount">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input matInput formControlName="amount" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Note" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Note' | translate }}</mat-label>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</form>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'WRITEOFF_LOAN'">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../../general']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" (click)="submit()" *mifosxHasPermission="'WRITEOFF_LOAN'">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div>
@@ -1,10 +1,9 @@
<div class="tab-container mat-typography">
<div fxLayout="row" fxLayoutAlign="start center">
<h3 fxFlex="90%">{{"labels.inputs.Loan Collateral Details" | translate}}</h3>
<h3 fxFlex="90%">{{ 'labels.inputs.Loan Collateral Details' | translate }}</h3>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px" class="action-buttons">
<button mat-raised-button color="primary" [routerLink]="['../actions/Add Collateral']">
{{"labels.buttons.Add Collateral" | translate}}
{{ 'labels.buttons.Add Collateral' | translate }}
</button>
</div>
</div>
@@ -14,16 +13,16 @@
<tbody>
<tr>
<td fxFlex="25%">
<b>{{"labels.inputs.Number of Collaterals" | translate}} :</b>
<b>{{ 'labels.inputs.Number of Collaterals' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{loanCollaterals?.length | formatNumber}}
{{ loanCollaterals?.length | formatNumber }}
</td>
<td fxFlex="25%">
<b>{{"labels.inputs.Total Amount" | translate}} :</b>
<b>{{ 'labels.inputs.Total Amount' | translate }} :</b>
</td>
<td fxFlex="25%" class="left">
{{totalAmount | formatNumber}}
{{ totalAmount | formatNumber }}
</td>
</tr>
</tbody>
@@ -31,34 +30,32 @@
</div>
<table mat-table *ngIf="loanCollaterals?.length > 0" [dataSource]="loanCollaterals">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.ID" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.id }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.ID' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.id }}</td>
</ng-container>
<ng-container matColumnDef="currency">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Currency" | translate}}</th>
<td mat-cell *matCellDef="let ele"> {{ ele.currency.code }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Currency' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.currency.code }}</td>
</ng-container>
<ng-container matColumnDef="description">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Description" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.description }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Description' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.description }}</td>
</ng-container>
<ng-container matColumnDef="total">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Total Value" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.total }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Total Value' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.total }}</td>
</ng-container>
<ng-container matColumnDef="totalCollateral">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Total Collateral Value" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.totalCollateral }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Total Collateral Value' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.totalCollateral }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
@@ -1,19 +1,20 @@
<div class="container">
<h3>{{ 'labels.heading.Loan Delinquency Tags' | translate }}</h3>
<h3>{{"labels.heading.Loan Delinquency Tags" | translate}}</h3>
<table mat-table [dataSource]="loanDelinquencyTags" *ngIf="loanDelinquencyTags.length>0">
<table mat-table [dataSource]="loanDelinquencyTags" *ngIf="loanDelinquencyTags.length > 0">
<ng-container matColumnDef="classification">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Delinquency Classification" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.delinquencyRange.classification }}
<span *ngIf="item.delinquencyRange.maximumAgeDays">( {{ item.delinquencyRange.minimumAgeDays }} - {{ item.delinquencyRange.maximumAgeDays }} )</span>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Delinquency Classification' | translate }}</th>
<td mat-cell *matCellDef="let item">
{{ item.delinquencyRange.classification }}
<span *ngIf="item.delinquencyRange.maximumAgeDays"
>( {{ item.delinquencyRange.minimumAgeDays }} - {{ item.delinquencyRange.maximumAgeDays }} )</span
>
<span *ngIf="!item.delinquencyRange.maximumAgeDays">( {{ item.delinquencyRange.minimumAgeDays }} )</span>
</td>
</ng-container>
<ng-container matColumnDef="addedOn">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Added On" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Added On' | translate }}</th>
<td mat-cell *matCellDef="let item">
<span *ngIf="item.addedOnDate">
{{ item.addedOnDate | dateFormat }}
@@ -22,7 +23,7 @@
</ng-container>
<ng-container matColumnDef="liftedOn">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Lifted On" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Lifted On' | translate }}</th>
<td mat-cell *matCellDef="let item">
<span *ngIf="item.liftedOnDate">
{{ item.liftedOnDate | dateFormat }}
@@ -31,73 +32,81 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanDelinquencyTagsColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanDelinquencyTagsColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanDelinquencyTagsColumns"></tr>
</table>
<div *ngIf="installmentLevelDelinquency.length > 0">
<h3>{{"labels.heading.Loan Delinquency Installment Tags" | translate}}</h3>
<h3>{{ 'labels.heading.Loan Delinquency Installment Tags' | translate }}</h3>
<table mat-table [dataSource]="installmentLevelDelinquency">
<ng-container matColumnDef="classification">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Delinquency Classification" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.classification }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Delinquency Classification' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.classification }}</td>
</ng-container>
<ng-container matColumnDef="minimumAgeDays">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Days" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.minimumAgeDays | formatNumber }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Days' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.minimumAgeDays | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.delinquentAmount | currency:currency.code:'symbol-narrow':'1.2-2' }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
{{ item.delinquentAmount | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="installmentDelinquencyTagsColumns"></tr>
<tr mat-row *matRowDef="let row; columns: installmentDelinquencyTagsColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: installmentDelinquencyTagsColumns"></tr>
</table>
</div>
<div fxLayout="row" fxLayoutAlign="flex-end" class="m-t-20 m-b-10" *ngIf="allowPause">
<button mat-raised-button color="primary" (click)="createDelinquencyAction()" *mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'">
<button
mat-raised-button
color="primary"
(click)="createDelinquencyAction()"
*mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'"
>
<fa-icon icon="pause" class="m-r-10"></fa-icon>{{ 'labels.buttons.Pause Delinquency Classification' | translate }}
</button>
</div>
<div *ngIf="loanDelinquencyActions.length > 0" class="m-t-10">
<h3>{{"labels.heading.Loan Delinquency Actions" | translate}}</h3>
<h3>{{ 'labels.heading.Loan Delinquency Actions' | translate }}</h3>
<table mat-table [dataSource]="loanDelinquencyActions">
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Action" | translate}} </th>
<td mat-cell *matCellDef="let item" ngClass="{{actionClass(item.action)}}"> {{ item.action }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Action' | translate }}</th>
<td mat-cell *matCellDef="let item" ngClass="{{ actionClass(item.action) }}">{{ item.action }}</td>
</ng-container>
<ng-container matColumnDef="startDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Start Date" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.startDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Start Date' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.startDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="endDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.End Date" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.endDate | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.End Date' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.endDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="createdOn">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Created On" | translate}} </th>
<td mat-cell *matCellDef="let item"> {{ item.createdOn | datetimeFormat }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Created On' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.createdOn | datetimeFormat }}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let item">
<span *ngIf="isCurrentAndPauseAction(item)">
<button mat-button color="primary" (click)="resumeDelinquencyClassification(item)"
*mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'" matTooltip="{{'tooltips.Resume Delinquency Classification' | translate}}" >
<button
mat-button
color="primary"
(click)="resumeDelinquencyClassification(item)"
*mifosxHasPermission="'CREATE_DELINQUENCY_ACTION'"
matTooltip="{{ 'tooltips.Resume Delinquency Classification' | translate }}"
>
<fa-icon icon="play" class="m-r-10"></fa-icon>
</button>
</span>
@@ -105,9 +114,7 @@
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanDelinquencyActionsColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanDelinquencyActionsColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanDelinquencyActionsColumns"></tr>
</table>
</div>
</div>
@@ -1,4 +1,6 @@
<mifosx-entity-documents-tab [entityType]="entityType" [entityId]="entityId"
<mifosx-entity-documents-tab
[entityType]="entityType"
[entityId]="entityId"
[entityDocuments]="entityDocuments"
[callbackUpload]="uploadDocument"
[callbackDownload]="downloadDocument"
@@ -1,29 +1,27 @@
<div class="container">
<h3>{{ 'labels.heading.Term Variations' | translate }}</h3>
<table mat-table [dataSource]="loanTermVariationsData" *ngIf="loanTermVariationsData.length > 0">
<ng-container matColumnDef="termType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.termType.value | translate }}</td>
</ng-container>
<h3>{{"labels.heading.Term Variations" | translate}}</h3>
<table mat-table [dataSource]="loanTermVariationsData" *ngIf="loanTermVariationsData.length>0">
<ng-container matColumnDef="applicableFrom">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Added On' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.termVariationApplicableFrom | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="termType">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Type" | translate}} </th>
<td mat-cell *matCellDef="let item">{{ item.termType.value | translate }}</td>
</ng-container>
<ng-container matColumnDef="applicableFrom">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Added On" | translate}} </th>
<td mat-cell *matCellDef="let item">{{ item.termVariationApplicableFrom | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Value' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.decimalValue | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Value" | translate}} </th>
<td mat-cell *matCellDef="let item">{{ item.decimalValue | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="specificToInstallment">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Specific to Installment" | translate}} </th>
<td mat-cell *matCellDef="let item">{{ item.isSpecificToInstallment | yesNo }}</td>
</ng-container>
<ng-container matColumnDef="specificToInstallment">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Specific to Installment' | translate }}</th>
<td mat-cell *matCellDef="let item">{{ item.isSpecificToInstallment | yesNo }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanDTermVariationsColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanDTermVariationsColumns;"></tr>
</table>
</div>
<tr mat-header-row *matHeaderRowDef="loanDTermVariationsColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanDTermVariationsColumns"></tr>
</table>
</div>
@@ -1,32 +1,28 @@
<div class="container">
<div fxFlexFill>
<span fxFlex="40%">{{"labels.inputs.Maximum allowed outstanding balance" | translate}}:</span>
<span fxFlex="40%">{{ 'labels.inputs.Maximum allowed outstanding balance' | translate }}:</span>
<span fxFlex="60%">{{ loanDetails.maxOutstandingLoanBalance | formatNumber }}</span>
</div>
<h3>{{"labels.heading.Loan Tranche Details" | translate}}</h3>
<h3>{{ 'labels.heading.Loan Tranche Details' | translate }}</h3>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="flex-end" fxLayoutGap="2%">
<button mat-raised-button color="primary" *ngIf="showAddTrancheButtons()"
(click)="addDisbursementDataEntry()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>{{"labels.buttons.Add" | translate}}
<button mat-raised-button color="primary" *ngIf="showAddTrancheButtons()" (click)="addDisbursementDataEntry()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>{{ 'labels.buttons.Add' | translate }}
</button>
<button mat-raised-button color="primary" *ngIf="!pristine"
(click)="editDisbursementData()">
{{"labels.buttons.Apply Changes" | translate}}
<button mat-raised-button color="primary" *ngIf="!pristine" (click)="editDisbursementData()">
{{ 'labels.buttons.Apply Changes' | translate }}
</button>
</div>
<table mat-table [dataSource]="disbursementDataSource" *ngIf="disbursementDataSource.length > 0">
<ng-container matColumnDef="expected disbursement on">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Expected Disbursement On" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.expectedDisbursementDate | dateFormat}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Expected Disbursement On' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.expectedDisbursementDate | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="disbursed on">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Disbursed On" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Disbursed On' | translate }}</th>
<td mat-cell *matCellDef="let ele">
<span *ngIf="ele.actualDisbursementDate">
{{ ele.actualDisbursementDate | dateFormat }}
@@ -35,51 +31,61 @@
</ng-container>
<ng-container matColumnDef="principal">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Principal" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.principal }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Principal' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.principal }}</td>
</ng-container>
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let ele; let rowIndex = index">
<span *ngIf="ele.actualDisbursementDate">
<i class="fa fa-check "></i>
<i class="fa fa-check"></i>
</span>
<button type="button" mat-icon-button color="primary"
(click)="editDisbursementDataEntry(rowIndex)" matTooltip="{{ 'tooltips.Edit' | translate}}"
matTooltipPosition="left" *ngIf="!ele.actualDisbursementDate && showActionsTrancheButtons()">
<button
type="button"
mat-icon-button
color="primary"
(click)="editDisbursementDataEntry(rowIndex)"
matTooltip="{{ 'tooltips.Edit' | translate }}"
matTooltipPosition="left"
*ngIf="!ele.actualDisbursementDate && showActionsTrancheButtons()"
>
<fa-icon icon="edit"></fa-icon>
</button>
<button type="button" mat-icon-button color="warn"
(click)="removeDisbursementDataEntry(rowIndex)" matTooltip="{{ 'tooltips.Delete' | translate}}"
matTooltipPosition="left" *ngIf="!ele.actualDisbursementDate && showActionsTrancheButtons()">
<button
type="button"
mat-icon-button
color="warn"
(click)="removeDisbursementDataEntry(rowIndex)"
matTooltip="{{ 'tooltips.Delete' | translate }}"
matTooltipPosition="left"
*ngIf="!ele.actualDisbursementDate && showActionsTrancheButtons()"
>
<fa-icon icon="trash"></fa-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="expectedDisbursementColumns"></tr>
<tr mat-row *matRowDef="let row; columns: expectedDisbursementColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: expectedDisbursementColumns"></tr>
</table>
<div *ngIf="loanDetails.emiAmountVariations.length > 0">
<h3>{{"labels.heading.Installment Amount Variations" | translate}}: </h3>
<h3>{{ 'labels.heading.Installment Amount Variations' | translate }}:</h3>
<table mat-table [dataSource]="loanDetails.emiAmountVariations">
<ng-container matColumnDef="emi amount variation from">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Applicable From Date" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.termVariationApplicableFrom | dateFormat}} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Applicable From Date' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.termVariationApplicableFrom | dateFormat }}</td>
</ng-container>
<ng-container matColumnDef="fixed emi amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Installment Amount" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.termValue }} </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Installment Amount' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.termValue }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="emivariationColumns"></tr>
<tr mat-row *matRowDef="let row; columns: emivariationColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: emivariationColumns"></tr>
</table>
</div>
</div>
+221 -101
View File
@@ -1,13 +1,15 @@
<mat-card class="account-card">
<mat-card-header fxLayout="column" class="header">
<mat-card-title-group class="header-title-group">
<div class="profile-image-container">
<div>
<mifosx-svg-icon [iconClass]="" iconFile="account_placeholder" iconName="LOAN_ACCOUNT" iconWidth="210"
matTooltip="{{ 'tooltips.Loan Account' | translate}}">
<mifosx-svg-icon
[iconClass]=""
iconFile="account_placeholder"
iconName="LOAN_ACCOUNT"
iconWidth="210"
matTooltip="{{ 'tooltips.Loan Account' | translate }}"
>
</mifosx-svg-icon>
</div>
</div>
@@ -15,37 +17,54 @@
<div class="mat-typography account-card-title">
<mat-card-title>
<div fxLayout="row" fxLayout.lt-md="column">
<div fxFlex="60%">
<h3>
<i class="fa fa-stop" matTooltip="{{'labels.status.' + loanDetailsData.status.value | translate}}"
[ngClass]="loanDetailsData.inArrears?'status-active-overdue':( iconLoanStatusColor() | statusLookup)"></i>
<span class="m-r-5">{{'labels.heading.Loan Product' | translate}} :</span>
<span class="m-r-5"><mifosx-long-text textValue="{{loanDetailsData.loanProductName}}"></mifosx-long-text></span>
<mifosx-account-number accountNo="{{loanDetailsData.accountNo}}" display="left"></mifosx-account-number>
<i
class="fa fa-stop"
matTooltip="{{ 'labels.status.' + loanDetailsData.status.value | translate }}"
[ngClass]="
loanDetailsData.inArrears ? 'status-active-overdue' : (iconLoanStatusColor() | statusLookup)
"
></i>
<span class="m-r-5">{{ 'labels.heading.Loan Product' | translate }} :</span>
<span class="m-r-5"
><mifosx-long-text textValue="{{ loanDetailsData.loanProductName }}"></mifosx-long-text
></span>
<mifosx-account-number
accountNo="{{ loanDetailsData.accountNo }}"
display="left"
></mifosx-account-number>
</h3>
<span class="loans-overview">
<span class="m-r-10">{{'labels.text.' + entityType | translate}} {{"labels.inputs.name" | translate}} :</span> {{loanDetailsData.clientName ||
loanDetailsData.groupName}}<span class="m-l-5">({{loanDetailsData.clientAccountNo}})</span><br />
<span class="m-r-10"
>{{ 'labels.text.' + entityType | translate }} {{ 'labels.inputs.name' | translate }} :</span
>
{{ loanDetailsData.clientName || loanDetailsData.groupName
}}<span class="m-l-5">({{ loanDetailsData.clientAccountNo }})</span><br />
</span>
<div *ngIf="loanDisplayArrearsDelinquency !== 1">
<table class="account-overview">
<tbody>
<tr *ngIf="loanDetailsData.delinquencyRange">
<td>{{"labels.inputs.Delinquency Classification" | translate}} :</td>
<td>{{ 'labels.inputs.Delinquency Classification' | translate }} :</td>
<td>
<span class="m-r-3"><i [ngClass]="loanDelinquencyClassificationStyle"></i></span>
{{loanDetailsData?.delinquencyRange.classification}}
{{ loanDetailsData?.delinquencyRange.classification }}
</td>
</tr>
<tr *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
<td>{{"labels.inputs.Past Due Days" | translate}} :</td>
<td>{{loanDetailsData?.delinquent.pastDueDays | formatNumber }}</td>
<td>{{ 'labels.inputs.Past Due Days' | translate }} :</td>
<td>{{ loanDetailsData?.delinquent.pastDueDays | formatNumber }}</td>
</tr>
<tr *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
&& loanDetailsData.delinquent.pastDueDays !== loanDetailsData.delinquent.delinquentDays">
<td>{{"labels.inputs.Delinquent Days" | translate}} :</td>
<td>{{loanDetailsData?.delinquent.delinquentDays | formatNumber }}</td>
<tr
*ngIf="
loanDetailsData.delinquent &&
loanDetailsData.delinquent.delinquentDays > 0 &&
loanDetailsData.delinquent.pastDueDays !== loanDetailsData.delinquent.delinquentDays
"
>
<td>{{ 'labels.inputs.Delinquent Days' | translate }} :</td>
<td>{{ loanDetailsData?.delinquent.delinquentDays | formatNumber }}</td>
</tr>
</tbody>
</table>
@@ -53,27 +72,35 @@
</div>
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="40%">
<h3> {{"labels.heading.Account Overview" | translate}} </h3>
<h3>{{ 'labels.heading.Account Overview' | translate }}</h3>
<table class="account-overview">
<tbody>
<tr>
<td>{{"labels.inputs.Current Balance" | translate }}</td>
<td class="r-amount">{{loanDetailsData.summary.totalOutstanding | currency:currency.code:'symbol-narrow':'1.2-2'}}</td>
<td>{{ 'labels.inputs.Current Balance' | translate }}</td>
<td class="r-amount">
{{
loanDetailsData.summary.totalOutstanding | currency: currency.code : 'symbol-narrow' : '1.2-2'
}}
</td>
</tr>
<tr *ngIf="loanDisplayArrearsDelinquency < 2">
<td>{{"labels.inputs.Arrears By" | translate }}</td>
<td>{{ 'labels.inputs.Arrears By' | translate }}</td>
<td class="r-amount" *ngIf="loanDetailsData.summary.totalOverdue >= 0">
{{loanDetailsData.summary.totalOverdue | currency:currency.code:'symbol-narrow':'1.2-2'}}
{{ loanDetailsData.summary.totalOverdue | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
<td *ngIf="!(loanDetailsData.summary.totalOverdue >= 0)">
{{ 'labels.inputs.Not Provided' | translate }}
</td>
<td *ngIf="!(loanDetailsData.summary.totalOverdue>=0)">{{"labels.inputs.Not Provided" | translate}}</td>
</tr>
<tr *ngIf="loanDetailsData.inArrears">
<td>{{"labels.inputs.Arrears Since" | translate }}</td>
<td> {{loanDetailsData.summary.overdueSinceDate | dateFormat}} </td>
<td>{{ 'labels.inputs.Arrears Since' | translate }}</td>
<td>{{ loanDetailsData.summary.overdueSinceDate | dateFormat }}</td>
</tr>
<tr *ngIf="loanDetailsData.totalOverpaid && loanDetailsData.totalOverpaid > 0">
<td>{{"labels.inputs.Overpaid By" | translate }}</td>
<td class="r-amount">{{loanDetailsData.totalOverpaid | currency:currency.code:'symbol-narrow':'1.2-2'}} </td>
<td>{{ 'labels.inputs.Overpaid By' | translate }}</td>
<td class="r-amount">
{{ loanDetailsData.totalOverpaid | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</tr>
</tbody>
</table>
@@ -82,14 +109,18 @@
<span fxFlex="auto"></span>
<div fxFlex="4%">
<button mat-icon-button [matMenuTriggerFor]="accountMenu" aria-label="Loan account actions"
yPosition="below" *ngIf="buttonConfig.singleButtons.length > 0">
<button
mat-icon-button
[matMenuTriggerFor]="accountMenu"
aria-label="Loan account actions"
yPosition="below"
*ngIf="buttonConfig.singleButtons.length > 0"
>
<mat-icon matListIcon class="actions-menu">
<fa-icon icon="bars" size="sm"></fa-icon>
</mat-icon>
</button>
</div>
</div>
</mat-card-title>
</div>
@@ -98,142 +129,231 @@
<ng-container *ngFor="let item of buttonConfig.singleButtons">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
<mat-icon matListIcon>
<fa-icon icon="{{item.icon}}" size="sm"></fa-icon>
<fa-icon icon="{{ item.icon }}" size="sm"></fa-icon>
</mat-icon>
<span>{{'labels.menus.' + item.name | translate}}</span>
<span>{{ 'labels.menus.' + item.name | translate }}</span>
</button>
</ng-container>
<ng-container *ngIf="buttonConfig.optionsPayment.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="Payments">{{"labels.menus.Payments" | translate}}</button>
<button mat-menu-item [matMenuTriggerFor]="Payments">{{ 'labels.menus.Payments' | translate }}</button>
<mat-menu #Payments="matMenu">
<span *ngFor="let item of buttonConfig.optionsPayment">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{'labels.menus.' + item.name | translate}}</button>
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
{{ 'labels.menus.' + item.name | translate }}
</button>
</span>
</mat-menu>
</ng-container>
<ng-container *ngIf="buttonConfig.options.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="More">{{"labels.menus.More" | translate}}</button>
<button mat-menu-item [matMenuTriggerFor]="More">{{ 'labels.menus.More' | translate }}</button>
<mat-menu #More="matMenu">
<span *ngFor="let item of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{'labels.menus.' + item.name | translate}}</button>
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
{{ 'labels.menus.' + item.name | translate }}
</button>
</span>
</mat-menu>
</ng-container>
</mat-menu>
</mat-card-title-group>
</mat-card-header>
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs">
<a mat-tab-link [routerLink]="['./general']" routerLinkActive #general="routerLinkActive"
[active]="general.isActive">
{{"labels.inputs.General" | translate}}
<a
mat-tab-link
[routerLink]="['./general']"
routerLinkActive
#general="routerLinkActive"
[active]="general.isActive"
>
{{ 'labels.inputs.General' | translate }}
</a>
<a mat-tab-link [routerLink]="['./accountdetail']" routerLinkActive #accountdetail="routerLinkActive"
[active]="accountdetail.isActive">
{{"labels.inputs.Account Details" | translate}}
<a
mat-tab-link
[routerLink]="['./accountdetail']"
routerLinkActive
#accountdetail="routerLinkActive"
[active]="accountdetail.isActive"
>
{{ 'labels.inputs.Account Details' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.originalSchedule">
<a mat-tab-link [routerLink]="['./original-schedule']" routerLinkActive #originalSchedule="routerLinkActive"
[active]="originalSchedule.isActive">
{{"labels.inputs.Original Schedule" | translate}}
<a
mat-tab-link
[routerLink]="['./original-schedule']"
routerLinkActive
#originalSchedule="routerLinkActive"
[active]="originalSchedule.isActive"
>
{{ 'labels.inputs.Original Schedule' | translate }}
</a>
</ng-container>
<a mat-tab-link [routerLink]="['./repayment-schedule']" routerLinkActive #repaymentSchedule="routerLinkActive"
[active]="repaymentSchedule.isActive">
{{"labels.inputs.Repayment Schedule" | translate}}
<a
mat-tab-link
[routerLink]="['./repayment-schedule']"
routerLinkActive
#repaymentSchedule="routerLinkActive"
[active]="repaymentSchedule.isActive"
>
{{ 'labels.inputs.Repayment Schedule' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.transactions">
<a mat-tab-link [routerLink]="['./transactions']" routerLinkActive #transactions="routerLinkActive"
[active]="transactions.isActive">
{{"labels.inputs.Transactions" | translate}}
<a
mat-tab-link
[routerLink]="['./transactions']"
routerLinkActive
#transactions="routerLinkActive"
[active]="transactions.isActive"
>
{{ 'labels.inputs.Transactions' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a mat-tab-link [routerLink]="['./delinquencytags']" routerLinkActive #delinquencytags="routerLinkActive"
[active]="delinquencytags.isActive">
{{"labels.inputs.Delinquency Tags" | translate}}
<a
mat-tab-link
[routerLink]="['./delinquencytags']"
routerLinkActive
#delinquencytags="routerLinkActive"
[active]="delinquencytags.isActive"
>
{{ 'labels.inputs.Delinquency Tags' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.collateral">
<a mat-tab-link [routerLink]="['./loan-collateral']" routerLinkActive #loanCollateralDetails="routerLinkActive"
[active]="loanCollateralDetails.isActive">
{{"labels.inputs.Loan Collateral Details" | translate}}
<a
mat-tab-link
[routerLink]="['./loan-collateral']"
routerLinkActive
#loanCollateralDetails="routerLinkActive"
[active]="loanCollateralDetails.isActive"
>
{{ 'labels.inputs.Loan Collateral Details' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.multiDisburseLoan">
<a mat-tab-link [routerLink]="['./loan-tranche-details']" routerLinkActive
#loanTrancheDetails="routerLinkActive" [active]="loanTrancheDetails.isActive">
{{"labels.inputs.Loan Tranche Details" | translate}}
<a
mat-tab-link
[routerLink]="['./loan-tranche-details']"
routerLinkActive
#loanTrancheDetails="routerLinkActive"
[active]="loanTrancheDetails.isActive"
>
{{ 'labels.inputs.Loan Tranche Details' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.loanTermVariations">
<a mat-tab-link [routerLink]="['./term-variations']" routerLinkActive #termVariations="routerLinkActive"
[active]="termVariations.isActive">
{{"labels.inputs.Term Variations" | translate}}
<a
mat-tab-link
[routerLink]="['./term-variations']"
routerLinkActive
#termVariations="routerLinkActive"
[active]="termVariations.isActive"
>
{{ 'labels.inputs.Term Variations' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.overdueCharges.length > 0">
<a mat-tab-link [routerLink]="['./overdue-charges']" routerLinkActive #overduecharges="routerLinkActive"
[active]="overduecharges.isActive">
{{"labels.inputs.Overdue Charges" | translate}}
<a
mat-tab-link
[routerLink]="['./overdue-charges']"
routerLinkActive
#overduecharges="routerLinkActive"
[active]="overduecharges.isActive"
>
{{ 'labels.inputs.Overdue Charges' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.isLoanProductLinkedToFloatingRate">
<a mat-tab-link [routerLink]="['./floating-interest-rates']" routerLinkActive
#floatingInterestRates="routerLinkActive" [active]="floatingInterestRates.isActive">
{{"labels.inputs.Floating Interest Rates" | translate}}
<a
mat-tab-link
[routerLink]="['./floating-interest-rates']"
routerLinkActive
#floatingInterestRates="routerLinkActive"
[active]="floatingInterestRates.isActive"
>
{{ 'labels.inputs.Floating Interest Rates' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.charges">
<a mat-tab-link [routerLink]="['./charges']" routerLinkActive #charges="routerLinkActive"
[active]="charges.isActive">
{{"labels.inputs.Charges" | translate}}
<a
mat-tab-link
[routerLink]="['./charges']"
routerLinkActive
#charges="routerLinkActive"
[active]="charges.isActive"
>
{{ 'labels.inputs.Charges' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a mat-tab-link [routerLink]="['./loan-reschedules']" routerLinkActive #loanReschedules="routerLinkActive"
[active]="loanReschedules.isActive">
{{"labels.inputs.Loan Reschedules" | translate}}
<a
mat-tab-link
[routerLink]="['./loan-reschedules']"
routerLinkActive
#loanReschedules="routerLinkActive"
[active]="loanReschedules.isActive"
>
{{ 'labels.inputs.Loan Reschedules' | translate }}
</a>
</ng-container>
<a mat-tab-link [routerLink]="['./loan-documents']" routerLinkActive #loanDocuments="routerLinkActive"
[active]="loanDocuments.isActive">
{{"labels.inputs.Loan Documents" | translate}}
<a
mat-tab-link
[routerLink]="['./loan-documents']"
routerLinkActive
#loanDocuments="routerLinkActive"
[active]="loanDocuments.isActive"
>
{{ 'labels.inputs.Loan Documents' | translate }}
</a>
<a mat-tab-link *mifosxHasPermission="'READ_LOANNOTE'" [routerLink]="['./notes']" routerLinkActive
#notes="routerLinkActive" [active]="notes.isActive">
{{"labels.inputs.Notes" | translate}}
<a
mat-tab-link
*mifosxHasPermission="'READ_LOANNOTE'"
[routerLink]="['./notes']"
routerLinkActive
#notes="routerLinkActive"
[active]="notes.isActive"
>
{{ 'labels.inputs.Notes' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.clientId">
<a mat-tab-link [routerLink]="['./standing-instruction']" routerLinkActive
#standingInstruction="routerLinkActive" [active]="standingInstruction.isActive">
{{"labels.inputs.Standing Instruction" | translate}}
<a
mat-tab-link
[routerLink]="['./standing-instruction']"
routerLinkActive
#standingInstruction="routerLinkActive"
[active]="standingInstruction.isActive"
>
{{ 'labels.inputs.Standing Instruction' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a mat-tab-link [routerLink]="['./external-asset-owner']" routerLinkActive
#externalAssetOwner="routerLinkActive" [active]="externalAssetOwner.isActive">
{{"labels.inputs.External Asset Owner" | translate}}
<a
mat-tab-link
[routerLink]="['./external-asset-owner']"
routerLinkActive
#externalAssetOwner="routerLinkActive"
[active]="externalAssetOwner.isActive"
>
{{ 'labels.inputs.External Asset Owner' | translate }}
</a>
</ng-container>
<ng-container *ngFor="let loanDatatable of loanDatatables">
<a mat-tab-link *mifosxHasPermission="'READ_' + loanDatatable.registeredTableName"
[routerLink]="['./datatables',loanDatatable.registeredTableName]" routerLinkActive
#datatable="routerLinkActive" [active]="datatable.isActive">
{{loanDatatable.registeredTableName}}
<a
mat-tab-link
*mifosxHasPermission="'READ_' + loanDatatable.registeredTableName"
[routerLink]="['./datatables', loanDatatable.registeredTableName]"
routerLinkActive
#datatable="routerLinkActive"
[active]="datatable.isActive"
>
{{ loanDatatable.registeredTableName }}
</a>
</ng-container>
</nav>
<router-outlet></router-outlet>
</mat-card-content>
</mat-card>
@@ -1,4 +1,5 @@
<mifosx-entity-notes-tab [entityId]="entityId"
<mifosx-entity-notes-tab
[entityId]="entityId"
[entityNotes]="entityNotes"
[callbackAdd]="addNote"
[callbackEdit]="editNote"
@@ -1,78 +1,105 @@
<div class="container">
<table mat-table [dataSource]="originalScheduleDetails.periods" matSort>
<ng-container matColumnDef="number">
<th mat-header-cell *matHeaderCellDef> # </th>
<td mat-cell *matCellDef="let ele; let idx = index;">{{(idx + 1)}}</td>
<td mat-footer-cell *matFooterCellDef> &nbsp; </td>
<th mat-header-cell *matHeaderCellDef>#</th>
<td mat-cell *matCellDef="let ele; let idx = index">{{ idx + 1 }}</td>
<td mat-footer-cell *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="date">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Date" | translate}} </th>
<td mat-cell *matCellDef="let ele"> {{ ele.dueDate | dateFormat}} </td>
<td mat-footer-cell *matFooterCellDef> <b> {{"labels.inputs.Total" | translate}}</b> </td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell *matCellDef="let ele">{{ ele.dueDate | dateFormat }}</td>
<td mat-footer-cell *matFooterCellDef>
<b> {{ 'labels.inputs.Total' | translate }}</b>
</td>
</ng-container>
<ng-container matColumnDef="balanceOfLoan">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Balance Of Loan" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.principalLoanBalanceOutstanding | formatNumber }} </td>
<td mat-footer-cell *matFooterCellDef> &nbsp; </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Balance Of Loan' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.principalLoanBalanceOutstanding | formatNumber }}</td>
<td mat-footer-cell *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="principalDue">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Principal Due" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.principalDue | formatNumber }} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ originalScheduleDetails.totalPrincipalExpected | currency:currency.code:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Principal Due' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.principalDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ originalScheduleDetails.totalPrincipalExpected | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="interest">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Interest" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.interestOriginalDue | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ originalScheduleDetails.totalInterestCharged | currency:currency.code:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Interest' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.interestOriginalDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ originalScheduleDetails.totalInterestCharged | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="fees">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Fees" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.feeChargesDue | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ originalScheduleDetails.totalFeeChargesCharged | currency:currency.code:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Fees' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.feeChargesDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ originalScheduleDetails.totalFeeChargesCharged | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="penalties">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Penalties" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.penaltyChargesDue | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ originalScheduleDetails.totalPenaltyChargesCharged | currency:currency.code:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Penalties' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.penaltyChargesDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ originalScheduleDetails.totalPenaltyChargesCharged | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="outstanding">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Outstanding" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.totalOutstandingForPeriod | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ originalScheduleDetails.totalRepaymentExpected | currency:currency.code:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Outstanding' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.totalOutstandingForPeriod | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ originalScheduleDetails.totalRepaymentExpected | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<!-- Header row first group -->
<ng-container matColumnDef="header">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2"> </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2"></th>
</ng-container>
<!-- Header row second group -->
<ng-container matColumnDef="header-amount">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2"> {{"labels.inputs.Loan Amount and Balance" | translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2">
{{ 'labels.inputs.Loan Amount and Balance' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="header-total-cost">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="3"> {{"labels.inputs.Total Cost of Loan" | translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="3">
{{ 'labels.inputs.Total Cost of Loan' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="header-installment-totals">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Installment Totals" | translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Installment Totals' | translate }}
</th>
</ng-container>
<tr mat-header-row *matHeaderRowDef="['header', 'header-amount', 'header-total-cost', 'header-installment-totals']"></tr>
<tr
mat-header-row
*matHeaderRowDef="['header', 'header-amount', 'header-total-cost', 'header-installment-totals']"
></tr>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
<tr mat-footer-row *matFooterRowDef="displayedColumns"></tr>
</table>
</div>
@@ -1,31 +1,28 @@
<div class="container">
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Name" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.name }},{{ charge.currency.displaySymbol }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Name' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.name }},{{ charge.currency.displaySymbol }}</td>
</ng-container>
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Type" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeCalculationType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Type' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeCalculationType.value }}</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Amount" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.amount| formatNumber }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.amount | formatNumber }}</td>
</ng-container>
<ng-container matColumnDef="collectedon">
<th mat-header-cell *matHeaderCellDef mat-sort-header> {{"labels.inputs.Collected On" | translate}} </th>
<td mat-cell *matCellDef="let charge"> {{ charge.chargeTimeType.value }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Collected On' | translate }}</th>
<td mat-cell *matCellDef="let charge">{{ charge.chargeTimeType.value }}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</div>
@@ -6,240 +6,292 @@
</div>
<table mat-table [dataSource]="repaymentScheduleDetails.periods" *ngIf="!forEditing" id="repaymentSchedule">
<ng-container matColumnDef="number">
<th mat-header-cell class="center" *matHeaderCellDef> # </th>
<td mat-cell class="right" *matCellDef="let ele"> {{ ele.period }} </td>
<td mat-footer-cell *matFooterCellDef> &nbsp; </td>
<th mat-header-cell class="center" *matHeaderCellDef>#</th>
<td mat-cell class="right" *matCellDef="let ele">{{ ele.period }}</td>
<td mat-footer-cell *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="days">
<th mat-header-cell class="center" *matHeaderCellDef> {{"labels.inputs.Days" | translate}} </th>
<td mat-cell class="center" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.daysInPeriod }} </td>
<td mat-footer-cell class="center" *matFooterCellDef> <b> Total</b> </td>
<th mat-header-cell class="center" *matHeaderCellDef>{{ 'labels.inputs.Days' | translate }}</th>
<td mat-cell class="center" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">{{ ele.daysInPeriod }}</td>
<td mat-footer-cell class="center" *matFooterCellDef><b> Total</b></td>
</ng-container>
<ng-container matColumnDef="date">
<th mat-header-cell class="center" *matHeaderCellDef> {{"labels.inputs.Date" | translate}} </th>
<td mat-cell class="m-r-5" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.dueDate | dateFormat}}
<th mat-header-cell class="center" *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell class="m-r-5" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.dueDate | dateFormat }}
</td>
<td mat-footer-cell *matFooterCellDef> </td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<ng-container matColumnDef="paiddate">
<th mat-header-cell class="center" *matHeaderCellDef> {{"labels.inputs.Paid Date" | translate}} </th>
<td mat-cell class="center" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.obligationsMetOnDate |
dateFormat}} </td>
<td mat-footer-cell *matFooterCellDef> </td>
<th mat-header-cell class="center" *matHeaderCellDef>{{ 'labels.inputs.Paid Date' | translate }}</th>
<td mat-cell class="center" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.obligationsMetOnDate | dateFormat }}
</td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<ng-container matColumnDef="check">
<th mat-header-cell *matHeaderCellDef> &nbsp; </th>
<th mat-header-cell *matHeaderCellDef>&nbsp;</th>
<td mat-cell class="center" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
<span *ngIf="ele.obligationsMetOnDate"> <i class="fa fa-check"></i> </span>
</td>
<td mat-footer-cell *matFooterCellDef> </td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<ng-container matColumnDef="balanceOfLoan">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Balance Of Loan" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{
ele.principalLoanBalanceOutstanding | formatNumber }} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> &nbsp; </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Balance Of Loan' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.principalLoanBalanceOutstanding | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="principalDue">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Principal Due" | translate}} </th>
<td mat-cell class="check r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.principalDue |
formatNumber }} </td>
<td mat-footer-cell class="check r-amount" *matFooterCellDef> <b> {{
repaymentScheduleDetails.totalPrincipalExpected | currency:currencyCode:'symbol-narrow':'1.2-2' }}</b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Principal Due' | translate }}</th>
<td mat-cell class="check r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.principalDue | formatNumber }}
</td>
<td mat-footer-cell class="check r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalPrincipalExpected | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}</b
>
</td>
</ng-container>
<ng-container matColumnDef="interest">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Interest" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.interestOriginalDue
| formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalInterestCharged |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Interest' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.interestOriginalDue | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalInterestCharged | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="fees">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Fees" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.feeChargesDue |
formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalFeeChargesCharged |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Fees' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.feeChargesDue | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalFeeChargesCharged | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="penalties">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Penalties" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.penaltyChargesDue |
formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalPenaltyChargesCharged
| currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Penalties' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.penaltyChargesDue | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalPenaltyChargesCharged | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="due">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Due" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.totalDueForPeriod |
formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalRepaymentExpected |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Due' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.totalDueForPeriod | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalRepaymentExpected | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="paid">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Paid" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{ ele.totalPaidForPeriod |
formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalRepayment |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Paid' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.totalPaidForPeriod | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b> {{ repaymentScheduleDetails.totalRepayment | currency: currencyCode : 'symbol-narrow' : '1.2-2' }} </b>
</td>
</ng-container>
<ng-container matColumnDef="inadvance">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.In advance" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{
ele.totalPaidInAdvanceForPeriod | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalPaidInAdvance |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.In advance' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.totalPaidInAdvanceForPeriod | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b> {{ repaymentScheduleDetails.totalPaidInAdvance | currency: currencyCode : 'symbol-narrow' : '1.2-2' }} </b>
</td>
</ng-container>
<ng-container matColumnDef="late">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Late" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{
ele.totalPaidLateForPeriod | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalPaidLate |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Late' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.totalPaidLateForPeriod | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b> {{ repaymentScheduleDetails.totalPaidLate | currency: currencyCode : 'symbol-narrow' : '1.2-2' }} </b>
</td>
</ng-container>
<ng-container *ngIf="isWaived">
<ng-container matColumnDef="waived">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Waived" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)"> {{
ele.totalWaivedForPeriod | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalWaived |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Waived' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele" [ngClass]="installmentStyle(ele)">
{{ ele.totalWaivedForPeriod | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b> {{ repaymentScheduleDetails.totalWaived | currency: currencyCode : 'symbol-narrow' : '1.2-2' }} </b>
</td>
</ng-container>
</ng-container>
<ng-container *ngIf="!isWaived">
<ng-container matColumnDef="waived">
<th mat-header-cell *matHeaderCellDef> </th>
<td mat-cell *matCellDef="let ele"> </td>
<td mat-footer-cell *matFooterCellDef> <b> </b> </td>
<th mat-header-cell *matHeaderCellDef></th>
<td mat-cell *matCellDef="let ele"></td>
<td mat-footer-cell *matFooterCellDef><b> </b></td>
</ng-container>
</ng-container>
<ng-container matColumnDef="outstanding">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Outstanding" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.totalOutstandingForPeriod | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalOutstanding |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Outstanding' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.totalOutstandingForPeriod | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b> {{ repaymentScheduleDetails.totalOutstanding | currency: currencyCode : 'symbol-narrow' : '1.2-2' }} </b>
</td>
</ng-container>
<ng-container matColumnDef="header">
<th mat-header-cell *matHeaderCellDef [attr.colspan]="5"> </th>
<th mat-header-cell *matHeaderCellDef [attr.colspan]="5"></th>
</ng-container>
<ng-container matColumnDef="header-amount">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2"> {{"labels.inputs.Loan Amount and Balance"
| translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="2">
{{ 'labels.inputs.Loan Amount and Balance' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="header-total-cost">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="3"> {{"labels.inputs.Total Cost of Loan" |
translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="3">
{{ 'labels.inputs.Total Cost of Loan' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="header-installment-totals">
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="6"> {{"labels.inputs.Installment Totals" |
translate}} </th>
<th mat-header-cell class="center" *matHeaderCellDef [attr.colspan]="6">
{{ 'labels.inputs.Installment Totals' | translate }}
</th>
</ng-container>
<tr mat-header-row *matHeaderRowDef="['header', 'header-amount', 'header-total-cost', 'header-installment-totals']">
</tr>
<tr
mat-header-row
*matHeaderRowDef="['header', 'header-amount', 'header-total-cost', 'header-installment-totals']"
></tr>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
<tr mat-footer-row *matFooterRowDef="displayedColumns"></tr>
</table>
<!-- Repayment Schedule to be Edited -->
<div *ngIf="forEditing" fxLayout="column" fxFlex="100%">
<table mat-table [dataSource]="repaymentScheduleDetails.periods">
<ng-container matColumnDef="number">
<th mat-header-cell class="center" *matHeaderCellDef> # </th>
<td mat-cell *matCellDef="let ele"> {{ ele.period }} </td>
<td mat-footer-cell *matFooterCellDef> &nbsp; </td>
<th mat-header-cell class="center" *matHeaderCellDef>#</th>
<td mat-cell *matCellDef="let ele">{{ ele.period }}</td>
<td mat-footer-cell *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="date">
<th mat-header-cell class="center" *matHeaderCellDef> {{"labels.inputs.Date" | translate}} </th>
<td mat-cell class="m-r-10" *matCellDef="let ele"> {{ ele.dueDate | dateFormat}} </td>
<td mat-footer-cell *matFooterCellDef> </td>
<th mat-header-cell class="center" *matHeaderCellDef>{{ 'labels.inputs.Date' | translate }}</th>
<td mat-cell class="m-r-10" *matCellDef="let ele">{{ ele.dueDate | dateFormat }}</td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<ng-container matColumnDef="balanceOfLoan">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Balance Of Loan" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.principalLoanBalanceOutstanding | formatNumber }}
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Balance Of Loan' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">
{{ ele.principalLoanBalanceOutstanding | formatNumber }}
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> &nbsp; </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>&nbsp;</td>
</ng-container>
<ng-container matColumnDef="principalDue">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Principal Due" | translate}} </th>
<td mat-cell class="check r-amount" *matCellDef="let ele"> {{ ele.principalDue | formatNumber }} </td>
<td mat-footer-cell class="check r-amount" *matFooterCellDef> <b> {{
repaymentScheduleDetails.totalPrincipalExpected | currency:currencyCode:'symbol-narrow':'1.2-2' }}</b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Principal Due' | translate }}</th>
<td mat-cell class="check r-amount" *matCellDef="let ele">{{ ele.principalDue | formatNumber }}</td>
<td mat-footer-cell class="check r-amount" *matFooterCellDef>
<b>
{{
repaymentScheduleDetails.totalPrincipalExpected | currency: currencyCode : 'symbol-narrow' : '1.2-2'
}}</b
>
</td>
</ng-container>
<ng-container matColumnDef="interest">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Interest" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.interestOriginalDue | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalInterestCharged |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Interest' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.interestOriginalDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalInterestCharged | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="fees">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Fees" | translate}} </th>
<td mat-cell class="r-amount" *matCellDef="let ele"> {{ ele.feeChargesDue | formatNumber}} </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalFeeChargesCharged |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Fees' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">{{ ele.feeChargesDue | formatNumber }}</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalFeeChargesCharged | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="due">
<th mat-header-cell class="r-amount" *matHeaderCellDef> {{"labels.inputs.Installment Amount" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef>{{ 'labels.inputs.Installment Amount' | translate }}</th>
<td mat-cell class="r-amount" *matCellDef="let ele">
<span *ngIf="!ele.changed">
{{ ele.totalDueForPeriod | formatNumber}}
{{ ele.totalDueForPeriod | formatNumber }}
</span>
<span *ngIf="ele.changed" class="amount-changed">
<b>{{ ele.totalDueForPeriod | formatNumber}}</b>
<b>{{ ele.totalDueForPeriod | formatNumber }}</b>
</span>
</td>
<td mat-footer-cell class="r-amount" *matFooterCellDef> <b> {{ repaymentScheduleDetails.totalRepaymentExpected |
currency:currencyCode:'symbol-narrow':'1.2-2' }} </b> </td>
<td mat-footer-cell class="r-amount" *matFooterCellDef>
<b>
{{ repaymentScheduleDetails.totalRepaymentExpected | currency: currencyCode : 'symbol-narrow' : '1.2-2' }}
</b>
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell class="center" *matCellDef="let ele">
<button *ngIf="ele.period" type="button" color="primary" mat-icon-button
matTooltip="{{ 'tooltips.Edit' | translate}}" matTooltipPosition="above" (click)="editPeriod(ele)">
<button
*ngIf="ele.period"
type="button"
color="primary"
mat-icon-button
matTooltip="{{ 'tooltips.Edit' | translate }}"
matTooltipPosition="above"
(click)="editPeriod(ele)"
>
<fa-icon icon="edit" size="lg"></fa-icon>
</button>
</td>
<td mat-footer-cell *matFooterCellDef> </td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumnsEdit"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumnsEdit;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumnsEdit"></tr>
<tr mat-footer-row *matFooterRowDef="displayedColumnsEdit"></tr>
</table>
</div>
</div>
</div>
@@ -1,64 +1,72 @@
<div class="container">
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px" class="action-buttons">
<button mat-raised-button color="primary" [routerLink]="['../actions/Reschedule']">
{{"labels.buttons.Reschedule" | translate}}
{{ 'labels.buttons.Reschedule' | translate }}
</button>
</div>
<table mat-table [dataSource]="loanRescheduleData">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> # </th>
<td mat-cell *matCellDef="let item"> {{ item.id }} </td>
<th mat-header-cell *matHeaderCellDef>#</th>
<td mat-cell *matCellDef="let item">{{ item.id }}</td>
</ng-container>
<!-- Status Column -->
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Status" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Status' | translate }}</th>
<td mat-cell *matCellDef="let item">
<div [ngClass]="item.statusEnum.code | statusLookup">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-10 status">
{{ item.statusEnum.value | translate}}
{{ item.statusEnum.value | translate }}
</span>
</div>
</td>
</ng-container>
<ng-container matColumnDef="rescheduleFromDate">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.From Date" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.From Date' | translate }}</th>
<td mat-cell *matCellDef="let item">
{{ item.rescheduleFromDate | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="reason">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Reason" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Reason' | translate }}</th>
<td mat-cell *matCellDef="let item">
{{ item.rescheduleReasonCodeValue.name }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let item">
<span *ngIf="item.statusEnum.pendingApproval">
<button class="action-button" mat-raised-button color="warn" matTooltip="{{ 'tooltips.Reject Reschedule' | translate}}" matTooltipPosition="left"
(click)="manageRequest(item, 'Reject')">
<fa-icon icon="trash"></fa-icon>
</button>
<button class="action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.Approve Reschedule' | translate}}" matTooltipPosition="right"
(click)="manageRequest(item, 'Approve')">
<button
class="action-button"
mat-raised-button
color="warn"
matTooltip="{{ 'tooltips.Reject Reschedule' | translate }}"
matTooltipPosition="left"
(click)="manageRequest(item, 'Reject')"
>
<fa-icon icon="trash"></fa-icon>
</button>
<button
class="action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.Approve Reschedule' | translate }}"
matTooltipPosition="right"
(click)="manageRequest(item, 'Approve')"
>
<fa-icon icon="check"></fa-icon>
</button>
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="loanRescheduleDataColumns"></tr>
<tr mat-row *matRowDef="let row; columns: loanRescheduleDataColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: loanRescheduleDataColumns"></tr>
</table>
</div>
@@ -1,77 +1,95 @@
<div class="tab-container mat-typography">
<div class="m-b-10">
<h3>{{"labels.heading.All Standing Instructions" | translate}}</h3>
<h3>{{ 'labels.heading.All Standing Instructions' | translate }}</h3>
</div>
<div class="mat-elevation-z1 m-b-25">
<table mat-table #instructionsTable [dataSource]="dataSource">
<ng-container matColumnDef="client">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Client" | translate}} </th>
<td mat-cell *matCellDef="let instruction">{{instruction.fromClient.displayName}}-{{instruction.fromClient.id}}
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Client' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.fromClient.displayName }}-{{ instruction.fromClient.id }}
</td>
</ng-container>
<ng-container matColumnDef="fromAccount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.From Account" | translate}} </th>
<td mat-cell *matCellDef="let instruction">{{instruction.fromAccount.accountNo}}
({{instruction.fromAccountType.value}})</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.From Account' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.fromAccount.accountNo }} ({{ instruction.fromAccountType.value }})
</td>
</ng-container>
<ng-container matColumnDef="beneficiary">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Beneficiary" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Beneficiary' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
<span *ngIf="instruction.fromClient.id !== instruction.toClient.id"> {{instruction.toClient.displayName}} </span>
<span *ngIf="instruction.fromClient.id === instruction.toClient.id">{{"labels.inputs.Own Account" | translate}}</span>
<span *ngIf="instruction.fromClient.id !== instruction.toClient.id">
{{ instruction.toClient.displayName }}
</span>
<span *ngIf="instruction.fromClient.id === instruction.toClient.id">{{
'labels.inputs.Own Account' | translate
}}</span>
</td>
</ng-container>
<ng-container matColumnDef="toAccount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.To Account" | translate}} </th>
<td mat-cell *matCellDef="let instruction">{{instruction.toAccount.accountNo}}
({{instruction.toAccountType.value}})</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.To Account' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.toAccount.accountNo }} ({{ instruction.toAccountType.value }})
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<td mat-cell *matCellDef="let instruction">{{instruction.instructionType.value}}/{{instruction.amount}}</td>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let instruction">{{ instruction.instructionType.value }}/{{ instruction.amount }}</td>
</ng-container>
<ng-container matColumnDef="validity">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Validity" | translate}} </th>
<td mat-cell *matCellDef="let instruction">{{instruction.validFrom | dateFormat}} to {{instruction.validTill | dateFormat}}
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Validity' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
{{ instruction.validFrom | dateFormat }} to {{ instruction.validTill | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let instruction">
<span *ngIf="instruction.status.value!=='Deleted'">
<button class="account-action-button" mat-raised-button color="primary"
matTooltip="{{ 'tooltips.Edit Standing Instruction' | translate}}" *mifosxHasPermission="'UPDATE_STANDINGINSTRUCTION'">
<span *ngIf="instruction.status.value !== 'Deleted'">
<button
class="account-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.Edit Standing Instruction' | translate }}"
*mifosxHasPermission="'UPDATE_STANDINGINSTRUCTION'"
>
<i class="fa fa-edit"></i>
</button>
</span>
<span *ngIf="instruction.status.value!=='Deleted'">
<button class="account-action-button" mat-raised-button color="warn"
matTooltip="{{ 'tooltips.Delete Standing Instruction' | translate}}" *mifosxHasPermission="'DELETE_STANDINGINSTRUCTION'" (click)="deleteStandingInstruction(instruction.id)">
<span *ngIf="instruction.status.value !== 'Deleted'">
<button
class="account-action-button"
mat-raised-button
color="warn"
matTooltip="{{ 'tooltips.Delete Standing Instruction' | translate }}"
*mifosxHasPermission="'DELETE_STANDINGINSTRUCTION'"
(click)="deleteStandingInstruction(instruction.id)"
>
<i class="fa fa-times"></i>
</button>
</span>
<button class="account-action-button" mat-raised-button color="primary" matTooltip="{{ 'tooltips.View Standing Instruction' | translate}}"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'">
<button
class="account-action-button"
mat-raised-button
color="primary"
matTooltip="{{ 'tooltips.View Standing Instruction' | translate }}"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'"
>
<i class="fa fa-eye"></i>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
</div>
@@ -1,111 +1,207 @@
<div class="container">
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px" class="transaction-buttons" *ngIf="checkStatus()">
<mat-checkbox [formControl]="hideReversedParam" (click)="hideReversed()" class="accruals">
{{"labels.inputs.Hide Reversed" | translate}}</mat-checkbox>
{{ 'labels.inputs.Hide Reversed' | translate }}</mat-checkbox
>
<mat-checkbox [formControl]="hideAccrualsParam" (click)="hideAccruals()" class="accruals">
{{"labels.inputs.Hide Accruals" | translate}}</mat-checkbox>
{{ 'labels.inputs.Hide Accruals' | translate }}</mat-checkbox
>
<button mat-raised-button color="primary" class="transaction-button" [routerLink]="['export']">
{{"labels.buttons.Export" | translate}}
{{ 'labels.buttons.Export' | translate }}
</button>
</div>
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="row">
<td mat-cell *matCellDef="let transaction; let idx = index;" (click)="showTransactions(transaction)">{{(idx + 1)}}</td>
<td mat-cell *matCellDef="let transaction; let idx = index" (click)="showTransactions(transaction)">
{{ idx + 1 }}
</td>
</ng-container>
<ng-container matColumnDef="id">
<td mat-cell *matCellDef="let transaction" class="td-select" [ngClass]="loanTransactionColor(transaction)" (click)="showTransactions(transaction)">{{ transaction.id }}</td>
<td
mat-cell
*matCellDef="let transaction"
class="td-select"
[ngClass]="loanTransactionColor(transaction)"
(click)="showTransactions(transaction)"
>
{{ transaction.id }}
</td>
</ng-container>
<ng-container matColumnDef="office">
<td mat-cell *matCellDef="let transaction" [ngClass]="loanTransactionColor(transaction)" (click)="showTransactions(transaction)">{{ transaction.officeName }}</td>
<td
mat-cell
*matCellDef="let transaction"
[ngClass]="loanTransactionColor(transaction)"
(click)="showTransactions(transaction)"
>
{{ transaction.officeName }}
</td>
</ng-container>
<ng-container matColumnDef="externalId">
<td mat-cell *matCellDef="let transaction" [ngClass]="loanTransactionColor(transaction)">
<mifosx-external-identifier externalId="{{transaction.externalId}}"></mifosx-external-identifier>
<mifosx-external-identifier externalId="{{ transaction.externalId }}"></mifosx-external-identifier>
</td>
</ng-container>
<ng-container matColumnDef="date">
<td mat-cell *matCellDef="let transaction" [ngClass]="loanTransactionColor(transaction)" (click)="showTransactions(transaction)"> {{ transaction.date | dateFormat }} </td>
<td
mat-cell
*matCellDef="let transaction"
[ngClass]="loanTransactionColor(transaction)"
(click)="showTransactions(transaction)"
>
{{ transaction.date | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="transactionType">
<td mat-cell *matCellDef="let transaction" [ngClass]="loanTransactionColor(transaction)" (click)="showTransactions(transaction)"> {{ transaction.type.value }} </td>
<td
mat-cell
*matCellDef="let transaction"
[ngClass]="loanTransactionColor(transaction)"
(click)="showTransactions(transaction)"
>
{{ transaction.type.value }}
</td>
</ng-container>
<ng-container matColumnDef="amount">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.amount | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.amount | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="principal">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.principalPortion | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.principalPortion | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="interest">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.interestPortion | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.interestPortion | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="fee">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.feeChargesPortion | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.feeChargesPortion | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="penalties">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.penaltyChargesPortion | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.penaltyChargesPortion | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="loanBalance">
<td mat-cell class="r-amount td-min-space" *matCellDef="let transaction" (click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"> {{ transaction.outstandingLoanBalance | formatNumber }} </td>
<td
mat-cell
class="r-amount td-min-space"
*matCellDef="let transaction"
(click)="showTransactions(transaction)"
[ngClass]="loanTransactionColor(transaction)"
>
{{ transaction.outstandingLoanBalance | formatNumber }}
</td>
</ng-container>
<ng-container matColumnDef="actions">
<td mat-cell *matCellDef="let transaction" class="center">
<button mat-icon-button [matMenuTriggerFor]="transactionMenu" aria-label="" class="action-button" *ngIf="displaySubMenu(transaction)">
<button
mat-icon-button
[matMenuTriggerFor]="transactionMenu"
aria-label=""
class="action-button"
*ngIf="displaySubMenu(transaction)"
>
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #transactionMenu="matMenu">
<span *ngIf="!isReAgoeOrReAmortize(transaction.type)">
<button mat-menu-item (click)="showTransactions(transaction)">
<mat-icon><fa-icon icon="eye" size="sm"></fa-icon></mat-icon>
<span>{{ 'labels.text.View Transaction' | translate}}</span>
<span>{{ 'labels.text.View Transaction' | translate }}</span>
</button>
</span>
<span *ngIf="allowUndoTransaction(transaction)">
<button mat-menu-item *mifosxHasPermission="'ADJUST_LOAN'" (click)="undoTransaction(transaction, $event)">
<mat-icon><fa-icon icon="undo" size="sm"></fa-icon></mat-icon>
<span>{{ 'tooltips.Undo Transaction' | translate}}</span>
</button>
<button mat-menu-item class="account-action-button" (click)="routeEdit($event)" [routerLink]="[transaction.id, 'reciept']">
<span>{{ 'tooltips.Undo Transaction' | translate }}</span>
</button>
<button
mat-menu-item
class="account-action-button"
(click)="routeEdit($event)"
[routerLink]="[transaction.id, 'reciept']"
>
<mat-icon><fa-icon icon="receipt" size="sm"></fa-icon></mat-icon>
<span>{{ 'tooltips.View Receipts' | translate}}</span>
<span>{{ 'tooltips.View Receipts' | translate }}</span>
</button>
</span>
<span *ngIf="isReAge(transaction.type) && !transaction.manuallyReversed">
<button mat-menu-item *mifosxHasPermission="'UNDO_REAGE_LOAN'" (click)="undoReAgeOrReAmortize(transaction, $event)">
<button
mat-menu-item
*mifosxHasPermission="'UNDO_REAGE_LOAN'"
(click)="undoReAgeOrReAmortize(transaction, $event)"
>
<mat-icon><fa-icon icon="undo" size="sm"></fa-icon></mat-icon>
<span>{{ 'labels.menus.Undo Re-Age' | translate}}</span>
</button>
<span>{{ 'labels.menus.Undo Re-Age' | translate }}</span>
</button>
</span>
<span *ngIf="isReAmortize(transaction.type) && !transaction.manuallyReversed">
<button mat-menu-item *mifosxHasPermission="'UNDO_REAMORTIZE_LOAN'" (click)="undoReAgeOrReAmortize(transaction, $event)">
<button
mat-menu-item
*mifosxHasPermission="'UNDO_REAMORTIZE_LOAN'"
(click)="undoReAgeOrReAmortize(transaction, $event)"
>
<mat-icon><fa-icon icon="undo" size="sm"></fa-icon></mat-icon>
<span>{{ 'labels.menus.Undo Re-Amortize' | translate}}</span>
</button>
<span>{{ 'labels.menus.Undo Re-Amortize' | translate }}</span>
</button>
</span>
<span *ngIf="viewJournalEntry(transaction.type)">
<button mat-menu-item (click)="routeEdit($event)" [routerLink]="['/','journal-entry', 'view', 'L'+transaction.id ]">
<button
mat-menu-item
(click)="routeEdit($event)"
[routerLink]="['/', 'journal-entry', 'view', 'L' + transaction.id]"
>
<mat-icon><fa-icon icon="table-cells" size="sm"></fa-icon></mat-icon>
<span>{{ 'tooltips.View Journal Entries' | translate}}</span>
<span>{{ 'tooltips.View Journal Entries' | translate }}</span>
</button>
</span>
</mat-menu>
@@ -114,80 +210,90 @@
<!-- Sub header -->
<ng-container matColumnDef="h1-row">
<th mat-header-cell *matHeaderCellDef> # </th>
<th mat-header-cell *matHeaderCellDef>#</th>
</ng-container>
<ng-container matColumnDef="h1-id">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Id" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Id' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-office">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Office" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Office' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-external-id">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.External Id" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.External Id' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-transaction-date">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Transaction Date" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Transaction Date' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-transaction-type">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Transaction Type" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Transaction Type' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-space">
<th mat-header-cell *matHeaderCellDef> </th>
<th mat-header-cell *matHeaderCellDef></th>
</ng-container>
<ng-container matColumnDef="h1-breakdown">
<th mat-header-cell *matHeaderCellDef class="center" [attr.colspan]="4"> {{"labels.inputs.Breakdown" | translate}} </th>
<th mat-header-cell *matHeaderCellDef class="center" [attr.colspan]="4">
{{ 'labels.inputs.Breakdown' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h1-loan-balance">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Loan Balance" | translate}} </th>
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Loan Balance' | translate }}</th>
</ng-container>
<ng-container matColumnDef="h1-actions">
<th mat-header-cell *matHeaderCellDef class="center"> {{"labels.inputs.Actions" | translate}} </th>
<th mat-header-cell *matHeaderCellDef class="center">{{ 'labels.inputs.Actions' | translate }}</th>
</ng-container>
<!-- Sub header -->
<ng-container matColumnDef="h2-space">
<th mat-header-cell *matHeaderCellDef [attr.colspan]="6"> </th>
<th mat-header-cell *matHeaderCellDef [attr.colspan]="6"></th>
</ng-container>
<ng-container matColumnDef="h2-amount">
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Amount" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Amount' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h2-principal">
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Principal" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Principal' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h2-interest">
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Interest" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Interest' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h2-fees">
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Fees" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Fees' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h2-penalties">
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1"> {{"labels.inputs.Penalties" | translate}} </th>
<th mat-header-cell class="r-amount" *matHeaderCellDef [attr.colspan]="1">
{{ 'labels.inputs.Penalties' | translate }}
</th>
</ng-container>
<ng-container matColumnDef="h2-action">
<th mat-header-cell *matHeaderCellDef [attr.colspan]="2"> </th>
<th mat-header-cell *matHeaderCellDef [attr.colspan]="2"></th>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedHeader1Columns"></tr>
<tr mat-header-row *matHeaderRowDef="displayedHeader2Columns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" class="select-row"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="select-row"></tr>
</table>
<mat-paginator [pageSize]="100" [pageSizeOptions]="[50, 100, 200]" showFirstLastButtons></mat-paginator>
</div>
@@ -1,34 +1,40 @@
<div class="container">
<mat-card>
<form [formGroup]="editTransactionForm" (ngSubmit)="submit()">
<mat-card-content fxLayout="column">
<mat-form-field (click)="dueDatePicker.open()">
<mat-label>{{"labels.inputs.Transaction Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="dueDatePicker"
formControlName="transactionDate" required>
<mat-label>{{ 'labels.inputs.Transaction Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="dueDatePicker"
formControlName="transactionDate"
required
/>
<mat-datepicker-toggle matSuffix [for]="dueDatePicker"></mat-datepicker-toggle>
<mat-datepicker #dueDatePicker></mat-datepicker>
<mat-error *ngIf="editTransactionForm.controls.transactionDate.hasError('required')">
{{"labels.inputs.Transaction Date" | translate}} {{"labels.commons.is" | translate}} <strong> {{"labels.commons.required" | translate}} </strong>
{{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }}
<strong> {{ 'labels.commons.required' | translate }} </strong>
</mat-error>
</mat-form-field>
<mifosx-input-amount [currency]="currency" [isRequired]="true"
<mifosx-input-amount
[currency]="currency"
[isRequired]="true"
[inputFormControl]="editTransactionForm.controls.transactionAmount"
[inputLabel]="'Transaction Amount'">
[inputLabel]="'Transaction Amount'"
>
</mifosx-input-amount>
<mat-form-field>
<mat-label>{{"labels.inputs.External Id" | translate}}</mat-label>
<input matInput formControlName="externalId">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input matInput formControlName="externalId" />
</mat-form-field>
<mat-form-field>
<mat-label>{{"labels.inputs.Payment Type" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Payment Type' | translate }}</mat-label>
<mat-select formControlName="paymentTypeId">
<mat-option *ngFor="let paymentType of paymentTypeOptions" [value]="paymentType.id">
{{ paymentType.name }}
@@ -40,46 +46,46 @@
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle>
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">{{"labels.inputs.Show Payment Details" | translate}}</span>
<span class="m-l-10">{{ 'labels.inputs.Show Payment Details' | translate }}</span>
</div>
</mat-slide-toggle>
</span>
</div>
<mat-form-field *ngIf="editTransactionForm.controls['accountNumber']">
<mat-label>{{"labels.inputs.Account Number" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Account Number' | translate }}</mat-label>
<input type="number" formControlName="accountNumber" matInput />
</mat-form-field>
<mat-form-field *ngIf="editTransactionForm.controls['checkNumber']">
<mat-label>{{"labels.inputs.Cheque" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Cheque' | translate }}</mat-label>
<input type="number" formControlName="checkNumber" matInput />
</mat-form-field>
<mat-form-field *ngIf="editTransactionForm.controls['routingCode']">
<mat-label>{{"labels.inputs.Routing Code" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Routing Code' | translate }}</mat-label>
<input formControlName="routingCode" matInput />
</mat-form-field>
<mat-form-field *ngIf="editTransactionForm.controls['receiptNumber']">
<mat-label>{{"labels.inputs.Receipt Number" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Receipt Number' | translate }}</mat-label>
<input formControlName="receiptNumber" matInput />
</mat-form-field>
<mat-form-field *ngIf="editTransactionForm.controls['bankNumber']">
<mat-label>{{"labels.inputs.Bank" | translate}}</mat-label>
<mat-label>{{ 'labels.inputs.Bank' | translate }}</mat-label>
<input formControlName="bankNumber" matInput />
</mat-form-field>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../']">{{"labels.buttons.Cancel" | translate}}</button>
<button mat-raised-button color="primary" [disabled]="!editTransactionForm.valid">{{"labels.buttons.Submit" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
<button mat-raised-button color="primary" [disabled]="!editTransactionForm.valid">
{{ 'labels.buttons.Submit' | translate }}
</button>
</mat-card-actions>
</mat-card-content>
</form>
</mat-card>
</div>
@@ -1,35 +1,48 @@
<form class="m-t-20" fxLayout="column" [formGroup]="transactionsReportForm" (ngSubmit)="generate()">
<div fxLayout="row" fxLayoutGap="3%" fxLayoutAlign="center">
<mat-form-field fxFlex="30%" (click)="fromDatePicker.open()">
<mat-label>{{"labels.inputs.From Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" required formControlName="fromDate">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="fromDatePicker"
required
formControlName="fromDate"
/>
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
<mat-datepicker #fromDatePicker></mat-datepicker>
<mat-error>
{{"labels.inputs.From date" | translate}} {{"labels.commons.is" | translate}} <strong> {{"labels.commons.required" | translate}} </strong>
{{ 'labels.inputs.From date' | translate }} {{ 'labels.commons.is' | translate }}
<strong> {{ 'labels.commons.required' | translate }} </strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="30%" (click)="toDatePicker.open()">
<mat-label>{{"labels.inputs.To Date" | translate}}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="toDatePicker" required formControlName="toDate">
<mat-label>{{ 'labels.inputs.To Date' | translate }}</mat-label>
<input
matInput
[min]="minDate"
[max]="maxDate"
[matDatepicker]="toDatePicker"
required
formControlName="toDate"
/>
<mat-datepicker-toggle matSuffix [for]="toDatePicker"></mat-datepicker-toggle>
<mat-datepicker #toDatePicker></mat-datepicker>
<mat-error>
{{"labels.inputs.To date" | translate}} {{"labels.commons.is" | translate}} <strong> {{"labels.commons.required" | translate}} </strong>
{{ 'labels.inputs.To date' | translate }} {{ 'labels.commons.is' | translate }}
<strong> {{ 'labels.commons.required' | translate }} </strong>
</mat-error>
</mat-form-field>
</div>
<div class="generate-button" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5%">
<button type="button" mat-raised-button [routerLink]="['../']">{{"labels.buttons.Cancel" | translate}}</button>
<button type="button" mat-raised-button [routerLink]="['../']">{{ 'labels.buttons.Cancel' | translate }}</button>
<button mat-raised-button color="primary" [disabled]="!transactionsReportForm.valid">
<fa-icon icon="cogs" class="m-r-10"></fa-icon>{{"labels.buttons.Generate Report" | translate}} &nbsp;</button>
<fa-icon icon="cogs" class="m-r-10"></fa-icon>{{ 'labels.buttons.Generate Report' | translate }} &nbsp;
</button>
</div>
</form>
<iframe *ngIf="!hideOutput" [src]="pentahoUrl" frameborder="0" width="100%" height="750px;"></iframe>
@@ -1,10 +1,9 @@
<mat-card class="container">
<div class="back-button">
<button type="button" color="primary" mat-raised-button [routerLink]="['../../../general']">
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>{{"labels.buttons.Back" | translate}}</button>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>{{ 'labels.buttons.Back' | translate }}
</button>
</div>
<iframe [src]="pentahoUrl" frameborder="0" width=100% height="600px;"></iframe>
<iframe [src]="pentahoUrl" frameborder="0" width="100%" height="600px;"></iframe>
</mat-card>
@@ -1,33 +1,33 @@
<div fxLayoutAlign="end" class="container m-b-20 transaction-buttons" fxLayoutGap="2%"
*ngIf="!(transactionData.type.contra)">
<div
fxLayoutAlign="end"
class="container m-b-20 transaction-buttons"
fxLayoutGap="2%"
*ngIf="!transactionData.type.contra"
>
<span *mifosxHasPermission="'ADJUST_LOAN'">
<button mat-raised-button color="primary" [routerLink]="'edit'" [disabled]="!allowEdition">
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{ 'Edit' | translate}}
<fa-icon icon="edit" class="m-r-10"></fa-icon>{{ 'Edit' | translate }}
</button>
<button mat-raised-button color="warn" (click)="undoTransaction()" [disabled]="!allowUndo">
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{ 'Undo' | translate}}
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{ 'Undo' | translate }}
</button>
</span>
<span *mifosxHasPermission="'CHARGEBACK_LOAN'">
<button mat-raised-button color="warn" [disabled]="!allowChargeback" (click)="chargebackTransaction()">
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{ 'Chargeback' | translate}}
<fa-icon icon="undo" class="m-r-10"></fa-icon>{{ 'Chargeback' | translate }}
</button>
</span>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="100%" [ngClass]="loanTransactionColor()">
</div>
<div fxFlex="100%" [ngClass]="loanTransactionColor()"></div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Transaction Id' | translate}}
{{ 'Transaction Id' | translate }}
</div>
<div fxFlex="50%">
@@ -35,17 +35,17 @@
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="transactionData.toLoanTransactionRelation">
{{ 'Repayment Transaction' | translate}}
{{ 'Repayment Transaction' | translate }}
</div>
<div fxFlex="50%" *ngIf="transactionData.toLoanTransactionRelation">
<a [href]="loanTransactionRelatedLink(transactionData.toLoanTransactionRelation.fromLoanTransaction)">
{{ transactionData.toLoanTransactionRelation.fromLoanTransaction }}
{{ transactionData.toLoanTransactionRelation.fromLoanTransaction }}
</a>
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Type' | translate}}
{{ 'Type' | translate }}
</div>
<div fxFlex="50%">
@@ -53,7 +53,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Transaction Date' | translate}}
{{ 'Transaction Date' | translate }}
</div>
<div fxFlex="50%">
@@ -61,7 +61,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Currency' | translate}}
{{ 'Currency' | translate }}
</div>
<div fxFlex="50%">
@@ -69,65 +69,70 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'Amount' | translate}}
{{ 'Amount' | translate }}
</div>
<div fxFlex="50%">
{{ transactionData.amount | currency:transactionData.currency.code:'symbol-narrow':'1.2-2' }}
{{ transactionData.amount | currency: transactionData.currency.code : 'symbol-narrow' : '1.2-2' }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="transactionData.externalId">
{{ 'External Id' | translate}}
{{ 'External Id' | translate }}
</div>
<div fxFlex="50%" *ngIf="transactionData.externalId">
<mifosx-external-identifier externalId="{{transactionData.externalId}}" completed="true"></mifosx-external-identifier>
<mifosx-external-identifier
externalId="{{ transactionData.externalId }}"
completed="true"
></mifosx-external-identifier>
</div>
<mat-divider *ngIf="existTransactionRelations" [inset]="true"></mat-divider>
<div fxFlex="100%" class="mat-body-strong" *ngIf="existTransactionRelations">
{{ 'Linked Transactions' | translate}}
<br>
{{ 'Linked Transactions' | translate }}
<br />
<table mat-table [dataSource]="transactionRelations">
<ng-container matColumnDef="relationType">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Relation Type" | translate}} </th>
<td mat-cell *matCellDef="let transactionRel" [matTooltip]="transactionRel.paymentType">
{{ transactionRel.relationType | translate}}
</td>
</ng-container>
<ng-container matColumnDef="relationType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Relation Type' | translate }}</th>
<td mat-cell *matCellDef="let transactionRel" [matTooltip]="transactionRel.paymentType">
{{ transactionRel.relationType | translate }}
</td>
</ng-container>
<ng-container matColumnDef="toTransaction">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Transaction" | translate}} </th>
<td mat-cell *matCellDef="let transactionRel">
<a [href]="loanTransactionRelatedLink(transactionRel.toLoanTransaction)">
{{ transactionRel.toLoanTransaction }}
</a>
</td>
</ng-container>
<ng-container matColumnDef="toTransaction">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Transaction' | translate }}</th>
<td mat-cell *matCellDef="let transactionRel">
<a [href]="loanTransactionRelatedLink(transactionRel.toLoanTransaction)">
{{ transactionRel.toLoanTransaction }}
</a>
</td>
</ng-container>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef> {{"labels.inputs.Amount" | translate}} </th>
<td mat-cell *matCellDef="let transactionRel">
{{ transactionRel.amount | currency }} {{ transactionData.currency.code }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<ng-container matColumnDef="amount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Amount' | translate }}</th>
<td mat-cell *matCellDef="let transactionRel">
{{ transactionRel.amount | currency }} {{ transactionData.currency.code }}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
<mifosx-transaction-payment-detail *ngIf="transactionData.paymentDetailData"
[paymentDetailData]="transactionData.paymentDetailData">
<mifosx-transaction-payment-detail
*ngIf="transactionData.paymentDetailData"
[paymentDetailData]="transactionData.paymentDetailData"
>
</mifosx-transaction-payment-detail>
</div>
<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="2%" fxLayout.lt-md="column">
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">{{ 'labels.buttons.Back' | translate}}</button>
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">
{{ 'labels.buttons.Back' | translate }}
</button>
</div>
</mat-card-content>
</mat-card>
</div>
@@ -1,55 +1,71 @@
<div *ngIf="loansAccountData.status.value === 'Active' && chargeData.amountOutstanding !== 0" fxLayout="row"
fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div
*ngIf="loansAccountData.status.value === 'Active' && chargeData.amountOutstanding !== 0"
fxLayout="row"
fxLayoutAlign="end"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="container m-b-20"
>
<button mat-raised-button color="primary" *mifosxHasPermission="'WAIVE_SAVINGSACCOUNTCHARGE'" (click)="editCharge()">
<fa-icon icon="flag" class="m-r-10"></fa-icon>
{{"labels.buttons.Edit" | translate}}
{{ 'labels.buttons.Edit' | translate }}
</button>
<span *ngIf="allowPayCharge">
<button mat-raised-button color="accent" *mifosxHasPermission="'PAY_SAVINGSACCOUNTCHARGE'" (click)="payCharge()">
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>
{{"labels.buttons.Pay" | translate}}
{{ 'labels.buttons.Pay' | translate }}
</button>
</span>
<span *ngIf="allowWaive">
<button mat-raised-button color="primary" *mifosxHasPermission="'WAIVE_SAVINGSACCOUNTCHARGE'"
(click)="waiveCharge()">
<button
mat-raised-button
color="primary"
*mifosxHasPermission="'WAIVE_SAVINGSACCOUNTCHARGE'"
(click)="waiveCharge()"
>
<fa-icon icon="flag" class="m-r-10"></fa-icon>
{{"labels.buttons.Waive" | translate}}
{{ 'labels.buttons.Waive' | translate }}
</button>
</span>
<span>
<button mat-raised-button color="accent" *mifosxHasPermission="'ADJUSTMENT_LOANCHARGE'"
(click)="adjustmentCharge()">
<button
mat-raised-button
color="accent"
*mifosxHasPermission="'ADJUSTMENT_LOANCHARGE'"
(click)="adjustmentCharge()"
>
<fa-icon icon="pen" class="m-r-10"></fa-icon>
{{"labels.buttons.Adjustment" | translate}}
{{ 'labels.buttons.Adjustment' | translate }}
</button>
</span>
</div>
<div *ngIf="loansAccountData.status.value === 'Submitted and pending approval'" fxLayout="row" fxLayoutAlign="end"
fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div
*ngIf="loansAccountData.status.value === 'Submitted and pending approval'"
fxLayout="row"
fxLayoutAlign="end"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="container m-b-20"
>
<button mat-raised-button color="primary" *mifosxHasPermission="'UPDATE_SAVINGSACCOUNTCHARGE'" (click)="editCharge()">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{"labels.buttons.Edit" | translate}}
{{ 'labels.buttons.Edit' | translate }}
</button>
<button mat-raised-button color="warn" *mifosxHasPermission="'DELETE_SAVINGSACCOUNTCHARGE'" (click)="deleteCharge()">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
{{"labels.buttons.Delete" | translate}}
{{ 'labels.buttons.Delete' | translate }}
</button>
</div>
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="100%" [ngClass]="loanChargeColor()">
</div>
<div fxFlex="100%" [ngClass]="loanChargeColor()"></div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.name" | translate}}
{{ 'labels.inputs.name' | translate }}
</div>
<div fxFlex="50%">
@@ -57,7 +73,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Charge Type" | translate}}
{{ 'labels.inputs.Charge Type' | translate }}
</div>
<div fxFlex="50%">
@@ -65,7 +81,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Currency" | translate}}
{{ 'labels.inputs.Currency' | translate }}
</div>
<div fxFlex="50%">
@@ -73,7 +89,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Payment due at" | translate}}
{{ 'labels.inputs.Payment due at' | translate }}
</div>
<div fxFlex="50%">
@@ -81,7 +97,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Payment due as of" | translate}}
{{ 'labels.inputs.Payment due as of' | translate }}
</div>
<div fxFlex="50%">
@@ -89,7 +105,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Calculation Type" | translate}}
{{ 'labels.inputs.Calculation Type' | translate }}
</div>
<div fxFlex="50%">
@@ -97,7 +113,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Due" | translate}}
{{ 'labels.inputs.Due' | translate }}
</div>
<div fxFlex="50%">
@@ -105,7 +121,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Paid" | translate}}
{{ 'labels.inputs.Paid' | translate }}
</div>
<div fxFlex="50%">
@@ -113,7 +129,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Waived" | translate}}
{{ 'labels.inputs.Waived' | translate }}
</div>
<div fxFlex="50%">
@@ -121,7 +137,7 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Outstanding" | translate}}
{{ 'labels.inputs.Outstanding' | translate }}
</div>
<div fxFlex="50%">
@@ -129,20 +145,19 @@
</div>
<div fxFlex="50%" class="mat-body-strong">
{{"labels.inputs.Submitted On Date" | translate}}
{{ 'labels.inputs.Submitted On Date' | translate }}
</div>
<div fxFlex="50%">
{{ chargeData.submittedOnDate | dateFormat }}
</div>
</div>
<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="2%" fxLayout.lt-md="column">
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">{{"labels.buttons.Back" | translate}}</button>
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">
{{ 'labels.buttons.Back' | translate }}
</button>
</div>
</mat-card-content>
</mat-card>
</div>