From 88086e3d7987e857417c3e00058dea3943dfce56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20Esp=C3=ADndola?= <36246104+gustavao@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:57:05 -0600 Subject: [PATCH] feat: interbank transfer (#2299) --- .../account-transfers.module.ts | 4 +- .../account-transfers.service.ts | 40 ++++- ...make-account-transfer-template.resolver.ts | 4 + ...account-interbank-transfers.component.html | 63 +++++++ ...account-interbank-transfers.component.scss | 22 +++ ...ount-interbank-transfers.component.spec.ts | 22 +++ ...e-account-interbank-transfers.component.ts | 19 +++ .../make-account-transfers.component.html | 70 +++++++- .../make-account-transfers.component.scss | 16 ++ .../make-account-transfers.component.ts | 157 ++++++++++++++++-- .../savings-account-view.component.ts | 27 ++- src/assets/env.js | 17 +- src/assets/env.template.js | 5 + src/assets/translations/en-US.json | 2 + src/environments/environment.prod.ts | 6 +- src/environments/environment.ts | 6 +- 16 files changed, 452 insertions(+), 28 deletions(-) create mode 100644 src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.html create mode 100644 src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.scss create mode 100644 src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.spec.ts create mode 100644 src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.ts diff --git a/src/app/account-transfers/account-transfers.module.ts b/src/app/account-transfers/account-transfers.module.ts index 5189f4ea4..4ac3b1d3f 100644 --- a/src/app/account-transfers/account-transfers.module.ts +++ b/src/app/account-transfers/account-transfers.module.ts @@ -15,6 +15,7 @@ import { MakeAccountTransfersComponent } from './make-account-transfers/make-acc import { ListStandingInstructionsComponent } from './list-standing-instructions/list-standing-instructions.component'; import { ListTransactionsComponent } from './list-transactions/list-transactions.component'; import { ViewAccountTransferComponent } from './view-account-transfer/view-account-transfer.component'; +import { MakeAccountInterbankTransfersComponent } from './make-account-interbank-transfers/make-account-interbank-transfers.component'; /** * Account Transfers Module * @@ -34,7 +35,8 @@ import { ViewAccountTransferComponent } from './view-account-transfer/view-accou MakeAccountTransfersComponent, ListStandingInstructionsComponent, ListTransactionsComponent, - ViewAccountTransferComponent + ViewAccountTransferComponent, + MakeAccountInterbankTransfersComponent ], providers: [] }) diff --git a/src/app/account-transfers/account-transfers.service.ts b/src/app/account-transfers/account-transfers.service.ts index 77d96980c..26b1381a0 100644 --- a/src/app/account-transfers/account-transfers.service.ts +++ b/src/app/account-transfers/account-transfers.service.ts @@ -1,10 +1,14 @@ /** Angular Imports */ import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; /** rxjs Imports */ import { Observable } from 'rxjs'; +/** Environment Configuration */ +import { environment } from 'environments/environment'; +import { switchMap } from 'rxjs/operators'; + /** * Account Transfers Service. */ @@ -110,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/common-resolvers/make-account-transfer-template.resolver.ts b/src/app/account-transfers/common-resolvers/make-account-transfer-template.resolver.ts index faf98da92..4f58169c0 100644 --- a/src/app/account-transfers/common-resolvers/make-account-transfer-template.resolver.ts +++ b/src/app/account-transfers/common-resolvers/make-account-transfer-template.resolver.ts @@ -36,6 +36,10 @@ export class MakeAccountTransferTemplateResolver implements Resolve { this.accountTypeId = '2'; this.id = route.queryParamMap.get('savingsId'); break; + case 'interbank': + this.accountTypeId = '2'; + this.id = route.queryParamMap.get('savingsId'); + break; default: this.accountTypeId = '0'; } diff --git a/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.html b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.html new file mode 100644 index 000000000..f4c5b973c --- /dev/null +++ b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.html @@ -0,0 +1,63 @@ +
+
+ + {{ 'labels.inputs.Transaction Date' | translate }} + + + + + {{ 'labels.inputs.Transaction Date' | translate }} {{ 'labels.commons.is' | translate }} + {{ 'labels.commons.required' | translate }} + + + + + {{ 'labels.inputs.Bank' | translate }} + + + + + {{ 'labels.inputs.Client' | translate }} + + + + + {{ 'labels.inputs.Account Type' | translate }} + + + + + {{ 'labels.inputs.Account' | translate }} + + + + + {{ 'labels.inputs.Amount' | translate }} + + + {{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }} + {{ 'labels.commons.required' | translate }} + + + + {{ 'errors.validation.msg.savingsproduct.insufficient.balance' | translate: { balance } }} + + + + + {{ 'labels.inputs.Description' | translate }} + + + {{ 'labels.inputs.Transfer Description' | translate }} {{ 'labels.commons.is' | translate }} + {{ 'labels.commons.required' | translate }} + + +
+
diff --git a/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.scss b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.scss new file mode 100644 index 000000000..c6d561f95 --- /dev/null +++ b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.scss @@ -0,0 +1,22 @@ +h2, +h3, +h4 { + margin: 0; + font-weight: 500; +} + +span { + margin: 0.5em 0; +} + +.margin-t { + margin-top: 1em; +} + +mat-divider { + margin: 0 0 0.5em; +} + +.container { + max-width: 37rem; +} diff --git a/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.spec.ts b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.spec.ts new file mode 100644 index 000000000..7135e2212 --- /dev/null +++ b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MakeAccountInterbankTransfersComponent } from './make-account-interbank-transfers.component'; + +describe('MakeAccountInterbankTransfersComponent', () => { + let component: MakeAccountInterbankTransfersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MakeAccountInterbankTransfersComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(MakeAccountInterbankTransfersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.ts b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.ts new file mode 100644 index 000000000..383efe163 --- /dev/null +++ b/src/app/account-transfers/make-account-interbank-transfers/make-account-interbank-transfers.component.ts @@ -0,0 +1,19 @@ +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { MatInput } from '@angular/material/input'; + +@Component({ + selector: 'mifosx-make-account-interbank-transfers', + templateUrl: './make-account-interbank-transfers.component.html', + styleUrls: ['./make-account-interbank-transfers.component.scss'] +}) +export class MakeAccountInterbankTransfersComponent { + @Input() makeAccountTransferForm: FormGroup; + @Input() balance: number; + + /** Minimum date allowed. */ + minDate = new Date(2000, 0, 1); + /** Maximum date allowed. */ + maxDate = new Date(2100, 0, 1); +} diff --git a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html index f5cc2bc6f..459f8595f 100644 --- a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html +++ b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.html @@ -1,5 +1,11 @@
- +
+
+
+
+
+
+

{{ 'labels.heading.Transferring From Details' | translate }}

@@ -36,11 +42,52 @@
-

{{ 'labels.heading.Transferred To' | translate }}

+
+
+

+ {{ 'labels.heading.Transferred To' | translate }} +

+ + {{ 'labels.inputs.Phone Number' | translate }} + + {{ phoneAccount.length || 0 }}/10 + +
+ + + + + +
-
+
{{ 'labels.inputs.Transaction Date' | translate }} @@ -121,6 +168,10 @@ {{ 'labels.inputs.Amount' | translate }} {{ 'labels.commons.is' | translate }} {{ 'labels.commons.required' | translate }} + + + {{ 'errors.validation.msg.savingsproduct.insufficient.balance' | translate: { balance } }} + @@ -138,9 +189,20 @@
+ - + diff --git a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.scss b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.scss index c6d561f95..a25614c2b 100644 --- a/src/app/account-transfers/make-account-transfers/make-account-transfers.component.scss +++ b/src/app/account-transfers/make-account-transfers/make-account-transfers.component.scss @@ -20,3 +20,19 @@ mat-divider { .container { max-width: 37rem; } + +::ng-deep mat-form-field.error-warn.mat-form-field-invalid .mat-form-field-ripple { + background-color: #000000de !important; +} + +::ng-deep mat-form-field.error-warn.mat-form-field-invalid .mat-form-field-label { + color: #0009 !important; + + .mat-form-field-required-marker { + color: #0009 !important; + } +} + +::ng-deep mat-form-field.error-warn.mat-form-field-invalid .mat-error { + color: #0009 !important; +} 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 fca33ec1a..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 @@ -1,13 +1,24 @@ /** Angular Imports */ -import { Component, OnInit, AfterViewInit } from '@angular/core'; +import { Component, OnInit, AfterViewInit, ViewChild, ElementRef } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { + AbstractControl, + FormGroup, + UntypedFormBuilder, + UntypedFormGroup, + ValidationErrors, + Validators +} from '@angular/forms'; /** Custom Services */ import { AccountTransfersService } from '../account-transfers.service'; import { SettingsService } from 'app/settings/settings.service'; import { ClientsService } from 'app/clients/clients.service'; import { Dates } from 'app/core/utils/dates'; +import { MatInput } from '@angular/material/input'; + +/** Environment Configuration */ +import { environment } from 'environments/environment'; /** * Create account transfers @@ -26,6 +37,7 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { maxDate = new Date(2100, 0, 1); /** Edit Standing Instructions form. */ makeAccountTransferForm: UntypedFormGroup; + //makeAccountInterbankTransferForm: FormGroup; /** To Office Type Data */ toOfficeTypeData: any; /** To Client Type Data */ @@ -42,6 +54,13 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { id: any; /** Clients Data */ clientsData: any; + /** interbank transfer */ + interbank: boolean = false; + /** Reference of phoneAccount search */ + phoneAccount = ''; + interbankTransferForm: boolean = false; + balance: number = 0; + isLoading: boolean = false; /** * Retrieves the standing instructions template from `resolve`. @@ -77,8 +96,12 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { this.id = this.route.snapshot.queryParams['loanId']; break; case 'fromsavings': + case 'interbank': this.accountTypeId = '2'; this.id = this.route.snapshot.queryParams['savingsId']; + this.interbank = this.route.snapshot.queryParams['interbank'] === 'true'; + this.balance = this.router.getCurrentNavigation().extras.state.balance; + console.log('is interbank?', this.interbank); break; default: this.accountTypeId = '0'; @@ -90,7 +113,9 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { */ ngOnInit() { this.maxDate = this.settingsService.businessDate; - this.createMakeAccountTransferForm(); + if (!this.interbank) { + this.createMakeAccountTransferForm(); + } } /** @@ -116,7 +141,10 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { ], transferAmount: [ this.accountTransferTemplateData.transferAmount, - Validators.required + [ + Validators.required, + Validators.min(0.01), + this.amountExceedsBalanceValidator.bind(this)] ], transferDate: [ this.settingsService.businessDate, @@ -129,6 +157,48 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { }); } + createMakeAccountInterbankTransferForm(account: any) { + /* --> */ this.makeAccountTransferForm = this.formBuilder.group({ + toBank: [ + { value: account.sourceFspId, disabled: true }, + Validators.required + ], + toClientId: [ + { value: account.firsName + ' ' + account.lastName, disabled: true }, + Validators.required + ], + toAccountType: [ + { value: 'Saving Account', disabled: true }, + Validators.required + ], + toAccountId: [ + { value: account.partyId, disabled: true }, + Validators.required + ], + transferAmount: [ + this.accountTransferTemplateData.transferAmount, + [ + Validators.required, + Validators.min(0.01), + this.amountExceedsBalanceValidator.bind(this)] + ], + transferDate: [ + this.settingsService.businessDate, + Validators.required + ], + transferDescription: [ + '', + Validators.required + ] + }); + this.isLoading = false; + } + + amountExceedsBalanceValidator(control: AbstractControl): ValidationErrors | null { + const amount = control.value; + return amount > this.balance ? { amountExceedsBalance: true } : null; + } + /** Sets options value */ setOptions() { this.toOfficeTypeData = this.accountTransferTemplateData.toOfficeOptions; @@ -172,14 +242,16 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { * Subscribes to Clients search filter: */ ngAfterViewInit() { - this.makeAccountTransferForm.controls.toClientId.valueChanges.subscribe((value: string) => { - if (value.length >= 2) { - this.clientsService.getFilteredClients('displayName', 'ASC', true, value).subscribe((data: any) => { - this.clientsData = data.pageItems; - }); - this.changeEvent(); - } - }); + if (!this.interbank) { + this.makeAccountTransferForm.controls.toClientId.valueChanges.subscribe((value: string) => { + if (value.length >= 2) { + this.clientsService.getFilteredClients('displayName', 'ASC', true, value).subscribe((data: any) => { + this.clientsData = data.pageItems; + }); + this.changeEvent(); + } + }); + } } /** @@ -195,6 +267,11 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { * Submits the standing instructions form */ submit() { + this.interbank ? this.makeInterbankTransfer() : this.makeTransfer(); + } + + makeTransfer() { + this.isLoading = true; const dateFormat = this.settingsService.dateFormat; const locale = this.settingsService.language.code; const makeAccountTransferData = { @@ -209,7 +286,63 @@ export class MakeAccountTransfersComponent implements OnInit, AfterViewInit { fromOfficeId: this.accountTransferTemplateData.fromClient.officeId }; this.accountTransfersService.createAccountTransfer(makeAccountTransferData).subscribe(() => { + this.isLoading = false; this.router.navigate(['../../transactions'], { relativeTo: this.route }); }); } + + makeInterbankTransfer() { + this.isLoading = true; + const payload = { + homeTransactionId: crypto.randomUUID(), + from: { + fspId: environment.fineractPlatformTenantId, + idType: 'MSISDN', + idValue: this.accountTransferTemplateData.fromAccount.externalId.trim() + }, + to: { + fspId: this.makeAccountTransferForm.controls.toBank.value, + idType: 'MSISDN', + idValue: this.makeAccountTransferForm.controls.toAccountId.value + }, + amountType: 'SEND', + amount: { + currencyCode: this.accountTransferTemplateData.currency.code, + amount: this.makeAccountTransferForm.controls.transferAmount.value + }, + transactionType: { + scenario: 'TRANSFER', + subScenario: 'DOMESTIC', + initiator: 'PAYER', + initiatorType: 'CUSTOMER' + }, + 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() { + 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 2d390019f..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 @@ -16,6 +16,9 @@ import { ConfirmationDialogComponent } from 'app/shared/confirmation-dialog/conf import { Currency } from 'app/shared/models/general.model'; import { TranslateService } from '@ngx-translate/core'; +/** Environment Configuration */ +import { environment } from 'environments/environment'; + /** * Savings Account View Component */ @@ -82,6 +85,12 @@ export class SavingsAccountViewComponent implements OnInit { taskPermissionName: 'CREATE_ACCOUNTTRANSFER' }); } + if (this.savingsAccountData.externalId && environment.interbankTransfers === 'true') { + this.buttonConfig.addOption({ + name: 'Interbank Transfer', + taskPermissionName: 'CREATE_ACCOUNTTRANSFER' + }); + } if (!this.savingsAccountData.fieldOfficerId) { this.buttonConfig.addOption({ name: 'Assign Staff', @@ -178,12 +187,26 @@ export class SavingsAccountViewComponent implements OnInit { this.disableWithHoldTax(); break; case 'Transfer Funds': - const queryParams: any = { savingsId: this.savingsAccountData.id, accountType: 'fromsavings' }; + const queryParams: any = { + interbank: false, + savingsId: this.savingsAccountData.id, + accountType: 'fromsavings' + }; this.router.navigate(['transfer-funds/make-account-transfer'], { relativeTo: this.route, - queryParams: queryParams + queryParams: queryParams, + state: { balance: this.savingsAccountData.summary.availableBalance } }); break; + case 'Interbank Transfer': { + const queryParams: any = { interbank: true, savingsId: this.savingsAccountData.id, accountType: 'interbank' }; + this.router.navigate(['transfer-funds/make-account-transfer'], { + relativeTo: this.route, + queryParams: queryParams, + state: { balance: this.savingsAccountData.summary.availableBalance } + }); + break; + } case 'Unblock Account': case 'Unblock Deposit': case 'Unblock Withdrawal': diff --git a/src/assets/env.js b/src/assets/env.js index 334e1c240..f24b91517 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -2,18 +2,18 @@ window["env"] = window["env"] || {}; // BackEnd Environment variables - window["env"]["fineractApiUrls"] = ''; - window["env"]["fineractApiUrl"] = ''; + window['env']['fineractApiUrls'] = ''; + window['env']['fineractApiUrl'] = ''; - window["env"]["apiProvider"] = ''; - window["env"]["apiVersion"] = ''; + window['env']['apiProvider'] = ''; + window['env']['apiVersion'] = ''; window["env"]["fineractPlatformTenantId"] = ''; window["env"]["fineractPlatformTenantIds"] = ''; // Language Environment variables - window["env"]["defaultLanguage"] = ''; - window["env"]["supportedLanguages"] = ''; + window['env']['defaultLanguage'] = ''; + window['env']['supportedLanguages'] = ''; window['env']['preloadClients'] = ''; @@ -44,4 +44,9 @@ // OAuth Client Id window['env']['oauthAppId'] = ''; + 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 36c9e8b80..935a4311e 100644 --- a/src/assets/env.template.js +++ b/src/assets/env.template.js @@ -43,4 +43,9 @@ // OAuth Client Id window['env']['oauthAppId'] = '$MIFOS_OAUTH_CLIENT_ID'; + + 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/assets/translations/en-US.json b/src/assets/translations/en-US.json index f0868c50a..d87dc03fb 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -245,6 +245,7 @@ "validation.msg.savingsproduct.description.exceeds.max.length": "Description cannot be over {{params[0].value}} characters long.", "validation.msg.savingsproduct.digitsAfterDecimal.is.not.within.expected.range": "Decimal places entered is `{{params[0].value}}` and must be a number between {{params[1].value}} and {{params[2].value}}.", "validation.msg.savingsproduct.incomeFromFeeAccountId.cannot.be.blank ": "Income from Fees Account is mandatory", + "validation.msg.savingsproduct.insufficient.balance": "You have a balance of ${{balance}} in your account", "validation.msg.savingsproduct.interestCalculationDaysInYearType.cannot.be.blank": "Interest calculation (Days in Year) is mandatory.", "validation.msg.savingsproduct.interestCalculationDaysInYearType.is.not.one.of.expected.enumerations": "Interest calculation (Days in Year) must be one of `[ {{params[1].value}} ]`.", "validation.msg.savingsproduct.interestCalculationType.cannot.be.blank": "Interest calculation type is mandatory.", @@ -2525,6 +2526,7 @@ "Navigation": "Navigation", "Notifications": "Notifications", "Organization": "Organization", + "Interbank Transfer": "Interbank Transfer", "Interest Payment Waiver": "Interest Payment Waiver", "Payments": "Payments", "Payout Refund": "Payout Refund", diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index c4d911fed..b9e4495b7 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -50,7 +50,11 @@ export const environment = { timeout: { idleTimeout: loadedEnv['sessionIdleTimeout'] || 300000 // 5 minutes } - } + }, + vNextApiUrl: window['env']['vNextApiUrl'] || 'https://apis.flexcore.mx', + vNextApiProvider: window['env']['vNextApiProvider'] || '/vnext1', + vNextApiVersion: window['env']['vNextApiVersion'] || '/v1.0', + interbankTransfers: window['env']['interbankTransfers'] || false }; // Server URL diff --git a/src/environments/environment.ts b/src/environments/environment.ts index f476e82a8..2c1d6e1fc 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -60,7 +60,11 @@ export const environment = { timeout: { idleTimeout: loadedEnv['sessionIdleTimeout'] || 300000 // 5 minutes } - } + }, + vNextApiUrl: window['env']['vNextApiUrl'] || 'https://apis.flexcore.mx', + vNextApiProvider: window['env']['vNextApiProvider'] || '/vnext1', + vNextApiVersion: window['env']['vNextApiVersion'] || '/v1.0', + interbankTransfers: window['env']['interbankTransfers'] || false }; // Server URL