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

156 lines
4.2 KiB
JavaScript

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;