/** * Copyright since 2025 Mifos Initiative * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** Angular Imports */ import { Injectable, inject } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; /** rxjs Imports */ import { Observable } from 'rxjs'; /** * Savings Service. */ @Injectable({ providedIn: 'root' }) export class SavingsService { private http = inject(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 }); } /** * @returns {Observable} */ getSavingsTransactionDatatables(): Observable { const httpParams = new HttpParams().set('apptable', 'm_savings_account_transaction'); 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} */ getSavingsTransactionDatatable(transactionId: string, datatableName: string): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.get(`/datatables/${datatableName}/${transactionId}`, { 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 entityId Entity Id assosciated with savings account. * @returns {Observable} Savings account template. */ getSavingsAccountTemplate(entityId: string, productId?: string, isGroup?: boolean): Observable { let httpParams = new HttpParams().set(isGroup ? 'groupId' : 'clientId', entityId); 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} */ 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} */ 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 * @returns {Observable} */ getSavingsAccountTransaction(accountId: string, transactionId: string): Observable { return this.http.get(`/savingsaccounts/${accountId}/transactions/${transactionId}`); } /** * @param {string} accountId Savings Account Id * @param {string} transactionId Transaction Id * @returns {Observable} */ getSavingsAccountTransactionTemplate(accountId: string, transactionId: string): Observable { const httpParams = new HttpParams().set('template', 'true'); return this.http.get(`/savingsaccounts/${accountId}/transactions/${transactionId}`, { params: httpParams }); } /** * @param {string} accountId Savings Account Id * @param {string} command Command * @param {any} data Data * @param {string} transactionId Transaction Id * @returns {Observable} */ 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 * @returns {Observable} */ getSavingsAccountCharge(accountId: string, chargeId: string): Observable { 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} */ 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 }); } /** * @param {string} accountId Savings Account Id * @param {any} data Charge Data * @param {any} chargeId Charge Id * @returns {Observable} */ editSavingsAccountCharge(accountId: string, data: any, chargeId: any): Observable { return this.http.put(`/savingsaccounts/${accountId}/charges/${chargeId}`, data); } /** * @param {string} accountId Savings Account Id * @param {any} chargeId Charge Id * @returns {Observable} */ deleteSavingsAccountCharge(accountId: string, chargeId: any): Observable { return this.http.delete(`/savingsaccounts/${accountId}/charges/${chargeId}`); } /** * @param savingAccountId GSIM Account Id of account to get data for. * @returns {Observable} Savings data. */ getGSIMAccountData(savingAccountId: string, groupId: string): Observable { const httpParams = new HttpParams().set('parentGSIMAccountNo', savingAccountId); return this.http.get(`/groups/${groupId}/gsimaccounts`, { params: httpParams }); } /** * @param {any} gsimData GSIM Account Data * @returns {Observable} */ createGsimAcccount(gsimData: any): Observable { return this.http.post(`/savingsaccounts/gsim`, gsimData); } /** * @param savingAccountId Savings Id * @returns The notes for particular loan */ getSavingsNotes(savingAccountId: string): Observable { return this.http.get(`/savings/${savingAccountId}/notes`); } /** * Adds a note to the particular Savings Id * @param savingAccountId Savings ID * @param noteData Note Data to be added * @returns {Observable} */ createSavingsNote(savingAccountId: string, noteData: any): Observable { return this.http.post(`/savings/${savingAccountId}/notes`, noteData); } /** * Edits the Savings Note * @param savingAccountId Savings ID * @param noteId Note ID * @param noteData Note Data */ editSavingsNote(savingAccountId: string, noteId: string, noteData: any) { return this.http.put(`/savings/${savingAccountId}/notes/${noteId}`, noteData); } /** * Deletes the particular Note * @param savingAccountId Savings ID * @param noteId Note ID */ deleteSavingsNote(savingAccountId: string, noteId: string) { return this.http.delete(`/savings/${savingAccountId}/notes/${noteId}`); } /** * @param savingAccountId Savings Account Id of account to get data for. * @returns {Observable} Savings data. */ getSavingsDocuments(savingAccountId: any): Observable { return this.http.get(`/savings/${savingAccountId}/documents`); } downloadSavingsDocument(parentEntityId: string, documentId: string) { return this.http.get(`/savings/${parentEntityId}/documents/${documentId}/attachment`, { responseType: 'blob' }); } deleteSavingsDocument(savingAccountId: any, documentId: any): Observable { return this.http.delete(`/savings/${savingAccountId}/documents/${documentId}`); } loadSavingsDocument(savingAccountId: any, data: any): Observable { return this.http.post(`/savings/${savingAccountId}/documents`, data); } }