From 19cb457a1fb03e81ebb9de42b204858066e9adf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Alberto=20Hern=C3=A1ndez?= <44206706+josehernandezfintecheandomx@users.noreply.github.com> Date: Tue, 22 Aug 2023 10:08:21 -0600 Subject: [PATCH] Loan Product Repayment Start date configuration (#1846) Co-authored-by: Jose Alberto Hernandez --- .../transactions-tab.component.scss | 3 + .../transactions-tab.component.ts | 10 +- .../loan-product-preview-step.component.html | 229 ++++++++++++------ .../loan-product-terms-step.component.html | 37 ++- .../loan-product-terms-step.component.ts | 8 +- .../general-tab/general-tab.component.html | 5 + .../transaction-datatable.resolver.ts | 10 +- .../transaction-datatables.resolver.ts | 12 +- .../datatable-transaction-tab.component.ts | 3 +- .../view-transaction.component.ts | 4 +- src/app/savings/savings.service.ts | 2 +- src/assets/styles/_colours.scss | 1 + 12 files changed, 221 insertions(+), 103 deletions(-) diff --git a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss index eb3da1edc..c1b992f28 100644 --- a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss +++ b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.scss @@ -32,6 +32,9 @@ .accrual { color: $msg-default; } + .down-payment { + color: $status-downpayment; + } .chargeoff { color: $status-chargeoff; } diff --git a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts index 745213a1c..19573b9d9 100644 --- a/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts +++ b/src/app/loans/loans-view/transactions-tab/transactions-tab.component.ts @@ -109,9 +109,10 @@ export class TransactionsTabComponent implements OnInit { * PAYOUT_REFUND:22 * GOODWILL_CREDIT:23 * CHARGE_ADJUSTMENT:26 + * DOWN_PAYMENT:28 */ showTransactions(transactionsData: any) { - if ([1, 2, 4, 9, 20, 21, 22, 23, 26].includes(transactionsData.type.id)) { + if ([1, 2, 4, 9, 20, 21, 22, 23, 26, 28].includes(transactionsData.type.id)) { this.router.navigate([transactionsData.id], { relativeTo: this.route }); } } @@ -136,6 +137,9 @@ export class TransactionsTabComponent implements OnInit { if (this.isChargeOff(transaction.type)) { return 'chargeoff'; } + if (this.isDownPayment(transaction.type)) { + return 'down-payment'; + } return ''; } @@ -197,6 +201,10 @@ export class TransactionsTabComponent implements OnInit { return (transactionType.chargeoff || transactionType.code === 'loanTransactionType.chargeOff'); } + private isDownPayment(transactionType: any): boolean { + return (transactionType.downPayment || transactionType.code === 'loanTransactionType.downPayment'); + } + private reload() { const clientId = this.route.parent.parent.snapshot.params['clientId']; const loanId = this.route.parent.parent.snapshot.params['loanId']; diff --git a/src/app/products/loan-products/loan-product-stepper/loan-product-preview-step/loan-product-preview-step.component.html b/src/app/products/loan-products/loan-product-stepper/loan-product-preview-step/loan-product-preview-step.component.html index 00285a45f..7b480e6f1 100644 --- a/src/app/products/loan-products/loan-product-stepper/loan-product-preview-step/loan-product-preview-step.component.html +++ b/src/app/products/loan-products/loan-product-stepper/loan-product-preview-step/loan-product-preview-step.component.html @@ -68,7 +68,9 @@
Principal: - {{ loanProduct.principal + ' (Min: ' + (loanProduct.minPrincipal ? loanProduct.minPrincipal : loanProduct.principal) + ', Max: ' + (loanProduct.maxPrincipal ? loanProduct.maxPrincipal : loanProduct.principal) + ')' }} + {{ loanProduct.principal + ' (Min: ' + (loanProduct.minPrincipal ? loanProduct.minPrincipal : + loanProduct.principal) + ', Max: ' + (loanProduct.maxPrincipal ? loanProduct.maxPrincipal : loanProduct.principal) + + ')' }}
@@ -78,13 +80,23 @@
Over Applied: - {{ loanProduct.overAppliedNumber }} % - {{ loanProduct.overAppliedNumber }} {{ loanProduct.currencyCode }} -
+ {{ loanProduct.overAppliedNumber + }} % + {{ loanProduct.overAppliedNumber }} {{ + loanProduct.currencyCode }} +
+ +
+ Installment day calculation from: + {{ loanProduct.repaymentStartDateType }} +
Number of Repayments: - {{ loanProduct.numberOfRepayments + ' (Min: ' + (loanProduct.minNumberOfRepayments ? loanProduct.minNumberOfRepayments : loanProduct.numberOfRepayments) + ', Max: ' + (loanProduct.maxNumberOfRepayments ? loanProduct.maxNumberOfRepayments : loanProduct.numberOfRepayments) + ')' }} + {{ loanProduct.numberOfRepayments + ' (Min: ' + (loanProduct.minNumberOfRepayments ? + loanProduct.minNumberOfRepayments : loanProduct.numberOfRepayments) + ', Max: ' + + (loanProduct.maxNumberOfRepayments ? loanProduct.maxNumberOfRepayments : loanProduct.numberOfRepayments) + ')' + }}
@@ -94,18 +106,26 @@
Nominal interest rate: - {{ loanProduct.interestRatePerPeriod + ' (Min: ' + (loanProduct.minInterestRatePerPeriod ? loanProduct.minInterestRatePerPeriod : loanProduct.interestRatePerPeriod) + ', Max: ' + (loanProduct.maxInterestRatePerPeriod ? loanProduct.maxInterestRatePerPeriod : loanProduct.interestRatePerPeriod) + ')' + ' ' + (loanProduct.interestRateFrequencyType | find:loanProductsTemplate.interestRateFrequencyTypeOptions:'id':'value') }} + {{ loanProduct.interestRatePerPeriod + ' (Min: ' + (loanProduct.minInterestRatePerPeriod ? + loanProduct.minInterestRatePerPeriod : loanProduct.interestRatePerPeriod) + ', Max: ' + + (loanProduct.maxInterestRatePerPeriod ? loanProduct.maxInterestRatePerPeriod : loanProduct.interestRatePerPeriod) + + ')' + ' ' + (loanProduct.interestRateFrequencyType | + find:loanProductsTemplate.interestRateFrequencyTypeOptions:'id':'value') }}
Floating Lending Interest Rate: - {{ loanProduct.floatingRatesId | find:loanProductsTemplate.floatingRateOptions:'id':'name' }} + {{ loanProduct.floatingRatesId | find:loanProductsTemplate.floatingRateOptions:'id':'name' + }} Interest Rate Differential: {{ loanProduct.interestRateDifferential }} Floating Interest Rate Calculation Allowed: {{ loanProduct.isFloatingInterestRateCalculationAllowed ? 'Yes' : 'No' }} Floating Interest Rate: - {{ loanProduct.defaultDifferentialLendingRate + ' (Min: ' + (loanProduct.minDifferentialLendingRate ? loanProduct.minDifferentialLendingRate : loanProduct.defaultDifferentialLendingRate) + ', Max: ' + (loanProduct.maxDifferentialLendingRate ? loanProduct.maxDifferentialLendingRate : loanProduct.defaultDifferentialLendingRate) + ')' }} + {{ loanProduct.defaultDifferentialLendingRate + ' (Min: ' + + (loanProduct.minDifferentialLendingRate ? loanProduct.minDifferentialLendingRate : + loanProduct.defaultDifferentialLendingRate) + ', Max: ' + (loanProduct.maxDifferentialLendingRate ? + loanProduct.maxDifferentialLendingRate : loanProduct.defaultDifferentialLendingRate) + ')' }}
@@ -136,7 +156,7 @@ Minimum - {{ variation.minValue }} + {{ variation.minValue }} @@ -165,7 +185,8 @@

Number of Repayments by loan cycle

- +
@@ -184,7 +205,7 @@ @@ -213,7 +234,8 @@

Nominal Interest Rate by loan cycle

-
Condition Minimum - {{ variation.minValue }} + {{ variation.minValue }}
+
@@ -232,7 +254,7 @@ @@ -259,7 +281,8 @@
Repay Every: - {{ loanProduct.repaymentEvery + ' ' + (loanProduct.repaymentFrequencyType | find:loanProductsTemplate.repaymentFrequencyTypeOptions:'id':'value') }} + {{ loanProduct.repaymentEvery + ' ' + (loanProduct.repaymentFrequencyType | + find:loanProductsTemplate.repaymentFrequencyTypeOptions:'id':'value') }}
@@ -273,7 +296,8 @@
Amortization: - {{ loanProduct.amortizationType | find:loanProductsTemplate.amortizationTypeOptions:'id':'value' }} + {{ loanProduct.amortizationType | find:loanProductsTemplate.amortizationTypeOptions:'id':'value' + }}
@@ -283,12 +307,14 @@
Interest Method: - {{ loanProduct.interestType | find:loanProductsTemplate.interestTypeOptions:'id':'value' }} + {{ loanProduct.interestType | find:loanProductsTemplate.interestTypeOptions:'id':'value' + }}
Interest Calculation Period: - {{ loanProduct.interestCalculationPeriodType | find:loanProductsTemplate.interestCalculationPeriodTypeOptions:'id':'value' }} + {{ loanProduct.interestCalculationPeriodType | + find:loanProductsTemplate.interestCalculationPeriodTypeOptions:'id':'value' }}
@@ -298,7 +324,8 @@
Repayment Strategy: - {{ loanProduct.transactionProcessingStrategyCode | find:loanProductsTemplate.transactionProcessingStrategyOptions:'code':'name' }} + {{ loanProduct.transactionProcessingStrategyCode | + find:loanProductsTemplate.transactionProcessingStrategyOptions:'code':'name' }}
@@ -323,12 +350,14 @@
Days in year: - {{ loanProduct.daysInYearType | find:loanProductsTemplate.daysInYearTypeOptions:'id':'value' }} + {{ loanProduct.daysInYearType | find:loanProductsTemplate.daysInYearTypeOptions:'id':'value' + }}
Days in month: - {{ loanProduct.daysInMonthType | find:loanProductsTemplate.daysInMonthTypeOptions:'id':'value' }} + {{ loanProduct.daysInMonthType | find:loanProductsTemplate.daysInMonthTypeOptions:'id':'value' + }}
@@ -368,7 +397,8 @@
Variable Installments: - {{ '(Min: ' + loanProduct.minimumGap + ', Max: ' + (loanProduct.maximumGap ? loanProduct.maximumGap : loanProduct.minimumGap) + ')' }} + {{ '(Min: ' + loanProduct.minimumGap + ', Max: ' + (loanProduct.maximumGap ? + loanProduct.maximumGap : loanProduct.minimumGap) + ')' }}
@@ -387,20 +417,33 @@
Pre-closure interest calculation rule: - {{ loanProduct.preClosureInterestCalculationStrategy | find:loanProductsTemplate.preClosureInterestCalculationStrategyOptions:'id':'value' }} + {{ loanProduct.preClosureInterestCalculationStrategy | + find:loanProductsTemplate.preClosureInterestCalculationStrategyOptions:'id':'value' }} Advance payments adjustment type: - {{ loanProduct.rescheduleStrategyMethod | find:loanProductsTemplate.rescheduleStrategyTypeOptions:'id':'value' }} + {{ loanProduct.rescheduleStrategyMethod | + find:loanProductsTemplate.rescheduleStrategyTypeOptions:'id':'value' }} Interest recalculation compounding on: - {{ loanProduct.interestRecalculationCompoundingMethod | find:loanProductsTemplate.interestRecalculationCompoundingTypeOptions:'id':'value' }} -
+ {{ loanProduct.interestRecalculationCompoundingMethod | + find:loanProductsTemplate.interestRecalculationCompoundingTypeOptions:'id':'value' }} +
Frequency for compounding: - {{ loanProduct.recalculationCompoundingFrequencyType | find:loanProductsTemplate.interestRecalculationFrequencyTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationCompoundingFrequencyNthDayType | find:loanProductsTemplate.interestRecalculationNthDayTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationCompoundingFrequencyDayOfWeekType | find:loanProductsTemplate.interestRecalculationDayOfWeekTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationCompoundingFrequencyOnDayType }} + {{ loanProduct.recalculationCompoundingFrequencyType | + find:loanProductsTemplate.interestRecalculationFrequencyTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationCompoundingFrequencyNthDayType | + find:loanProductsTemplate.interestRecalculationNthDayTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationCompoundingFrequencyDayOfWeekType | + find:loanProductsTemplate.interestRecalculationDayOfWeekTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationCompoundingFrequencyOnDayType }} -
+
Frequency Interval for compounding: {{ loanProduct.recalculationCompoundingFrequencyInterval }}
@@ -408,13 +451,22 @@
Frequency for recalculate Outstanding Principal: - {{ loanProduct.recalculationRestFrequencyType | find:loanProductsTemplate.interestRecalculationFrequencyTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationRestFrequencyNthDayType | find:loanProductsTemplate.interestRecalculationNthDayTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationRestFrequencyDayOfWeekType | find:loanProductsTemplate.interestRecalculationDayOfWeekTypeOptions:'id':'value' }} -   {{ loanProduct.recalculationRestFrequencyOnDayType }} + {{ loanProduct.recalculationRestFrequencyType | + find:loanProductsTemplate.interestRecalculationFrequencyTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationRestFrequencyNthDayType | + find:loanProductsTemplate.interestRecalculationNthDayTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationRestFrequencyDayOfWeekType | + find:loanProductsTemplate.interestRecalculationDayOfWeekTypeOptions:'id':'value' }} +   {{ + loanProduct.recalculationRestFrequencyOnDayType }}
-
+
Frequency Interval for recalculation: {{ loanProduct.recalculationRestFrequencyInterval }}
@@ -522,7 +574,8 @@ Repaid every: {{ loanProduct.allowAttributeOverrides.repaymentEvery ? 'Yes' : 'No' }} Moratorium: - {{ loanProduct.allowAttributeOverrides.graceOnPrincipalAndInterestPayment ? 'Yes' : 'No' }} + {{ loanProduct.allowAttributeOverrides.graceOnPrincipalAndInterestPayment ? 'Yes' : 'No' + }} Number of days a loan may be overdue before moving into arrears: {{ loanProduct.allowAttributeOverrides.graceOnArrearsAgeing ? 'Yes' : 'No' }}
@@ -533,7 +586,8 @@ -
Condition Minimum - {{ variation.minValue }} + {{ variation.minValue }}
+
@@ -552,7 +606,7 @@ @@ -591,7 +645,7 @@ @@ -618,88 +672,115 @@ {{ accountingRuleData[loanProduct.accountingRule-1] }} -
+

Assets / Liabilities

Fund source: - {{ loanProduct.fundSourceAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAndLiabilityAccountOptions:'id':'name' }} + {{ loanProduct.fundSourceAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAndLiabilityAccountOptions:'id':'name' }}

Assets

Loan portfolio: - {{ loanProduct.loanPortfolioAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} -
+ {{ loanProduct.loanPortfolioAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} +
Interest Receivable: - {{ loanProduct.receivableInterestAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} + {{ loanProduct.receivableInterestAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} Fees Receivable: - {{ loanProduct.receivableFeeAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} + {{ loanProduct.receivableFeeAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} Penalties Receivable: - {{ loanProduct.receivablePenaltyAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} + {{ loanProduct.receivablePenaltyAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }}
Transfer in suspense: - {{ loanProduct.transfersInSuspenseAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} + {{ loanProduct.transfersInSuspenseAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }}

Income

Income from Interest: - {{ loanProduct.interestOnLoanAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.interestOnLoanAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from fees: - {{ loanProduct.incomeFromFeeAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromFeeAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from penalties: - {{ loanProduct.incomeFromPenaltyAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromPenaltyAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from Recovery Repayments: - {{ loanProduct.incomeFromRecoveryAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromRecoveryAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from ChargeOff Interest: - {{ loanProduct.incomeFromChargeOffInterestAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromChargeOffInterestAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from ChargeOff Fees: - {{ loanProduct.incomeFromChargeOffFeesAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromChargeOffFeesAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from ChargeOff Penalty: - {{ loanProduct.incomeFromChargeOffPenaltyAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromChargeOffPenaltyAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from Goodwill Credit Interest: - {{ loanProduct.incomeFromGoodwillCreditInterestAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromGoodwillCreditInterestAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from Goodwill Credit Fees: - {{ loanProduct.incomeFromGoodwillCreditFeesAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromGoodwillCreditFeesAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} Income from Goodwill Credit Penalty: - {{ loanProduct.incomeFromGoodwillCreditPenaltyAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ loanProduct.incomeFromGoodwillCreditPenaltyAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }}

Expenses

Losses written off: - {{ loanProduct.writeOffAccountId | find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} + {{ loanProduct.writeOffAccountId | + find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} Expenses from Goodwill Credit: - {{ loanProduct.goodwillCreditAccountId | find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} + {{ loanProduct.goodwillCreditAccountId | + find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} ChargeOff Expense: - {{ loanProduct.chargeOffExpenseAccountId | find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} + {{ loanProduct.chargeOffExpenseAccountId | + find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} ChargeOff Fraud Expense: - {{ loanProduct.chargeOffFraudExpenseAccountId | find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }} + {{ loanProduct.chargeOffFraudExpenseAccountId | + find:loanProductsTemplate.accountingMappingOptions.expenseAccountOptions:'id':'name' }}

Liabilities

Over payment liability: - {{ loanProduct.overpaymentLiabilityAccountId | find:loanProductsTemplate.accountingMappingOptions.liabilityAccountOptions:'id':'name' }} + {{ loanProduct.overpaymentLiabilityAccountId | + find:loanProductsTemplate.accountingMappingOptions.liabilityAccountOptions:'id':'name' }}
-
+

Advanced Accounting Rules

-
+

Fund Sources for Payment Channels

-
Name Amount - {{ charge.amount }} + {{ charge.amount }} Amount - {{ overdueCharge.amount }} + {{ overdueCharge.amount }}
+
@@ -711,7 +792,8 @@ @@ -722,7 +804,8 @@ -
+

Fees to Specific Income Accounts

@@ -738,7 +821,9 @@
@@ -749,7 +834,8 @@ -
+

Penalties to Specific Income Accounts

@@ -758,14 +844,15 @@
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 72b64d9ee..926e1dccb 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 @@ -28,24 +28,35 @@ - - Allow approval / disbursal above loan applied amount? - +
+ + Allow approval / disbursal above loan applied amount? + - - Over Amount Calculation Type - - - {{ overAppliedCalculationType.value }} + + Over Amount Calculation Type + + + {{ overAppliedCalculationType.value }} + + + + + + Over Amount + + +
+ + + Installment day calculation from + + + {{ repaymentStartDateType.value | translate }} - - Over Amount - - -

Number of repayments

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 dc1f64ec5..92af97af0 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 @@ -26,6 +26,7 @@ export class LoanProductTermsStepComponent implements OnInit { interestRateFrequencyTypeData: any; overAppliedCalculationTypeData: any; repaymentFrequencyTypeData: any; + repaymentStartDateTypeOptions: any; displayedColumns: string[] = ['valueConditionType', 'borrowerCycleNumber', 'minValue', 'defaultValue', 'maxValue', 'actions']; @@ -40,6 +41,7 @@ export class LoanProductTermsStepComponent implements OnInit { this.floatingRateData = this.loanProductsTemplate.floatingRateOptions; this.interestRateFrequencyTypeData = this.loanProductsTemplate.interestRateFrequencyTypeOptions; this.repaymentFrequencyTypeData = this.loanProductsTemplate.repaymentFrequencyTypeOptions; + this.repaymentStartDateTypeOptions = this.loanProductsTemplate.repaymentStartDateTypeOptions; this.overAppliedCalculationTypeData = [{id: 'percentage', value: 'Percentage'}, {id: 'flat', value: 'Fixed Amount'}]; this.loanProductTermsForm.patchValue({ @@ -64,7 +66,8 @@ export class LoanProductTermsStepComponent implements OnInit { 'useBorrowerCycle': this.loanProductsTemplate.useBorrowerCycle, 'repaymentEvery': this.loanProductsTemplate.repaymentEvery, 'repaymentFrequencyType': this.loanProductsTemplate.repaymentFrequencyType.id, - 'minimumDaysBetweenDisbursalAndFirstRepayment': this.loanProductsTemplate.minimumDaysBetweenDisbursalAndFirstRepayment + 'minimumDaysBetweenDisbursalAndFirstRepayment': this.loanProductsTemplate.minimumDaysBetweenDisbursalAndFirstRepayment, + 'repaymentStartDateType': this.loanProductsTemplate.repaymentStartDateType.id || 1 }); if (this.loanProductsTemplate.allowApprovedDisbursedAmountsOverApplied) { @@ -99,7 +102,8 @@ export class LoanProductTermsStepComponent implements OnInit { 'interestRateFrequencyType': ['', Validators.required], 'repaymentEvery': ['', Validators.required], 'repaymentFrequencyType': ['', Validators.required], - 'minimumDaysBetweenDisbursalAndFirstRepayment': [''] + 'minimumDaysBetweenDisbursalAndFirstRepayment': [''], + 'repaymentStartDateType': [1] }); } diff --git a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html index b02b09ddb..69c1a94ce 100644 --- a/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html +++ b/src/app/products/loan-products/view-loan-product/general-tab/general-tab.component.html @@ -94,6 +94,11 @@ loanProduct.currencyCode }} +
+ Installment day calculation from: + {{ loanProduct.repaymentStartDateType.value }} +
+
Number of Repayments: {{ loanProduct.numberOfRepayments + ' (Min: ' + (loanProduct.minNumberOfRepayments ? diff --git a/src/app/savings/common-resolvers/transaction-datatable.resolver.ts b/src/app/savings/common-resolvers/transaction-datatable.resolver.ts index a4b30a777..deb0aae3a 100644 --- a/src/app/savings/common-resolvers/transaction-datatable.resolver.ts +++ b/src/app/savings/common-resolvers/transaction-datatable.resolver.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; -// rxjs Imports -import { Observable, of } from 'rxjs'; +// rxjs Imports +import { Observable } from 'rxjs'; // Custom Service import { SavingsService } from '../savings.service'; @@ -11,8 +11,8 @@ import { SavingsService } from '../savings.service'; @Injectable() export class TransactionDatatableResolver implements Resolve { /** - * - * @param {SavingsService} savingsService + * + * @param {SavingsService} savingsService */ constructor(private savingsService: SavingsService) { } /** @@ -25,4 +25,4 @@ export class TransactionDatatableResolver implements Resolve { const datatableName = route.paramMap.get('datatableName'); return this.savingsService.getSavingsTransactionDatatable(accountId, datatableName); } -} \ No newline at end of file +} diff --git a/src/app/savings/common-resolvers/transaction-datatables.resolver.ts b/src/app/savings/common-resolvers/transaction-datatables.resolver.ts index 6d818696b..0a6183ec5 100644 --- a/src/app/savings/common-resolvers/transaction-datatables.resolver.ts +++ b/src/app/savings/common-resolvers/transaction-datatables.resolver.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; -// rxjs Imports -import { Observable, of } from 'rxjs'; +// rxjs Imports +import { Observable } from 'rxjs'; // Custom Service import { SavingsService } from '../savings.service'; @@ -12,16 +12,16 @@ import { SavingsService } from '../savings.service'; export class TransactionDatatablesResolver implements Resolve { /** - * + * * @param savingsService Savings Service */ constructor(private savingsService: SavingsService) { } /** - * - * @param route + * + * @param route * @returns {Observable} */ resolve(route: ActivatedRouteSnapshot): Observable { return this.savingsService.getSavingsTransactionDatatables(); } -} \ No newline at end of file +} diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/datatable-transaction-tab/datatable-transaction-tab.component.ts b/src/app/savings/savings-account-view/transactions/view-transaction/datatable-transaction-tab/datatable-transaction-tab.component.ts index c2043227b..78c9a421f 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/datatable-transaction-tab/datatable-transaction-tab.component.ts +++ b/src/app/savings/savings-account-view/transactions/view-transaction/datatable-transaction-tab/datatable-transaction-tab.component.ts @@ -21,5 +21,4 @@ export class DatatableTransactionTabComponent { this.multiRowDatatableFlag = this.entityDatatable.columnHeaders[0].columnName === 'id' ? true : false; }); } - -} \ No newline at end of file +} diff --git a/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.ts b/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.ts index 5e15e46cc..d4414b057 100644 --- a/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.ts +++ b/src/app/savings/savings-account-view/transactions/view-transaction/view-transaction.component.ts @@ -31,7 +31,7 @@ export class ViewTransactionComponent { entityDatatable: any; /** Multi Row Datatable Flag */ multiRowDatatableFlag: boolean; - isActive:false; + isActive: false; /** * Retrieves the Transaction data from `resolve`. @@ -48,7 +48,7 @@ export class ViewTransactionComponent { private router: Router, public dialog: MatDialog, private settingsService: SettingsService) { - this.route.data.subscribe((data: { savingsAccountTransaction: any,transactionDatatables:any}) => { + this.route.data.subscribe((data: { savingsAccountTransaction: any, transactionDatatables: any}) => { this.accountId = this.route.snapshot.params['savingAccountId']; this.transactionData = data.savingsAccountTransaction; this.entityDatatable = data.transactionDatatables; diff --git a/src/app/savings/savings.service.ts b/src/app/savings/savings.service.ts index eec8bc4fe..6411f8884 100644 --- a/src/app/savings/savings.service.ts +++ b/src/app/savings/savings.service.ts @@ -124,7 +124,7 @@ export class SavingsService { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.get(`/datatables/${datatableName}/${transactionId}`, { params: httpParams }); } - + /** * @param accountId account Id of savings account to get add datatable entry for. * @param datatableName Data Table name. diff --git a/src/assets/styles/_colours.scss b/src/assets/styles/_colours.scss index a839a5984..6ed6d7f9c 100644 --- a/src/assets/styles/_colours.scss +++ b/src/assets/styles/_colours.scss @@ -70,6 +70,7 @@ $status-pending: #ffa500; $status-approved: #0f36e4; $status-chargeoff: #f39c12; $status-overpaid: #800080; +$status-downpayment: #16a085; $status-active-overdue: #ff0000; $status-matured: #ff4000; $state-done: #00ce00;
Payment Type Fund Source - {{ paymentFundSource.fundSourceAccountId | find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} + {{ paymentFundSource.fundSourceAccountId | + find:loanProductsTemplate.accountingMappingOptions.assetAccountOptions:'id':'name' }} Income Account - {{ feesIncome.incomeAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions.concat(loanProductsTemplate.accountingMappingOptions.liabilityAccountOptions):'id':'name' }} + {{ feesIncome.incomeAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions.concat(loanProductsTemplate.accountingMappingOptions.liabilityAccountOptions):'id':'name' + }} Penalty - {{ penaltyIncome.chargeId | find:loanProductsTemplate.penaltyOptions:'id':'name' }} + {{ penaltyIncome.chargeId | find:loanProductsTemplate.penaltyOptions:'id':'name' }} Income Account - {{ penaltyIncome.incomeAccountId | find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }} + {{ penaltyIncome.incomeAccountId | + find:loanProductsTemplate.accountingMappingOptions.incomeAccountOptions:'id':'name' }}