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;