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 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} 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} 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} 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;