better states

This commit is contained in:
2026-05-01 16:52:58 -05:00
parent bce3999643
commit 950d50b354
4 changed files with 339 additions and 45 deletions

View File

@@ -135,7 +135,23 @@ router.post('/', async (req, res) => {
return res.status(400).json({ error: `Invoice number ${invoice_number} already exists.` });
}
}
// Validate items
if (!Array.isArray(items) || items.length === 0) {
await client.query('ROLLBACK');
return res.status(400).json({ error: 'Please add at least one item.' });
}
// Recurring invoices must contain at least one Subscription item
if (is_recurring) {
const subscriptionItems = items.filter(item => String(item.qbo_item_id) === '115');
if (subscriptionItems.length === 0) {
await client.query('ROLLBACK');
return res.status(400).json({
error: 'Recurring invoices must contain at least one Subscription item.'
});
}
}
let subtotal = 0;
for (const item of items) {
const amount = parseFloat(item.amount.replace(/[$,]/g, ''));
@@ -210,7 +226,23 @@ router.put('/:id', async (req, res) => {
return res.status(400).json({ error: `Invoice number ${invoice_number} already exists.` });
}
}
// Validate items
if (!Array.isArray(items) || items.length === 0) {
await client.query('ROLLBACK');
return res.status(400).json({ error: 'Please add at least one item.' });
}
// Recurring invoices must contain at least one Subscription item
if (is_recurring) {
const subscriptionItems = items.filter(item => String(item.qbo_item_id) === '115');
if (subscriptionItems.length === 0) {
await client.query('ROLLBACK');
return res.status(400).json({
error: 'Recurring invoices must contain at least one Subscription item.'
});
}
}
let subtotal = 0;
for (const item of items) {
const amount = parseFloat(item.amount.replace(/[$,]/g, ''));