plugin-financials/repositories/BankAccountRepository.js
2025-11-03 13:51:33 +02:00

86 lines
2.1 KiB
JavaScript

const BaseFinancialRepository = require('./BaseFinancialRepository');
/**
* Bank Account Repository
*
* Manages bank account information for reconciliation purposes.
*/
class BankAccountRepository extends BaseFinancialRepository {
constructor() {
super('pg_fn_bank_accounts');
}
/**
* Find bank accounts by site
* @param {string} siteId - Site ID
* @returns {Promise<Array>} Array of bank accounts
*/
async findBySiteId(siteId) {
try {
return await this.findAll({ site_id: siteId, is_active: true });
} catch (error) {
throw error;
}
}
/**
* Find bank account by ID with ledger account details
* @param {string} accountId - Bank account ID
* @returns {Promise<Object>} Bank account with ledger account details
*/
async findByIdWithLedger(accountId) {
try {
const account = await this.findById(accountId);
if (!account) {
return null;
}
// Get ledger account details if linked
if (account.ledger_account_id) {
const { chartOfAccountsRepository } = require('./index');
const ledgerAccount = await chartOfAccountsRepository.findById(account.ledger_account_id);
return {
...account,
ledger_account: ledgerAccount
};
}
return account;
} catch (error) {
throw error;
}
}
/**
* Create bank account
* @param {Object} accountData - Bank account data
* @returns {Promise<Object>} Created bank account
*/
async createBankAccount(accountData) {
try {
return await this.create(accountData);
} catch (error) {
throw error;
}
}
/**
* Update bank account balance
* @param {string} accountId - Bank account ID
* @param {number} balance - New balance
* @returns {Promise<Object>} Updated account
*/
async updateBalance(accountId, balance) {
try {
return await this.updateById(accountId, {
current_balance: balance,
updated_at: new Date()
});
} catch (error) {
throw error;
}
}
}
module.exports = BankAccountRepository;