/** Angular Imports */ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; /** rxjs Imports */ import { Observable } from 'rxjs'; /** * Savings Service. */ @Injectable({ providedIn: 'root' }) export class SavingsService { constructor(private http: HttpClient) {} /** * @param {string} savingAccountId is saving account's Id. * @returns {Observable} */ getSavingsTransactionTemplateResource(savingAccountId: string): Observable { return this.http.get(`/savingsaccounts/${savingAccountId}/transactions/template`); } /** * @param {string} savingAccountId saving account id. * @returns {Observable} */ getSavingsChargeTemplateResource(savingAccountId: string): Observable { return this.http.get(`/savingsaccounts/${savingAccountId}/charges/template`); } /** * @param {any} savingsCharge to apply on a savings Account. * @returns {Observable} */ createSavingsCharge(savingAccountId: string, resourceType: string, savingsCharge: any): Observable { return this.http.post(`/savingsaccounts/${savingAccountId}/${resourceType}`, savingsCharge); } /** * @param {string} chargeId Charge ID of charge. * @returns {Observable} Charge. */ getChargeTemplate(chargeId: string): Observable { const params = { template: 'true' }; return this.http.get(`/charges/${chargeId}`, { params: params }); } /** * @param accountId Savings Account Id of account to get data for. * @returns {Observable} Savings data. */ getSavingsAccountData(accountId: string): Observable { const httpParams = new HttpParams().set('associations', 'all' ); return this.http.get(`/savingsaccounts/${accountId}`, { params: httpParams }); } /** * @param accountId Savings Account Id of account to get data for. * @returns {Observable} Savings account and template. */ getSavingsAccountAndTemplate(accountId: string, template: boolean): Observable { const httpParams = new HttpParams() .set('template', template.toString()) .set('associations', 'charges' ); return this.http.get(`/savingsaccounts/${accountId}`, { params: httpParams }); } /** * @param clientId Client Id * @param clientName Client Name * @param fromAccountId Account Id * @param locale Locale * @param dateFormat Date Format * @returns {Observable} Standing Instructions */ getStandingInstructions( clientId: string, clientName: string, fromAccountId: string, locale: string, dateFormat: string): Observable { const httpParams = new HttpParams() .set('clientId', clientId) .set('clientName', clientName) .set('fromAccountId', fromAccountId) .set('fromAccountType', '2') .set('locale', locale) .set('dateFormat', dateFormat); return this.http.get(`/standinginstructions`, { params: httpParams }); } /** * @returns {Observable} */ getSavingsDatatables(): Observable { const httpParams = new HttpParams().set('apptable', 'm_savings_account'); return this.http.get(`/datatables`, { params: httpParams }); } /** * @param accountId account Id of savings account to get datatable for. * @param datatableName Data table name. * @returns {Observable} */ getSavingsDatatable(accountId: string, datatableName: string): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.get(`/datatables/${datatableName}/${accountId}`, { params: httpParams }); } /** * @param accountId account Id of savings account to get add datatable entry for. * @param datatableName Data Table name. * @param data Data. * @returns {Observable} */ addSavingsDatatableEntry(accountId: string, datatableName: string, data: any): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.post(`/datatables/${datatableName}/${accountId}`, data, { params: httpParams }); } /** * @param accountId account Id of savings account to get add datatable entry for. * @param datatableName Data Table name. * @param data Data. * @returns {Observable} */ editSavingsDatatableEntry(accountId: string, datatableName: string, data: any): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.put(`/datatables/${datatableName}/${accountId}`, data, { params: httpParams }); } /** * @param accountId account Id of savings account to get add datatable entry for. * @param datatableName Data Table name. * @returns {Observable} */ deleteDatatableContent(accountId: string, datatableName: string): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.delete(`/datatables/${datatableName}/${accountId}`, { params: httpParams }); } /** * @param clientId Client Id assosciated with savings account. * @returns {Observable} Savings account template. */ getSavingsAccountTemplate(clientId: string, productId?: string): Observable { let httpParams = new HttpParams().set('clientId', clientId); httpParams = productId ? httpParams.set('productId', productId) : httpParams; return this.http.get('/savingsaccounts/template', { params: httpParams }); } /** * @param {any} savingsAccount Savings Account * @returns {Observable} */ createSavingsAccount(savingsAccount: any): Observable { return this.http.post('/savingsaccounts', savingsAccount); } /** * @param {any} savingsAccount Savings Account * @returns {Observable} */ updateSavingsAccount(accountId: string, savingsAccount: any): Observable { return this.http.put(`/savingsaccounts/${accountId}`, savingsAccount); } /** * @param {string} accountId savings account Id * @returns {Observable} */ deleteSavingsAccount(accountId: string): Observable { return this.http.delete(`/savingsaccounts/${accountId}`); } /** * @param {string} accountId Savings Account Id * @param {string} command Command * @param {any} data Data * @returns {Observable} Savings data. */ executeSavingsAccountCommand(accountId: string, command: string, data: any): Observable { const httpParams = new HttpParams().set('command', command); return this.http.post(`/savingsaccounts/${accountId}`, data, { params: httpParams }); } /** * @param {string} accountId Savings Account Id * @param {string} command Command * @param {any} data Data * @returns {Observable} Savings data. */ executeSavingsAccountUpdateCommand(accountId: string, command: string, data: any): Observable { const httpParams = new HttpParams().set('command', command); return this.http.put(`/savingsaccounts/${accountId}`, data, { params: httpParams }); } /** * @param {string} accountId Savings Account Id * @param {string} transactionId Transaction Id */ getSavingsAccountTransaction(accountId: string, transactionId: string) { return this.http.get(`/savingsaccounts/${accountId}/transactions/${transactionId}`); } /** * @param {string} accountId Savings Account Id * @param {string} command Command * @param {any} data Data * @param {string} transactionId Transaction Id * @returns {Observable} Savings data. */ executeSavingsAccountTransactionsCommand(accountId: string, command: string, data: any, transactionId?: any): Observable { const httpParams = new HttpParams().set('command', command); if (transactionId) { return this.http.post(`/savingsaccounts/${accountId}/transactions/${transactionId}`, data, { params: httpParams }); } return this.http.post(`/savingsaccounts/${accountId}/transactions`, data, { params: httpParams }); } /** * @param {string} accountId savings account Id * @param {string} chargeId savings charge Id */ getSavingsAccountCharge(accountId: string, chargeId: string) { return this.http.get(`/savingsaccounts/${accountId}/charges/${chargeId}`); } /** * @param {string} accountId Savings Account Id * @param {string} command Command * @param {any} data Data * @param {string} chargeId Charge Id * @returns {Observable} Savings data. */ executeSavingsAccountChargesCommand(accountId: string, command: string, data: any, chargeId: any): Observable { const httpParams = new HttpParams().set('command', command); return this.http.post(`/savingsaccounts/${accountId}/charges/${chargeId}`, data, { params: httpParams }); } }