From 5c7a3e2d5972780310d99509d33116072c3e9f0f Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Wed, 28 May 2025 13:46:51 -0500 Subject: [PATCH] fix: Loan Tranche Details isn't displayed after switching between tabs --- src/app/clients/clients.component.html | 2 +- src/app/clients/clients.component.scss | 4 ++ .../loans-account-preview-step.component.html | 11 +++-- .../loans-account-terms-step.component.html | 42 +++++++++---------- .../make-repayment.component.html | 8 ++-- .../prepay-loan/prepay-loan.component.html | 8 ++-- .../loan-tranche-details.component.ts | 22 ++++++++-- .../loans/loans-view/loans-view.component.ts | 1 + .../repayment-schedule-tab.component.html | 2 +- .../repayment-schedule-tab.component.scss | 5 +++ src/app/loans/loans.service.ts | 9 ++++ src/app/loans/models/loan-account.model.ts | 7 ++++ src/assets/translations/cs-CS.json | 2 +- src/assets/translations/de-DE.json | 2 +- src/assets/translations/en-US.json | 2 +- src/assets/translations/es-CL.json | 2 +- src/assets/translations/es-MX.json | 2 +- src/assets/translations/fr-FR.json | 2 +- src/assets/translations/it-IT.json | 2 +- src/assets/translations/ko-KO.json | 2 +- src/assets/translations/lt-LT.json | 2 +- src/assets/translations/lv-LV.json | 2 +- src/assets/translations/ne-NE.json | 2 +- src/assets/translations/pt-PT.json | 2 +- src/assets/translations/sw-SW.json | 2 +- 25 files changed, 95 insertions(+), 52 deletions(-) diff --git a/src/app/clients/clients.component.html b/src/app/clients/clients.component.html index cacd427ac..d4b76ce88 100644 --- a/src/app/clients/clients.component.html +++ b/src/app/clients/clients.component.html @@ -30,7 +30,7 @@ -
+
diff --git a/src/app/clients/clients.component.scss b/src/app/clients/clients.component.scss index 552cbb5ba..6666f7876 100644 --- a/src/app/clients/clients.component.scss +++ b/src/app/clients/clients.component.scss @@ -158,3 +158,7 @@ $color: #e2e4ec; } } } + +.client-list { + padding: 1%; +} diff --git a/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.html b/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.html index aee86d468..cbe1a36f4 100644 --- a/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.html +++ b/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.html @@ -3,9 +3,14 @@
{{ 'labels.inputs.Product' | translate }}: - {{ - loansAccount.productId | find: loansAccountTemplate.productOptions : 'id' : 'name' - }} + + +
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 1f3fecc13..e42fc702a 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 @@ -391,32 +391,28 @@ -
+
{{ 'labels.inputs.Recalculate Interest' | translate }} {{ loansAccountTermsData?.isInterestRecalculationEnabled | yesNo }}
-
+
{{ 'labels.inputs.Days in year' | translate }} {{ loansAccountTermsData.daysInYearType.value | translateKey: 'catalogs' }}
+
+ {{ 'labels.inputs.Days in month' | translate }} + {{ loansAccountTermsData.daysInMonthType.value | translateKey: 'catalogs' }} +
+
+ {{ 'labels.inputs.Advance payments adjustment type' | translate }} + {{ loansAccountTermsData.interestRecalculationData.rescheduleStrategyType.value }} +
-
- {{ 'labels.inputs.Advance payments adjustment type' | translate }} - {{ loansAccountTermsData.interestRecalculationData.rescheduleStrategyType.value }} -
- -
- {{ 'labels.inputs.Days in month' | translate }} - {{ loansAccountTermsData.daysInMonthType.value | translateKey: 'catalogs' }} -
-
- - -
+
{{ 'labels.inputs.Interest recalculation compounding on' | translate }} {{ loansAccountTermsData.interestRecalculationData.interestRecalculationCompoundingType.value @@ -424,7 +420,7 @@ }}
-
+
{{ 'labels.inputs.Frequency Interval for recalculation' | translate }} {{ loansAccountTermsData.interestRecalculationData.recalculationRestFrequencyType.value }} @@ -458,7 +454,7 @@
+
{{ 'labels.inputs.Enable income capitalization' | translate }} @@ -479,13 +475,15 @@ -
+

{{ 'labels.heading.Loan Tranche Details' | translate }}

+
+
{{ 'labels.inputs.Maximum allowed outstanding balance' | translate }} - +
-
+

{{ 'labels.heading.Loan Tranche Details are not allowed for this Loan Product' | translate }}

