diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 90c6d8aef3..606f5d6974 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,6 +1,7 @@
/** Angular Imports */
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
+import { I18nService } from './core/i18n/i18n.service';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import {
HttpBackend,
@@ -130,7 +131,9 @@ export function HttpLoaderFactory(http: HttpClient) {
provide: HTTP_INTERCEPTORS,
useClass: !environment.OIDC.oidcServerEnabled ? TokenInterceptor : ZitadelTokenInterceptor,
multi: true
- }
+ },
+ I18nService
+
]
})
export class AppModule {}
diff --git a/src/app/loans/glim-account/create-glim-account/create-glim-account.component.ts b/src/app/loans/glim-account/create-glim-account/create-glim-account.component.ts
index c1d04dcfb7..3af7a00547 100644
--- a/src/app/loans/glim-account/create-glim-account/create-glim-account.component.ts
+++ b/src/app/loans/glim-account/create-glim-account/create-glim-account.component.ts
@@ -177,37 +177,42 @@ export class CreateGlimAccountComponent {
};
}
- setData(client: any, totalLoan: number): any {
+ setData(applicationId: number, client: any, totalLoan: number, isFirst: boolean, isLast: boolean): any {
const locale = this.settingsService.language.code;
const dateFormat = this.settingsService.dateFormat;
// const monthDayFormat = 'dd MMMM';
- const data = {
+ const data: any = {
...this.loansAccount,
charges: this.loansAccount.charges.map((charge: any) => ({
chargeId: charge.id,
- amount: charge.amount
+ amount: charge.amount,
+ currency: charge.currency
})),
clientId: client.id,
totalLoan: totalLoan,
loanType: 'glim',
+ applicationId: applicationId,
amortizationType: 1,
- isParentAccount: true,
principal: client.principal,
syncDisbursementWithMeeting: false,
expectedDisbursementDate: this.dateUtils.formatDate(this.loansAccount.expectedDisbursementDate, dateFormat),
submittedOnDate: this.dateUtils.formatDate(this.loansAccount.submittedOnDate, dateFormat),
- dateFormat,
- // monthDayFormat,
- locale
+ dateFormat: dateFormat,
+ locale: locale,
+ groupId: this.loansAccountTemplate.group.id
};
- data.groupId = this.loansAccountTemplate.group.id;
-
+ if (isFirst) {
+ data.isParentAccount = true;
+ }
+ if (isLast) {
+ data.lastApplication = true;
+ }
delete data.principalAmount;
- // TODO: 2025-03-17: Apparently (?!) unsupported for GLIM
delete data.allowPartialPeriodInterestCalculation;
delete data.multiDisburseLoan;
delete data.isFloatingInterestRate;
-
+ delete data.moratoriumPrincipal;
+ delete data.moratoriumInterest;
return JSON.stringify(data);
}
@@ -216,12 +221,17 @@ export class CreateGlimAccountComponent {
const requestData = [];
const memberSelected = this.selectedMembers?.selectedMembers ?? [];
const totalLoan = this.totalLoanAmount();
+ const applicationId = Math.floor(1000000000 + Math.random() * 9000000000);
+
for (let index = 0; index < memberSelected.length; index++) {
+ const isFirst = index === 0;
+ const isLast = index === memberSelected.length - 1;
requestData.push({
requestId: index.toString(),
+ reference: index === 0 ? null : (index - 1).toString(),
method: 'POST',
relativeUrl: 'loans',
- body: this.setData(memberSelected[index], totalLoan)
+ body: this.setData(applicationId, memberSelected[index], totalLoan, isFirst, isLast)
});
}
return requestData;
@@ -236,57 +246,10 @@ export class CreateGlimAccountComponent {
return total;
}
- /**
- * Creates a new GLIM account.
- */
- submit() {
- this.selectedMembers = this.loansActiveClientMembers?.selectedClientMembers;
- const memberSelected = this.loansActiveClientMembers?.selectedClientMembers?.selectedMembers ?? [];
- if (!memberSelected.length) return;
- const gsimMemberIds = new Set(this.dataSource.map((m: any) => Number(m.id)));
- for (const member of memberSelected) {
- const memberId = Number(member.id);
- // Validate savings account ownership
- const ownerId = Number(member.linkAccountOwnerId);
- if (member.linkAccountId && member.linkAccountOwnerId && ownerId !== memberId) {
- this.i18nService.translate('errors.linkedSavingsAccountOwnership').subscribe((msg: string) => {
- this.notify({ defaultUserMessage: msg, errors: [] }, { memberId });
- });
- return;
- }
- // Validate GSIM membership
- if (!gsimMemberIds.has(memberId)) {
- this.i18nService.translate('errors.clientNotInGSIM', { id: memberId }).subscribe((msg: string) => {
- this.notify({ defaultUserMessage: msg, errors: [] }, { memberId });
- });
- return;
- }
- }
-
- // Use date format from settingsService for interestChargedFromDate
- const data = this.buildRequestData();
- this.loansService.createGlimAccount(data).subscribe((response: any) => {
- const body = JSON.parse(response[0].body);
- if (body.glimId) {
- this.router.navigate(
- [
- '../',
- body.glimId
- ],
- { relativeTo: this.route }
- );
- } else {
- this.notify(body, { batchSize: data.length });
- }
- });
- }
-
- notify(body: any, context?: { [k: string]: unknown }) {
- const parts: string[] = [String(body?.defaultUserMessage ?? '')];
- if (Array.isArray(body?.errors)) {
- for (const e of body.errors) parts.push(String(e?.developerMessage ?? ''));
- }
- if (context) parts.push(`Context: ${JSON.stringify(context)}`);
- console.error(parts.join(' ').trim());
+ notify(body: any, data: any) {
+ let message = body.defaultUserMessage + ' ';
+ body.errors?.forEach((error: any) => (message += error.developerMessage + ' '));
+ message += 'Data: ' + JSON.stringify(data);
+ console.error(message);
}
}
diff --git a/src/app/loans/loans-account-stepper/loans-account-charges-step/loans-account-charges-step.component.html b/src/app/loans/loans-account-stepper/loans-account-charges-step/loans-account-charges-step.component.html
index bec25484fa..bd323915a2 100644
--- a/src/app/loans/loans-account-stepper/loans-account-charges-step/loans-account-charges-step.component.html
+++ b/src/app/loans/loans-account-stepper/loans-account-charges-step/loans-account-charges-step.component.html
@@ -24,7 +24,7 @@
{{ 'labels.inputs.name' | translate }}
- {{ charge.name + ', ' + charge.currency.displaySymbol }}
+ {{ charge.name }}, {{ charge.currency.displaySymbol }}