From e55aaf90beeb7b9ddff4e4efda4565a1b00745ec Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Wed, 16 Jul 2025 07:43:48 -0500 Subject: [PATCH] WEB-257: Loan Capitalized Income - Fetch amortization details --- .../loan-deferred-income-data.resolver.ts | 29 ++++++++ src/app/loans/loans-routing.module.ts | 18 ++++- .../loan-deferred-income-tab.component.html | 36 ++++++++++ .../loan-deferred-income-tab.component.scss | 0 .../loan-deferred-income-tab.component.ts | 66 +++++++++++++++++++ .../loans-view/loans-view.component.html | 11 ++++ src/app/loans/loans.service.ts | 4 ++ src/app/loans/models/loan-account.model.ts | 11 ++++ src/assets/translations/cs-CS.json | 3 + src/assets/translations/de-DE.json | 3 + src/assets/translations/en-US.json | 3 + src/assets/translations/es-CL.json | 3 + src/assets/translations/es-MX.json | 3 + src/assets/translations/fr-FR.json | 3 + src/assets/translations/it-IT.json | 3 + src/assets/translations/ko-KO.json | 3 + src/assets/translations/lt-LT.json | 3 + src/assets/translations/lv-LV.json | 3 + src/assets/translations/ne-NE.json | 3 + src/assets/translations/pt-PT.json | 3 + src/assets/translations/sw-SW.json | 3 + 21 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 src/app/loans/common-resolvers/loan-deferred-income-data.resolver.ts create mode 100644 src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.html create mode 100644 src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.scss create mode 100644 src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.ts diff --git a/src/app/loans/common-resolvers/loan-deferred-income-data.resolver.ts b/src/app/loans/common-resolvers/loan-deferred-income-data.resolver.ts new file mode 100644 index 000000000..9076d49a5 --- /dev/null +++ b/src/app/loans/common-resolvers/loan-deferred-income-data.resolver.ts @@ -0,0 +1,29 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { LoansService } from '../loans.service'; + +/** + * Loan Delinquency data resolver. + */ +@Injectable() +export class LoanDeferredIncomeDataResolver { + /** + * @param {LoansService} LoansService Loans service. + */ + constructor(private loansService: LoansService) {} + + /** + * Returns the Loans with Association data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const loanId = route.paramMap.get('loanId') || route.parent.paramMap.get('loanId'); + return this.loansService.getDeferredIncomeData(loanId); + } +} diff --git a/src/app/loans/loans-routing.module.ts b/src/app/loans/loans-routing.module.ts index 4e12b0570..d014f8d86 100644 --- a/src/app/loans/loans-routing.module.ts +++ b/src/app/loans/loans-routing.module.ts @@ -62,6 +62,8 @@ import { LoanDelinquencyDataResolver } from './common-resolvers/loan-delinquency import { LoanDelinquencyActionsResolver } from './common-resolvers/loan-delinquency-actions.resolver'; import { LoanTermVariationsTabComponent } from './loans-view/loan-term-variations-tab/loan-term-variations-tab.component'; import { LoanTermVariationsResolver } from './common-resolvers/loan-term-variations.resolver'; +import { LoanDeferredIncomeTabComponent } from './loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component'; +import { LoanDeferredIncomeDataResolver } from './common-resolvers/loan-deferred-income-data.resolver'; /** Loans Route. */ const routes: Routes = [ @@ -130,6 +132,19 @@ const routes: Routes = [ } ] }, + { + path: 'deferred-income', + data: { title: 'Loans Deferred Income', breadcrumb: 'Deferred income', routeParamBreadcrumb: false }, + resolve: { + loanDeferredIncomeData: LoanDeferredIncomeDataResolver + }, + children: [ + { + path: '', + component: LoanDeferredIncomeTabComponent + } + ] + }, { path: 'delinquencytags', data: { title: 'Loans Delinquency Tags', breadcrumb: 'Delinquency Tags', routeParamBreadcrumb: false }, @@ -391,7 +406,8 @@ const routes: Routes = [ GLIMLoanTemplateResolver, ExternalAssetOwnerResolver, LoanDelinquencyDataResolver, - LoanTermVariationsResolver + LoanTermVariationsResolver, + LoanDeferredIncomeDataResolver ] }) export class LoansRoutingModule {} diff --git a/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.html b/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.html new file mode 100644 index 000000000..a7625b70f --- /dev/null +++ b/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.html @@ -0,0 +1,36 @@ +
+

