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

98 lines
No EOL
2.4 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { revenueRepository } = require('../repositories');
/**
* GET /api/plugins/financials/revenue
* Get all revenue for a site
*/
router.get('/', async (req, res) => {
try {
const { site_id, unit_id, source, payment_status } = req.query;
if (!site_id) {
return res.status(400).json({
success: false,
error: 'site_id query parameter is required'
});
}
let revenue;
if (source) {
revenue = await revenueRepository.findBySource(site_id, source);
} else {
revenue = await revenueRepository.findBySiteId(site_id);
}
// Filter by unit_id if provided
if (unit_id) {
revenue = revenue.filter(rev => rev.unit_id === unit_id);
}
// Filter by payment_status if provided
if (payment_status) {
revenue = revenue.filter(rev => rev.payment_status === payment_status);
}
res.json({
success: true,
data: revenue,
message: 'Revenue retrieved successfully'
});
} catch (error) {
console.error('Failed to get revenue:', error);
res.status(500).json({
success: false,
error: 'Failed to retrieve revenue',
message: error.message
});
}
});
/**
* POST /api/plugins/financials/revenue
* Create a new revenue entry
*/
router.post('/', async (req, res) => {
try {
const { site_id, revenue_date, source, description, amount, unit_id, resident_id, payment_method, receipt_url, notes, created_by } = req.body;
if (!site_id || !revenue_date || !source || !description || !amount) {
return res.status(400).json({
success: false,
error: 'Missing required fields',
message: 'Site ID, revenue date, source, description, and amount are required'
});
}
const revenue = await revenueRepository.createRevenue({
site_id,
revenue_date,
source,
description,
amount,
unit_id,
resident_id,
payment_method,
receipt_url,
notes,
created_by: created_by || req.user?.id || 'system'
});
res.status(201).json({
success: true,
data: revenue,
message: 'Revenue created successfully'
});
} catch (error) {
console.error('Failed to create revenue:', error);
res.status(500).json({
success: false,
error: 'Failed to create revenue',
message: error.message
});
}
});
module.exports = router;