diff --git a/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.html b/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.html
index 31477090f2..20d05bc265 100644
--- a/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.html
+++ b/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.html
@@ -73,6 +73,7 @@
{{ 'labels.inputs.Repayments' | translate }}
matInput
formControlName="numberOfRepayments"
matTooltip="{{ 'tooltips.Enter the total count of repayments' | translate }}"
+ min="0"
/>
@if (loansAccountTermsForm.controls.numberOfRepayments.hasError('required')) {
@@ -133,6 +134,7 @@
required
formControlName="repaymentEvery"
matTooltip="{{ 'tooltips.Fields are input to calculating the repayment schedule' | translate }}"
+ min="0"
/>
@if (loansAccountTermsForm.controls.repaymentEvery.hasError('required')) {
@@ -198,7 +200,7 @@ {{ 'labels.inputs.Nominal interest rate' | translate
@if (!loansAccountTermsData?.isLoanProductLinkedToFloatingRate) {
{{ 'labels.inputs.Nominal interest rate' | translate }} %
-
+
{{ 'labels.inputs.Frequency' | translate }}
@@ -375,6 +377,7 @@ {{ 'labels.heading.Interest Calculations' | translate
type="number"
formControlName="inArrearsTolerance"
matTooltip="{{ 'tooltips.With Arrears tolerance' | translate }}"
+ min="0"
/>
@@ -384,6 +387,7 @@ {{ 'labels.heading.Interest Calculations' | translate
matInput
formControlName="graceOnInterestCharged"
matTooltip="{{ 'tooltips.If the Interest Free Period' | translate }}"
+ min="0"
/>
@@ -394,17 +398,17 @@
{{ 'labels.inputs.Grace on principal payment' | translate }}
-
+
{{ 'labels.inputs.Grace on interest payment' | translate }}
-
+
{{ 'labels.inputs.On arrears ageing' | translate }}
-
+
@if (isDelinquencyEnabled()) {
diff --git a/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.ts b/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.ts
index 5c3985394a..8f324c92d5 100644
--- a/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.ts
+++ b/src/app/loans/loans-account-stepper/loans-account-terms-step/loans-account-terms-step.component.ts
@@ -497,11 +497,17 @@ export class LoansAccountTermsStepComponent extends LoanProductBaseComponent imp
],
numberOfRepayments: [
'',
- Validators.required
+ [
+ Validators.required,
+ Validators.min(0)
+ ]
],
repaymentEvery: [
'',
- Validators.required
+ [
+ Validators.required,
+ Validators.min(0)
+ ]
],
repaymentFrequencyType: [
{ value: '', disabled: true },
@@ -511,7 +517,10 @@ export class LoansAccountTermsStepComponent extends LoanProductBaseComponent imp
repaymentFrequencyDayOfWeekType: [''],
repaymentsStartingFromDate: [''],
interestChargedFromDate: [''],
- interestRatePerPeriod: [''],
+ interestRatePerPeriod: [
+ '',
+ Validators.min(0)
+ ],
interestType: [''],
isFloatingInterestRate: [null],
isEqualAmortization: [''],
@@ -521,11 +530,26 @@ export class LoansAccountTermsStepComponent extends LoanProductBaseComponent imp
],
interestCalculationPeriodType: [''],
allowPartialPeriodInterestCalculation: [''],
- inArrearsTolerance: [''],
- graceOnInterestCharged: [''],
- graceOnPrincipalPayment: [''],
- graceOnInterestPayment: [''],
- graceOnArrearsAgeing: [''],
+ inArrearsTolerance: [
+ '',
+ Validators.min(0)
+ ],
+ graceOnInterestCharged: [
+ '',
+ Validators.min(0)
+ ],
+ graceOnPrincipalPayment: [
+ '',
+ Validators.min(0)
+ ],
+ graceOnInterestPayment: [
+ '',
+ Validators.min(0)
+ ],
+ graceOnArrearsAgeing: [
+ '',
+ Validators.min(0)
+ ],
loanIdToClose: [''],
fixedEmiAmount: [''],
isTopup: [''],
diff --git a/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.html b/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.html
index 2f6b979856..de29c1aebf 100644
--- a/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.html
+++ b/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.html
@@ -20,7 +20,7 @@
{{ 'labels.inputs.Nominal Annual Interest' | translate }}
-
+
{{ 'labels.inputs.Nominal Annual Interest' | translate }} {{ 'labels.commons.is' | translate }}
{{ 'labels.commons.required' | translate }}
@@ -92,7 +92,7 @@
{{ 'labels.inputs.Minimum Opening Balance' | translate }}
-
+
@@ -103,7 +103,7 @@ {{ 'labels.inputs.Lock-in Period' | translate }}
{{ 'labels.inputs.Frequency' | translate }}
-
+
@@ -129,15 +129,15 @@ {{ 'labels.inputs.Overdraft' | translate }}
{{ 'labels.inputs.Minimum Overdraft Required for Interest Calculation' | translate }}
-
+
{{ 'labels.inputs.Nominal Annual Interest for Overdraft' | translate }}
-
+
{{ 'labels.inputs.Maximum Overdraft Amount Limit' | translate }}
-
+
}
@@ -150,13 +150,13 @@ {{ 'labels.inputs.Overdraft' | translate }}
{{ 'labels.inputs.Minimum Balance' | translate }}
-
+
@if (savingsAccountTermsForm.controls.minBalanceForInterestCalculation.value) {
{{ 'labels.inputs.Balance Required for Interest Calculation' | translate }}
-
+
}
diff --git a/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.ts b/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.ts
index 0f0ba813f3..a7d320483c 100644
--- a/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.ts
+++ b/src/app/savings/savings-account-stepper/savings-account-terms-step/savings-account-terms-step.component.ts
@@ -128,7 +128,10 @@ export class SavingsAccountTermsStepComponent implements OnChanges, OnInit {
decimal: [{ value: '', disabled: true }],
nominalAnnualInterestRate: [
'',
- Validators.required
+ [
+ Validators.required,
+ Validators.min(0)
+ ]
],
interestCompoundingPeriodType: [
'',
@@ -146,13 +149,22 @@ export class SavingsAccountTermsStepComponent implements OnChanges, OnInit {
'',
Validators.required
],
- minRequiredOpeningBalance: [''],
+ minRequiredOpeningBalance: [
+ '',
+ Validators.min(0)
+ ],
withdrawalFeeForTransfers: [false],
- lockinPeriodFrequency: [''],
+ lockinPeriodFrequency: [
+ '',
+ Validators.min(0)
+ ],
lockinPeriodFrequencyType: [''],
allowOverdraft: [false],
enforceMinRequiredBalance: [false],
- minRequiredBalance: [''],
+ minRequiredBalance: [
+ '',
+ Validators.min(0)
+ ],
minBalanceForInterestCalculation: [{ value: '', disabled: true }]
});
}
@@ -175,9 +187,15 @@ export class SavingsAccountTermsStepComponent implements OnChanges, OnInit {
buildDependencies() {
this.savingsAccountTermsForm.get('allowOverdraft').valueChanges.subscribe((allowOverdraft: any) => {
if (allowOverdraft) {
- this.savingsAccountTermsForm.addControl('minOverdraftForInterestCalculation', new UntypedFormControl(''));
- this.savingsAccountTermsForm.addControl('nominalAnnualInterestRateOverdraft', new UntypedFormControl(''));
- this.savingsAccountTermsForm.addControl('overdraftLimit', new UntypedFormControl(''));
+ this.savingsAccountTermsForm.addControl(
+ 'minOverdraftForInterestCalculation',
+ new UntypedFormControl('', Validators.min(0))
+ );
+ this.savingsAccountTermsForm.addControl(
+ 'nominalAnnualInterestRateOverdraft',
+ new UntypedFormControl('', Validators.min(0))
+ );
+ this.savingsAccountTermsForm.addControl('overdraftLimit', new UntypedFormControl('', Validators.min(0)));
} else {
this.savingsAccountTermsForm.removeControl('minOverdraftForInterestCalculation');
this.savingsAccountTermsForm.removeControl('nominalAnnualInterestRateOverdraft');