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

95 lines
No EOL
2.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { expenseRepository } = require('../repositories');
/**
* GET /api/plugins/financials/expenses
* Get all expenses for a site
*/
router.get('/', async (req, res) => {
try {
const { site_id, status, category } = req.query;
if (!site_id) {
return res.status(400).json({
success: false,
error: 'site_id query parameter is required'
});
}
let expenses;
if (status) {
expenses = await expenseRepository.findByStatus(site_id, status);
} else {
expenses = await expenseRepository.findBySiteId(site_id);
}
// Filter by category if provided
if (category) {
expenses = expenses.filter(exp => exp.category === category);
}
res.json({
success: true,
data: expenses,
message: 'Expenses retrieved successfully'
});
} catch (error) {
console.error('Failed to get expenses:', error);
res.status(500).json({
success: false,
error: 'Failed to retrieve expenses',
message: error.message
});
}
});
/**
* POST /api/plugins/financials/expenses
* Create a new expense
*/
router.post('/', async (req, res) => {
try {
const { site_id, expense_date, vendor_name, vendor_id, category, description, amount, tax_amount, payment_method, receipt_url, approved_by, notes, created_by } = req.body;
if (!site_id || !expense_date || !category || !description || !amount) {
return res.status(400).json({
success: false,
error: 'Missing required fields',
message: 'Site ID, expense date, category, description, and amount are required'
});
}
const expense = await expenseRepository.createExpense({
site_id,
expense_date,
vendor_name,
vendor_id,
category,
description,
amount,
tax_amount,
payment_method,
receipt_url,
approved_by,
notes,
created_by: created_by || req.user?.id || 'system'
});
res.status(201).json({
success: true,
data: expense,
message: 'Expense created successfully'
});
} catch (error) {
console.error('Failed to create expense:', error);
res.status(500).json({
success: false,
error: 'Failed to create expense',
message: error.message
});
}
});
module.exports = router;