Upgrade to Angular 16

Merge `angular-update-16` into `dev` branch
This commit is contained in:
Adam Saghy
2025-05-23 18:47:20 +02:00
parent c7c2f60182
commit 19a14e5b5b
882 changed files with 14895 additions and 14340 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from 'app/products/products.service';
* Charge data resolver.
*/
@Injectable()
export class ChargeResolver implements Resolve<Object> {
export class ChargeResolver {
/**
* @param {productsService} productsService Products service.
*/
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -9,7 +9,7 @@ import { Observable } from 'rxjs';
import { ProductsService } from '../products.service';
@Injectable()
export class ChargesTemplateAndResolver implements Resolve<Object> {
export class ChargesTemplateAndResolver {
constructor(private productsService: ProductsService) {}
/**
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Charges template data resolver.
*/
@Injectable()
export class ChargesTemplateResolver implements Resolve<Object> {
export class ChargesTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<div #buttonCreateCharge class="in-block">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CHARGE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
@@ -8,12 +8,12 @@
</div>
<div class="container">
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex="68%">
<div #filter class="layout-row gap-20px">
<mat-form-field class="flex-fill flex-68">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
<mat-form-field fxFlex="28%">
<mat-form-field class="flex-28">
<mat-select
placeholder="{{ 'labels.inputs.Filter' | translate }}"
(selectionChange)="filterByAppliesTo($event.value)"
@@ -105,7 +105,7 @@
<ng-template #templateButtonCreateCharge let-popover="popover">
<h2>{{ 'labels.text.Create Charge' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Supports Loan charges, Savings &amp; deposits' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -124,7 +124,7 @@
<ng-template #templateFilter let-popover="popover">
<h4>{{ 'labels.heading.Search bar to filter charges.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -152,7 +152,7 @@
'labels.heading.Charges' | translate
}}</a>
</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
+1 -2
View File
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Charges data resolver.
*/
@Injectable()
export class ChargesResolver implements Resolve<Object> {
export class ChargesResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="chargeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Applies To' | translate }}</mat-label>
<mat-select required formControlName="chargeAppliesTo">
<mat-option
@@ -23,12 +23,9 @@
<div
*ngIf="chargeForm.controls.chargeAppliesTo.value"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="chargeForm.controls.name.hasError('required')">
@@ -37,7 +34,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select required formControlName="currencyCode">
<mat-option *ngFor="let currency of chargesTemplateData.currencyOptions" [value]="currency.code">
@@ -50,7 +47,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Time Type' | translate }}</mat-label>
<mat-select required formControlName="chargeTimeType">
<mat-option *ngFor="let chargeTimeType of chargeTimeTypeData" [value]="chargeTimeType.id">
@@ -63,7 +60,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Calculation Type' | translate }}</mat-label>
<mat-select required formControlName="chargeCalculationType">
<mat-option
@@ -79,7 +76,7 @@
</mat-error>
</mat-form-field>
<mat-form-field *ngIf="chargeForm.controls.chargeAppliesTo.value === 1" fxFlex="48%">
<mat-form-field *ngIf="chargeForm.controls.chargeAppliesTo.value === 1" class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Payment Mode' | translate }}</mat-label>
<mat-select required formControlName="chargePaymentMode">
<mat-option
@@ -95,7 +92,7 @@
</mat-error>
</mat-form-field>
<div fxFlex="48%" *ngIf="chargeForm.controls.chargeTimeType.value === 9" class="add-fee-frequency-wrapper">
<div class="flex-48 add-fee-frequency-wrapper" *ngIf="chargeForm.controls.chargeTimeType.value === 9">
<mat-checkbox labelPosition="before" formControlName="addFeeFrequency">
{{ 'labels.inputs.Add Fee Frequency' | translate }}
</mat-checkbox>
@@ -103,7 +100,7 @@
<mat-form-field
*ngIf="chargeForm.controls.chargeTimeType.value === 9 && chargeForm.controls.addFeeFrequency.value"
fxFlex="48%"
class="flex-48"
>
<mat-label>{{ 'labels.inputs.Frequency Interval' | translate }}</mat-label>
<input matInput required formControlName="feeInterval" />
@@ -119,7 +116,7 @@
<mat-form-field
*ngIf="chargeForm.controls.chargeTimeType.value === 9 && chargeForm.controls.addFeeFrequency.value"
fxFlex="48%"
class="flex-48"
>
<mat-label>{{ 'labels.inputs.Charge Frequency' | translate }}</mat-label>
<mat-select required formControlName="feeFrequency">
@@ -139,7 +136,7 @@
<mat-form-field
(click)="dueDatePicker.open()"
*ngIf="chargeForm.controls.chargeTimeType.value === 6 || chargeForm.controls.chargeTimeType.value === 7"
fxFlex="48%"
class="flex-48"
>
<mat-label>{{ 'labels.inputs.Due Date' | translate }}</mat-label>
<input
@@ -159,7 +156,7 @@
</mat-form-field>
<mat-form-field
fxFlex="48%"
class="flex-48"
*ngIf="chargeForm.controls.chargeTimeType.value === 7 || chargeForm.controls.chargeTimeType.value === 11"
>
<mat-label>{{ 'labels.inputs.Repeat Every' | translate }} ({{ repeatEveryLabel }})</mat-label>
@@ -184,7 +181,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input matInput required formControlName="amount" />
<mat-error *ngIf="chargeForm.controls.amount.hasError('required')">
@@ -198,7 +195,7 @@
* In saving case: Only for 1. charge time type is "withdrawlfee" or "savings no activity fee" with charge calculation type as "% amount"
* In shares case: Only for charge time type: SHARE_PURCHASE and SHARE_REDEEM and with charge calculation type as % amount only
-->
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
<mat-form-field class="flex-48" *ngIf="showMinMaxCap()">
<mat-label>{{ 'labels.inputs.Minimum Charge Cap' | translate }}</mat-label>
<input matInput autofocus formControlName="minCap" mifosxValidateOnFocus />
<mat-error *ngIf="chargeForm.controls.minCap.hasError('maxValue')">
@@ -208,7 +205,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="showMinMaxCap()">
<mat-form-field class="flex-48" *ngIf="showMinMaxCap()">
<mat-label>{{ 'labels.inputs.Maximum Charge Cap' | translate }}</mat-label>
<input matInput autofocus formControlName="maxCap" mifosxValidateOnFocus />
@@ -219,14 +216,14 @@
</mat-error>
</mat-form-field>
<div fxFlex="48%" fxLayout="row" fxLayoutGap="2%" fxLayout.lt-md="column">
<div fxFlex="50%" class="active-wrapper">
<div class="flex-48 layout-row gap-2percent layout-lt-md-column">
<div class="flex-50 active-wrapper">
<mat-checkbox labelPosition="before" formControlName="active">
{{ 'labels.status.Active' | translate }}
</mat-checkbox>
</div>
<div fxFlex="50%" class="penalty-wrapper">
<div class="flex-50 penalty-wrapper">
<mat-checkbox labelPosition="before" formControlName="penalty">
{{ 'labels.commons.Is' | translate }} {{ 'labels.inputs.Penalty' | translate }}
</mat-checkbox>
@@ -234,7 +231,7 @@
</div>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
*ngIf="chargeForm.controls.chargeAppliesTo.value === 3"
[inputFormControl]="chargeForm.controls.incomeAccountId"
[glAccountList]="incomeAndLiabilityAccountData"
@@ -242,7 +239,7 @@
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Tax Group' | translate }}</mat-label>
<mat-select formControlName="taxGroupId">
<mat-option *ngFor="let taxGroup of chargesTemplateData.taxGroupOptions" [value]="taxGroup.id">
@@ -254,7 +251,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="chargeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Applies To' | translate }}</mat-label>
<mat-select required formControlName="chargeAppliesTo">
<mat-option
@@ -16,8 +16,8 @@
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" class="form-section">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2percent layout-lt-md-column form-section">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required autofocus formControlName="name" />
<mat-error *ngIf="chargeForm.controls.name.hasError('required')">
@@ -26,7 +26,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select required formControlName="currencyCode">
<mat-option *ngFor="let currency of chargeData.currencyOptions" [value]="currency.code">
@@ -39,7 +39,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Time Type' | translate }}</mat-label>
<mat-select required formControlName="chargeTimeType">
<mat-option *ngFor="let chargeTime of chargeTimeTypeOptions" [value]="chargeTime.id">
@@ -52,7 +52,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge Calculation' | translate }}</mat-label>
<mat-select required formControlName="chargeCalculationType">
<mat-option *ngFor="let chargeCalculation of chargeCalculationTypeOptions" [value]="chargeCalculation.id">
@@ -65,7 +65,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="chargePaymentMode">
<mat-form-field class="flex-48" *ngIf="chargePaymentMode">
<mat-label>{{ 'labels.inputs.Charge Payment By' | translate }}</mat-label>
<mat-select required formControlName="chargePaymentMode">
<mat-option
@@ -81,7 +81,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Amount' | translate }}</mat-label>
<input matInput required autofocus type="text" formControlName="amount" />
<mat-error *ngIf="chargeForm.controls.amount.hasError('required')">
@@ -96,7 +96,7 @@
* In shares case: Only for charge time type: SHARE_PURCHASE and SHARE_REDEEM and with charge calculation type as % amount only
-->
<mat-form-field
fxFlex="48%"
class="flex-48"
*ngIf="
(chargeForm.controls.chargeAppliesTo.value === 1 &&
(chargeForm.controls.chargeCalculationType.value === 2 ||
@@ -120,7 +120,7 @@
</mat-error>
</mat-form-field>
<mat-form-field
fxFlex="48%"
class="flex-48"
*ngIf="
(chargeForm.controls.chargeAppliesTo.value === 1 &&
(chargeForm.controls.chargeCalculationType.value === 2 ||
@@ -146,7 +146,7 @@
</mat-form-field>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
*ngIf="showGLAccount"
[inputFormControl]="chargeForm.controls.incomeAccountId"
[glAccountList]="chargeData.incomeOrLiabilityAccountOptions.incomeAccountOptions"
@@ -155,7 +155,7 @@
>
</mifosx-gl-account-selector>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Tax Group' | translate }}</mat-label>
<mat-select *ngIf="chargeData.taxGroup" formControlName="taxGroupId">
<mat-option *ngFor="let taxGroup of chargeData.taxGroupOptions" [value]="taxGroup.id">
@@ -170,7 +170,7 @@
</mat-select>
</mat-form-field>
<div fxFlex="48%" class="password-never-expires-wrapper checkbox" *ngIf="addFeeFrequency">
<div class="password-never-expires-wrapper checkbox flex-48" *ngIf="addFeeFrequency">
<mat-checkbox
labelPosition="before"
[checked]="addFeeFrequency && showFeeOptions"
@@ -180,7 +180,7 @@
</mat-checkbox>
</div>
<mat-form-field fxFlex="48%" *ngIf="addFeeFrequency && showFeeOptions">
<mat-form-field class="flex-48" *ngIf="addFeeFrequency && showFeeOptions">
<mat-label>{{ 'labels.inputs.Frequency Interval' | translate }}</mat-label>
<input matInput required autofocus type="text" formControlName="feeInterval" />
<mat-error *ngIf="chargeForm.controls.feeInterval.hasError('required')">
@@ -189,7 +189,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="addFeeFrequency && showFeeOptions">
<mat-form-field class="flex-48" *ngIf="addFeeFrequency && showFeeOptions">
<mat-label>{{ 'labels.inputs.Charge Frequency' | translate }}</mat-label>
<mat-select required formControlName="feeFrequency">
<mat-option *ngFor="let chargeFrequency of chargeData.feeFrequencyOptions" [value]="chargeFrequency.id">
@@ -203,14 +203,14 @@
</mat-form-field>
</div>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" class="form-section">
<div fxFlex="48%" class="password-never-expires-wrapper">
<div class="layout-row-wrap gap-2percent layout-lt-md-column form-section">
<div class="password-never-expires-wrapper flex-48">
<mat-checkbox labelPosition="before" formControlName="active">
{{ 'labels.status.Active' | translate }}
</mat-checkbox>
</div>
<div fxFlex="48%" class="send-password-to-email-wrapper" *ngIf="showPenalty">
<div class="send-password-to-email-wrapper flex-48" *ngIf="showPenalty">
<mat-checkbox labelPosition="before" formControlName="penalty">
{{ 'labels.commons.Is' | translate }} {{ 'labels.inputs.Penalty' | translate }}
</mat-checkbox>
@@ -218,7 +218,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -96,7 +96,6 @@ export class EditChargeComponent implements OnInit {
penalty: [this.chargeData.penalty],
minCap: [
this.chargeData.minCap || null,
,
[maxNumberValueValidator('maxCap')]
],
maxCap: [
@@ -1,4 +1,4 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div class="layout-row align-end gap-2px responsive-column container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_CHARGE'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.heading.Edit' | translate }}
@@ -12,116 +12,116 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Charge Name' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Charge Applies To' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.chargeAppliesTo.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Penalty' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.penalty === true | yesNo }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Currency' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.currency.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Amount' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.amount }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="minCap">
<div class="flex-50 mat-body-strong" *ngIf="minCap">
{{ 'labels.inputs.Minimum Charge Cap' | translate }}
</div>
<div fxFlex="50%" *ngIf="minCap">
<div class="flex-50" *ngIf="minCap">
{{ chargeData.minCap }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="maxCap">
<div class="flex-50 mat-body-strong" *ngIf="maxCap">
{{ 'labels.inputs.Maximum Charge Cap' | translate }}
</div>
<div fxFlex="50%" *ngIf="maxCap">
<div class="flex-50" *ngIf="maxCap">
{{ chargeData.maxCap }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Charge Time Type' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.chargeTimeType.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Charge Calculation Type' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.chargeCalculationType.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Charge Payment Mode' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.chargePaymentMode.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.status.Active' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ chargeData.active === true | yesNo }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeFrequency">
<div class="flex-50 mat-body-strong" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeFrequency">
{{ 'labels.inputs.Add Fee Frequency' | translate }}
</div>
<div
fxFlex="50%"
class="flex-50"
*ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeFrequency && chargeData.feeFrequency"
>
{{ chargeData.feeFrequency.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeInterval">
<div class="flex-50 mat-body-strong" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeInterval">
{{ 'labels.inputs.Frequency Interval' | translate }}
</div>
<div fxFlex="50%" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeInterval">
<div class="flex-50" *ngIf="chargeData.chargeTimeType.id === 9 && chargeData.feeInterval">
{{ chargeData.feeInterval }}
</div>
<mifosx-gl-account-display
fxFlex="100%"
class="flex-100"
[accountTitle]="'Income From Charges'"
*ngIf="chargeData.incomeOrLiabilityAccount"
[glAccount]="chargeData.incomeOrLiabilityAccount"
@@ -129,16 +129,16 @@
>
</mifosx-gl-account-display>
<div fxFlex="50%" class="mat-body-strong" *ngIf="chargeData.taxGroup">
<div class="flex-50 mat-body-strong" *ngIf="chargeData.taxGroup">
{{ 'labels.inputs.Tax Group' | translate }}
</div>
<div fxFlex="50%" *ngIf="chargeData.taxGroup">
<div class="flex-50" *ngIf="chargeData.taxGroup">
{{ chargeData.taxGroup.name }}
</div>
</div>
<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row layout-align-center gap-2percent column-on-mobile">
<button type="button" mat-raised-button color="primary" [routerLink]="['../']">
{{ 'labels.buttons.Back' | translate }}
</button>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* Charges data resolver.
*/
@Injectable()
export class CollateralResolver implements Resolve<Object> {
export class CollateralResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Collaterals Template Resolver
*/
@Injectable()
export class CollateralTemplateResolver implements Resolve<Object> {
export class CollateralTemplateResolver {
/**
* @param {ProductsService} productsService products Service
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CHARGE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.text.Create Collateral' | translate }}
@@ -6,8 +6,8 @@
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<div class="layout-row gap-20px">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* Collaterals data resolver
*/
@Injectable()
export class CollateralsResolver implements Resolve<Object> {
export class CollateralsResolver {
/**
* @param {ProductsService} productsService Products service
*/
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="collateralForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="collateralForm.controls.name.hasError('required')">
@@ -11,7 +11,7 @@
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Type/Quality' | translate }}</mat-label>
<input matInput required formControlName="quality" />
<mat-error *ngIf="collateralForm.controls.quality.hasError('required')">
@@ -19,7 +19,7 @@
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Unit Type' | translate }}</mat-label>
<input matInput required formControlName="unitType" />
<mat-error *ngIf="collateralForm.controls.unitType.hasError('required')">
@@ -27,7 +27,7 @@
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Base Price' | translate }}</mat-label>
<input matInput required formControlName="basePrice" />
<mat-error *ngIf="collateralForm.controls.basePrice.hasError('required')">
@@ -35,7 +35,7 @@
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Percentage to Base' | translate }}</mat-label>
<input matInput required formControlName="pctToBase" />
<mat-error *ngIf="collateralForm.controls.pctToBase.hasError('required')">
@@ -43,7 +43,7 @@
<strong>{{ 'labels.commons.required' | translate }}</strong>
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.heading.Currency' | translate }}</mat-label>
<mat-select required formControlName="currency">
<mat-option *ngFor="let currency of collateralTemplateData" [value]="currency.code">
@@ -58,7 +58,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="collateralForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required autoFocus formControlName="name" />
<mat-error *ngIf="collateralForm.controls.name.hasError('required')">
@@ -12,7 +12,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Type/Quality' | translate }}</mat-label>
<input matInput required autoFocus formControlName="quality" />
<mat-error *ngIf="collateralForm.controls.quality.hasError('required')">
@@ -21,7 +21,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Unit Type' | translate }}</mat-label>
<input matInput required autoFocus formControlName="unitType" />
<mat-error *ngIf="collateralForm.controls.unitType.hasError('required')">
@@ -30,7 +30,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Base Price' | translate }}</mat-label>
<input matInput required autoFocus formControlName="basePrice" />
<mat-error *ngIf="collateralForm.controls.basePrice.hasError('required')">
@@ -39,7 +39,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Percentage to Base' | translate }}</mat-label>
<input matInput required autoFocus formControlName="pctToBase" />
<mat-error *ngIf="collateralForm.controls.pctToBase.hasError('required')">
@@ -48,7 +48,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.heading.Currency' | translate }}</mat-label>
<mat-select required formControlName="currency">
<mat-option *ngFor="let currency of collateralTemplateData" [value]="currency.code">
@@ -63,7 +63,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div class="layout-row align-end gap-2px responsive-column container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['edit']">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.heading.Edit' | translate }}
@@ -12,52 +12,52 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Collateral Name' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Type/Quality' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.quality }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Base Price' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.basePrice }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Base Percentage' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.pctToBase }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Unit Type' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.unitType }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.heading.Currency' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ collateralData.currency }}
</div>
</div>
@@ -1,6 +1,6 @@
<h1 mat-dialog-title>{{ title }}</h1>
<div mat-dialog-content [formGroup]="depositProductIncentiveForm" fxLayout="column">
<div mat-dialog-content [formGroup]="depositProductIncentiveForm" class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Attribute' | translate }}</mat-label>
<mat-select formControlName="attributeName" required>
@@ -70,7 +70,7 @@
</mat-form-field>
</div>
<mat-dialog-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<mat-dialog-actions class="layout-row layout-xs-column layout-align-center gap-2percent">
<button mat-raised-button mat-dialog-close>{{ 'labels.buttons.Cancel' | translate }}</button>
<button
mat-raised-button
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../../products.service';
* Fixed Deposits Account Template resolver.
*/
@Injectable()
export class FixedDepositProductAndTemplateResolver implements Resolve<Object> {
export class FixedDepositProductAndTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,10 +1,7 @@
<form [formGroup]="fixedDepositProductAccountingForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-radio-group
fxFlex="98%"
fxLayout="row"
fxLayoutGap="5%"
fxLayout.lt-md="column"
class="flex-98 layout-row gap-5percent layout-lt-md-column radio-group-spacing"
formControlName="accountingRule"
>
<mat-radio-button *ngFor="let accountingRule of accountingRuleData; let i = index" [value]="i + 1">
@@ -12,13 +9,13 @@
</mat-radio-button>
</mat-radio-group>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<div *ngIf="isCashOrAccrualAccounting()" fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Assets' | translate }}</h4>
<div *ngIf="isCashOrAccrualAccounting()" class="flex-fill layout-row-wrap gap-2percent layout-xs-column">
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Assets' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.savingsReferenceAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -27,7 +24,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
*ngIf="isAccrualAccounting()"
[inputFormControl]="fixedDepositProductAccountingForm.controls.feesReceivableAccountId"
[glAccountList]="assetAccountData"
@@ -37,7 +34,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
*ngIf="isAccrualAccounting()"
[inputFormControl]="fixedDepositProductAccountingForm.controls.penaltiesReceivableAccountId"
[glAccountList]="assetAccountData"
@@ -46,12 +43,12 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Liabilities' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Liabilities' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.savingsControlAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
@@ -60,7 +57,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.transfersInSuspenseAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
@@ -69,7 +66,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
*ngIf="isAccrualAccounting()"
[inputFormControl]="fixedDepositProductAccountingForm.controls.interestPayableAccountId"
[glAccountList]="liabilityAccountData"
@@ -78,12 +75,12 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Expenses' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Expenses' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.interestOnSavingsAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
@@ -91,12 +88,12 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Income' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Income' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.incomeFromFeeAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -105,7 +102,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="fixedDepositProductAccountingForm.controls.incomeFromPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -113,25 +110,22 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="23%" class="mat-h3">{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<h3 class="mat-h3 flex-23">{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<mat-checkbox fxFlex="73%" formControlName="advancedAccountingRules"></mat-checkbox>
<mat-checkbox class="flex-73" formControlName="advancedAccountingRules"></mat-checkbox>
<div
*ngIf="fixedDepositProductAccountingForm.value.advancedAccountingRules"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<div fxFlex="100%" fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="63%" class="mat-h4">
<div class="flex-100 layout-row-wrap gap-2percent layout-lt-md-column">
<h4 class="mat-h4 flex-63">
{{ 'labels.heading.Configure Fund Sources for Payment Channels' | translate }}
</h4>
<div fxFlex="33%">
<div class="flex-33">
<button
type="button"
mat-raised-button
@@ -144,8 +138,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="paymentChannelToFundSourceMappings.value"
*ngIf="paymentChannelToFundSourceMappings.value.length !== 0"
@@ -184,10 +177,10 @@
<tr mat-row *matRowDef="let row; columns: paymentFundSourceDisplayedColumns"></tr>
</table>
</div>
<div fxFlex="100%" *ngIf="existCharges()">
<h4 fxFlex="63%" class="mat-h4">{{ 'labels.heading.Map Fees to Specific Income Accounts' | translate }}</h4>
<div class="flex-100" *ngIf="existCharges()">
<h4 class="mat-h4 flex-63">{{ 'labels.heading.Map Fees to Specific Income Accounts' | translate }}</h4>
<div fxFlex="33%">
<div class="flex-33">
<button
type="button"
mat-raised-button
@@ -200,8 +193,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="feeToIncomeAccountMappings.value"
*ngIf="feeToIncomeAccountMappings.value.length !== 0"
@@ -237,12 +229,13 @@
</table>
</div>
<div fxFlex="100%" *ngIf="existCharges()">
<h4 fxFlex="63%" class="mat-h4">
<div class="flex-100" *ngIf="existCharges()">
<h4 class="mat-h4 flex-63">
{{ 'labels.catalogs.Penalties' | translate }}
{{ 'labels.heading.Map Penalties to Specific Income Accounts' | translate }}
</h4>
<div fxFlex="33%">
<div class="flex-33">
<button
type="button"
mat-raised-button
@@ -255,8 +248,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="penaltyToIncomeAccountMappings.value"
*ngIf="penaltyToIncomeAccountMappings.value.length !== 0"
@@ -299,7 +291,7 @@
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -23,3 +23,15 @@ mat-divider {
.margin-t {
margin-top: 1em;
}
.radio-group-spacing {
display: flex;
gap: 2rem;
flex-direction: row;
}
@media (width <= 768px) {
.radio-group-spacing {
flex-direction: column;
}
}
@@ -1,5 +1,5 @@
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge' | translate }}</mat-label>
<mat-select #charge>
<mat-option
@@ -11,7 +11,7 @@
</mat-select>
</mat-form-field>
<div fxFlex="48%" fxFlexAlign="center">
<div class="flex-48 align-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 }}
@@ -19,8 +19,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="chargesDataSource"
[hidden]="chargesDataSource.length === 0"
@@ -67,7 +66,7 @@
</table>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row responsive-column align-center gap-2px margin-t">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="fixedDepositProductCurrencyForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select formControlName="currencyCode" required>
<mat-option *ngFor="let currency of currencyData" [value]="currency.code">
@@ -13,7 +13,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Decimal Places' | translate }}</mat-label>
<input type="number" matInput formControlName="digitsAfterDecimal" required />
<mat-error>
@@ -22,7 +22,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency in multiples of' | translate }}</mat-label>
<input type="number" matInput formControlName="inMultiplesOf" />
<mat-error>
@@ -32,7 +32,7 @@
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="fixedDepositProductDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Product Name' | translate }}</mat-label>
<input matInput formControlName="name" required />
<mat-error *ngIf="fixedDepositProductDetailsForm.controls.name.hasError('required')">
@@ -9,7 +9,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Short Name' | translate }}</mat-label>
<input matInput formControlName="shortName" maxlength="4" required />
<mat-error *ngIf="fixedDepositProductDetailsForm.controls.shortName.hasError('required')">
@@ -18,7 +18,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="98%">
<mat-form-field class="flex-98">
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<textarea matInput formControlName="description" required></textarea>
<mat-error *ngIf="fixedDepositProductDetailsForm.controls.description.hasError('required')">
@@ -28,7 +28,7 @@
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,11 +1,11 @@
<form [formGroup]="fixedDepositProductInterestRateChartForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="83%" class="mat-h3">
<div class="layout-row-wrap gap-2px responsive-column">
<h4 class="mat-h3 flex-83">
{{ 'labels.inputs.Interest Rate Chart' | translate }}
<i class="fas fa-question" matTooltip="{{ 'tooltips.The interest rate chart' | translate }}"></i>
</h4>
<div fxFlex="13%" fxLayout="row" fxLayoutAlign="start center">
<div class="flex-13 layout-row align-start-center">
<button type="button" mat-raised-button color="primary" (click)="addChart()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
@@ -13,16 +13,14 @@
</div>
<div
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap responsive-column"
formArrayName="charts"
*ngFor="let chart of charts.controls; let chartIndex = index"
>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<div fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" [formGroupName]="chartIndex">
<div fxFlex="98%" fxLayout="row" fxLayoutAlign="end center">
<div class="flex-fill layout-row-wrap responsive-column gap-2percent" [formGroupName]="chartIndex">
<div class="flex-98 layout-row align-end">
<button
type="button"
mat-icon-button
@@ -35,12 +33,12 @@
</button>
</div>
<mat-form-field fxFlex="32%">
<mat-form-field class="flex-fill flex-32">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput formControlName="name" required />
</mat-form-field>
<mat-form-field fxFlex="31%" (click)="validFromDatePicker.open()">
<mat-form-field class="flex-fill flex-31" (click)="validFromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input
matInput
@@ -58,38 +56,37 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%" (click)="endDatePicker.open()">
<mat-form-field class="flex-fill" (click)="endDatePicker.open()">
<mat-label>{{ 'labels.inputs.End Date' | translate }}</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="endDatePicker" formControlName="endDate" />
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
<mat-datepicker #endDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="65%">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<textarea matInput formControlName="description" required></textarea>
</mat-form-field>
<div fxFlex="31%" fxLayout="row" fxLayoutAlign="space-between center">
<div class="flex-31 layout-row align-between align-items-center">
<mat-checkbox labelPosition="before" formControlName="isPrimaryGroupingByAmount">
{{ 'labels.inputs.Is primary grouping by amount?' | translate }}
</mat-checkbox>
</div>
<div fxFlex="100%" class="center">
<div class="center flex-100">
<button type="button" mat-raised-button color="primary" (click)="addChartSlab(chart.controls.chartSlabs)">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add Slab' | translate }}
</button>
</div>
<div fxFlex="100%" *ngIf="chart.value.chartSlabs.length === 0">
<div class="flex-100" *ngIf="chart.value.chartSlabs.length === 0">
<h3 class="mat-h3">{{ 'labels.heading.It is required to add at least one Slab' | translate }}</h3>
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="chart.value.chartSlabs"
*ngIf="chart.value.chartSlabs.length !== 0"
@@ -167,17 +164,15 @@
[attr.colspan]="chartSlabsDisplayedColumns[chartIndex].length"
>
<div
fxLayout="row wrap"
fxFlexFill
class="incentives"
class="layout-row-wrap flex-fill incentives"
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'"
>
<mat-card fxLayout="row wrap" fxFlexFill>
<h4 class="mat-h4" fxFlex="63%">
<mat-card class="layout-row-wrap flex-fill">
<h4 class="mat-h4 flex-63">
{{ 'labels.heading.Incentives' | translate }}
</h4>
<div fxFlex="13%">
<div class="flex-13">
<button
mat-raised-button
color="primary"
@@ -189,8 +184,7 @@
</div>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="chartSlab.incentives"
*ngIf="chartSlab.incentives.length"
@@ -282,7 +276,7 @@
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,50 +1,46 @@
<div fxLayout="row wrap" fxLayout.lt-md="column">
<h2 class="mat-h2" fxFlexFill>{{ fixedDepositProduct.name }}</h2>
<div class="layout-row-wrap responsive-column">
<h2 class="mat-h2 flex-fill">{{ fixedDepositProduct.name }}</h2>
<mat-divider fxFlexFill></mat-divider>
<mat-divider class="flex-fill"></mat-divider>
<h3 class="mat-h3 flex-fill">{{ 'labels.inputs.Details' | translate }}</h3>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Details' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Short Name' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.shortName }}</span>
<mat-divider class="flex-fill"></mat-divider>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Short Name' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.shortName }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.description">
<span fxFlex="40%">{{ 'labels.inputs.Description' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.description }}</span>
<div class="flex-fill" *ngIf="fixedDepositProduct.description">
<span class="flex-40">{{ 'labels.inputs.Description' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.description }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Currency' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.inputs.Currency' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Currency' | translate }}:</span>
<span fxFlex="60%">{{
<mat-divider class="flex-fill"></mat-divider>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Currency' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.currencyCode | find: fixedDepositProductsTemplate.currencyOptions : 'code' : 'name'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Decimal Places' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.digitsAfterDecimal }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Decimal Places' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.digitsAfterDecimal }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Currency in multiples of' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.inMultiplesOf }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Currency in multiples of' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.inMultiplesOf }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Terms' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Terms' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Deposit Amount' | translate }}:</span>
<span fxFlex="60%">{{
<mat-divider class="flex-fill"></mat-divider>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Deposit Amount' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.depositAmount +
' (Min: ' +
(fixedDepositProduct.minDepositAmount
@@ -58,45 +54,44 @@
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Compounding Period' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Interest Compounding Period' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.interestCompoundingPeriodType
| find: fixedDepositProductsTemplate.interestCompoundingPeriodTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Posting Period' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Interest Posting Period' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.interestPostingPeriodType
| find: fixedDepositProductsTemplate.interestPostingPeriodTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Calculated using' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Interest Calculated using' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.interestCalculationType
| find: fixedDepositProductsTemplate.interestCalculationTypeOptions : 'id' : 'value'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Days in Year' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Days in Year' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.interestCalculationDaysInYearType
| find: fixedDepositProductsTemplate.interestCalculationDaysInYearTypeOptions : 'id' : 'value'
}}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Settings' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Settings' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div fxFlexFill *ngIf="fixedDepositProduct.lockinPeriodFrequency">
<span fxFlex="40%">{{ 'labels.inputs.Lock-in Period' | translate }}:</span>
<span fxFlex="60%">{{
<mat-divider class="flex-fill"></mat-divider>
<div class="flex-fill" *ngIf="fixedDepositProduct.lockinPeriodFrequency">
<span class="flex-40">{{ 'labels.inputs.Lock-in Period' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.lockinPeriodFrequency +
' ' +
(fixedDepositProduct.lockinPeriodFrequencyType
@@ -104,9 +99,9 @@
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Minimum Deposit Term' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Minimum Deposit Term' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.minDepositTerm +
' ' +
(fixedDepositProduct.minDepositTermTypeId
@@ -114,9 +109,9 @@
}}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.inMultiplesOfDepositTerm">
<span fxFlex="40%">{{ 'labels.inputs.And thereafter, in Multiples of' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill" *ngIf="fixedDepositProduct.inMultiplesOfDepositTerm">
<span class="flex-40">{{ 'labels.inputs.And thereafter, in Multiples of' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.inMultiplesOfDepositTerm +
' ' +
(fixedDepositProduct.inMultiplesOfDepositTermTypeId
@@ -124,9 +119,9 @@
}}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.maxDepositTerm">
<span fxFlex="40%">{{ 'labels.inputs.Maximum Deposit Term' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill" *ngIf="fixedDepositProduct.maxDepositTerm">
<span class="flex-40">{{ 'labels.inputs.Maximum Deposit Term' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.maxDepositTerm +
' ' +
(fixedDepositProduct.maxDepositTermTypeId
@@ -134,14 +129,14 @@
}}</span>
</div>
<!-- For Pre-mature closure -->
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Apply Penal Interest (less)' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.preClosurePenalApplicable | yesNo }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Apply Penal Interest (less)' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.preClosurePenalApplicable | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.preClosurePenalApplicable">
<span fxFlex="40%">{{ 'labels.inputs.Penal Interest' | translate }} (%):</span>
<span fxFlex="60%">{{
<div class="flex-fill" *ngIf="fixedDepositProduct.preClosurePenalApplicable">
<span class="flex-40">{{ 'labels.inputs.Penal Interest' | translate }} (%):</span>
<span class="flex-60">{{
fixedDepositProduct.preClosurePenalInterest +
'% (' +
(fixedDepositProduct.preClosurePenalInterestOnTypeId
@@ -150,57 +145,53 @@
}}</span>
</div>
<!-- -->
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Withhold Tax is Applicable' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.withHoldTax | yesNo }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Withhold Tax is Applicable' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.withHoldTax | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.withHoldTax">
<span fxFlex="40%">{{ 'labels.inputs.Tax Group' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill" *ngIf="fixedDepositProduct.withHoldTax">
<span class="flex-40">{{ 'labels.inputs.Tax Group' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProduct.taxGroupId | find: fixedDepositProductsTemplate.taxGroupOptions : 'id' : 'name'
}}</span>
</div>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column" *ngIf="fixedDepositProduct.charts.length !== 0">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Interest Rate Charts' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<div class="layout-row-wrap responsive-column flex-fill" *ngIf="fixedDepositProduct.charts.length !== 0">
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Interest Rate Charts' | translate }}</h3>
<mat-divider class="flex-fill"></mat-divider>
<div
fxFlexFill
*ngFor="let chart of fixedDepositProduct.charts; let chartIndex = index"
fxLayout="row wrap"
fxLayout.lt-md="column"
class="layout-row-wrap responsive-column flex-fill"
>
<div fxFlexFill *ngIf="chart.name">
<span fxFlex="40%">{{ 'labels.inputs.Name' | translate }}:</span>
<span fxFlex="60%">{{ chart.name }}</span>
<div class="flex-fill" *ngIf="chart.name">
<span class="flex-40">{{ 'labels.inputs.Name' | translate }}:</span>
<span class="flex-60">{{ chart.name }}</span>
</div>
<div fxFlexFill *ngIf="chart.description">
<span fxFlex="40%">{{ 'labels.inputs.Description' | translate }}:</span>
<span fxFlex="60%">{{ chart.description }}</span>
<div class="flex-fill" *ngIf="chart.description">
<span class="flex-40">{{ 'labels.inputs.Description' | translate }}:</span>
<span class="flex-60">{{ chart.description }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.From Date' | translate }}:</span>
<span fxFlex="60%">{{ chart.fromDate | dateFormat }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.From Date' | translate }}:</span>
<span class="flex-60">{{ chart.fromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="chart.endDate">
<span fxFlex="40%">{{ 'labels.inputs.End Date' | translate }}:</span>
<span fxFlex="60%">{{ chart.endDate | dateFormat }}</span>
<div class="flex-fill" *ngIf="chart.endDate">
<span class="flex-40">{{ 'labels.inputs.End Date' | translate }}:</span>
<span class="flex-60">{{ chart.endDate | dateFormat }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Primary Grouping by Amount' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProduct.isPrimaryGroupingByAmount | yesNo }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Primary Grouping by Amount' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProduct.isPrimaryGroupingByAmount | yesNo }}</span>
</div>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="chart.chartSlabs"
*ngIf="chart.chartSlabs.length !== 0"
@@ -271,17 +262,15 @@
[attr.colspan]="chartSlabsDisplayedColumns[chartIndex].length"
>
<div
fxLayout="row wrap"
fxFlexFill
class="incentives"
class="layout-row-wrap flex-fill incentives"
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'"
>
<mat-card fxLayout="row wrap" fxFlexFill>
<h4 class="mat-h4" fxFlex="23%">
<mat-card class="layout-row-wrap flex-fill">
<h4 class="mat-h4 flex-23">
{{ 'labels.heading.Incentives' | translate }}
</h4>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="chartSlab.incentives">
<table class="flex-fill mat-elevation-z1" mat-table [dataSource]="chartSlab.incentives">
<ng-container matColumnDef="entityType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity Type' | translate }}</th>
<td mat-cell *matCellDef="let incentive">
@@ -361,16 +350,15 @@
<tr mat-row *matRowDef="let row; columns: chartSlabsIncentivesDisplayedColumns" class="incentives-row"></tr>
</table>
<mat-divider fxFlexFill></mat-divider>
<mat-divider class="flex-fill"></mat-divider>
</div>
</div>
<div fxFlexFill *ngIf="fixedDepositProduct.charges.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Charges' | translate }}</h3>
<div *ngIf="fixedDepositProduct.charges.length" class="layout-row-wrap responsive-column flex-fill">
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Charges' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="fixedDepositProduct.charges">
<mat-divider class="flex-fill"></mat-divider>
<table class="flex-fill mat-elevation-z1" mat-table [dataSource]="fixedDepositProduct.charges">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
<td mat-cell *matCellDef="let charge">
@@ -404,10 +392,9 @@
</table>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Accounting' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Accounting' | translate }}</h3>
<mat-divider class="flex-fill"></mat-divider>
<mifosx-view-savings-accounting-details
*ngIf="!isNoneAccounting()"
[accountingRule]="accountingRule"
@@ -422,25 +409,18 @@
fixedDepositProduct.feeToIncomeAccountMappings?.length ||
fixedDepositProduct.penaltyToIncomeAccountMappings?.length)
"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="layout-row-wrap responsive-column flex-fill"
>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<mat-divider class="flex-fill"></mat-divider>
<div
*ngIf="fixedDepositProduct.paymentChannelToFundSourceMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap responsive-column"
>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.heading.Fund Sources for Payment Channels' | translate }}</h4>
<h4 class="mat-h4 flex-fill">{{ 'labels.heading.Fund Sources for Payment Channels' | translate }}</h4>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProduct.paymentChannelToFundSourceMappings"
>
@@ -470,18 +450,11 @@
<div
*ngIf="fixedDepositProduct.feeToIncomeAccountMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap responsive-column"
>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.heading.Fees to Specific Income Accounts' | translate }}</h4>
<h4 class="mat-h4 flex-fill">{{ 'labels.heading.Fees to Specific Income Accounts' | translate }}</h4>
<table
fxFlexFill
class="mat-elevation-z1"
mat-table
[dataSource]="fixedDepositProduct.feeToIncomeAccountMappings"
>
<table class="mat-elevation-z1 flex-fill" mat-table [dataSource]="fixedDepositProduct.feeToIncomeAccountMappings">
<ng-container matColumnDef="chargeId">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Fees' | translate }}</th>
<td mat-cell *matCellDef="let feesIncome">
@@ -506,15 +479,12 @@
<div
*ngIf="fixedDepositProduct.penaltyToIncomeAccountMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap responsive-column"
>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}</h4>
<h4 class="mat-h4 flex-fill">{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}</h4>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProduct.penaltyToIncomeAccountMappings"
>
@@ -542,7 +512,7 @@
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row responsive-column align-center gap-2px margin-t">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="fixedDepositProductSettingsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">
<div class="layout-row-wrap gap-2px responsive-column">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Lock-in Period' | translate }}
<i
class="fas fa-question"
@@ -8,12 +8,12 @@
></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<input type="number" matInput formControlName="lockinPeriodFrequency" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Type' | translate }}</mat-label>
<mat-select formControlName="lockinPeriodFrequencyType">
<mat-option
@@ -25,12 +25,12 @@
</mat-select>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Minimum Deposit Term' | translate }}
<i class="fas fa-question" matTooltip="{{ 'tooltips.The minimum length of time' | translate }}"></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<input type="number" matInput formControlName="minDepositTerm" required />
<mat-error>
@@ -39,7 +39,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Frequency Type' | translate }}</mat-label>
<mat-select formControlName="minDepositTermTypeId" required>
<mat-option *ngFor="let periodFrequencyType of periodFrequencyTypeData" [value]="periodFrequencyType.id">
@@ -52,7 +52,7 @@
</mat-error>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.heading.And thereafter, in Multiples of' | translate }}
<i
class="fas fa-question-circle"
@@ -60,12 +60,12 @@
></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<input type="number" matInput formControlName="inMultiplesOfDepositTerm" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Type' | translate }}</mat-label>
<mat-select formControlName="inMultiplesOfDepositTermTypeId">
<mat-option *ngFor="let periodFrequencyType of periodFrequencyTypeData" [value]="periodFrequencyType.id">
@@ -74,17 +74,17 @@
</mat-select>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Maximum Deposit Term' | translate }}
<i class="fas fa-question-circle" matTooltip="{{ 'tooltips.The maximum length of time funds' | translate }}"></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<input type="number" matInput formControlName="maxDepositTerm" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Type' | translate }}</mat-label>
<mat-select formControlName="maxDepositTermTypeId">
<mat-option *ngFor="let periodFrequencyType of periodFrequencyTypeData" [value]="periodFrequencyType.id">
@@ -93,9 +93,9 @@
</mat-select>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="23%" class="mat-h4">
<h4 class="mat-h4 flex-23">
{{ 'labels.heading.For Pre-mature closure' | translate }}
<i
class="fas fa-question-circle"
@@ -103,16 +103,16 @@
></i>
</h4>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="preClosurePenalApplicable" class="margin-v">
<mat-checkbox class="flex-73 margin-v" labelPosition="before" formControlName="preClosurePenalApplicable">
{{ 'labels.inputs.Apply Penal Interest (less)' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Penal Interest' | translate }} (%)</mat-label>
<input type="number" matInput formControlName="preClosurePenalInterest" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Period' | translate }}</mat-label>
<mat-select formControlName="preClosurePenalInterestOnTypeId">
<mat-option
@@ -124,19 +124,18 @@
</mat-select>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
formControlName="withHoldTax"
class="margin-v"
matTooltip="{{ 'tooltips.An boolean flag to attach' | translate }}"
>
{{ 'labels.inputs.Is Withhold Tax Applicable' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="48%" *ngIf="fixedDepositProductSettingsForm.value.withHoldTax">
<mat-form-field class="flex-48" *ngIf="fixedDepositProductSettingsForm.value.withHoldTax">
<mat-label>{{ 'labels.inputs.Tax Group' | translate }}</mat-label>
<mat-select formControlName="taxGroupId" required>
<mat-option *ngFor="let taxGroup of taxGroupData" [value]="taxGroup.id">
@@ -150,7 +149,7 @@
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,5 @@
import { Component, OnInit, Input } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';
import { TooltipPosition } from '@angular/material/tooltip';
@Component({
selector: 'mifosx-fixed-deposit-product-settings-step',
@@ -1,8 +1,8 @@
<form [formGroup]="fixedDepositProductTermsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Deposit Amount' | translate }}</h4>
<div class="layout-row-wrap gap-2px responsive-column">
<h4 class="mat-h4 flex-98">{{ 'labels.inputs.Deposit Amount' | translate }}</h4>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
<input
type="number"
@@ -12,7 +12,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
<input
type="number"
@@ -27,7 +27,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
<input
@@ -38,9 +38,9 @@
/>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Interest Compounding Period' | translate }}</mat-label>
<mat-select
formControlName="interestCompoundingPeriodType"
@@ -60,7 +60,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Interest Posting Period' | translate }}</mat-label>
<mat-select
formControlName="interestPostingPeriodType"
@@ -80,7 +80,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Interest Calculated using' | translate }}</mat-label>
<mat-select
formControlName="interestCalculationType"
@@ -100,7 +100,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Days in Year' | translate }}</mat-label>
<mat-select
formControlName="interestCalculationDaysInYearType"
@@ -121,7 +121,7 @@
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,5 @@
import { Component, OnInit, Input } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';
import { TooltipPosition } from '@angular/material/tooltip';
@Component({
selector: 'mifosx-fixed-deposit-product-terms-step',
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* Fixed Deposit Product data resolver.
*/
@Injectable()
export class FixedDepositProductResolver implements Resolve<Object> {
export class FixedDepositProductResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -9,7 +8,7 @@ import { Observable } from 'rxjs';
import { ProductsService } from '../products.service';
@Injectable()
export class FixedDepositProductsTemplateResolver implements Resolve<Object> {
export class FixedDepositProductsTemplateResolver {
constructor(private productsService: ProductsService) {}
/**
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<div #buttonCreateFixedProduct class="in-block">
<button
mat-raised-button
@@ -13,8 +13,8 @@
</div>
<div class="container">
<div #filter fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<div #filter class="layout-row gap-20px">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -43,7 +43,7 @@
<ng-template #templateButtonCreateFixedProduct let-popover="popover">
<h2>{{ 'labels.buttons.Create Fixed Deposit Product' | translate }}</h2>
<p class="mw300">{{ 'labels.text.Allows you to create new fixed deposit product' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -62,7 +62,7 @@
<ng-template #templateFilter let-popover="popover">
<h4>{{ 'labels.text.Search bar to filter fixed deposit products.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -90,7 +90,7 @@
'labels.inputs.Fixed Deposit Products' | translate
}}</a>
</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Fixed Deposit Products data resolver.
*/
@Injectable()
export class FixedDepositProductsResolver implements Resolve<Object> {
export class FixedDepositProductsResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div class="layout-row align-end gap-2px responsive-column container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['../edit']" *mifosxHasPermission="'UPDATE_SAVINGSPRODUCT'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -7,53 +7,53 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" fxLayout.lt-md="column">
<h2 class="mat-h2" fxFlexFill>{{ fixedDepositProductData.name }}</h2>
<div class="responsive-column">
<h2 class="mat-h2 flex-fill">{{ fixedDepositProductData.name }}</h2>
<mat-divider [inset]="true"></mat-divider>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Details' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.inputs.Details' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Short Name' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.shortName }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Short Name' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.shortName }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.description">
<span fxFlex="40%">{{ 'labels.inputs.Description' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.description }}</span>
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.description">
<span class="flex-40">{{ 'labels.inputs.Description' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.description }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Currency' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.inputs.Currency' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.heading.Currency' | translate }}:</span>
<span fxFlex="60%"
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.heading.Currency' | translate }}:</span>
<span class="flex-60"
>({{ fixedDepositProductData.currency.code }}) {{ fixedDepositProductData.currency.name }}</span
>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Decimal Places' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.currency.decimalPlaces }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Decimal Places' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.currency.decimalPlaces }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Currency in multiples of' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.currency.inMultiplesOf | formatNumber }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Currency in multiples of' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.currency.inMultiplesOf | formatNumber }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Terms' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Terms' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Deposit Amount' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Deposit Amount' | translate }}:</span>
<span class="flex-60">{{
fixedDepositProductData.depositAmount +
' (Min: ' +
(fixedDepositProductData.minDepositAmount
@@ -67,127 +67,126 @@
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Compounding Period' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.interestCompoundingPeriodType.value }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Interest Compounding Period' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.interestCompoundingPeriodType.value }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Posting Period' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.interestPostingPeriodType.value }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Interest Posting Period' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.interestPostingPeriodType.value }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Interest Calculated Using' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.interestCalculationType.value }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Interest Calculated Using' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.interestCalculationType.value }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Days in Year' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.interestCalculationDaysInYearType.value }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Days in Year' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.interestCalculationDaysInYearType.value }}</span>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Settings' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Settings' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill *ngIf="fixedDepositProductData.lockinPeriodFrequency">
<span fxFlex="40%">{{ 'labels.inputs.Lock-in Period' | translate }}:</span>
<span fxFlex="60%">
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.lockinPeriodFrequency">
<span class="flex-40">{{ 'labels.inputs.Lock-in Period' | translate }}:</span>
<span class="flex-60">
{{ fixedDepositProductData.lockinPeriodFrequency }}
{{ fixedDepositProductData.lockinPeriodFrequencyType.value }}</span
>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.minDepositTerm">
<span fxFlex="40%">{{ 'labels.inputs.Minimum Deposit Term' | translate }}:</span>
<span fxFlex="60%" *ngIf="fixedDepositProductData.minDepositTerm !== undefined"
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.minDepositTerm">
<span class="flex-40">{{ 'labels.inputs.Minimum Deposit Term' | translate }}:</span>
<span class="flex-60" *ngIf="fixedDepositProductData.minDepositTerm !== undefined"
>{{ fixedDepositProductData.minDepositTerm }}
&nbsp;
{{ fixedDepositProductData.minDepositTermType.value }}</span
>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.maxDepositTerm">
<span fxFlex="40%">{{ 'labels.inputs.Maximum Deposit Term' | translate }}:</span>
<span fxFlex="60%" *ngIf="fixedDepositProductData.maxDepositTerm !== undefined"
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.maxDepositTerm">
<span class="flex-40">{{ 'labels.inputs.Maximum Deposit Term' | translate }}:</span>
<span class="flex-60" *ngIf="fixedDepositProductData.maxDepositTerm !== undefined"
>{{ fixedDepositProductData.maxDepositTerm }}
&nbsp;
{{ fixedDepositProductData.maxDepositTermType.value }}</span
>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.inMultiplesOfDepositTerm">
<span fxFlex="40%">{{ 'labels.inputs.Deposit Term In multiple of' | translate }}:</span>
<span fxFlex="60%"
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.inMultiplesOfDepositTerm">
<span class="flex-40">{{ 'labels.inputs.Deposit Term In multiple of' | translate }}:</span>
<span class="flex-60"
>{{ fixedDepositProductData.inMultiplesOfDepositTerm }}
-
{{ fixedDepositProductData.inMultiplesOfDepositTermType.value }}</span
>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Apply Penal Interest (less)' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.preClosurePenalApplicable | yesNo }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Apply Penal Interest (less)' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.preClosurePenalApplicable | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.preClosurePenalApplicable">
<span fxFlex="40%">{{ 'labels.inputs.Penal Interest' | translate }} (%):</span>
<span fxFlex="60%"
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.preClosurePenalApplicable">
<span class="flex-40">{{ 'labels.inputs.Penal Interest' | translate }} (%):</span>
<span class="flex-60"
>{{ fixedDepositProductData.preClosurePenalInterest }} &nbsp; &nbsp; % &nbsp; &nbsp; On &nbsp;&nbsp;
{{ fixedDepositProductData.preClosurePenalInterestOnType.value }}</span
>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.minBalanceForInterestCalculation">
<span fxFlex="40%">{{ 'labels.inputs.Balance Required for Interest Calculation' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.minBalanceForInterestCalculation | formatNumber }}</span>
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.minBalanceForInterestCalculation">
<span class="flex-40">{{ 'labels.inputs.Balance Required for Interest Calculation' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.minBalanceForInterestCalculation | formatNumber }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Withhold Tax is Applicable' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.withHoldTax | yesNo }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Withhold Tax is Applicable' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.withHoldTax | yesNo }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.withHoldTax">
<span fxFlex="40%">{{ 'labels.inputs.Withhold Tax group' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.taxGroup.name }}</span>
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.withHoldTax">
<span class="flex-40">{{ 'labels.inputs.Withhold Tax group' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.taxGroup.name }}</span>
</div>
<div *ngIf="fixedDepositProductData.activeChart" fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Interest Rate Chart' | translate }}</h3>
<div *ngIf="fixedDepositProductData.activeChart" class="responsive-column flex-fill">
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Interest Rate Chart' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
<div fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill *ngIf="fixedDepositProductData.activeChart.name">
<span fxFlex="40%">{{ 'labels.inputs.Name' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.activeChart.name }}</span>
<div class="responsive-column flex-fill">
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.activeChart.name">
<span class="flex-40">{{ 'labels.inputs.Name' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.activeChart.name }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.activeChart.description">
<span fxFlex="40%">{{ 'labels.inputs.Description' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.activeChart.description }}</span>
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.activeChart.description">
<span class="flex-40">{{ 'labels.inputs.Description' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.activeChart.description }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.From Date' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.activeChart.fromDate | dateFormat }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.From Date' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.activeChart.fromDate | dateFormat }}</span>
</div>
<div fxFlexFill *ngIf="fixedDepositProductData.activeChart.endDate">
<span fxFlex="40%">{{ 'labels.inputs.End Date' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.activeChart.endDate | dateFormat }}</span>
<div class="flex-fill layout-row" *ngIf="fixedDepositProductData.activeChart.endDate">
<span class="flex-40">{{ 'labels.inputs.End Date' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.activeChart.endDate | dateFormat }}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Primary Grouping by Amount' | translate }}:</span>
<span fxFlex="60%">{{ fixedDepositProductData.activeChart.isPrimaryGroupingByAmount | yesNo }}</span>
<div class="flex-fill layout-row">
<span class="flex-40">{{ 'labels.inputs.Primary Grouping by Amount' | translate }}:</span>
<span class="flex-60">{{ fixedDepositProductData.activeChart.isPrimaryGroupingByAmount | yesNo }}</span>
</div>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProductData.activeChart.chartSlabs"
multiTemplateDataRows
@@ -252,17 +251,15 @@
[attr.colspan]="chartSlabsDisplayedColumns.length"
>
<div
fxLayout="row wrap"
fxFlexFill
class="incentives"
class="incentives flex-fill layout-row-wrap"
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex ? 'expanded' : 'collapsed'"
>
<mat-card fxLayout="row wrap" fxFlexFill>
<h4 class="mat-h4" fxFlex="23%">
<mat-card class="layout-row-wrap flex-fill">
<h4 class="mat-h4 flex-23">
{{ 'labels.heading.Incentives' | translate }}
</h4>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="chartSlab.incentives">
<table class="flex-fill mat-elevation-z1" mat-table [dataSource]="chartSlab.incentives">
<ng-container matColumnDef="entityType">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity Type' | translate }}</th>
<td mat-cell *matCellDef="let incentive">
@@ -351,12 +348,11 @@
</div>
</div>
<div *ngIf="fixedDepositProductData.charges.length" fxFlexFill fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>{{ 'labels.inputs.Charges' | translate }}</h3>
<div *ngIf="fixedDepositProductData.charges.length" class="layout-row-wrap responsive-column flex-fill">
<h3 class="mat-h3 flex-fill">{{ 'labels.inputs.Charges' | translate }}</h3>
<mat-divider fxFlexFill></mat-divider>
<table fxFlexFill class="mat-elevation-z1" mat-table [dataSource]="fixedDepositProductData.charges">
<mat-divider class="flex-fill"></mat-divider>
<table class="flex-fill mat-elevation-z1" mat-table [dataSource]="fixedDepositProductData.charges">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
<td mat-cell *matCellDef="let charge">
@@ -390,7 +386,7 @@
</table>
</div>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Accounting' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Accounting' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
@@ -402,17 +398,15 @@
</mifosx-view-savings-accounting-details>
<div
fxFlexFill
class="flex-fill layout-row-wrap layout-lt-md-column"
*ngIf="
fixedDepositProductData.advancedAccountingRules &&
(fixedDepositProductData.paymentChannelToFundSourceMappings?.length ||
fixedDepositProductData.feeToIncomeAccountMappings?.length ||
fixedDepositProductData.penaltyToIncomeAccountMappings?.length)
"
fxLayout="row wrap"
fxLayout.lt-md="column"
>
<h3 class="mat-h3" fxFlexFill>{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<h3 class="mat-h3 flex-fill">{{ 'labels.heading.Advanced Accounting Rules' | translate }}</h3>
<mat-divider [inset]="true"></mat-divider>
@@ -420,17 +414,14 @@
<div
*ngIf="fixedDepositProductData.paymentChannelToFundSourceMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap layout-xs-column"
>
<h4 class="mat-h4" fxFlexFill>
<h4 class="mat-h4 flex-fill">
{{ 'labels.inputs.Configure Fund Sources for Payment Channels' | translate }}
</h4>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProductData.paymentChannelToFundSourceMappings"
>
@@ -455,15 +446,12 @@
<div
*ngIf="fixedDepositProductData.feeToIncomeAccountMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap layout-xs-column"
>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.inputs.Fees to Specific Income Accounts' | translate }}</h4>
<h4 class="mat-h4 flex-fill">{{ 'labels.inputs.Fees to Specific Income Accounts' | translate }}</h4>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProductData.feeToIncomeAccountMappings"
>
@@ -488,15 +476,12 @@
<div
*ngIf="fixedDepositProductData.penaltyToIncomeAccountMappings?.length"
fxFlexFill
fxLayout="row wrap"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap layout-xs-column"
>
<h4 class="mat-h4" fxFlexFill>{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}</h4>
<h4 class="mat-h4 flex-fill">{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}</h4>
<table
fxFlexFill
class="mat-elevation-z1"
class="mat-elevation-z1 flex-fill"
mat-table
[dataSource]="fixedDepositProductData.penaltyToIncomeAccountMappings"
>
@@ -1,6 +1,6 @@
<mat-card class="product-card">
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs">
<nav mat-tab-nav-bar class="navigation-tabs" [tabPanel]="tabPanel">
<a
mat-tab-link
[routerLink]="['./general']"
@@ -24,6 +24,8 @@
</ng-container>
</nav>
<router-outlet></router-outlet>
<mat-tab-nav-panel #tabPanel>
<router-outlet></router-outlet>
</mat-tab-nav-panel>
</mat-card-content>
</mat-card>
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="floatingRateForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayout.lt-md="column" fxLayoutGap="4%">
<mat-form-field fxFlex="30%">
<div class="layout-row-wrap responsive-column gap-4percent">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Floating Rate Name' | translate }}</mat-label>
<input
matInput
@@ -17,7 +17,7 @@
</mat-error>
</mat-form-field>
<div class="checkbox-wrapper" fxFlex="30%">
<div class="checkbox-wrapper flex-30">
<mat-checkbox
formControlName="isBaseLendingRate"
matTooltip="{{ 'tooltips.Base lending rate for the organisation' | translate }}"
@@ -27,7 +27,7 @@
>
</div>
<div class="checkbox-wrapper" fxFlex="30%">
<div class="checkbox-wrapper flex-30">
<mat-checkbox
formControlName="isActive"
matTooltip="{{ 'tooltips.Floating rate scheme to be activated' | translate }}"
@@ -44,8 +44,8 @@
<br />
<div fxLayout="row wrap" fxLayoutGap="70%" fxLayoutGap.lt-md="0px" class="m-b-10" fxLayout.lt-md="column">
<p fxFlex="25%" class="mat-title">
<div class="layout-row-wrap gap-70percent m-b-10 layout-lt-md-column">
<p class="mat-title flex-25">
{{ 'labels.inputs.Floating Rate Periods' | translate }}
<i
class="fas fa-question"
@@ -114,10 +114,10 @@
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Actions' | translate }}</th>
<td mat-cell *matCellDef="let floatingRatePeriod" fxLayoutGap="15%">
<td mat-cell *matCellDef="let floatingRatePeriod" class="gap-15percent">
<button
type="button"
fxFlex="8%"
class="flex-8"
color="primary"
mat-icon-button
matTooltip="{{ 'tooltips.Edit Period' | translate }}"
@@ -128,7 +128,7 @@
</button>
<button
type="button"
fxFlex="8%"
class="flex-8"
color="warn"
mat-icon-button
matTooltip="{{ 'tooltips.Remove Period' | translate }}"
@@ -147,7 +147,7 @@
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="floatingRateForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayout.lt-md="column" fxLayoutGap="15%">
<mat-form-field fxFlex="25%">
<div class="layout-row-wrap responsive-column gap-15percent">
<mat-form-field class="flex-25">
<mat-label>{{ 'labels.inputs.Floating Rate Name' | translate }}</mat-label>
<input
matInput
@@ -17,7 +17,7 @@
</mat-error>
</mat-form-field>
<div class="checkbox-wrapper" fxFlex="25%">
<div class="checkbox-wrapper flex-25">
<mat-checkbox
formControlName="isBaseLendingRate"
matTooltip="{{ 'tooltips.Base lending rate for the organisation' | translate }}"
@@ -28,7 +28,7 @@
</mat-checkbox>
</div>
<div class="checkbox-wrapper" fxFlex="15%">
<div class="checkbox-wrapper flex-15">
<mat-checkbox
formControlName="isActive"
matTooltip="{{ 'tooltips.Floating rate scheme to be activated' | translate }}"
@@ -46,8 +46,8 @@
<br />
<div fxLayout="row wrap" fxLayoutGap="70%" fxLayoutGap.lt-md="0px" class="m-b-10" fxLayout.lt-md="column">
<p fxFlex="25%" class="mat-title">
<div class="layout-row-wrap gap-70percent m-b-10 layout-lt-md-column">
<p class="mat-title flex-25">
{{ 'labels.inputs.Floating Rate Periods' | translate }}
<i
class="fas fa-question"
@@ -140,7 +140,7 @@
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,7 +2,7 @@
<mat-dialog-content>
<form [formGroup]="floatingRatePeriodForm">
<div fxLayout="column">
<div class="layout-column">
<mat-form-field (click)="fromDatePicker.open()">
<mat-label>{{ 'labels.inputs.From Date' | translate }}</mat-label>
<input required matInput formControlName="fromDate" [min]="minDate" [matDatepicker]="fromDatePicker" />
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* Floating Rate data resolver.
*/
@Injectable()
export class FloatingRateResolver implements Resolve<Object> {
export class FloatingRateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_FLOATINGRATE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Floating Rate' | translate }}
@@ -6,8 +6,8 @@
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<div class="layout-row gap-20px">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Floating Rates data resolver.
*/
@Injectable()
export class FloatingRatesResolver implements Resolve<Object> {
export class FloatingRatesResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_FLOATINGRATE'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -8,22 +8,22 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content" fxLayout.lt-md="column">
<div fxFlex="18%" class="mat-body-strong">{{ 'labels.inputs.Floating Rate Name' | translate }}:</div>
<div class="layout-row-wrap layout-lt-md-column">
<div class="mat-body-strong flex-18">{{ 'labels.inputs.Floating Rate Name' | translate }}:</div>
<div fxFlex="18%">
<div class="flex-18">
{{ floatingRateData.name }}
</div>
<div fxFlex="20%" class="mat-body-strong">{{ 'labels.inputs.Is Base Lending Rate' | translate }}:</div>
<div class="mat-body-strong flex-20">{{ 'labels.inputs.Is Base Lending Rate' | translate }}:</div>
<div fxFlex="10%">
<div class="flex-10">
{{ floatingRateData.isBaseLendingRate | yesNo }}
</div>
<div fxFlex="14%" class="mat-body-strong">{{ 'labels.inputs.Is Active' | translate }}:</div>
<div class="mat-body-strong flex-14">{{ 'labels.inputs.Is Active' | translate }}:</div>
<div fxFlex="10%">
<div class="flex-10">
{{ floatingRateData.isActive | yesNo }}
</div>
</div>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../../products.service';
* Loan product and template data resolver.
*/
@Injectable()
export class LoanProductAndTemplateResolver implements Resolve<Object> {
export class LoanProductAndTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,12 +1,12 @@
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
import { SystemService } from 'app/system/system.service';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoanProductDatatableResolver implements Resolve<boolean> {
export class LoanProductDatatableResolver {
/**
* @param {SystemService} systemService Products service.
*/
@@ -1,12 +1,12 @@
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
import { SystemService } from 'app/system/system.service';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoanProductDatatablesResolver implements Resolve<boolean> {
export class LoanProductDatatablesResolver {
/**
* @param {SystemService} systemService Products service.
*/
@@ -1,10 +1,7 @@
<form [formGroup]="loanProductAccountingForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-radio-group
fxFlex="98%"
fxLayout="row"
fxLayoutGap="5%"
fxLayout.lt-md="column"
class="flex-98 layout-row gap-5percent layout-lt-md-column radio-group-spacing"
formControlName="accountingRule"
>
<mat-radio-button *ngFor="let accountingRule of accountingRuleData; let i = index" [value]="i + 1">
@@ -12,25 +9,22 @@
</mat-radio-button>
</mat-radio-group>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<div
*ngIf="loanProductAccountingForm.value.accountingRule >= 2 && loanProductAccountingForm.value.accountingRule <= 4"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-checkbox *ngIf="isAccountingAccrualBased" fxFlex="73%" formControlName="enableAccrualActivityPosting">{{
<mat-checkbox *ngIf="isAccountingAccrualBased" class="flex-73" formControlName="enableAccrualActivityPosting">{{
'labels.inputs.Enable Accrual Activity Posting on Installment Due Date' | translate
}}</mat-checkbox>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.heading.Assets' | translate }} / {{ 'labels.heading.Liabilities' | translate }}
</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.fundSourceAccountId"
[glAccountList]="assetAndLiabilityAccountData"
[required]="true"
@@ -38,10 +32,10 @@
>
</mifosx-gl-account-selector>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Assets' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Assets' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.loanPortfolioAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -50,7 +44,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.transfersInSuspenseAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -62,13 +56,10 @@
*ngIf="
loanProductAccountingForm.value.accountingRule === 3 || loanProductAccountingForm.value.accountingRule === 4
"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.receivableInterestAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -77,7 +68,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.receivableFeeAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -86,7 +77,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.receivablePenaltyAccountId"
[glAccountList]="assetAccountData"
[required]="true"
@@ -95,12 +86,12 @@
</mifosx-gl-account-selector>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Income' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Income' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.interestOnLoanAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -109,7 +100,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromFeeAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -118,7 +109,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -127,7 +118,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromRecoveryAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -136,7 +127,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffInterestAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -145,7 +136,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffFeesAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -154,7 +145,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromChargeOffPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -163,7 +154,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditInterestAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -172,7 +163,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditFeesAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -181,7 +172,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromGoodwillCreditPenaltyAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -191,7 +182,7 @@
<mifosx-gl-account-selector
*ngIf="capitalizedIncome?.enableIncomeCapitalization"
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.incomeFromCapitalizationAccountId"
[glAccountList]="incomeAccountData"
[required]="true"
@@ -199,9 +190,9 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Expenses' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Expenses' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
@@ -213,7 +204,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.goodwillCreditAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
@@ -222,7 +213,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.chargeOffExpenseAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
@@ -231,7 +222,7 @@
</mifosx-gl-account-selector>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.chargeOffFraudExpenseAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
@@ -239,12 +230,12 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.heading.Liabilities' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Liabilities' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.overpaymentLiabilityAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
@@ -264,22 +255,19 @@
<mat-divider fxFlex="98%"></mat-divider>
<mat-checkbox fxFlex="73%" formControlName="advancedAccountingRules">{{
<mat-checkbox class="flex-73" formControlName="advancedAccountingRules">{{
'labels.heading.Advanced Accounting Rules' | translate
}}</mat-checkbox>
<div
*ngIf="loanProductAccountingForm.value.advancedAccountingRules"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<h4 fxFlex="33%" class="mat-h4">
<h4 class="mat-h4 flex-33">
{{ 'labels.heading.Configure Fund Sources for Payment Channels' | translate }}
</h4>
<div fxFlex="63%">
<div class="flex-63">
<button
type="button"
mat-raised-button
@@ -292,8 +280,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="paymentChannelToFundSourceMappings.value"
*ngIf="paymentChannelToFundSourceMappings.value.length !== 0"
@@ -336,9 +323,9 @@
<tr mat-row *matRowDef="let row; columns: paymentFundSourceDisplayedColumns"></tr>
</table>
<h4 fxFlex="33%" class="mat-h4">{{ 'labels.heading.Map Fees to Specific Income Accounts' | translate }}</h4>
<h4 class="mat-h4 flex-33">{{ 'labels.heading.Map Fees to Specific Income Accounts' | translate }}</h4>
<div fxFlex="63%">
<div class="flex-63">
<button
type="button"
mat-raised-button
@@ -351,8 +338,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="feeToIncomeAccountMappings.value"
*ngIf="feeToIncomeAccountMappings.value.length !== 0"
@@ -387,11 +373,11 @@
<tr mat-row *matRowDef="let row; columns: feesPenaltyIncomeDisplayedColumns"></tr>
</table>
<h4 fxFlex="33%" class="mat-h4">
<h4 class="mat-h4 flex-33">
{{ 'labels.heading.Map Penalties to Specific Income Accounts' | translate }}
</h4>
<div fxFlex="63%">
<div class="flex-63">
<button
type="button"
mat-raised-button
@@ -404,8 +390,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="penaltyToIncomeAccountMappings.value"
*ngIf="penaltyToIncomeAccountMappings.value.length !== 0"
@@ -444,11 +429,11 @@
<tr mat-row *matRowDef="let row; columns: feesPenaltyIncomeDisplayedColumns"></tr>
</table>
<h4 fxFlex="33%" class="mat-h4">
<h4 class="mat-h4 flex-33">
{{ 'labels.heading.Map Charge-off reasons to Expense accounts' | translate }}
</h4>
<div fxFlex="63%">
<div class="flex-63">
<button
type="button"
mat-raised-button
@@ -461,8 +446,7 @@
</button>
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="chargeOffReasonToExpenseAccountMappings.value"
*ngIf="chargeOffReasonToExpenseAccountMappings.value.length !== 0"
@@ -508,7 +492,7 @@
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -23,3 +23,15 @@ mat-divider {
.margin-t {
margin-top: 1em;
}
.radio-group-spacing {
display: flex;
gap: 2rem;
flex-direction: row;
}
@media (width <= 768px) {
.radio-group-spacing {
flex-direction: column;
}
}
@@ -1,10 +1,10 @@
<form [formGroup]="loanIncomeCapitalizationForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-checkbox fxFlex="98%" labelPosition="before" formControlName="enableIncomeCapitalization">
<div class="layout-row-wrap gap-2percent layout-column-lt-md">
<mat-checkbox class="flex-98" labelPosition="before" formControlName="enableIncomeCapitalization">
{{ 'labels.inputs.Enable income capitalization' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="48%" *ngIf="enableIncomeCapitalization">
<mat-form-field class="flex-48" *ngIf="enableIncomeCapitalization">
<mat-label>{{ 'labels.inputs.Income capitalization calculation type' | translate }}</mat-label>
<mat-select formControlName="capitalizedIncomeCalculationType" required>
<mat-option
@@ -15,7 +15,7 @@
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="enableIncomeCapitalization">
<mat-form-field class="flex-48" *ngIf="enableIncomeCapitalization">
<mat-label>{{ 'labels.inputs.Income capitalization strategy' | translate }}</mat-label>
<mat-select formControlName="capitalizedIncomeStrategy" required>
<mat-option
@@ -26,7 +26,7 @@
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="enableIncomeCapitalization">
<mat-form-field class="flex-48" *ngIf="enableIncomeCapitalization">
<mat-label>{{ 'labels.inputs.Income type' | translate }}</mat-label>
<mat-select formControlName="capitalizedIncomeType" required>
<mat-option
@@ -1,5 +1,5 @@
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Charge' | translate }}</mat-label>
<mat-select #charge>
<mat-option
@@ -13,7 +13,7 @@
</mat-select>
</mat-form-field>
<div fxFlex="48%" fxFlexAlign="center">
<div class="flex-48 align-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 }}
@@ -21,8 +21,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="chargesDataSource | chargesPenaltyFilter: false"
#chargesTable
@@ -69,13 +68,13 @@
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<div fxFlex="98%">
<div class="flex-98">
<h3 class="mat-h3">{{ 'labels.inputs.Overdue Charges' | translate }}</h3>
</div>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Overdue Charge' | translate }}</mat-label>
<mat-select #overdueCharge>
<mat-option
@@ -87,7 +86,7 @@
</mat-select>
</mat-form-field>
<div fxFlex="48%" fxFlexAlign="center">
<div class="flex-48 align-center">
<button
type="button"
mat-raised-button
@@ -101,8 +100,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="chargesDataSource | chargesPenaltyFilter: true"
#overdueChargesTable
@@ -150,7 +148,7 @@
</table>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row responsive-column align-center gap-2px margin-t">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="loanProductCurrencyForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select
formControlName="currencyCode"
@@ -17,7 +17,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Decimal Places' | translate }}</mat-label>
<input
type="number"
@@ -32,7 +32,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Currency in multiples of' | translate }}</mat-label>
<input
type="number"
@@ -42,13 +42,13 @@
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Installment in multiples of' | translate }}</mat-label>
<input type="number" matInput formControlName="installmentAmountInMultiplesOf" />
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,5 @@
import { Component, OnInit, Input } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';
import { TooltipPosition } from '@angular/material/tooltip';
@Component({
selector: 'mifosx-loan-product-currency-step',
@@ -1,6 +1,6 @@
<form [formGroup]="loanProductDetailsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxFlex="98%">
<div class="layout-row-wrap gap-2percent responsive-column align-start-center">
<mat-form-field class="flex-98">
<mat-label>{{ 'labels.inputs.Product Name' | translate }}</mat-label>
<input
matInput
@@ -14,7 +14,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Short Name' | translate }}</mat-label>
<input
matInput
@@ -29,7 +29,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.External Id' | translate }}</mat-label>
<input
matInput
@@ -38,7 +38,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Fund' | translate }}</mat-label>
<mat-select matTooltip="{{ 'tooltips.Loan products may be assigned' | translate }}" formControlName="fundId">
<mat-option *ngFor="let fund of fundData" [value]="fund.id">
@@ -51,12 +51,12 @@
labelPosition="before"
matTooltip="{{ 'tooltips.A borrower loan counter (cycle)' | translate }}"
formControlName="includeInBorrowerCycle"
fxFlex="48%"
class="flex-48"
>
{{ 'labels.inputs.Include in Customer Loan Counter' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="48%" (click)="startDatePicker.open()">
<mat-form-field class="flex-48" (click)="startDatePicker.open()">
<mat-label>{{ 'labels.inputs.Start Date' | translate }}</mat-label>
<input
matInput
@@ -70,7 +70,7 @@
<mat-datepicker #startDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="48%" (click)="closeDatePicker.open()">
<mat-form-field class="flex-48" (click)="closeDatePicker.open()">
<mat-label>{{ 'labels.inputs.Close Date' | translate }}</mat-label>
<input
matInput
@@ -84,7 +84,7 @@
<mat-datepicker #closeDatePicker></mat-datepicker>
</mat-form-field>
<mat-form-field fxFlex="98%">
<mat-form-field class="flex-98">
<mat-label>{{ 'labels.inputs.Description' | translate }}</mat-label>
<textarea
matInput
@@ -96,7 +96,7 @@
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious disabled>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -2,7 +2,6 @@
import { Component, OnInit, Input } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';
import { Dates } from 'app/core/utils/dates';
import { TooltipPosition } from '@angular/material/tooltip';
/** Custom Services */
import { SettingsService } from 'app/settings/settings.service';
@@ -1,6 +1,6 @@
<form [formGroup]="loanProductInterestRefundForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="48%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Supported Interest Refund Types' | translate }}</mat-label>
<mat-select
multiple
@@ -1,9 +1,9 @@
<div fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 class="m-b-15 right" fxFlex="90%">
<div class="flex-fill layout-row-wrap gap-2percent layout-lt-md-column">
<h4 class="m-b-15 right flex-90">
{{ 'labels.heading.You can drag and drop the rows to set a Payment Allocations order' | translate }}
</h4>
<div class="right" fxFlex="4%" *ngIf="!isDefault()">
<div class="right flex-4" *ngIf="!isDefault()">
<button mat-button color="warn" (click)="removeTransaction()">
<fa-icon icon="trash" class="m-r-10"></fa-icon>
</button>
@@ -72,8 +72,7 @@
</div>
<mat-form-field
fxFlex="33%"
class="m-t-20"
class="m-t-20 flex-33"
*ngIf="advancedPaymentAllocation && advancedPaymentAllocation.futureInstallmentAllocationRules"
>
<mat-label>{{ 'labels.inputs.Future Installment Allocation Rule' | translate }}</mat-label>
@@ -1,4 +1,4 @@
<mat-tab-group animationDuration="0ms" fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-tab-group animationDuration="0ms" class="layout-row-wrap gap-2percent layout-lt-md-column">
<mat-tab *ngFor="let advancedPaymentAllocation of advancedPaymentAllocations">
<ng-template mat-tab-label>
{{ advancedPaymentAllocation.transaction.value | translateKey: 'catalogs' }}
@@ -23,11 +23,12 @@
</mifosx-advance-payment-allocation-tab>
</mat-tab>
<mat-tab disabled>
<mat-tab>
<ng-template mat-tab-label>
<button mat-icon-button (click)="addTransaction()">
<button (click)="addTransaction(); $event.stopPropagation()" mat-icon-button type="button">
<mat-icon><fa-icon icon="plus" size="sm"></fa-icon></mat-icon>
</button>
</ng-template>
<ng-template matTabContent></ng-template>
</mat-tab>
</mat-tab-group>
@@ -9,7 +9,7 @@
>
</mifosx-loan-product-summary>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row responsive-column align-center gap-2px margin-t">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="loanProductSettingsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxFlex="30%">
<div class="layout-row-wrap gap-2percent responsive-column align-start-center">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.products.loan.Amortization' | translate }}</mat-label>
<mat-select
formControlName="amortizationType"
@@ -17,7 +17,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Interest Method' | translate }}</mat-label>
<mat-select
formControlName="interestType"
@@ -34,7 +34,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Interest calculation period' | translate }}</mat-label>
<mat-select
formControlName="interestCalculationPeriodType"
@@ -54,13 +54,13 @@
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="96%" labelPosition="before" formControlName="isEqualAmortization">
<mat-checkbox class="flex-96" labelPosition="before" formControlName="isEqualAmortization">
{{ 'labels.inputs.products.loan.Is Equal Amortization?' | translate }}
</mat-checkbox>
<mat-checkbox
*ngIf="loanProductSettingsForm.value.interestCalculationPeriodType === 1"
fxFlex="96%"
class="flex-96"
labelPosition="before"
matTooltip="{{ 'tooltips.To be used with SAME AS REPAYMENT PERIOD' | translate }}"
formControlName="allowPartialPeriodInterestCalculation"
@@ -68,11 +68,11 @@
{{ 'labels.inputs.Calculate interest for exact days in partial period' | translate }}
</mat-checkbox>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Loan Schedule' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.inputs.Loan Schedule' | translate }}</h4>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Loan Schedule Type' | translate }}</mat-label>
<mat-select formControlName="loanScheduleType" required>
<mat-option *ngFor="let loanScheduleType of loanScheduleTypeData" [value]="loanScheduleType.code">
@@ -81,7 +81,7 @@
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Repayment strategy' | translate }}</mat-label>
<mat-select
formControlName="transactionProcessingStrategyCode"
@@ -102,7 +102,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="30%" *ngIf="isAdvancedTransactionProcessingStrategy">
<mat-form-field class="flex-fill flex-30" *ngIf="isAdvancedTransactionProcessingStrategy">
<mat-label>{{ 'labels.inputs.Loan Schedule Processing Type' | translate }}</mat-label>
<mat-select formControlName="loanScheduleProcessingType" required>
<mat-option
@@ -114,26 +114,22 @@
</mat-select>
</mat-form-field>
<h3 fxFlex="96%" class="mat-h3">{{ 'labels.inputs.Loan Tranche Details' | translate }}</h3>
<h3 class="mat-h3 flex-96">{{ 'labels.inputs.Loan Tranche Details' | translate }}</h3>
<mat-checkbox
fxFlex="73%"
labelPosition="before"
formControlName="multiDisburseLoan"
matTooltip="{{ 'tooltips.Leave this checkbox unchecked' | translate }}"
class="margin-b"
class="margin-b flex-73"
>
{{ 'labels.inputs.Enable Multiple Disbursals' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.multiDisburseLoan"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Maximum Tranche count' | translate }}</mat-label>
<input
type="number"
@@ -148,7 +144,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Maximum allowed outstanding balance' | translate }}</mat-label>
<input
type="number"
@@ -158,36 +154,27 @@
/>
</mat-form-field>
<mat-checkbox
fxFlex="48%"
labelPosition="before"
formControlName="disallowExpectedDisbursements"
class="margin-v"
>
<mat-checkbox class="flex-48 margin-v" labelPosition="before" formControlName="disallowExpectedDisbursements">
{{ 'labels.inputs.Disallow Expected Disbursements' | translate }}
</mat-checkbox>
</div>
<h3 fxFlex="96%" class="mat-h3">{{ 'labels.heading.Down Payment' | translate }}</h3>
<h3 class="mat-h3 flex-96">{{ 'labels.heading.Down Payment' | translate }}</h3>
<mat-checkbox
fxFlex="73%"
labelPosition="before"
formControlName="enableDownPayment"
matTooltip="{{ 'tooltips.Leave this checkbox unchecked' | translate }}"
class="margin-b"
class="margin-b flex-73"
>
{{ 'labels.inputs.Enable Down Payment' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.enableDownPayment"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Disbursed Amount Percentage Down Payment' | translate }} (%)</mat-label>
<input
type="number"
@@ -212,57 +199,52 @@
</mat-form-field>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
formControlName="enableAutoRepaymentForDownPayment"
matTooltip="{{ 'tooltips.Enable or disable the auto repayment of down-payment.' | translate }}"
class="margin-b"
>
{{ 'labels.inputs.Enable Auto Repayment for Down Payment' | translate }}
</mat-checkbox>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<span fxFlex="48%" fxHide.lt-md></span>
<span class="flex-48 hide-lt-md"></span>
<div
*ngIf="isAdvancedTransactionProcessingStrategy"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
>
<h3 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Loan Charge-off behaviour' | translate }}</h3>
<div style="display: flex; justify-content: flex-start; width: 100%">
<div *ngIf="isAdvancedTransactionProcessingStrategy">
<h3 class="mat-h4 flex-98">{{ 'labels.inputs.Loan Charge-off behaviour' | translate }}</h3>
<mat-form-field fxFlex="30%">
<mat-label>{{ 'labels.inputs.Loan Charge-off behaviour' | translate }}</mat-label>
<mat-select formControlName="chargeOffBehaviour" required>
<mat-option *ngFor="let chargeOffBehaviour of chargeOffBehaviourData" [value]="chargeOffBehaviour.id">
{{ chargeOffBehaviour.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Loan Charge-off behaviour' | translate }}</mat-label>
<mat-select formControlName="chargeOffBehaviour" required>
<mat-option *ngFor="let chargeOffBehaviour of chargeOffBehaviourData" [value]="chargeOffBehaviour.id">
{{ chargeOffBehaviour.value | translateKey: 'catalogs' }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
</div>
<h4 fxFlex="98%" class="mat-h4 m-r-10">
<h4 class="mat-h4 m-r-10 flex-98">
{{ 'labels.inputs.Moratorium' | translate }}
<i class="fas fa-question" matTooltip="{{ 'tooltips.The moratorium information' | translate }}"></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Grace on principal payment' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnPrincipalPayment" />
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Grace on interest payment' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnInterestPayment" />
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Delinquency Bucket' | translate }}</mat-label>
<mat-select formControlName="delinquencyBucketId">
<mat-option *ngFor="let delinquencyBucket of delinquencyBucketData" [value]="delinquencyBucket.id">
@@ -282,18 +264,17 @@
</mat-form-field>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
formControlName="enableInstallmentLevelDelinquency"
class="margin-v"
*ngIf="loanProductSettingsForm.value.delinquencyBucketId"
>
{{ 'labels.inputs.Enable installment level Delinquency' | translate }}
</mat-checkbox>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Interest free period' | translate }}</mat-label>
<input
type="number"
@@ -303,7 +284,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Arrears tolerance' | translate }}</mat-label>
<input
type="number"
@@ -313,7 +294,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Days in year' | translate }}</mat-label>
<mat-select
matTooltip="{{ 'tooltips.To calculate interest' | translate }}"
@@ -330,7 +311,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="useDaysInYearCustomStrategy">
<mat-form-field class="flex-48" *ngIf="useDaysInYearCustomStrategy">
<mat-label>{{ 'labels.inputs.Days in year custom strategy' | translate }}</mat-label>
<mat-select
matTooltip="{{ 'tooltips.To calculate interest' | translate }}"
@@ -345,7 +326,7 @@
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Days in month' | translate }}</mat-label>
<mat-select
matTooltip="{{ 'tooltips.Number of days in month' | translate }}."
@@ -362,11 +343,11 @@
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="98%" labelPosition="before" formControlName="canDefineInstallmentAmount" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="canDefineInstallmentAmount" class="margin-v flex-98">
{{ 'labels.inputs.Allow fixing of the installment amount' | translate }}
</mat-checkbox>
<h4 fxFlex="48%">
<h4 class="flex-48">
{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate }}
<i
class="fas fa-question"
@@ -374,12 +355,12 @@
></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.On arrears ageing' | translate }}</mat-label>
<input type="number" matInput formControlName="graceOnArrearsAgeing" />
</mat-form-field>
<h4 fxFlex="48%">
<h4 class="flex-48">
{{
'labels.inputs.Maximum number of days a loan may be overdue before becoming a NPA (non performing asset)'
| translate
@@ -390,45 +371,40 @@
></i>
</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Overdue days for NPA' | translate }}</mat-label>
<input type="number" matInput formControlName="overdueDaysForNPA" />
</mat-form-field>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
formControlName="accountMovesOutOfNPAOnlyOnArrearsCompletion"
class="margin-v"
>
{{ 'labels.inputs.Account moves out of NPA only after all arrears have been cleared' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Principal Threshold (%) for Last Instalment' | translate }}</mat-label>
<input type="number" matInput formControlName="principalThresholdForLastInstallment" />
</mat-form-field>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
matTooltip="{{ 'tooltips.Fields are used to define the minimum, maximum gap' | translate }}"
formControlName="allowVariableInstallments"
class="margin-v"
>
{{ 'labels.inputs.Are Variable Installments allowed?' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.allowVariableInstallments"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<h4 fxFlex="98%" class="mat-h4">{{ 'labels.inputs.Variable Installments' | translate }}</h4>
<h4 class="mat-h4 flex-98">{{ 'labels.inputs.Variable Installments' | translate }}</h4>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Minimum gap between Installments' | translate }}</mat-label>
<input type="number" matInput formControlName="minimumGap" required />
<mat-error>
@@ -437,7 +413,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Maximum gap between Installments' | translate }}</mat-label>
<input type="number" matInput formControlName="maximumGap" required />
<mat-error>
@@ -448,31 +424,27 @@
</div>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
matTooltip="{{ 'tooltips.Loan Product can be used to apply for Topup Loans' | translate }}"
formControlName="canUseForTopup"
class="margin-v"
>
{{ 'labels.inputs.Allowed to be used for providing Topup Loans' | translate }}
</mat-checkbox>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="96%" class="mat-h3">{{ 'labels.heading.Interest Recalculation' | translate }}</h3>
<h3 class="mat-h3 flex-96">{{ 'labels.heading.Interest Recalculation' | translate }}</h3>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="isInterestRecalculationEnabled" class="margin-b">
<mat-checkbox class="flex-73 margin-b" labelPosition="before" formControlName="isInterestRecalculationEnabled">
{{ 'labels.inputs.Recalculate Interest' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.isInterestRecalculationEnabled"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Pre-closure interest calculation rule' | translate }}</mat-label>
<mat-select formControlName="preClosureInterestCalculationStrategy" required>
<mat-option
@@ -488,7 +460,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Advance payments adjustment type' | translate }}</mat-label>
<mat-select formControlName="rescheduleStrategyMethod" required [disabled]="rescheduleStrategyTypeDisabled">
<mat-option
@@ -504,7 +476,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Interest recalculation compounding on' | translate }}</mat-label>
<mat-select formControlName="interestRecalculationCompoundingMethod" required>
<mat-option
@@ -520,11 +492,11 @@
</mat-error>
</mat-form-field>
<span fxFlex="48%" fxHide.lt-md></span>
<span class="flex-48 hide-lt-md"></span>
<div fxFlexFill fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="flex-fill layout-row-wrap gap-2percent layout-lt-md-column">
<mat-form-field
fxFlex="48%"
class="flex-48"
*ngIf="
loanProductSettingsForm.value.interestRecalculationCompoundingMethod !== 0 &&
loanProductSettingsForm.value.recalculationCompoundingFrequencyType !== 1
@@ -538,7 +510,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%" *ngIf="loanProductSettingsForm.value.recalculationRestFrequencyType !== 1">
<mat-form-field class="flex-48" *ngIf="loanProductSettingsForm.value.recalculationRestFrequencyType !== 1">
<mat-label>{{ 'labels.inputs.Frequency Interval for recalculation' | translate }}</mat-label>
<input type="number" matInput formControlName="recalculationRestFrequencyInterval" required />
<mat-error>
@@ -550,12 +522,9 @@
<div
*ngIf="loanProductSettingsForm.value.interestRecalculationCompoundingMethod !== 0"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Frequency for compounding' | translate }}</mat-label>
<mat-select formControlName="recalculationCompoundingFrequencyType" required>
<mat-option
@@ -569,11 +538,9 @@
<div
*ngIf="loanProductSettingsForm.value.recalculationCompoundingFrequencyType === 4"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationCompoundingFrequencyNthDayType">
<mat-option
*ngFor="let interestRecalculationNthDayType of interestRecalculationNthDayTypeData"
@@ -591,11 +558,9 @@
loanProductSettingsForm.value.recalculationCompoundingFrequencyNthDayType !== -2) ||
loanProductSettingsForm.value.recalculationCompoundingFrequencyType === 3
"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationCompoundingFrequencyDayOfWeekType">
<mat-option
*ngFor="let interestRecalculationDayOfWeekType of interestRecalculationDayOfWeekTypeData"
@@ -612,11 +577,9 @@
loanProductSettingsForm.value.recalculationCompoundingFrequencyType === 4 &&
loanProductSettingsForm.value.recalculationCompoundingFrequencyNthDayType === -2
"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationCompoundingFrequencyOnDayType">
<mat-option
*ngFor="let interestRecalculationOnDayType of interestRecalculationOnDayTypeData"
@@ -629,7 +592,7 @@
</div>
</div>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Frequency for recalculate Outstanding Principal' | translate }}</mat-label>
<mat-select formControlName="recalculationRestFrequencyType" required>
<mat-option
@@ -647,11 +610,9 @@
<div
*ngIf="loanProductSettingsForm.value.recalculationRestFrequencyType === 4"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationRestFrequencyNthDayType">
<mat-option
*ngFor="let interestRecalculationNthDayType of interestRecalculationNthDayTypeData"
@@ -669,11 +630,9 @@
loanProductSettingsForm.value.recalculationRestFrequencyNthDayType !== -2) ||
loanProductSettingsForm.value.recalculationRestFrequencyType === 3
"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationRestFrequencyDayOfWeekType">
<mat-option
*ngFor="let interestRecalculationDayOfWeekType of interestRecalculationDayOfWeekTypeData"
@@ -690,11 +649,9 @@
loanProductSettingsForm.value.recalculationRestFrequencyType === 4 &&
loanProductSettingsForm.value.recalculationRestFrequencyNthDayType === -2
"
fxFlex="31%"
fxLayout="row"
fxLayout.lt-md="column"
class="flex-31 layout-row layout-lt-md-column"
>
<mat-form-field fxFlexFill>
<mat-form-field class="flex-fill">
<mat-select formControlName="recalculationRestFrequencyOnDayType">
<mat-option
*ngFor="let interestRecalculationOnDayType of interestRecalculationOnDayTypeData"
@@ -706,42 +663,33 @@
</mat-form-field>
</div>
<mat-checkbox
fxFlex="98%"
labelPosition="before"
formControlName="isArrearsBasedOnOriginalSchedule"
class="margin-v"
>
<mat-checkbox class="flex-98 margin-v" labelPosition="before" formControlName="isArrearsBasedOnOriginalSchedule">
{{ 'labels.inputs.Is Arrears recognization based on original schedule' | translate }}?
</mat-checkbox>
<mat-checkbox
*ngIf="loanProductSettingsForm.value.loanScheduleType === 'PROGRESSIVE'"
fxFlex="98%"
class="flex-98 margin-v"
labelPosition="before"
formControlName="disallowInterestCalculationOnPastDue"
class="margin-v"
>
{{ 'labels.inputs.Do not calculate interest on past due principal balances' | translate }}
</mat-checkbox>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="23%" class="mat-h3">{{ 'labels.heading.Guarantee Requirements' | translate }}</h3>
<h3 class="mat-h3 flex-23">{{ 'labels.heading.Guarantee Requirements' | translate }}</h3>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="holdGuaranteeFunds" class="margin-b">
<mat-checkbox class="flex-73 margin-b" labelPosition="before" formControlName="holdGuaranteeFunds">
{{ 'labels.inputs.Place Guarantee Funds On-Hold' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.holdGuaranteeFunds"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Mandatory Guarantee(%)' | translate }}</mat-label>
<input type="number" matInput formControlName="mandatoryGuarantee" required />
<mat-error>
@@ -750,20 +698,20 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum Guarantee from Own Funds(%)' | translate }}</mat-label>
<input type="number" matInput formControlName="minimumGuaranteeFromOwnFunds" />
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum Guarantee from Guarantor Funds(%)' | translate }}</mat-label>
<input type="number" matInput formControlName="minimumGuaranteeFromGuarantor" />
</mat-form-field>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="23%" class="mat-h3">
<h3 class="mat-h3 flex-23">
{{ 'labels.heading.Event Settings' | translate
}}<i
class="fas fa-question"
@@ -772,23 +720,19 @@
</h3>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-b"
labelPosition="before"
formControlName="useDueForRepaymentsConfigurations"
matTooltip="{{ 'tooltips.Use or not the Global Configurations' | translate }}"
class="margin-b"
>
{{ 'labels.inputs.Use the Global Configurations values to the Repayment Event (notifications)' | translate }}
</mat-checkbox>
<div
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
*ngIf="!loanProductSettingsForm.value.useDueForRepaymentsConfigurations"
>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Due days for repayment event' | translate }}</mat-label>
<input
type="number"
@@ -798,7 +742,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.OverDue days for repayment event' | translate }}</mat-label>
<input
type="number"
@@ -809,72 +753,58 @@
</mat-form-field>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="43%" class="mat-h3">{{ 'labels.inputs.Configurable Terms and Settings' | translate }}</h3>
<h3 class="mat-h3 flex-43">{{ 'labels.inputs.Configurable Terms and Settings' | translate }}</h3>
<mat-checkbox fxFlex="53%" labelPosition="before" formControlName="allowAttributeConfiguration" class="margin-b">
<mat-checkbox labelPosition="before" formControlName="allowAttributeConfiguration" class="margin-b flex-53">
{{ 'labels.inputs.Allow overriding select terms and settings in loan accounts' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductSettingsForm.value.allowAttributeConfiguration"
formGroupName="allowAttributeOverrides"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="amortizationType" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="amortizationType" class="margin-v flex-48">
{{ 'labels.inputs.Amortization' | translate }}
</mat-checkbox>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="interestType" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="interestType" class="margin-v flex-48">
{{ 'labels.inputs.Interest method' | translate }}
</mat-checkbox>
<mat-checkbox
fxFlex="48%"
labelPosition="before"
formControlName="transactionProcessingStrategyCode"
class="margin-v"
>
<mat-checkbox class="flex-48 margin-v" labelPosition="before" formControlName="transactionProcessingStrategyCode">
{{ 'labels.inputs.Repayment strategy' | translate }}
</mat-checkbox>
<mat-checkbox
fxFlex="48%"
labelPosition="before"
formControlName="interestCalculationPeriodType"
class="margin-v"
>
<mat-checkbox class="flex-48 margin-v" labelPosition="before" formControlName="interestCalculationPeriodType">
{{ 'labels.inputs.Interest calculation period' | translate }}
</mat-checkbox>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="inArrearsTolerance" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="inArrearsTolerance" class="margin-v flex-48">
{{ 'labels.inputs.Arrears tolerance' | translate }}
</mat-checkbox>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="repaymentEvery" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="repaymentEvery" class="margin-v flex-48">
{{ 'labels.inputs.Repaid every' | translate }}
</mat-checkbox>
<mat-checkbox
fxFlex="48%"
class="flex-48 margin-v"
labelPosition="before"
formControlName="graceOnPrincipalAndInterestPayment"
class="margin-v"
>
{{ 'labels.inputs.Moratorium' | translate }}
</mat-checkbox>
<mat-checkbox fxFlex="48%" labelPosition="before" formControlName="graceOnArrearsAgeing" class="margin-v">
<mat-checkbox labelPosition="before" formControlName="graceOnArrearsAgeing" class="margin-v flex-48">
{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate }}
</mat-checkbox>
</div>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
<form [formGroup]="loanProductTermsForm">
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<h4 fxFlex="98%" class="mat-h4">
<div class="layout-row-wrap gap-2px responsive-column">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Principal' | translate
}}<i
class="m-l-10 fas fa-question"
@@ -8,7 +8,7 @@
></i>
</h4>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
<input type="number" matInput formControlName="minPrincipal" [min]="0" />
<mat-error>
@@ -17,7 +17,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
<input type="number" matInput formControlName="principal" required />
<mat-error>
@@ -26,7 +26,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
<input type="number" matInput formControlName="maxPrincipal" [min]="0" />
<mat-error>
@@ -37,12 +37,15 @@
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="96%" labelPosition="before" formControlName="allowApprovedDisbursedAmountsOverApplied">
<mat-checkbox class="flex-60" labelPosition="before" formControlName="allowApprovedDisbursedAmountsOverApplied">
{{ 'labels.inputs.Allow approval / disbursal above loan applied amount' | translate }}
</mat-checkbox>
<div fxFlex="98%" fxLayoutGap="2%" fxLayout="row wrap" fxLayout.lt-md="column">
<mat-form-field fxFlex="32%" *ngIf="loanProductTermsForm.value.allowApprovedDisbursedAmountsOverApplied">
<div class="flex-98 layout-row-wrap responsive-column gap-2percent">
<mat-form-field
class="flex-fill flex-32"
*ngIf="loanProductTermsForm.value.allowApprovedDisbursedAmountsOverApplied"
>
<mat-label>{{ 'labels.inputs.Over Amount Calculation Type' | translate }}</mat-label>
<mat-select formControlName="overAppliedCalculationType" required>
<mat-option
@@ -54,13 +57,16 @@
</mat-select>
</mat-form-field>
<mat-form-field fxFlex="32%" *ngIf="loanProductTermsForm.value.allowApprovedDisbursedAmountsOverApplied">
<mat-form-field
class="flex-fill flex-32"
*ngIf="loanProductTermsForm.value.allowApprovedDisbursedAmountsOverApplied"
>
<mat-label>{{ 'labels.inputs.Over Amount' | translate }}</mat-label>
<input type="number" matInput formControlName="overAppliedNumber" required />
</mat-form-field>
</div>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label
>{{ 'labels.inputs.Installment day calculation from' | translate }}
<i
@@ -78,7 +84,7 @@
</mat-select>
</mat-form-field>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Number of repayments' | translate }}
<i
class="fas fa-question"
@@ -88,7 +94,7 @@
></i>
</h4>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
<input type="number" matInput formControlName="minNumberOfRepayments" [min]="1" />
<mat-error>
@@ -97,7 +103,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
<input type="number" matInput formControlName="numberOfRepayments" required />
<mat-error>
@@ -106,7 +112,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
<input type="number" matInput formControlName="maxNumberOfRepayments" [min]="0" />
<mat-error>
@@ -117,17 +123,17 @@
</mat-error>
</mat-form-field>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<mat-checkbox fxFlex="96%" labelPosition="before" formControlName="interestRecognitionOnDisbursementDate">
<mat-checkbox class="flex-96" labelPosition="before" formControlName="interestRecognitionOnDisbursementDate">
{{ 'labels.inputs.Is interest recognition on disbursement date?' | translate }}
</mat-checkbox>
<h3 fxFlex="23%" class="mat-h3">{{ 'labels.inputs.Interest Rates' | translate }}</h3>
<h3 class="mat-h3 flex-23">{{ 'labels.inputs.Interest Rates' | translate }}</h3>
<mat-checkbox
[formControl]="zeroInterest"
fxFlex="23%"
class="flex-23"
labelPosition="before"
*ngIf="!loanProductTermsForm.value.isLinkedToFloatingInterestRates"
>
@@ -135,7 +141,7 @@
</mat-checkbox>
<mat-checkbox
fxFlex="32%"
class="flex-32"
labelPosition="before"
formControlName="isLinkedToFloatingInterestRates"
*ngIf="!isZeroInterest()"
@@ -145,12 +151,9 @@
<div
*ngIf="!loanProductTermsForm.value.isLinkedToFloatingInterestRates"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Nominal interest rate' | translate }}
<i
class="fas fa-question"
@@ -160,7 +163,7 @@
></i>
</h4>
<mat-form-field fxFlex="23%">
<mat-form-field class="flex-fill flex-23">
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
<input
type="number"
@@ -175,7 +178,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-form-field class="flex-fill flex-23">
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
<input
type="number"
@@ -190,7 +193,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-form-field class="flex-fill flex-23">
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
<input
type="number"
@@ -207,7 +210,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="23%">
<mat-form-field class="flex-fill flex-23">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<mat-select formControlName="interestRateFrequencyType" required [disabled]="isZeroInterest()">
<mat-option
@@ -226,13 +229,9 @@
<div
*ngIf="loanProductTermsForm.value.isLinkedToFloatingInterestRates && !isZeroInterest()"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
fxLayoutAlign.gt-sm="start center"
class="flex-fill layout-row-wrap gap-2percent responsive-column align-gt-sm-start-center"
>
<h4 fxFlex="98%" class="mat-h4">
<h4 class="mat-h4 flex-98">
{{ 'labels.inputs.Floating Interest Rate' | translate }}
<i
class="fas fa-question"
@@ -242,7 +241,7 @@
></i>
</h4>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Floating Rate' | translate }}</mat-label>
<mat-select formControlName="floatingRatesId" required>
<mat-option *ngFor="let floatingRate of floatingRateData" [value]="floatingRate.id">
@@ -255,7 +254,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Differential Rate' | translate }}</mat-label>
<input type="number" matInput formControlName="interestRateDifferential" required />
<mat-error>
@@ -264,11 +263,11 @@
</mat-error>
</mat-form-field>
<mat-checkbox fxFlex="31%" labelPosition="before" formControlName="isFloatingInterestRateCalculationAllowed">
<mat-checkbox class="flex-31" labelPosition="before" formControlName="isFloatingInterestRateCalculationAllowed">
{{ 'labels.inputs.Is Floating calculation allowed?' | translate }}
</mat-checkbox>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Minimum' | translate }}</mat-label>
<input type="number" matInput formControlName="minDifferentialLendingRate" [min]="0" required />
<mat-error>
@@ -277,7 +276,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Default' | translate }}</mat-label>
<input type="number" matInput formControlName="defaultDifferentialLendingRate" required />
<mat-error>
@@ -286,7 +285,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="31%">
<mat-form-field class="flex-31">
<mat-label>{{ 'labels.inputs.Maximum' | translate }}</mat-label>
<input type="number" matInput formControlName="maxDifferentialLendingRate" required />
<mat-error>
@@ -296,24 +295,21 @@
</mat-form-field>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h3 fxFlex="23%" class="mat-h3">{{ 'labels.inputs.Variations' | translate }}</h3>
<h3 class="mat-h3 flex-23">{{ 'labels.inputs.Variations' | translate }}</h3>
<mat-checkbox fxFlex="73%" labelPosition="before" formControlName="useBorrowerCycle">
<mat-checkbox class="flex-73" labelPosition="before" formControlName="useBorrowerCycle">
{{ 'labels.inputs.Terms vary based on loan cycle' | translate }}
</mat-checkbox>
<div
*ngIf="loanProductTermsForm.value.useBorrowerCycle"
fxFlexFill
fxLayout="row wrap"
fxLayoutGap="2%"
fxLayout.lt-md="column"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
>
<h4 fxFlex="73%" class="mat-h4">{{ 'labels.inputs.Principal by loan cycle' | translate }}</h4>
<h4 class="mat-h4 flex-73">{{ 'labels.inputs.Principal by loan cycle' | translate }}</h4>
<div fxFlex="23%">
<div class="flex-23">
<button
type="button"
mat-raised-button
@@ -326,8 +322,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="principalVariationsForBorrowerCycle.value"
*ngIf="principalVariationsForBorrowerCycle.value.length"
@@ -391,9 +386,9 @@
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<h4 fxFlex="73%" class="mat-h4">{{ 'labels.inputs.Number of repayments by loan cycle' | translate }}</h4>
<h4 class="mat-h4 flex-73">{{ 'labels.inputs.Number of repayments by loan cycle' | translate }}</h4>
<div fxFlex="23%">
<div class="flex-23">
<button
type="button"
mat-raised-button
@@ -406,8 +401,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="numberOfRepaymentVariationsForBorrowerCycle.value"
*ngIf="numberOfRepaymentVariationsForBorrowerCycle.value.length"
@@ -473,9 +467,9 @@
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
<h4 fxFlex="73%" class="mat-h4">{{ 'labels.inputs.Nominal interest rate by loan cycle' | translate }}</h4>
<h4 class="mat-h4 flex-73">{{ 'labels.inputs.Nominal interest rate by loan cycle' | translate }}</h4>
<div fxFlex="23%">
<div class="flex-23">
<button
type="button"
mat-raised-button
@@ -488,8 +482,7 @@
</div>
<table
fxFlex="98%"
class="mat-elevation-z1"
class="flex-98 mat-elevation-z1"
mat-table
[dataSource]="interestRateVariationsForBorrowerCycle.value"
*ngIf="interestRateVariationsForBorrowerCycle.value.length"
@@ -554,9 +547,9 @@
</table>
</div>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider class="flex-98"></mat-divider>
<h4 fxFlex="33%" class="mat-h4">
<h4 class="mat-h4 flex-33">
{{ 'labels.inputs.Repaid every' | translate }}
<i
class="fas fa-question"
@@ -564,7 +557,7 @@
></i>
</h4>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Frequency' | translate }}</mat-label>
<input type="number" matInput formControlName="repaymentEvery" required />
<mat-error>
@@ -573,7 +566,7 @@
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="30%">
<mat-form-field class="flex-30">
<mat-label>{{ 'labels.inputs.Frequency Type' | translate }}</mat-label>
<mat-select formControlName="repaymentFrequencyType" required>
<mat-option
@@ -589,7 +582,7 @@
</mat-error>
</mat-form-field>
<h4 fxFlex="33%" class="mat-h4" *ngIf="allowFixedLength()">
<h4 class="mat-h4 flex-30" *ngIf="allowFixedLength()">
{{ 'labels.inputs.Fixed Length' | translate }}
<i
class="fas fa-question"
@@ -597,23 +590,23 @@
></i>
</h4>
<mat-form-field fxFlex="30%" *ngIf="allowFixedLength()">
<mat-form-field class="flex-30" *ngIf="allowFixedLength()">
<mat-label>{{ 'labels.inputs.Fixed Length' | translate }}</mat-label>
<input type="number" matInput formControlName="fixedLength" />
</mat-form-field>
<span fxFlex="30%" *ngIf="allowFixedLength()" class="label-field">{{
<span *ngIf="allowFixedLength()" class="label-field flex-30">{{
loanProductTermsForm.value.repaymentFrequencyType
| find: repaymentFrequencyTypeData : 'id' : 'value'
| translateKey: 'catalogs'
}}</span>
<mat-form-field fxFlex="48%">
<mat-form-field class="flex-48">
<mat-label>{{ 'labels.inputs.Minimum days between disbursal and first repayment date' | translate }}</mat-label>
<input type="number" matInput formControlName="minimumDaysBetweenDisbursalAndFirstRepayment" />
</mat-form-field>
</div>
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* Loan Product data resolver.
*/
@Injectable()
export class LoanProductResolver implements Resolve<Object> {
export class LoanProductResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -9,7 +8,7 @@ import { Observable } from 'rxjs';
import { ProductsService } from '../products.service';
@Injectable()
export class LoanProductsTemplateResolver implements Resolve<Object> {
export class LoanProductsTemplateResolver {
constructor(private productsService: ProductsService) {}
/**
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<div #buttonCreateLoanProduct class="in-block">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_LOANPRODUCT'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
@@ -8,8 +8,8 @@
</div>
<div class="container">
<div #filter fxLayout="row">
<mat-form-field fxFlex>
<div #filter class="layout-row">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -61,7 +61,7 @@
<ng-template #templateButtonCreateLoanProduct let-popover="popover">
<h2>{{ 'labels.heading.Create loan product' | translate }}</h2>
<p class="mw300">{{ 'labels.text.This option allows you to create new loan product.' | translate }}</p>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -80,7 +80,7 @@
<ng-template #templateFilter let-popover="popover">
<h4>{{ 'labels.heading.Search bar to filter loan products.' | translate }}</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -108,7 +108,7 @@
'labels.heading.Loan Products' | translate
}}</a>
</h4>
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row align-end gap-2px responsive-column">
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
{{ 'labels.buttons.Close' | translate }}
</button>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Loan products data resolver.
*/
@Injectable()
export class LoanProductsResolver implements Resolve<Object> {
export class LoanProductsResolver {
/**
*
* @param {ProductsService} productsService Products service.
@@ -1,4 +1,4 @@
<div fxLayout="row" fxLayoutAlign="end" fxLayoutGap="2%" fxLayout.lt-md="column" class="container m-b-20">
<div class="layout-row align-end gap-2px responsive-column container m-b-20 m-t-10">
<!--
<button mat-raised-button color="primary" *mifosxHasPermission="'UPDATE_LOANPRODUCT'" (click)="copyProduct()">
<fa-icon icon="copy" class="m-r-10"></fa-icon>{{'labels.buttons.Create' | translate}} {{'labels.text.Copy' | translate}}
@@ -1,24 +1,24 @@
<mat-expansion-panel *ngIf="paymentAllocation">
<mat-expansion-panel-header>
<mat-panel-title>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Transaction Type' | translate }}:</span>
<span fxFlex="60%">{{ transactionTypeValue(paymentAllocation.transactionType) }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Transaction Type' | translate }}:</span>
<span class="flex-60">{{ transactionTypeValue(paymentAllocation.transactionType) }}</span>
</div>
</mat-panel-title>
</mat-expansion-panel-header>
<div fxFlexFill>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Future Installment Allocation Rule' | translate }}:</span>
<span fxFlex="60%">{{
<div class="flex-fill">
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Future Installment Allocation Rule' | translate }}:</span>
<span class="flex-60">{{
futureInstallmentRuleValue(paymentAllocation.futureInstallmentAllocationRule) | translateKey: 'catalogs'
}}</span>
</div>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Payment Allocation Order' | translate }}</span>
<span fxFlex="60%">
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Payment Allocation Order' | translate }}</span>
<span class="flex-60">
<table>
<thead>
<tr>
@@ -40,17 +40,17 @@
<mat-expansion-panel *ngIf="creditAllocation">
<mat-expansion-panel-header>
<mat-panel-title>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Transaction Type' | translate }}:</span>
<span fxFlex="60%">{{ transactionTypeValue(creditAllocation.transactionType) }}</span>
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Transaction Type' | translate }}:</span>
<span class="flex-60">{{ transactionTypeValue(creditAllocation.transactionType) }}</span>
</div>
</mat-panel-title>
</mat-expansion-panel-header>
<div fxFlexFill>
<div fxFlexFill>
<span fxFlex="40%">{{ 'labels.inputs.Credit Allocation Order' | translate }}</span>
<span fxFlex="60%">
<div class="flex-fill">
<div class="flex-fill">
<span class="flex-40">{{ 'labels.inputs.Credit Allocation Order' | translate }}</span>
<span class="flex-60">
<table>
<thead>
<tr>
@@ -1,6 +1,6 @@
<mat-card class="product-card">
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs">
<nav mat-tab-nav-bar class="navigation-tabs" [tabPanel]="tabPanel">
<a
mat-tab-link
[routerLink]="['./general']"
@@ -24,6 +24,8 @@
</ng-container>
</nav>
<router-outlet></router-outlet>
<mat-tab-nav-panel #tabPanel>
<router-outlet></router-outlet>
</mat-tab-nav-panel>
</mat-card-content>
</mat-card>
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="bucketForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="100%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-100">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="bucketForm.controls.name.hasError('required')">
@@ -12,9 +12,9 @@
</mat-error>
</mat-form-field>
<h3 fxFlex="40%" class="mat-h3">{{ 'labels.heading.Delinquency Ranges' | translate }}</h3>
<h3 class="mat-h3 flex-40">{{ 'labels.heading.Delinquency Ranges' | translate }}</h3>
<div fxFlex="40%" fxLayout="row" fxLayoutAlign="start center">
<div class="flex-40 layout-row align-start-center">
<button type="button" mat-raised-button color="primary" (click)="addDelinquencyRange()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
@@ -65,7 +65,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button
mat-raised-button
color="primary"
@@ -11,8 +11,8 @@
</div>
<div class="container">
<div fxLayout="row">
<mat-form-field fxFlex>
<div class="layout-row">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../../products.service';
* Delinquency Bucket Component data resolver.
*/
@Injectable()
export class DelinquencyBucketComponentsResolver implements Resolve<Object> {
export class DelinquencyBucketComponentsResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="bucketForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="100%">
<div class="layout-row-wrap gap-2px responsive-column">
<mat-form-field class="flex-100">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="bucketForm.controls.name.hasError('required')">
@@ -12,9 +12,9 @@
</mat-error>
</mat-form-field>
<h3 fxFlex="40%" class="mat-h3">{{ 'labels.heading.Delinquency Ranges' | translate }}</h3>
<h3 class="mat-h3 flex-40">{{ 'labels.heading.Delinquency Ranges' | translate }}</h3>
<div fxFlex="40%" fxLayout="row" fxLayoutAlign="start center">
<div class="flex-40 layout-row align-start-center">
<button type="button" mat-raised-button color="primary" (click)="addDelinquencyRange()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
@@ -68,7 +68,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayout.lt-md="column" fxLayoutAlign="end" fxLayoutGap="2%">
<div class="container m-b-20 layout-row layout-lt-md-column align-end gap-2percent">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_DELINQUENCY_BUCKET'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -17,38 +17,41 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="flex-100 layout-row m-b-10">
<div class="flex-30 mat-body-strong">
{{ 'labels.inputs.Name' | translate }}
</div>
<div class="flex-70">
{{ delinquencyBucketData.name }}
</div>
</div>
<div class="flex-60 mat-body-strong">
{{ 'labels.inputs.Classification' | translate }}
{{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="50%">
{{ delinquencyBucketData.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
{{ 'labels.inputs.Classification' | translate }} {{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="25%" class="mat-body-strong">
<div class="mat-body-strong flex-20">
{{ 'labels.inputs.Days From' | translate }}
</div>
<div fxFlex="25%" class="mat-body-strong">
<div class="mat-body-strong flex-20">
{{ 'labels.inputs.Days Till' | translate }}
</div>
</div>
<div fxLayout="row wrap" class="content" *ngFor="let range of delinquencyBucketData.ranges">
<div fxFlex="50%">
<div class="layout-row-wrap bucket-range" *ngFor="let range of delinquencyBucketData.ranges">
<div class="flex-60">
{{ range.classification }}
</div>
<div fxFlex="25%">
<div class="flex-20 r-value">
{{ range.minimumAgeDays }}
</div>
<div fxFlex="25%">
<div class="flex-20 r-value">
{{ range.maximumAgeDays }}
</div>
</div>
@@ -8,3 +8,15 @@
}
}
}
.bucket-range {
height: 2rem;
vertical-align: middle;
}
.r-value {
margin: 0 !important;
padding: 0 !important;
text-align: right !important;
padding-right: 35px !important;
}
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="delinquencyRangeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Classification' | translate }}</mat-label>
<input matInput required formControlName="classification" />
@@ -28,7 +28,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_DELINQUENCY_RANGE'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.text.Create Delinquency Range' | translate }}
@@ -6,8 +6,8 @@
</div>
<div class="container">
<div fxLayout="row">
<mat-form-field fxFlex>
<div class="layout-row">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../../products.service';
* Delinquency Range Component data resolver.
*/
@Injectable()
export class DelinquencyRangeComponentsResolver implements Resolve<Object> {
export class DelinquencyRangeComponentsResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="delinquencyRangeForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Classification' | translate }}</mat-label>
<input matInput required formControlName="classification" />
@@ -28,7 +28,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayout.lt-md="column" fxLayoutAlign="end" fxLayoutGap="2%">
<div class="container m-b-20 layout-row layout-lt-md-column align-end gap-2percent">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_DELINQUENCY_RANGE'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -17,28 +17,28 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Classification' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ delinquencyRangeData.classification }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Days From' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ delinquencyRangeData.minimumAgeDays }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Days Till' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ delinquencyRangeData.maximumAgeDays }}
</div>
</div>
@@ -1,7 +1,7 @@
<div class="container">
<mat-card>
<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px">
<div fxFlex="50%">
<div class="layout-row responsive-column gap-20px">
<div class="flex-50">
<mat-nav-list>
<mat-list-item [routerLink]="['ranges']" *mifosxHasPermission="'READ_DELINQUENCY_RANGE'">
<mat-icon matListIcon [routerLink]="['ranges']">
@@ -27,7 +27,7 @@
</mat-nav-list>
</div>
<div fxFlex="50%">
<div class="flex-50">
<mat-nav-list>
<mat-list-item [routerLink]="['buckets']" *mifosxHasPermission="'READ_DELINQUENCY_BUCKET'">
<mat-icon matListIcon [routerLink]="['buckets']">
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="taxComponentForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
@@ -86,7 +86,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="taxComponentForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
@@ -51,7 +51,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TAXCOMPONENT'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Tax Component' | translate }}
@@ -6,8 +6,8 @@
</div>
<div class="container">
<div fxLayout="row">
<mat-form-field fxFlex>
<div class="layout-row">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Manage Tax Component data resolver.
*/
@Injectable()
export class ManageTaxComponentsResolver implements Resolve<Object> {
export class ManageTaxComponentsResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Tax Component template data resolver.
*/
@Injectable()
export class TaxComponentTemplateResolver implements Resolve<Object> {
export class TaxComponentTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* tax Component data resolver.
*/
@Injectable()
export class TaxComponentResolver implements Resolve<Object> {
export class TaxComponentResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayout.lt-md="column" fxLayoutAlign="end" fxLayoutGap="2%">
<div class="container m-b-20 layout-row layout-lt-md-column align-end gap-2percent">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_TAXCOMPONENT'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -8,65 +8,66 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="50%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ taxComponentData.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Percentage' | translate }}
</div>
<div fxFlex="50%">{{ taxComponentData.percentage | formatNumber }} %</div>
<div class="flex-50">{{ taxComponentData.percentage | formatNumber }} %</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="taxComponentData.debitAccountType">
<div class="flex-50 mat-body-strong" *ngIf="taxComponentData.debitAccountType">
{{ 'labels.inputs.Debit Account Type' | translate }}
</div>
<div fxFlex="50%" *ngIf="taxComponentData.debitAccountType">
<div class="flex-50" *ngIf="taxComponentData.debitAccountType">
{{ taxComponentData.debitAccountType.value }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="taxComponentData.debitAccount">
<div class="flex-50 mat-body-strong" *ngIf="taxComponentData.debitAccount">
{{ 'labels.inputs.Debit Account' | translate }}
</div>
<div fxFlex="50%" *ngIf="taxComponentData.debitAccount">
<div class="flex-50" *ngIf="taxComponentData.debitAccount">
({{ 'labels.inputs.accounting.' + taxComponentData.debitAccount.glCode }})
{{ taxComponentData.debitAccount.name | translate }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="taxComponentData.creditAccountType">
<div class="flex-50 mat-body-strong" *ngIf="taxComponentData.creditAccountType">
{{ 'labels.inputs.Credit Account Type' | translate }}
</div>
<div fxFlex="50%" *ngIf="taxComponentData.creditAccountType">
<div class="flex-50" *ngIf="taxComponentData.creditAccountType">
{{ taxComponentData.creditAccountType.value | translateKey: 'catalogs' }}
</div>
<div fxFlex="50%" class="mat-body-strong" *ngIf="taxComponentData.creditAccount">
<div class="flex-50 mat-body-strong" *ngIf="taxComponentData.creditAccount">
{{ 'labels.inputs.Credit Account' | translate }}
</div>
<div fxFlex="50%" *ngIf="taxComponentData.creditAccount">
({{ taxComponentData.creditAccount.glCode }}) {{ taxComponentData.creditAccount.name }}
<div class="flex-50" *ngIf="taxComponentData.creditAccount">
({{ taxComponentData.creditAccount.glCode }})
{{ taxComponentData.creditAccount.name }}
</div>
<div fxFlex="50%" class="mat-body-strong">
<div class="flex-50 mat-body-strong">
{{ 'labels.inputs.Start Date' | translate }}
</div>
<div fxFlex="50%">
<div class="flex-50">
{{ taxComponentData.startDate | dateFormat }}
</div>
</div>
</mat-card-content>
<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="2%" fxLayout.lt-md="column">
<div class="layout-row layout-align-center gap-2percent layout-lt-md-column">
<button type="button" color="primary" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Back' | translate }}
</button>
@@ -1,7 +1,7 @@
<div class="container">
<mat-card>
<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px">
<div fxFlex="50%">
<div class="layout-row responsive-column gap-20px">
<div class="flex-50">
<mat-nav-list>
<mat-list-item [routerLink]="['tax-components']" *mifosxHasPermission="'READ_TAXCOMPONENT'">
<mat-icon matListIcon [routerLink]="['tax-components']">
@@ -27,7 +27,7 @@
</mat-nav-list>
</div>
<div fxFlex="50%">
<div class="flex-50">
<mat-nav-list>
<mat-list-item [routerLink]="['tax-groups']" *mifosxHasPermission="'READ_TAXGROUP'">
<mat-icon matListIcon [routerLink]="['tax-groups']">
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="taxGroupForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="100%">
<div class="layout-row-wrap custom-gap responsive-column">
<mat-form-field class="flex-fill flex-100">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="taxGroupForm.controls.name.hasError('required')">
@@ -12,9 +12,9 @@
</mat-error>
</mat-form-field>
<h3 fxFlex="40%" class="mat-h3">{{ 'labels.inputs.Tax Components' | translate }}</h3>
<h3 class="mat-h3 flex-40">{{ 'labels.inputs.Tax Components' | translate }}</h3>
<div fxFlex="40%" fxLayout="row" fxLayoutAlign="start center">
<div class="flex-40 layout-row align-start-center">
<button type="button" mat-raised-button color="primary" (click)="addTaxGroup()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
@@ -63,7 +63,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../../products.service';
* Tax Group template data resolver.
*/
@Injectable()
export class ManageTaxGroupTemplateResolver implements Resolve<Object> {
export class ManageTaxGroupTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -2,8 +2,8 @@
<mat-card>
<form [formGroup]="taxGroupForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column">
<mat-form-field fxFlex="100%">
<div class="layout-row-wrap custom-gap responsive-column">
<mat-form-field class="flex-fill flex-100">
<mat-label>{{ 'labels.inputs.Name' | translate }}</mat-label>
<input matInput required formControlName="name" />
<mat-error *ngIf="taxGroupForm.controls.name.hasError('required')">
@@ -12,9 +12,8 @@
</mat-error>
</mat-form-field>
<h3 fxFlex="40%" class="mat-h3">{{ 'labels.inputs.Tax Components' | translate }}</h3>
<div fxFlex="40%" fxLayout="row" fxLayoutAlign="start center">
<h3 class="mat-h3 flex-40">{{ 'labels.inputs.Tax Components' | translate }}</h3>
<div class="flex-40 layout-row align-start-center">
<button type="button" mat-raised-button color="primary" (click)="addTaxGroup()">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Add' | translate }}
@@ -72,7 +71,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../../products.service';
* tax Group data resolver.
*/
@Injectable()
export class EditTaxGroupResolver implements Resolve<Object> {
export class EditTaxGroupResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayoutAlign="end" fxLayoutGap="20px">
<div class="container m-b-20 layout-row align-end gap-20px">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TAXGROUP'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Create Tax Groups' | translate }}
@@ -6,8 +6,8 @@
</div>
<div class="container">
<div fxLayout="row">
<mat-form-field fxFlex>
<div class="layout-row">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Manage Tax Groups data resolver.
*/
@Injectable()
export class ManageTaxGroupsResolver implements Resolve<Object> {
export class ManageTaxGroupsResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,6 +1,6 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { ActivatedRouteSnapshot } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +12,7 @@ import { ProductsService } from '../products.service';
* tax Group data resolver.
*/
@Injectable()
export class TaxGroupResolver implements Resolve<Object> {
export class TaxGroupResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,4 +1,4 @@
<div class="container m-b-20" fxLayout="row" fxLayout.lt-md="column" fxLayoutAlign="end" fxLayoutGap="2%">
<div class="container m-b-20 layout-row layout-lt-md-column align-end gap-2percent">
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_TAXGROUP'">
<fa-icon icon="edit" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Edit' | translate }}
@@ -8,38 +8,39 @@
<div class="container">
<mat-card>
<mat-card-content>
<div fxLayout="row wrap" class="content">
<div fxFlex="33%" class="mat-body-strong">
<div class="layout-row-wrap">
<div class="mat-body-strong flex-33">
{{ 'labels.inputs.Name' | translate }}
</div>
<div fxFlex="67%">
<div class="flex-67">
{{ taxGroupData.name }}
</div>
<div fxFlex="34%" class="mat-body-strong">
<div class="mat-body-strong flex-34">
{{ 'labels.inputs.Tax Component' | translate }}
</div>
<div fxFlex="33%" class="mat-body-strong">
<div class="mat-body-strong flex-33">
{{ 'labels.inputs.Start Date' | translate }}
</div>
<div fxFlex="33%" class="mat-body-strong">
<div class="mat-body-strong flex-33">
{{ 'labels.inputs.End Date' | translate }}
</div>
</div>
<div fxLayout="row wrap" class="content" *ngFor="let taxcomponent of taxGroupData.taxAssociations">
<div fxFlex="34%">
<div class="layout-row-wrap" *ngFor="let taxcomponent of taxGroupData.taxAssociations">
<div class="flex-34">
{{ taxcomponent.taxComponent.glCode }}
{{ taxcomponent.taxComponent.name }}
</div>
<div fxFlex="33%">
<div class="flex-33">
{{ taxcomponent.startDate | dateFormat }}
</div>
<div fxFlex="33%" *ngIf="taxcomponent.endDate !== undefined || taxcomponent.endDate !== null">
<div class="flex-33" *ngIf="taxcomponent.endDate !== undefined || taxcomponent.endDate !== null">
{{ taxcomponent.endDate | dateFormat }}
</div>
</div>
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="productMixForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Product' | translate }}</mat-label>
<mat-select required formControlName="productId">
@@ -31,7 +31,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -2,7 +2,7 @@
<mat-card>
<form [formGroup]="productMixForm" (ngSubmit)="submit()">
<mat-card-content>
<div fxLayout="column">
<div class="layout-column">
<mat-form-field>
<mat-label>{{ 'labels.inputs.Product' | translate }}</mat-label>
<input matInput formControlName="productId" />
@@ -23,7 +23,7 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<mat-card-actions class="layout-row align-center gap-5px responsive-column">
<button type="button" mat-raised-button [routerLink]="['../']">
{{ 'labels.buttons.Cancel' | translate }}
</button>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Products mix template data resolver.
*/
@Injectable()
export class ProductsMixTemplateResolver implements Resolve<Object> {
export class ProductsMixTemplateResolver {
/**
* @param {ProductsService} productsService Products service.
*/
@@ -1,12 +1,12 @@
<div fxLayout="row" fxLayoutAlign="end" class="container m-b-20">
<div class="layout-row align-end container m-b-20">
<button mat-raised-button color="primary" [routerLink]="['create']" *mifosxHasPermission="'CREATE_PRODUCTMIX'">
<fa-icon icon="plus" class="m-r-10"></fa-icon>{{ 'labels.buttons.Add' | translate }}
</button>
</div>
<div class="container">
<div fxLayout="row" fxLayoutGap="20px">
<mat-form-field fxFlex>
<div class="layout-row gap-20px">
<mat-form-field class="flex-fill">
<mat-label>{{ 'labels.inputs.Filter' | translate }}</mat-label>
<input matInput (keyup)="applyFilter($event.target.value)" />
</mat-form-field>
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
/** rxjs Imports */
import { Observable } from 'rxjs';
@@ -12,7 +11,7 @@ import { ProductsService } from '../products.service';
* Products Mix data resolver.
*/
@Injectable()
export class ProductsMixResolver implements Resolve<Object> {
export class ProductsMixResolver {
/**
* @param {ProductsService} productsService Products service.
*/

Some files were not shown because too many files have changed in this diff Show More