{{ 'labels.inputs.Deferred income' | translate }} - {{ 'labels.menus.Capitalized Income' | translate }}

+ + + + + + + + + + + + + + + + + + + + + + + + +
{{ 'labels.inputs.Amount' | translate }} + {{ item.amount | formatNumber }} + {{ 'labels.inputs.Amortized Amount' | translate }} + {{ item.amortizedAmount | formatNumber: '0.00' }} + {{ 'labels.inputs.Unrecognized Amount' | translate }} + {{ item.unrecognizedAmount | formatNumber: '0.00' }} + {{ 'labels.inputs.Adjustment Amount' | translate }} + {{ item.amountAdjustment | formatNumber: '0.00' }} +
+
diff --git a/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.scss b/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.ts b/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.ts new file mode 100644 index 000000000..694cfbc6e --- /dev/null +++ b/src/app/loans/loans-view/loan-deferred-income-tab/loan-deferred-income-tab.component.ts @@ -0,0 +1,66 @@ +import { NgClass } from '@angular/common'; +import { Component } from '@angular/core'; +import { + MatCell, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable +} from '@angular/material/table'; +import { ActivatedRoute } from '@angular/router'; +import { FormatNumberPipe } from '@pipes/format-number.pipe'; +import { LoanCapitalizedIncomeData, LoanDeferredIncomeData } from 'app/loans/models/loan-account.model'; +import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; + +@Component({ + selector: 'mifosx-loan-deferred-income-tab', + templateUrl: './loan-deferred-income-tab.component.html', + styleUrl: './loan-deferred-income-tab.component.scss', + imports: [ + ...STANDALONE_SHARED_IMPORTS, + MatTable, + MatColumnDef, + MatHeaderCellDef, + MatHeaderCell, + MatCellDef, + MatCell, + MatHeaderRowDef, + MatHeaderRow, + MatRowDef, + MatRow, + FormatNumberPipe + ] +}) +export class LoanDeferredIncomeTabComponent { + capitalizedIncomeData: LoanCapitalizedIncomeData[] = []; + + loanId: any; + + capitalizedIncomeColumns: string[] = [ + 'amount', + 'amortizedAmount', + 'unrecognizedAmount', + 'amountAdjustment' + ]; + + constructor(private route: ActivatedRoute) { + this.loanId = this.route.parent.parent.snapshot.params['loanId']; + + let capitalizedIncomeData: LoanCapitalizedIncomeData[] = []; + this.route.parent.data.subscribe((data: { loanDeferredIncomeData: LoanDeferredIncomeData }) => { + capitalizedIncomeData = data.loanDeferredIncomeData.capitalizedIncomeData || []; + capitalizedIncomeData.forEach((item: LoanCapitalizedIncomeData) => { + item.amortizedAmount = item.amortizedAmount | 0; + item.unrecognizedAmount = item.unrecognizedAmount | 0; + item.amountAdjustment = item.amountAdjustment | 0; + this.capitalizedIncomeData.push(item); + }); + console.log(this.capitalizedIncomeData); + }); + } +} diff --git a/src/app/loans/loans-view/loans-view.component.html b/src/app/loans/loans-view/loans-view.component.html index 40c25a895..cb60417a4 100644 --- a/src/app/loans/loans-view/loans-view.component.html +++ b/src/app/loans/loans-view/loans-view.component.html @@ -208,6 +208,17 @@ {{ 'labels.inputs.Transactions' | translate }} + + + {{ 'labels.inputs.Deferred income' | translate }} + +