38 lines
1 KiB
JavaScript
38 lines
1 KiB
JavaScript
const BaseFinancialRepository = require('./BaseFinancialRepository');
|
|
|
|
/**
|
|
* Expense Repository
|
|
*
|
|
* Manages expense tracking.
|
|
*/
|
|
class ExpenseRepository extends BaseFinancialRepository {
|
|
constructor() {
|
|
super('pg_fn_expenses');
|
|
}
|
|
|
|
async findBySiteId(siteId) {
|
|
return await this.findAll({ site_id: siteId }, { orderBy: 'expense_date', orderDirection: 'desc' });
|
|
}
|
|
|
|
async findByStatus(siteId, status) {
|
|
return await this.findAll({ site_id: siteId, payment_status: status });
|
|
}
|
|
|
|
async createExpense(expenseData) {
|
|
if (!expenseData.site_id || !expenseData.expense_date || !expenseData.amount) {
|
|
throw new Error('Missing required fields for expense');
|
|
}
|
|
|
|
return await this.create({
|
|
...expenseData,
|
|
payment_status: expenseData.payment_status || 'pending',
|
|
total_amount: parseFloat(expenseData.amount) + parseFloat(expenseData.tax_amount || 0),
|
|
created_at: new Date().toISOString(),
|
|
updated_at: new Date().toISOString()
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = ExpenseRepository;
|
|
|
|
|