95 lines
No EOL
2.3 KiB
JavaScript
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; |