From 80b821838c808b2161b938cd5a05f26874600c27 Mon Sep 17 00:00:00 2001 From: Jose Alberto Hernandez Date: Wed, 3 Jan 2024 21:26:00 -0600 Subject: [PATCH] Loan account creation and modification with Loan schedule type validation --- src/app/core/utils/commons.ts | 21 ++++++++++++++ ...deposit-account-settings-step.component.ts | 1 - .../loans-account-details-step.component.html | 18 ++++++------ .../loans-account-details-step.component.ts | 6 ++-- .../loans-account-preview-step.component.html | 2 +- .../loans-account-preview-step.component.ts | 4 +-- .../loans-account-terms-step.component.html | 29 +++++++++++-------- .../loans-account-terms-step.component.ts | 27 +++++++++++++++-- .../view-charge/view-charge.component.ts | 1 - 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-MX.json | 6 ++-- 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 ++ 21 files changed, 103 insertions(+), 34 deletions(-) create mode 100644 src/app/core/utils/commons.ts diff --git a/src/app/core/utils/commons.ts b/src/app/core/utils/commons.ts new file mode 100644 index 000000000..f10c4fb5f --- /dev/null +++ b/src/app/core/utils/commons.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class Commons { + + constructor() {} + + public dynamicSort(property: string) { + let sortOrder = 1; + if (property[0] === '-') { + sortOrder = -1; + property = property.substr(1); + } + return (a: any, b: any) => { + const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; + return result * sortOrder; + }; +} +} diff --git a/src/app/deposits/fixed-deposits/fixed-deposit-account-stepper/fixed-deposit-account-settings-step/fixed-deposit-account-settings-step.component.ts b/src/app/deposits/fixed-deposits/fixed-deposit-account-stepper/fixed-deposit-account-settings-step/fixed-deposit-account-settings-step.component.ts index 382b734d0..7f68b0407 100644 --- a/src/app/deposits/fixed-deposits/fixed-deposit-account-stepper/fixed-deposit-account-settings-step/fixed-deposit-account-settings-step.component.ts +++ b/src/app/deposits/fixed-deposits/fixed-deposit-account-stepper/fixed-deposit-account-settings-step/fixed-deposit-account-settings-step.component.ts @@ -123,7 +123,6 @@ export class FixedDepositAccountSettingsStepComponent implements OnInit, OnChang } }); this.fixedDepositAccountSettingsForm.get('maturityInstructionId').valueChanges.subscribe((value: number) => { - console.log(value); if (value > 100) { this.fixedDepositAccountSettingsForm.addControl('transferToSavingsId', new UntypedFormControl('', Validators.required)); this.fixedDepositAccountSettingsForm.get('transferToSavingsId').patchValue(this.fixedDepositsAccountTemplate.transferToSavingsId && this.fixedDepositsAccountTemplate.transferToSavingsId.id); diff --git a/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.html b/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.html index 1184b551e..6ad87e4a7 100644 --- a/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.html +++ b/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.html @@ -2,7 +2,7 @@
- + {{"labels.inputs.Product Name" | translate}} @@ -13,6 +13,14 @@ {{"labels.inputs.Product Name" | translate}} {{"labels.commons.is" | translate}} {{"labels.commons.required" | translate}} +
+ +
+ + + {{"labels.inputs.External id" | translate}} + + {{"labels.inputs.Loan officer" | translate}} @@ -22,9 +30,6 @@ -
- -
{{"labels.inputs.Loan Purpose" | translate}} @@ -66,11 +71,6 @@ - - {{"labels.inputs.External id" | translate}} - - -

{{"labels.heading.Savings Linkage" | translate}}

diff --git a/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.ts b/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.ts index d5e810153..7b9f1712a 100644 --- a/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.ts +++ b/src/app/loans/loans-account-stepper/loans-account-details-step/loans-account-details-step.component.ts @@ -7,6 +7,7 @@ import { TooltipPosition } from '@angular/material/tooltip'; /** Custom Services */ import { LoansService } from '../../loans.service'; +import { Commons } from 'app/core/utils/commons'; /** * Loans Account Details Step @@ -55,7 +56,8 @@ export class LoansAccountDetailsStepComponent implements OnInit { constructor(private formBuilder: UntypedFormBuilder, private loansService: LoansService, private route: ActivatedRoute, - private settingsService: SettingsService) { + private settingsService: SettingsService, + private commons: Commons) { this.loanId = this.route.snapshot.params['loanId']; } @@ -64,7 +66,7 @@ export class LoansAccountDetailsStepComponent implements OnInit { this.maxDate = this.settingsService.maxFutureDate; this.buildDependencies(); if (this.loansAccountTemplate) { - this.productData = this.loansAccountTemplate.productOptions; + this.productData = this.loansAccountTemplate.productOptions.sort(this.commons.dynamicSort('name')); if (this.loansAccountTemplate.loanProductId) { this.loansAccountDetailsForm.patchValue({ 'productId': this.loansAccountTemplate.loanProductId, 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 0744d0de0..9fb4b4108 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 @@ -129,7 +129,7 @@
{{"labels.inputs.Repayment strategy" | translate}}: {{ loansAccount.transactionProcessingStrategyCode | find:loansAccountTemplate.transactionProcessingStrategyOptions:'code':'name' }} + fxFlex="60%">{{ loansAccount.transactionProcessingStrategyCode | find:loansAccountProductTemplate.transactionProcessingStrategyOptions:'code':'name' }}

{{"labels.heading.Moratorium" | translate}}

diff --git a/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.ts b/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.ts index e0571c3c6..bc3d36f7b 100644 --- a/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.ts +++ b/src/app/loans/loans-account-stepper/loans-account-preview-step/loans-account-preview-step.component.ts @@ -9,7 +9,7 @@ import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angu templateUrl: './loans-account-preview-step.component.html', styleUrls: ['./loans-account-preview-step.component.scss'] }) -export class LoansAccountPreviewStepComponent implements OnInit, OnDestroy { +export class LoansAccountPreviewStepComponent implements OnInit { /** Loans Account Template */ @Input() loansAccountTemplate: any = []; @@ -29,6 +29,4 @@ export class LoansAccountPreviewStepComponent implements OnInit, OnDestroy { ngOnInit() { } - ngOnDestroy(): void { } - } 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 bcf515934..f025dd128 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 @@ -121,6 +121,23 @@

{{"labels.inputs.Is Equal Amortization" | translate}}

+
+

{{"labels.inputs.Loan Schedule Type" | translate}}

+

{{ loanScheduleType.value }}

+
+ + + {{"labels.inputs.Repayment Strategy" | translate}} + + + {{ transactionProcessingStrategy.name }} + + + + {{"labels.inputs.Repayment Strategy" | translate}} {{"labels.commons.is" | translate}} {{"labels.commons.required" | translate}} + + + @@ -182,18 +199,6 @@ - - {{"labels.inputs.Repayment strategy" | translate}} - - - {{ transactionProcessingStrategy.name }} - - - - {{"labels.inputs.Repayment Strategy" | translate}} {{"labels.commons.is" | translate}} {{"labels.commons.required" | translate}} - - -

{{"labels.heading.Moratorium" | translate}}

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 483a06e55..10cd5c27a 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 @@ -4,12 +4,14 @@ import { UntypedFormGroup, UntypedFormBuilder, Validators, FormArray } from '@an import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute } from '@angular/router'; import { LoansAccountAddCollateralDialogComponent } from 'app/loans/custom-dialog/loans-account-add-collateral-dialog/loans-account-add-collateral-dialog.component'; +import { LoanProducts } from 'app/products/loan-products/loan-products'; 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'; import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicker-base'; import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base'; import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base'; +import { CodeName, OptionData } from 'app/shared/models/option-data.model'; /** * Create Loans Account Terms Step @@ -61,9 +63,9 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges { /** Multi Disbursement Data */ disbursementDataSource: {}[] = []; currencyDisplaySymbol = '$'; - /** Loan Transaction strategies */ + /** Loan repayment strategies */ transactionProcessingStrategyOptions: any = []; - + repaymentStrategyDisabled = false; /** Check if value of collateral added is more than principal amount */ isCollateralSufficient = false; /** Total value of all collateral added to a loan */ @@ -83,6 +85,8 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges { loanId: any = null; + loanScheduleType: OptionData | null = null; + /** * Create Loans Account Terms Form * @param formBuilder FormBuilder @@ -440,7 +444,24 @@ export class LoansAccountTermsStepComponent implements OnInit, OnChanges { this.amortizationTypeData = this.loansAccountProductTemplate.amortizationTypeOptions; this.interestCalculationPeriodTypeData = this.loansAccountProductTemplate.interestCalculationPeriodTypeOptions; this.clientActiveLoanData = this.loansAccountProductTemplate.clientActiveLoanOptions; - this.transactionProcessingStrategyOptions = this.loansAccountProductTemplate.transactionProcessingStrategyOptions; + this.loanScheduleType = this.loansAccountProductTemplate.loanScheduleType; + this.transactionProcessingStrategyOptions = []; + if (this.loanScheduleType.code === LoanProducts.LOAN_SCHEDULE_TYPE_CUMULATIVE) { + // Filter Advanced Payment Allocation Strategy + this.transactionProcessingStrategyOptions = this.loansAccountProductTemplate.transactionProcessingStrategyOptions.filter( + (cn: CodeName) => !LoanProducts.isAdvancedPaymentAllocationStrategy(cn.code) + ); + this.repaymentStrategyDisabled = false; + } else { + // Only Advanced Payment Allocation Strategy + this.loansAccountProductTemplate.transactionProcessingStrategyOptions.some( + (cn: CodeName) => { + if (LoanProducts.isAdvancedPaymentAllocationStrategy(cn.code)) { + this.transactionProcessingStrategyOptions.push(cn); + } + }); + this.repaymentStrategyDisabled = true; + } } /** diff --git a/src/app/products/charges/view-charge/view-charge.component.ts b/src/app/products/charges/view-charge/view-charge.component.ts index c4e3a971f..144a5a27c 100644 --- a/src/app/products/charges/view-charge/view-charge.component.ts +++ b/src/app/products/charges/view-charge/view-charge.component.ts @@ -36,7 +36,6 @@ export class ViewChargeComponent implements OnInit { private router: Router, private dialog: MatDialog) { this.route.data.subscribe((data: { charge: any }) => { - console.log(data.charge); this.chargeData = data.charge; if (this.chargeData.minCap) { this.minCap = true; diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 8f4606017..c177d2cf9 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -1479,6 +1479,8 @@ "Loan Product": "Úvěrový produkt", "Loan Purpose": "Účel půjčky", "Loan Reschedules": "Termíny půjček", + "Loan Schedule Processing Type": "Typ zpracování plánu úvěru", + "Loan Schedule Type": "Typ harmonogramu půjčky", "Loan Screen Reports": "Zprávy obrazovky půjčky", "Loan Status": "Stav půjčky", "Loan Term": "Doba půjčky", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index 2c79b3337..07f8608dc 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -1479,6 +1479,8 @@ "Loan Product": "Darlehensprodukt", "Loan Purpose": "Darlehen Zweck", "Loan Reschedules": "Kreditumschuldungen", + "Loan Schedule Processing Type": "Kredite Scheduleverarbeitungstyp", + "Loan Schedule Type": "Darlehensplan Typ", "Loan Screen Reports": "Kreditbildschirmberichte", "Loan Status": "Kreditstatus", "Loan Term": "Kreditlaufzeit", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index 8a86bb5c7..81c50ae32 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -1478,6 +1478,8 @@ "Loan Product": "Loan Product", "Loan Purpose": "Loan Purpose", "Loan Reschedules": "Loan Reschedules", + "Loan Schedule Processing Type": "Loan Schedule Processing Type", + "Loan Schedule Type": "Loan Schedule Type", "Loan Screen Reports": "Loan Screen Reports", "Loan Status": "Loan Status", "Loan Term": "Loan Term", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index 4049dac68..16573920e 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -847,7 +847,7 @@ "Total Withdrawals": "Retiros totales", "Transaction Details": "Detalles de la transacción", "Transaction Reverted": "Transacción revertida", - "Transactions": "Actas", + "Transactions": "Transacciones", "Transferred From": "Transferido desde", "Transferred To": "Transferido a", "Transferring From Details": "Transferir desde detalles", @@ -1478,7 +1478,9 @@ "Loan Parameters": "Parámetros del Crédito", "Loan Product": "Producto de Crédito", "Loan Purpose": "Propósito del Crédito", + "Loan Schedule Processing Type": "Tipo de procesamiento del calendario de pagos", "Loan Reschedules": "Reprogramaciones de Créditos", + "Loan Schedule Type": "Tipo de calendario de pagos", "Loan Screen Reports": "Informes de pantalla de Créditos", "Loan Status": "Estado del Crédito", "Loan Term": "Plazo del Crédito", @@ -1949,7 +1951,7 @@ "Transaction Reference": "Referencia de transacción", "Transaction Type": "tipo de transacción", "Transaction date": "Fecha de Transacción", - "Transactions": "Actas", + "Transactions": "Transacciones", "Transfer Date": "Fecha de transferencia", "Transfer Date From": "Fecha de transferencia desde", "Transfer Date To": "Fecha de transferencia a", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index 7f0459bba..33803388c 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -1479,6 +1479,8 @@ "Loan Product": "Produit de prêt", "Loan Purpose": "Objectif du prêt", "Loan Reschedules": "Rééchelonnements de prêt", + "Loan Schedule Processing Type": "Type de traitement des horaires de prêt", + "Loan Schedule Type": "Type de calendrier de prêt", "Loan Screen Reports": "Rapports d'écran de prêt", "Loan Status": "Statut du prêt", "Loan Term": "Durée du prêt", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index 11da9d15c..dfeb61efa 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -1479,6 +1479,8 @@ "Loan Product": "Prodotto di prestito", "Loan Purpose": "Scopo del prestito", "Loan Reschedules": "Riprogrammazione del prestito", + "Loan Schedule Processing Type": "Tipo di elaborazione del programma di prestito", + "Loan Schedule Type": "Tipo di programma di prestito", "Loan Screen Reports": "Rapporti sullo schermo del prestito", "Loan Status": "Stato del prestito", "Loan Term": "Durata del prestito", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index 616d65b5e..dfdafc9d3 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -1479,6 +1479,8 @@ "Loan Product": "대출상품", "Loan Purpose": "대출목적", "Loan Reschedules": "대출 일정 조정", + "Loan Schedule Processing Type": "대출 일정 처리 유형", + "Loan Schedule Type": "대출 일정 유형", "Loan Screen Reports": "대출 화면 보고서", "Loan Status": "대출현황", "Loan Term": "대출기간", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index f505fd4b1..a928d3535 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -1479,6 +1479,8 @@ "Loan Product": "Paskolos produktas", "Loan Purpose": "Paskolos tikslas", "Loan Reschedules": "Paskolų atidėjimas", + "Loan Schedule Processing Type": "Paskolų grafiko apdorojimo tipas", + "Loan Schedule Type": "Paskolos grafiko tipas", "Loan Screen Reports": "Paskolos ekrano ataskaitos", "Loan Status": "Paskolos būsena", "Loan Term": "Paskolos terminas", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index 0bb9c5d62..b44b3ae6b 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -1479,6 +1479,8 @@ "Loan Product": "Aizdevuma produkts", "Loan Purpose": "Aizdevuma mērķis", "Loan Reschedules": "Aizdevuma grafiki", + "Loan Schedule Processing Type": "Aizdevumu grafika apstrādes veids", + "Loan Schedule Type": "Aizdevuma grafika tips", "Loan Screen Reports": "Aizdevuma ekrāna pārskati", "Loan Status": "Aizdevuma statuss", "Loan Term": "Aizdevuma termiņš", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index db8fef744..69855b24f 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -1479,6 +1479,8 @@ "Loan Product": "ऋण उत्पादन", "Loan Purpose": "ऋण उद्देश्य", "Loan Reschedules": "ऋण पुन: तालिका", + "Loan Schedule Processing Type": "ऋण ण अनुसूची प्रशोधन गर्ने प्रकार", + "Loan Schedule Type": "ऋण ण तालिका प्रकार", "Loan Screen Reports": "ऋण स्क्रिन रिपोर्टहरू", "Loan Status": "ऋण स्थिति", "Loan Term": "ऋण अवधि", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index 80f85df5d..66fdb2eb0 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -1479,6 +1479,8 @@ "Loan Product": "Produto de empréstimo", "Loan Purpose": "Finalidade do empréstimo", "Loan Reschedules": "Reprogramações de empréstimos", + "Loan Schedule Processing Type": "Tipo de processamento de cronograma de empréstimo", + "Loan Schedule Type": "Tipo de cronograma de empréstimo", "Loan Screen Reports": "Relatórios de tela de empréstimo", "Loan Status": "Situação do empréstimo", "Loan Term": "Prazo do empréstimo", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index bc95d3fe8..300220b96 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -1479,6 +1479,8 @@ "Loan Product": "Bidhaa ya Mkopo", "Loan Purpose": "Madhumuni ya Mkopo", "Loan Reschedules": "Ratiba za Mikopo", + "Loan Schedule Processing Type": "Aina ya usindikaji wa ratiba ya mkopo", + "Loan Schedule Type": "Aina ya ratiba ya mkopo", "Loan Screen Reports": "Ripoti za skrini ya mkopo", "Loan Status": "Hali ya Mkopo", "Loan Term": "Muda wa Mkopo",