diff --git a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html index d6e4ddc07..48caed1c6 100644 --- a/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html +++ b/src/app/products/loan-products/common/loan-product-summary/loan-product-summary.component.html @@ -440,7 +440,7 @@ } @if (loanProduct.inArrearsTolerance) {
- {{ 'labels.inputs.Arrears tolerance' | translate }}: + Allowed pending EMI amount: {{ loanProduct.inArrearsTolerance }}
} @@ -720,7 +720,7 @@ {{ loanProduct.allowAttributeOverrides.interestCalculationPeriodType | yesNo }}
- {{ 'labels.inputs.Arrears tolerance' | translate }}: + Allowed pending EMI amount: {{ loanProduct.allowAttributeOverrides.inArrearsTolerance | yesNo }}
diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts index 0c3861aa0..4b3880fd6 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-accounting-step/loan-product-accounting-step.component.ts @@ -203,7 +203,14 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { incomeFromGoodwillCreditPenaltyAccountId: accountingMappings.incomeFromGoodwillCreditPenaltyAccount?.id || '', receivableInterestAccountId: accountingMappings.receivableInterestAccount?.id || '', receivableFeeAccountId: accountingMappings.receivableFeeAccount?.id || '', - receivablePenaltyAccountId: accountingMappings.receivablePenaltyAccount?.id || '' + receivablePenaltyAccountId: accountingMappings.receivablePenaltyAccount?.id || '', + intReceivablesGlAccountId: accountingMappings.intReceivablesGlAccount?.id || '', + intPayableGlAccountId: accountingMappings.intPayableGlAccount?.id || '', + deafIntPayableGlAccountId: accountingMappings.deafIntPayableGlAccount?.id || '', + intOverdueReserveAccountId: accountingMappings.intOverdueReserveAccount?.id || '', + undebitedInterestAccountId: accountingMappings.undebitedInterestAccount?.id || '', + penalIntCrGlAccountId: accountingMappings.penalIntCrGlAccount?.id || '', + rdMaturedGlAccountId: accountingMappings.rdMaturedGlAccount?.id || '' }); if (this.loanProductsTemplate.paymentChannelToFundSourceMappings) { @@ -271,7 +278,14 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { 'incomeFromGoodwillCreditPenaltyAccountId', 'receivableInterestAccountId', 'receivableFeeAccountId', - 'receivablePenaltyAccountId' + 'receivablePenaltyAccountId', + 'intReceivablesGlAccountId', + 'intPayableGlAccountId', + 'deafIntPayableGlAccountId', + 'intOverdueReserveAccountId', + 'undebitedInterestAccountId', + 'penalIntCrGlAccountId', + 'rdMaturedGlAccountId' ]; commonFields.forEach((field) => { if (!this.loanProductAccountingForm.contains(field)) { @@ -690,6 +704,38 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { options: this.assetAccountData, required: true, accrualOnly: true + }, + { + key: 'intReceivablesGlAccountId', + label: 'Int. Receivables GL A/c', + inputLabel: 'Int. Receivables GL A/c', + controlName: 'intReceivablesGlAccountId', + options: this.assetAccountData, + required: false + }, + { + key: 'deafIntPayableGlAccountId', + label: 'Deaf Int. Payble GL A/c', + inputLabel: 'Deaf Int. Payble GL A/c', + controlName: 'deafIntPayableGlAccountId', + options: this.assetAccountData, + required: false + }, + { + key: 'intOverdueReserveAccountId', + label: 'Int. Overdue Reserve A/c (AS)', + inputLabel: 'Int. Overdue Reserve A/c', + controlName: 'intOverdueReserveAccountId', + options: this.assetAccountData, + required: false + }, + { + key: 'rdMaturedGlAccountId', + label: 'RD Matured GL A/c', + inputLabel: 'RD Matured GL A/c', + controlName: 'rdMaturedGlAccountId', + options: this.assetAccountData, + required: false } ], otherMappingsControlName: 'assetsOtherGlMappings', @@ -798,6 +844,14 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { options: this.incomeAccountData, required: true, deferredBuyDownOnly: true + }, + { + key: 'penalIntCrGlAccountId', + label: 'Penal Int. Cr. GL A/c', + inputLabel: 'Penal Int. Cr. GL A/c', + controlName: 'penalIntCrGlAccountId', + options: this.incomeAccountData, + required: false } ], otherMappingsControlName: 'incomeOtherGlMappings', @@ -876,6 +930,22 @@ export class LoanProductAccountingStepComponent implements OnInit, OnChanges { options: this.liabilityAccountData, required: true, deferredOnly: true + }, + { + key: 'intPayableGlAccountId', + label: 'Int. Payable GL A/c', + inputLabel: 'Int. Payable GL A/c', + controlName: 'intPayableGlAccountId', + options: this.liabilityAccountData, + required: false + }, + { + key: 'undebitedInterestAccountId', + label: 'UnDebited Interest A/c (LI)', + inputLabel: 'UnDebited Interest A/c', + controlName: 'undebitedInterestAccountId', + options: this.liabilityAccountData, + required: false } ], otherMappingsControlName: 'liabilitiesOtherGlMappings', diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.html b/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.html index 434640cec..49df9f6d2 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.html +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.html @@ -91,6 +91,67 @@
+ +
+
+ +

Interest Information

+
+
+ + Debit Int. Calculation + + @for (opt of yesNoOptions; track opt.value) { + {{ opt.label }} + } + + + + + Separate Penal Int. + + @for (opt of yesNoOptions; track opt.value) { + {{ opt.label }} + } + + + + + Credit Int. Calculation + + @for (opt of yesNoOptions; track opt.value) { + {{ opt.label }} + } + + + + + Sub A/c Type Balance + + @for (opt of yesNoOptions; track opt.value) { + {{ opt.label }} + } + + + + + Final Int. Rounding + + @for (opt of yesNoOptions; track opt.value) { + {{ opt.label }} + } + + + + @if (loanProductDetailsForm.get('finalIntRounding')?.value) { + + Rounding UpTo + + + } +
+
+
diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.ts index 68373a59d..ded56834c 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-details-step/loan-product-details-step.component.ts @@ -61,6 +61,15 @@ export class LoanProductDetailsStepComponent implements OnInit { const mappingOptions = this.loanProductsTemplate?.accountingMappingOptions ?? {}; this.assetAccountOptions = mappingOptions.assetAccountOptions ?? []; this.liabilityAccountOptions = mappingOptions.liabilityAccountOptions ?? []; + + this.loanProductDetailsForm.patchValue({ + debitIntCalculation: this.loanProductsTemplate.debitIntCalculation ?? false, + separatePenalInterest: this.loanProductsTemplate.separatePenalInterest ?? false, + creditIntCalculation: this.loanProductsTemplate.creditIntCalculation ?? false, + subAccountTypeBalance: this.loanProductsTemplate.subAccountTypeBalance ?? false, + finalIntRounding: this.loanProductsTemplate.finalIntRounding ?? false, + roundingUpTo: this.loanProductsTemplate.roundingUpTo ?? null + }); } /** Product Classification data */ @@ -121,6 +130,11 @@ export class LoanProductDetailsStepComponent implements OnInit { return this.productTypeGroups.find((g) => g.id === group)?.label ?? ''; } + readonly yesNoOptions = [ + { value: true, label: 'YES' }, + { value: false, label: 'NO' } + ]; + createLoanProductDetailsForm() { this.loanProductDetailsForm = this.formBuilder.group({ name: [ @@ -137,7 +151,13 @@ export class LoanProductDetailsStepComponent implements OnInit { productTypeGroup: [''], productTypeSubGroup: [''], glClassification: ['asset'], - glAccount: [''] + glAccount: [''], + debitIntCalculation: [false], + separatePenalInterest: [false], + creditIntCalculation: [false], + subAccountTypeBalance: [false], + finalIntRounding: [false], + roundingUpTo: [null] }); // Auto-set GL based on product type group diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.html b/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.html index 16658c103..5853a8895 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.html +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-settings-step/loan-product-settings-step.component.html @@ -163,7 +163,7 @@ - {{ 'labels.inputs.Arrears tolerance' | translate }} + Allowed pending EMI amount
- {{ 'labels.inputs.Arrears tolerance' | translate }} + Allowed pending EMI amount
diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.html b/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.html index abde9687b..6e765fbe3 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.html +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.html @@ -413,4 +413,37 @@
+ + +
+
+ +

Account Behaviour

+
+
+ + Debit Balance Allow + + YES + NO + + + + + Allow Debit Trans After Due Date + + YES + NO + + + + + Branch Level A/c Type + + YES + NO + + +
+
diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.ts b/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.ts index b2b0cd069..9e457b6d8 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.ts +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-terms-step/loan-product-terms-step.component.ts @@ -108,7 +108,10 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges { repaymentFrequencyType: this.loanProductsTemplate.repaymentFrequencyType.id, minimumDaysBetweenDisbursalAndFirstRepayment: this.loanProductsTemplate.minimumDaysBetweenDisbursalAndFirstRepayment, - repaymentStartDateType: this.loanProductsTemplate.repaymentStartDateType.id || 1 + repaymentStartDateType: this.loanProductsTemplate.repaymentStartDateType.id || 1, + debitBalanceAllow: this.loanProductsTemplate.debitBalanceAllow ?? false, + allowDebitTransAfterDueDate: this.loanProductsTemplate.allowDebitTransAfterDueDate ?? false, + branchLevelAccountType: this.loanProductsTemplate.branchLevelAccountType ?? false }); if (this.loanProductsTemplate.allowApprovedDisbursedAmountsOverApplied) { @@ -207,7 +210,10 @@ export class LoanProductTermsStepComponent implements OnInit, OnChanges { [] ], repaymentStartDateType: [1], - fixedLength: [null] + fixedLength: [null], + debitBalanceAllow: [false], + allowDebitTransAfterDueDate: [false], + branchLevelAccountType: [false] }); }