@@ -506,7 +504,7 @@ - + diff --git a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html index e57115aee..d1b66116a 100644 --- a/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html +++ b/src/app/loans/loans-view/loan-account-actions/make-repayment/make-repayment.component.html @@ -23,7 +23,7 @@
- {{ 'Principal' | translate }} + {{ 'labels.inputs.Principal' | translate }}
@@ -31,7 +31,7 @@
- {{ 'Interest' | translate }} + {{ 'labels.inputs.Interest' | translate }}
@@ -39,7 +39,7 @@
- {{ 'Fees' | translate }} + {{ 'labels.inputs.Fees' | translate }}
@@ -47,7 +47,7 @@
- {{ 'Penalties' | translate }} + {{ 'labels.inputs.Penalties' | translate }}
diff --git a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html index da5ee0b96..017d9cc28 100644 --- a/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html +++ b/src/app/loans/loans-view/loan-account-actions/prepay-loan/prepay-loan.component.html @@ -23,7 +23,7 @@
- {{ 'Principal' | translate }} + {{ 'labels.inputs.Principal' | translate }}
@@ -31,7 +31,7 @@
- {{ 'Interest' | translate }} + {{ 'labels.inputs.Interest' | translate }}
@@ -39,7 +39,7 @@
- {{ 'Fees' | translate }} + {{ 'labels.inputs.Fees' | translate }}
@@ -47,7 +47,7 @@
- {{ 'Penalties' | translate }} + {{ 'labels.inputs.Penalties' | translate }}
diff --git a/src/app/loans/loans-view/loan-tranche-details/loan-tranche-details.component.ts b/src/app/loans/loans-view/loan-tranche-details/loan-tranche-details.component.ts index d661755a3..c5f92e33f 100644 --- a/src/app/loans/loans-view/loan-tranche-details/loan-tranche-details.component.ts +++ b/src/app/loans/loans-view/loan-tranche-details/loan-tranche-details.component.ts @@ -1,8 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { Dates } from 'app/core/utils/dates'; import { LoansService } from 'app/loans/loans.service'; +import { DisbursementData } from 'app/loans/models/loan-account.model'; import { SettingsService } from 'app/settings/settings.service'; import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component'; @@ -35,7 +36,7 @@ export class LoanTrancheDetailsComponent implements OnInit { currentPrincipalAmount: number; minDate = new Date(2000, 0, 1); maxDate = new Date(2100, 0, 1); - disbursementDataSource: {}[] = []; + disbursementDataSource: DisbursementData[] = []; totalMultiDisbursed: number = null; disallowExpectedDisbursements = false; pristine = true; @@ -46,7 +47,8 @@ export class LoanTrancheDetailsComponent implements OnInit { */ constructor( private route: ActivatedRoute, - public dialog: MatDialog, + private router: Router, + private dialog: MatDialog, private loanServices: LoansService, private settingsService: SettingsService, private dateUtils: Dates @@ -55,7 +57,6 @@ export class LoanTrancheDetailsComponent implements OnInit { this.loanId = data.loanDetailsData.id; this.loanDetails = data.loanDetailsData; this.disallowExpectedDisbursements = this.loanDetails.disallowExpectedDisbursements || false; - this.disbursementDataSource = data.loanDetailsData.disbursementDetails; this.currentPrincipalAmount = this.loanDetails.approvedPrincipal; }); } @@ -63,6 +64,12 @@ export class LoanTrancheDetailsComponent implements OnInit { ngOnInit() { this.maxDate = this.settingsService.maxFutureDate; this.status = this.loanDetails.status.value; + this.disbursementDataSource = this.loanServices.getLoanDisbursementDetailsData(); + this.disbursementDataSource.forEach((data: DisbursementData) => { + if (!data.id) { + this.pristine = false; + } + }); } showAddTrancheButtons() { @@ -156,6 +163,7 @@ export class LoanTrancheDetailsComponent implements OnInit { const principal = response.data.value.principal * 1; if (this.totalMultiDisbursed + principal <= this.currentPrincipalAmount) { this.disbursementDataSource = this.disbursementDataSource.concat(response.data.value); + this.loanServices.saveLoanDisbursementDetailsData(this.disbursementDataSource); this.pristine = false; } } @@ -226,7 +234,13 @@ export class LoanTrancheDetailsComponent implements OnInit { .editDisbursements(this.loanId, payload) .toPromise() .then((result) => { + this.reload(); this.pristine = true; }); } + + reload() { + const url: string = this.router.url; + this.router.navigateByUrl(`/clients`, { skipLocationChange: true }).then(() => this.router.navigate([url])); + } } diff --git a/src/app/loans/loans-view/loans-view.component.ts b/src/app/loans/loans-view/loans-view.component.ts index 2d2c75e57..981615d5c 100644 --- a/src/app/loans/loans-view/loans-view.component.ts +++ b/src/app/loans/loans-view/loans-view.component.ts @@ -67,6 +67,7 @@ export class LoansViewComponent implements OnInit { this.loanStatus = this.loanDetailsData.status; this.loanSubStatus = this.loanDetailsData.subStatus === undefined ? null : this.loanDetailsData.subStatus; this.currency = this.loanDetailsData.currency; + loansService.saveLoanDisbursementDetailsData(this.loanDetailsData.disbursementDetails); if (this.loanStatus.active) { this.loanDetailsData.transactions.forEach((lt: LoanTransaction) => { if (!lt.manuallyReversed) { diff --git a/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.html b/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.html index 2594a5aae..4da711a54 100644 --- a/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.html +++ b/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.html @@ -211,7 +211,7 @@ *matHeaderRowDef="['header', 'header-amount', 'header-total-cost', 'header-installment-totals']" >
- +
{{ 'labels.inputs.Eexpected Disbursement Date' | translate }}{{ 'labels.inputs.Expected Disbursement Date' | translate }} {{ row.expectedDisbursementDate | dateFormat }}
diff --git a/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.scss b/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.scss index 5b141dff5..07085d8a4 100644 --- a/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.scss +++ b/src/app/loans/loans-view/repayment-schedule-tab/repayment-schedule-tab.component.scss @@ -6,8 +6,13 @@ table { margin: 2% 0%; } +.table-row { + font-size: small; +} + .container { padding-bottom: 2%; + width: 98%; } .check { diff --git a/src/app/loans/loans.service.ts b/src/app/loans/loans.service.ts index 02a4a0a8b..0d10e406e 100644 --- a/src/app/loans/loans.service.ts +++ b/src/app/loans/loans.service.ts @@ -6,6 +6,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs'; import { Dates } from 'app/core/utils/dates'; import { SettingsService } from 'app/settings/settings.service'; +import { DisbursementData } from './models/loan-account.model'; /** * Loans service. @@ -668,4 +669,12 @@ export class LoansService { delete loansAccountData.allowPartialPeriodInterestCalculation; return loansAccountData; } + + saveLoanDisbursementDetailsData(disbursementData: DisbursementData[]): void { + localStorage.setItem('disbursementData', JSON.stringify(disbursementData)); + } + + getLoanDisbursementDetailsData(): DisbursementData[] { + return JSON.parse(localStorage.getItem('disbursementData')); + } } diff --git a/src/app/loans/models/loan-account.model.ts b/src/app/loans/models/loan-account.model.ts index 42cd7675c..c5a00cfa6 100644 --- a/src/app/loans/models/loan-account.model.ts +++ b/src/app/loans/models/loan-account.model.ts @@ -115,3 +115,10 @@ export interface RepaymentSchedulePeriod { totalWrittenOffForPeriod?: number; totalInstallmentAmountForPeriod?: number; } + +export interface DisbursementData { + actualDisbursementDate: Date; + expectedDisbursementDate: Date; + principal: number; + id?: number; +} diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 8ab52c4ea..08e54bf89 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Dny splatnosti pro případ splácení", "Due for collection on": "Termín odběru dne", "Dropdown": "Rozbalovací nabídka", - "Eexpected Disbursement Date": "Očekávané datum výplaty", + "Expected Disbursement Date": "Očekávané datum výplaty", "Effective Date": "Datum účinnosti", "Effective From": "Účinné od", "Email": "E-mailem", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index 303cac036..75b9398f0 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Fälligkeitstage für das Rückzahlungsereignis", "Due for collection on": "Zur Abholung fällig am", "Dropdown": "Runterfallen", - "Eexpected Disbursement Date": "Voraussichtliches Auszahlungsdatum", + "Expected Disbursement Date": "Voraussichtliches Auszahlungsdatum", "Effective Date": "Datum des Inkrafttretens", "Effective From": "Gültig ab", "Email": "Email", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index 50bc74f19..bb5cb8c7a 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -1547,7 +1547,7 @@ "Due days for repayment event": "Due days for repayment event", "Due for collection on": "Due for collection on", "Dropdown": "Dropdown", - "Eexpected Disbursement Date": "Expected Disbursement Date", + "Expected Disbursement Date": "Expected Disbursement Date", "Effective Date": "Effective Date", "Effective From": "Effective From", "Email": "Email", diff --git a/src/assets/translations/es-CL.json b/src/assets/translations/es-CL.json index 205b59a59..96f18912f 100644 --- a/src/assets/translations/es-CL.json +++ b/src/assets/translations/es-CL.json @@ -1542,7 +1542,7 @@ "Due days for repayment event": "Días de vencimiento para el evento de pago", "Due for collection on": "Vencimiento para su cobro el", "Dropdown": "Desplegable", - "Eexpected Disbursement Date": "Fecha prevista de curso", + "Expected Disbursement Date": "Fecha prevista de curso", "Effective Date": "Fecha efectiva", "Effective From": "Válido desde", "Email": "Correo electrónico", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index e177a66a2..121b95deb 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -1542,7 +1542,7 @@ "Due days for repayment event": "Días de vencimiento para el evento de pago", "Due for collection on": "Vencimiento para su cobro el", "Dropdown": "Desplegable", - "Eexpected Disbursement Date": "Fecha prevista de desembolso", + "Expected Disbursement Date": "Fecha prevista de desembolso", "Effective Date": "Fecha efectiva", "Effective From": "Válido desde", "Email": "Correo electrónico", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index f2dbd4c50..2e886e8ec 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Jours d'échéance pour l'événement de remboursement", "Due for collection on": "À encaisser le", "Dropdown": "Dérouler", - "Eexpected Disbursement Date": "Date de décaissement prévue", + "Expected Disbursement Date": "Date de décaissement prévue", "Effective Date": "Date effective", "Effective From": "À compter de", "Email": "E-mail", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index a0480db9a..7fbe6d330 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Giorni di scadenza per l'evento di rimborso", "Due for collection on": "Scadenza per il ritiro il", "Dropdown": "Cadere in picchiata", - "Eexpected Disbursement Date": "Data di esborso prevista", + "Expected Disbursement Date": "Data di esborso prevista", "Effective Date": "Data effettiva", "Effective From": "Efficace da", "Email": "E-mail", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index 899e9a4ca..ed46a0443 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -1544,7 +1544,7 @@ "Due days for repayment event": "상환행사 마감일", "Due for collection on": "수집 마감일:", "Dropdown": "쓰러지 다", - "Eexpected Disbursement Date": "예상 지급일", + "Expected Disbursement Date": "예상 지급일", "Effective Date": "발효일", "Effective From": "시작일부터", "Email": "이메일", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index 8a549ce69..9ab69c159 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Grąžinimo įvykio terminas", "Due for collection on": "Iki paėmimo terminas", "Dropdown": "Išskleidžiamasis meniu", - "Eexpected Disbursement Date": "Numatoma išmokėjimo data", + "Expected Disbursement Date": "Numatoma išmokėjimo data", "Effective Date": "Įsigaliojimo data", "Effective From": "Veiksmingas nuo", "Email": "El. paštas", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index 75cfa2181..d47f3a86e 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Atmaksas pasākuma termiņš", "Due for collection on": "Iekasēšanas termiņš ir", "Dropdown": "Nomest lejā", - "Eexpected Disbursement Date": "Paredzamais izmaksas datums", + "Expected Disbursement Date": "Paredzamais izmaksas datums", "Effective Date": "Spēkā stāšanās datums", "Effective From": "Efektīvs no", "Email": "E-pasts", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index 69bdf9e76..663e91f47 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "पुन: भुक्तानी कार्यक्रमको लागि बाँकी दिनहरू", "Due for collection on": "संकलन गर्न बाँकी छ", "Dropdown": "ड्रपडाउन", - "Eexpected Disbursement Date": "अपेक्षित वितरण मिति", + "Expected Disbursement Date": "अपेक्षित वितरण मिति", "Effective Date": "लागु हुने मिति", "Effective From": "बाट प्रभावकारी", "Email": "इमेल", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index f3a2cc6fe..cf794bbc3 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Dias de vencimento para evento de reembolso", "Due for collection on": "Devido à coleta em", "Dropdown": "Suspenso", - "Eexpected Disbursement Date": "Data prevista de desembolso", + "Expected Disbursement Date": "Data prevista de desembolso", "Effective Date": "Data efetiva", "Effective From": "Eficaz a partir de", "Email": "E-mail", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index a6f133609..1f581c1ce 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -1543,7 +1543,7 @@ "Due days for repayment event": "Siku zinazohitajika kwa tukio la ulipaji", "Due for collection on": "Inadaiwa kukusanywa", "Dropdown": "Kunjuzi", - "Eexpected Disbursement Date": "Tarehe inayotarajiwa ya Utoaji", + "Expected Disbursement Date": "Tarehe inayotarajiwa ya Utoaji", "Effective Date": "Tarehe ya Kutumika", "Effective From": "Kuanzia", "Email": "Barua pepe",