98 lines
No EOL
2.4 KiB
JavaScript
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; |