const express = require('express'); const router = express.Router(); const { generalLedgerRepository } = require('../repositories'); /** * GET /api/plugins/financials/ledger/general * Get general ledger for all accounts with balances * Query params: site_id (required), start_date, end_date */ router.get('/general', async (req, res) => { try { const { site_id, start_date, end_date } = req.query; if (!site_id) { return res.status(400).json({ success: false, error: 'Missing required parameter: site_id' }); } const options = {}; if (start_date) options.startDate = start_date; if (end_date) options.endDate = end_date; const generalLedger = await generalLedgerRepository.getGeneralLedger(site_id, options); res.json({ success: true, data: generalLedger, message: 'General ledger retrieved successfully' }); } catch (error) { console.error('Failed to get general ledger:', error); res.status(500).json({ success: false, error: 'Failed to retrieve general ledger', message: error.message }); } }); /** * GET /api/plugins/financials/ledger/account/:accountId * Get ledger entries for a specific account with running balance * Query params: site_id (required), start_date, end_date */ router.get('/account/:accountId', async (req, res) => { try { const { accountId } = req.params; const { site_id, start_date, end_date } = req.query; if (!site_id) { return res.status(400).json({ success: false, error: 'Missing required parameter: site_id' }); } const options = {}; if (start_date) options.startDate = start_date; if (end_date) options.endDate = end_date; const ledgerEntries = await generalLedgerRepository.getAccountLedger(accountId, site_id, options); res.json({ success: true, data: ledgerEntries, message: 'Account ledger retrieved successfully' }); } catch (error) { console.error('Failed to get account ledger:', error); res.status(500).json({ success: false, error: 'Failed to retrieve account ledger', message: error.message }); } }); /** * GET /api/plugins/financials/ledger/account/:accountId/balance * Get account balance summary * Query params: site_id (required), start_date, end_date */ router.get('/account/:accountId/balance', async (req, res) => { try { const { accountId } = req.params; const { site_id, start_date, end_date } = req.query; if (!site_id) { return res.status(400).json({ success: false, error: 'Missing required parameter: site_id' }); } const options = {}; if (start_date) options.startDate = start_date; if (end_date) options.endDate = end_date; const balance = await generalLedgerRepository.getAccountBalance(accountId, site_id, options); res.json({ success: true, data: balance, message: 'Account balance retrieved successfully' }); } catch (error) { console.error('Failed to get account balance:', error); res.status(500).json({ success: false, error: 'Failed to retrieve account balance', message: error.message }); } }); /** * GET /api/plugins/financials/ledger/trial-balance * Get trial balance report * Query params: site_id (required), start_date, end_date */ router.get('/trial-balance', async (req, res) => { try { const { site_id, start_date, end_date } = req.query; if (!site_id) { return res.status(400).json({ success: false, error: 'Missing required parameter: site_id' }); } const options = {}; if (start_date) options.startDate = start_date; if (end_date) options.endDate = end_date; const trialBalance = await generalLedgerRepository.getTrialBalance(site_id, options); res.json({ success: true, data: trialBalance, message: 'Trial balance retrieved successfully' }); } catch (error) { console.error('Failed to get trial balance:', error); res.status(500).json({ success: false, error: 'Failed to retrieve trial balance', message: error.message }); } }); module.exports = router;