From 9ddb79ba450b4419ab7b0b6cb7dc27d12c9db341 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Fri, 28 Mar 2025 00:06:06 -0600 Subject: [PATCH] Restore Interbank functionality --- .../account-transfers.service.ts | 34 +++++++++++++++++++ .../make-account-transfers.component.ts | 26 +++++++++++++- .../savings-account-view.component.ts | 2 +- src/assets/env.js | 5 +++ src/assets/env.template.js | 5 +++ src/environments/environment.prod.ts | 5 +++ src/environments/environment.ts | 5 ++- 7 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/app/account-transfers/account-transfers.service.ts b/src/app/account-transfers/account-transfers.service.ts index 571d2f55c..26b1381a0 100644 --- a/src/app/account-transfers/account-transfers.service.ts +++ b/src/app/account-transfers/account-transfers.service.ts @@ -114,4 +114,38 @@ export class AccountTransfersService { getViewAccountTransferDetails(transferId: any): Observable { return this.http.get(`/accounttransfers/${transferId}`); } + + getAccountByNumber(accountNumber: string, currency: string): Observable { + const payload = { + partyId: accountNumber, + partyIdType: 'MSISDN', + currencyCode: currency + }; + const headers = new HttpHeaders({ 'Content-Type': 'application/json' }); + return this.http + .post( + `${environment.vNextApiUrl}${environment.vNextApiVersion}${environment.vNextApiProvider}/participant`, + JSON.stringify(payload), + { headers } + ) + .pipe( + switchMap((participant: any) => { + const body = JSON.stringify({ ...payload, ownerFspId: participant.fspId }); + return this.http.post( + `${environment.vNextApiUrl}${environment.vNextApiVersion}${environment.vNextApiProvider}/partyinfo`, + body, + { headers } + ); + }) + ); + } + + sendInterbankTransfer(body: any): Observable { + const headers = new HttpHeaders({ 'Content-Type': 'application/json' }); + return this.http.post( + `${environment.vNextApiUrl}${environment.vNextApiVersion}${environment.vNextApiProvider}/executetransfer`, + body, + { headers } + ); + } } diff --git a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.ts b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.ts index fabebbf67..dcff0edab 100644 --- a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.ts +++ b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.ts @@ -318,7 +318,31 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { }, note: this.makeAccountTransferForm.controls.transferDescription.value }; + this.accountTransfersService.sendInterbankTransfer(JSON.stringify(payload)).subscribe( + (trnsfr) => { + if (trnsfr.systemMessage) { + this.isLoading = false; + this.router.navigate(['../../transactions'], { relativeTo: this.route }); + } + }, + (error) => { + this.isLoading = false; + } + ); } - searchAccountByNumber() {} + searchAccountByNumber() { + this.isLoading = true; + this.accountTransfersService + .getAccountByNumber(this.phoneAccount, this.accountTransferTemplateData.currency.code) + .subscribe( + (acc) => { + this.interbankTransferForm = true; + this.createMakeAccountInterbankTransferForm(acc); + }, + (error) => { + this.isLoading = false; + } + ); + } } diff --git a/src/app/savings/savings-account-view/savings-account-view.component.ts b/src/app/savings/savings-account-view/savings-account-view.component.ts index 2578902af..674201d68 100644 --- a/src/app/savings/savings-account-view/savings-account-view.component.ts +++ b/src/app/savings/savings-account-view/savings-account-view.component.ts @@ -85,7 +85,7 @@ export class SavingsAccountViewComponent implements OnInit { taskPermissionName: 'CREATE_ACCOUNTTRANSFER' }); } - if (this.savingsAccountData.externalId) { + if (this.savingsAccountData.externalId && environment.interbankTransfers === 'true') { this.buttonConfig.addOption({ name: 'Interbank Transfer', taskPermissionName: 'CREATE_ACCOUNTTRANSFER' diff --git a/src/assets/env.js b/src/assets/env.js index 15f624da2..7c9af188b 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -47,4 +47,9 @@ // Min Password length window['env']['minPasswordLength'] = '12'; + window["env"]["vNextApiUrl"] = ''; + window["env"]["vNextApiProvider"] = ''; + window["env"]["vNextApiVersion"] = ''; + window["env"]["interbankTransfers"] = "false"; + })(this); diff --git a/src/assets/env.template.js b/src/assets/env.template.js index 9b04c235b..0f2ed94b8 100644 --- a/src/assets/env.template.js +++ b/src/assets/env.template.js @@ -46,4 +46,9 @@ // Min Password length window['env']['minPasswordLength'] = '$MIFOS_MIN_PASSWORD_LENGTH'; + + window['env']['vNextApiUrl'] = '$VNEXT_API_URL'; + window['env']['vNextApiProvider'] = '$VNEXT_API_PROVIDER'; + window['env']['vNextApiVersion'] = '$VNEXT_API_VERSION'; + window['env']['interbankTransfers'] = '$VNEXT_INTERBANK_TRANSFERS'; })(this); diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index ec87f7fc8..7d22f2ff5 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -52,6 +52,11 @@ export const environment = { } }, + vNextApiUrl: loadedEnv['vNextApiUrl'] || 'https://apis.mifos.community', + vNextApiProvider: loadedEnv['vNextApiProvider'] || '/vnext1', + vNextApiVersion: loadedEnv['vNextApiVersion'] || '/v1.0', + interbankTransfers: loadedEnv['interbankTransfers'] || false, + minPasswordLength: loadedEnv['minPasswordLength'] || 12 }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 085341b24..e2c13c013 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -55,7 +55,10 @@ export const environment = { idleTimeout: loadedEnv['sessionIdleTimeout'] || 300000 // 5 minutes } }, - + vNextApiUrl: loadedEnv['vNextApiUrl'] || 'https://apis.mifos.community', + vNextApiProvider: loadedEnv['vNextApiProvider'] || '/vnext1', + vNextApiVersion: loadedEnv['vNextApiVersion'] || '/v1.0', + interbankTransfers: loadedEnv['interbankTransfers'] || false, minPasswordLength: loadedEnv['minPasswordLength'] || 12 };