fix: Loan transactions refresh after apply Capitalized Income Adjustment transaction

This commit is contained in:
Jose Alberto Hernandez
2025-05-28 20:03:08 -05:00
parent 2508c475b3
commit 140ae09a6c
17 changed files with 138 additions and 69 deletions
@@ -65,7 +65,7 @@
[ngClass]="loanTransactionColor(transaction)"
(click)="showTransactions(transaction)"
>
{{ transaction.type.value }}
{{ transaction.type.value | translateKey: 'catalogs' }}
</td>
</ng-container>
@@ -26,6 +26,7 @@ import { DatepickerBase } from 'app/shared/form-dialog/formfield/model/datepicke
export class TransactionsTabComponent implements OnInit {
/** Loan Details Data */
transactionsData: LoanTransaction[] = [];
loanDetailsData: any;
/** Form control to handle accural parameter */
hideAccrualsParam: UntypedFormControl;
hideReversedParam: UntypedFormControl;
@@ -89,13 +90,14 @@ export class TransactionsTabComponent implements OnInit {
private alertService: AlertService
) {
this.route.parent.parent.data.subscribe((data: { loanDetailsData: any }) => {
this.transactionsData = data.loanDetailsData.transactions;
this.loanDetailsData = data.loanDetailsData;
this.status = data.loanDetailsData.status.value;
});
this.loanId = this.route.parent.parent.snapshot.params['loanId'];
}
ngOnInit() {
this.transactionsData = this.loanDetailsData.transactions;
this.hideAccrualsParam = new UntypedFormControl(false);
this.hideReversedParam = new UntypedFormControl(false);
this.setLoanTransactions();
@@ -179,6 +181,7 @@ export class TransactionsTabComponent implements OnInit {
* REAGE:29
* REAMORTIZE:30
* INTEREST REFUND:33
* CAPITALIZED INCOME:35
* CONTRACT_TERMINATION:90
*/
showTransactions(transactionsData: LoanTransaction) {
@@ -197,6 +200,7 @@ export class TransactionsTabComponent implements OnInit {
30,
31,
33,
35,
90
].includes(transactionsData.type.id)) {
this.router.navigate([transactionsData.id], { relativeTo: this.route });
@@ -355,9 +359,7 @@ export class TransactionsTabComponent implements OnInit {
private reload() {
const clientId = this.route.parent.parent.snapshot.params['clientId'];
const url: string = this.router.url;
this.router
.navigateByUrl(`/clients/${clientId}/loans-accounts`, { skipLocationChange: true })
.then(() => this.router.navigate([url]));
this.router.navigateByUrl(`/clients`, { skipLocationChange: true }).then(() => this.router.navigate([url]));
}
displaySubMenu(transaction: LoanTransaction): boolean {
@@ -373,65 +375,80 @@ export class TransactionsTabComponent implements OnInit {
.getLoanTransactionActionTemplate(accountId, 'capitalizedIncomeAdjustment', `${transaction.id}`)
.subscribe((response: any) => {
const transactionDate = response.date || transaction.date;
const transactionAmount = response.amount || transaction.amount;
const formfields: FormfieldBase[] = [
new DatepickerBase({
controlName: 'transactionDate',
label: 'Date',
value: this.dateUtils.parseDate(transactionDate),
type: 'datetime-local',
required: true,
minDate: transaction.date,
order: 1
}),
new InputBase({
controlName: 'amount',
label: 'Amount',
value: transactionAmount,
type: 'number',
required: true,
max: transactionAmount,
min: 0.001,
order: 2
})
if (response.amount == 0) {
this.displayAlertMessage('Capitalized Income amount adjusted already adjusted', transaction.amount);
} else {
const transactionAmount = response.amount || transaction.amount;
const formfields: FormfieldBase[] = [
new DatepickerBase({
controlName: 'transactionDate',
label: 'Date',
value: this.dateUtils.parseDate(transactionDate),
type: 'datetime-local',
required: true,
minDate: transaction.date,
order: 1
}),
new InputBase({
controlName: 'amount',
label: 'Amount',
value: transactionAmount,
type: 'number',
required: true,
max: transactionAmount,
min: 0.001,
order: 2
})
];
const data = {
title: `Adjustment ${transaction.type.value} Transaction`,
layout: { addButtonText: 'Adjustment' },
formfields: formfields
};
const chargebackDialogRef = this.dialog.open(FormDialogComponent, { data });
chargebackDialogRef.afterClosed().subscribe((response: { data: any }) => {
if (response.data) {
const dateFormat = this.settingsService.dateFormat;
];
const data = {
title: `Adjustment ${transaction.type.value} Transaction`,
layout: { addButtonText: 'Adjustment' },
formfields: formfields
};
const chargebackDialogRef = this.dialog.open(FormDialogComponent, { data });
chargebackDialogRef.afterClosed().subscribe((response: { data: any }) => {
if (response.data) {
const dateFormat = this.settingsService.dateFormat;
if (response.data.value.amount <= transactionAmount) {
const locale = this.settingsService.language.code;
const payload = {
transactionDate: this.dateUtils.formatDate(response.data.value.transactionDate, dateFormat),
transactionAmount: response.data.value.amount,
locale,
dateFormat
};
this.loansService
.executeLoansAccountTransactionsCommand(
accountId,
'capitalizedIncomeAdjustment',
payload,
transaction.id
)
.subscribe(() => {
this.router.navigate(['../'], { relativeTo: this.route });
});
} else {
this.alertService.alert({
type: 'BusinessRule',
message: 'Chargeback amount must be lower or equal to: ' + transaction.amount
});
if (response.data.value.amount <= transactionAmount) {
const locale = this.settingsService.language.code;
const payload = {
transactionDate: this.dateUtils.formatDate(response.data.value.transactionDate, dateFormat),
transactionAmount: response.data.value.amount,
locale,
dateFormat
};
this.loansService
.executeLoansAccountTransactionsCommand(
accountId,
'capitalizedIncomeAdjustment',
payload,
transaction.id
)
.subscribe(() => {
this.reload();
});
} else {
this.displayAlertMessage(
'Capitalized Income Adjustment amount must be lower or equal to',
transactionAmount
);
}
}
}
});
});
}
});
}
private displayAlertMessage(label: string, amount: number): void {
let message: string = this.translateService.instant('errors.' + label);
if (amount) {
message = message + ': ' + amount;
}
this.alertService.alert({
type: 'BusinessRule',
message: message
});
}
}
@@ -13,7 +13,7 @@
<div
*ngIf="loanProductAccountingForm.value.accountingRule >= 2 && loanProductAccountingForm.value.accountingRule <= 4"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
class="flex-100 layout-row-wrap responsive-column"
>
<mat-checkbox *ngIf="isAccountingAccrualBased" class="flex-73" formControlName="enableAccrualActivityPosting">{{
'labels.inputs.Enable Accrual Activity Posting on Installment Due Date' | translate
@@ -56,7 +56,7 @@
*ngIf="
loanProductAccountingForm.value.accountingRule === 3 || loanProductAccountingForm.value.accountingRule === 4
"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
class="flex-100 layout-row-wrap responsive-column"
>
<mifosx-gl-account-selector
class="flex-48"
@@ -195,7 +195,7 @@
<h4 class="mat-h4 flex-98">{{ 'labels.heading.Expenses' | translate }}</h4>
<mifosx-gl-account-selector
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.writeOffAccountId"
[glAccountList]="expenseAccountData"
[required]="true"
@@ -245,7 +245,7 @@
<mifosx-gl-account-selector
*ngIf="capitalizedIncome?.enableIncomeCapitalization"
fxFlex="48%"
class="flex-48"
[inputFormControl]="loanProductAccountingForm.controls.deferredIncomeLiabilityAccountId"
[glAccountList]="liabilityAccountData"
[required]="true"
@@ -253,7 +253,7 @@
>
</mifosx-gl-account-selector>
<mat-divider fxFlex="98%"></mat-divider>
<mat-divider fxFlex="flex-98"></mat-divider>
<mat-checkbox class="flex-73" formControlName="advancedAccountingRules">{{
'labels.heading.Advanced Accounting Rules' | translate
@@ -261,7 +261,7 @@
<div
*ngIf="loanProductAccountingForm.value.advancedAccountingRules"
class="flex-fill layout-row-wrap gap-2percent responsive-column"
class="flex-100 layout-row-wrap responsive-column"
>
<h4 class="mat-h4 flex-33">
{{ 'labels.heading.Configure Fund Sources for Payment Channels' | translate }}
@@ -492,7 +492,7 @@
</div>
</div>
<div class="layout-row align-center gap-2percent margin-t responsive-column">
<div class="layout-row align-center margin-t responsive-column">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
{{ 'labels.buttons.Previous' | translate }}
@@ -1,4 +1,4 @@
<div class="layout-column">
<div class="layout-column m-r-10">
<mat-form-field class="flex-100" *ngIf="required">
<mat-label>{{ 'labels.inputs.' + inputLabel | translate }}</mat-label>
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Přihlášen jako",
"Remember me": "Zapamatuj si mě",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Výše kapitalizovaného příjmu již upravená",
"Capitalized Income Adjustment amount must be lower or equal to": "Částka úpravy kapitalizovaného příjmu musí být nižší nebo rovna",
"Email not valid": "Email není platný",
"Filling Details": "Kliknutím začněte vyplňovat podrobnosti. * pole označení jsou nezbytná. Pro více podrobností klikněte na:",
"Password is required": "Je vyžadováno heslo",
@@ -536,6 +538,8 @@
"Inactive": "Inactive",
"Loans": "Loans",
"CENTER": "CENTRUM",
"Capitalized Income": "Kapitalizovaný příjem",
"Capitalized Income Adjustment": "Úprava kapitalizovaného příjmu",
"Client": "Client",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "kolekce_list",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Angemeldet als",
"Remember me": "Erinnere dich an mich",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Kapitalisiertes Einkommen Betrag angepasst bereits angepasst",
"Capitalized Income Adjustment amount must be lower or equal to": "Der Betrag der kapitalisierten Einkommensanpassung muss kleiner oder gleich sein",
"Email not valid": "E-Mail ungültig",
"Filling Details": "Klicken Sie hier, um mit dem Ausfüllen der Details zu beginnen. * Markierungsfelder sind erforderlich. Für weitere Details klicken Sie:",
"Password is required": "Passwort wird benötigt",
@@ -536,6 +538,8 @@
"Inactive": "Inaktiv",
"Loans": "Kredite",
"CENTER": "CENTER",
"Capitalized Income": "Kapitalisiertes Einkommen",
"Capitalized Income Adjustment": "Anpassung des kapitalisierten Einkommens",
"Client": "Klient",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "Sammlungsblatt",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Logged in as",
"Remember me": "Remember me",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Capitalized Income amount adjusted already adjusted",
"Capitalized Income Adjustment amount must be lower or equal to": "Capitalized Income Adjustment amount must be lower or equal to",
"Email not valid": "Email not valid",
"Filling Details": "Click to start filling the details. * mark fields are necessary. For more details click:",
"Password is required": "Password is required",
@@ -537,6 +539,8 @@
"Inactive": "Inactive",
"Loans": "Loans",
"CENTER": "CENTER",
"Capitalized Income": "Capitalized Income",
"Capitalized Income Adjustment": "Capitalized Income Adjustment",
"CLIENT": "CLIENT",
"Client": "Client",
"cash_mgmt": "cash_mgmt",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Conectado como",
"Remember me": "Recordar me",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Monto de Ingreso Capitalizado ajustado ya ajustado",
"Capitalized Income Adjustment amount must be lower or equal to": "El monto del Ajuste de Ingreso Capitalizado debe ser menor o igual a",
"Email not valid": "Correo electrónico no válido",
"Filling Details": "Haga clic para comenzar a completar los detalles. * Los campos de marca son necesarios. Para más detalles haga clic en:",
"Password is required": "se requiere contraseña",
@@ -536,6 +538,8 @@
"Inactive": "Inactivo",
"Loans": "Préstamos",
"CENTER": "CENTRO",
"Capitalized Income": "Ingresos capitalizados",
"Capitalized Income Adjustment": "Ajuste de ingresos capitalizados",
"Client": "Cliente",
"cash_mgmt": "gestión_efectivo",
"collection_sheet": "hoja_coleccion",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Conectado como",
"Remember me": "Recordar me",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Monto de Ingreso Capitalizado ajustado ya ajustado",
"Capitalized Income Adjustment amount must be lower or equal to": "El monto del Ajuste de Ingreso Capitalizado debe ser menor o igual a",
"Email not valid": "Correo electrónico no válido",
"Filling Details": "Haga clic para comenzar a completar los detalles. * Los campos de marca son necesarios. Para más detalles haga clic en:",
"Password is required": "se requiere contraseña",
@@ -536,6 +538,8 @@
"Inactive": "Inactivo",
"Loans": "Préstamos",
"CENTER": "CENTRO",
"Capitalized Income": "Ingresos capitalizados",
"Capitalized Income Adjustment": "Ajuste de ingresos capitalizados",
"Client": "Cliente",
"cash_mgmt": "gestión_efectivo",
"collection_sheet": "hoja_coleccion",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "connecté en tant que",
"Remember me": "Souviens-toi de moi",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Montant du revenu capitalisé ajusté déjà ajusté",
"Capitalized Income Adjustment amount must be lower or equal to": "Le montant de l'ajustement du revenu capitalisé doit être inférieur ou égal à",
"Email not valid": "E-mail non valide",
"Filling Details": "Cliquez pour commencer à remplir les détails. * Les champs de marque sont nécessaires. Pour plus de détails, cliquez sur :",
"Password is required": "Mot de passe requis",
@@ -536,6 +538,8 @@
"Inactive": "Inactif",
"Loans": "Prêts",
"CENTER": "CENTRE",
"Capitalized Income": "Revenu capitalisé",
"Capitalized Income Adjustment": "Ajustement du revenu capitalisé",
"Client": "Client",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "feuille_collection",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Collegato come",
"Remember me": "Ricordati di me",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Importo del reddito capitalizzato rettificato già rettificato",
"Capitalized Income Adjustment amount must be lower or equal to": "L'importo dell'adeguamento del reddito capitalizzato deve essere inferiore o uguale a",
"Email not valid": "E-mail non valida",
"Filling Details": "Fare clic per iniziare a compilare i dettagli. *I campi contrassegnati sono obbligatori. Per maggiori dettagli clicca:",
"Password is required": "E 'richiesta la password",
@@ -536,6 +538,8 @@
"Inactive": "Inattivo",
"Loans": "Prestiti",
"CENTER": "CENTRO",
"Capitalized Income": "Reddito capitalizzato",
"Capitalized Income Adjustment": "Adeguamento del reddito capitalizzato",
"Client": "Cliente",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "foglio_raccolta",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "다음 계정으로 로그인됨",
"Remember me": "날 기억해",
"errors": {
"Capitalized Income amount adjusted already adjusted": "자본화된 소득 금액은 이미 조정되었습니다.",
"Capitalized Income Adjustment amount must be lower or equal to": "자본화된 소득 조정 금액은 다음보다 낮거나 같아야 합니다.",
"Email not valid": "이메일이 유효하지 않습니다",
"Filling Details": "세부정보 작성을 시작하려면 클릭하세요. * 표시 필드가 필요합니다. 자세한 내용을 보려면 다음을 클릭하세요.",
"Password is required": "비밀번호가 필요합니다",
@@ -536,6 +538,8 @@
"Inactive": "비활성",
"Loans": "대출",
"CENTER": "센터",
"Capitalized Income": "자본화된 소득",
"Capitalized Income Adjustment": "자본화된 소득 조정",
"Client": "고객",
"cash_mgmt": "현금_관리",
"collection_sheet": "collection_sheet",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "prisijungęs kaip",
"Remember me": "Prisimink mane",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Kapitalizuotų pajamų suma pakoreguota jau pakoreguota",
"Capitalized Income Adjustment amount must be lower or equal to": "Kapitalizuotų pajamų koregavimo suma turi būti mažesnė arba lygi",
"Email not valid": "El. pašto adresas negalioja",
"Filling Details": "Spustelėkite norėdami pradėti pildyti išsamią informaciją. * žymėjimo laukai yra būtini. Norėdami gauti daugiau informacijos, spustelėkite:",
"Password is required": "reikalingas slaptazodis",
@@ -536,6 +538,8 @@
"Inactive": "Neaktyvus",
"Loans": "Paskolos",
"CENTER": "CENTRAS",
"Capitalized Income": "Kapitalizuotos pajamos",
"Capitalized Income Adjustment": "Kapitalizuotų pajamų koregavimas",
"Client": "Klientas",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "kolekcijos_lapas",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "ielogojies Kā",
"Remember me": "Atceries mani",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Kapitalizēto ienākumu summa jau koriģēta",
"Capitalized Income Adjustment amount must be lower or equal to": "Kapitalizēto ienākumu korekcijas summai ir jābūt mazākai vai vienādai ar",
"Email not valid": "E-pasts nav derīgs",
"Filling Details": "Noklikšķiniet, lai sāktu aizpildīt informāciju. * ir nepieciešami atzīmju lauki. Lai iegūtu sīkāku informāciju, noklikšķiniet:",
"Password is required": "nepieciešama parole",
@@ -536,6 +538,8 @@
"Inactive": "Neaktīvs",
"Loans": "Aizdevumi",
"CENTER": "CENTRS",
"Capitalized Income": "Kapitalizētie ienākumi",
"Capitalized Income Adjustment": "Kapitalizēto ienākumu korekcija",
"Client": "Klients",
"cash_mgmt": "naudas_mgmt",
"collection_sheet": "kolekcijas_lapa",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "को रूपमा लग इन गरियो",
"Remember me": "मलाई सम्झनुहोस्",
"errors": {
"Capitalized Income amount adjusted already adjusted": "क्यापिटलाइज्ड आय रकम पहिले नै समायोजन गरिएको छ",
"Capitalized Income Adjustment amount must be lower or equal to": "पूंजीकृत आय समायोजन रकम कम वा बराबर हुनुपर्छ",
"Email not valid": "इमेल मान्य छैन",
"Filling Details": "विवरणहरू भर्न सुरु गर्न क्लिक गर्नुहोस्। * मार्क क्षेत्रहरू आवश्यक छन्। थप विवरणहरूको लागि क्लिक गर्नुहोस्:",
"Password is required": "पासवर्ड आवश्यक छ",
@@ -536,6 +538,8 @@
"Inactive": "निष्क्रिय",
"Loans": "ऋण",
"CENTER": "केन्द्र",
"Capitalized Income": "पुँजीगत आय",
"Capitalized Income Adjustment": "पूंजीकृत आय समायोजन",
"Client": "ग्राहक",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "संग्रह_पाना",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "logado como",
"Remember me": "Lembre de mim",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Valor da Renda Capitalizada ajustado já ajustado",
"Capitalized Income Adjustment amount must be lower or equal to": "O valor do ajuste de renda capitalizada deve ser menor ou igual a",
"Email not valid": "E-mail não válido",
"Filling Details": "Clique para começar a preencher os dados. * os campos de marcação são necessários. Para mais detalhes clique:",
"Password is required": "Senha requerida",
@@ -536,6 +538,8 @@
"Inactive": "Inativo",
"Loans": "Empréstimos",
"CENTER": "CENTRO",
"Capitalized Income": "Renda Capitalizada",
"Capitalized Income Adjustment": "Ajuste de Renda Capitalizada",
"Client": "Cliente",
"cash_mgmt": "dinheiro_mgmt",
"collection_sheet": "planilha_de_coleção",
+4
View File
@@ -3,6 +3,8 @@
"Logged in as": "Imeingia kama",
"Remember me": "Nikumbuke",
"errors": {
"Capitalized Income amount adjusted already adjusted": "Kiasi cha Mapato ya Mtaji kilichorekebishwa tayari kimerekebishwa",
"Capitalized Income Adjustment amount must be lower or equal to": "Kiasi cha Marekebisho ya Mapato ya Mtaji lazima kiwe chini au sawa na",
"Email not valid": "Barua pepe si halali",
"Filling Details": "Bofya ili kuanza kujaza maelezo. * maeneo ya alama ni muhimu. Kwa maelezo zaidi bofya:",
"Password is required": "Nenosiri linahitajika",
@@ -536,6 +538,8 @@
"Inactive": "Isiyotumika",
"Loans": "Mikopo",
"CENTER": "KITUO",
"Capitalized Income": "Mapato ya Mtaji",
"Capitalized Income Adjustment": "Marekebisho ya Mapato ya Mtaji",
"Client": "Mteja",
"cash_mgmt": "cash_mgmt",
"collection_sheet": "laha_ya_mkusanyo",