More layout/header tweaks for purchase orders

This commit is contained in:
2025-04-13 22:19:14 -04:00
parent 1b19feb172
commit eeff5817ea
2 changed files with 759 additions and 520 deletions

View File

@@ -836,4 +836,65 @@ router.get('/order-vs-received', async (req, res) => {
} }
}); });
// New endpoint for delivery metrics
router.get('/delivery-metrics', async (req, res) => {
try {
const pool = req.app.locals.pool;
const { rows: deliveryData } = await pool.query(`
WITH po_dates AS (
SELECT
po_id,
date as order_date
FROM purchase_orders
WHERE status != 'canceled'
GROUP BY po_id, date
),
receiving_dates AS (
SELECT
receiving_id as po_id,
MIN(received_date) as first_received_date
FROM receivings
GROUP BY receiving_id
),
delivery_times AS (
SELECT
po.po_id,
po.order_date,
r.first_received_date,
CASE
WHEN r.first_received_date IS NOT NULL AND po.order_date IS NOT NULL
THEN (r.first_received_date::date - po.order_date::date)
ELSE NULL
END as delivery_days
FROM po_dates po
JOIN receiving_dates r ON po.po_id = r.po_id
WHERE
r.first_received_date IS NOT NULL
AND po.order_date IS NOT NULL
AND r.first_received_date::date >= po.order_date::date
)
SELECT
ROUND(AVG(delivery_days)::numeric, 1) as avg_delivery_days,
ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY delivery_days)::numeric, 1) as median_delivery_days,
MIN(delivery_days) as min_delivery_days,
MAX(delivery_days) as max_delivery_days,
COUNT(*) as total_orders_with_delivery
FROM delivery_times
WHERE delivery_days >= 0 AND delivery_days <= 365 -- Filter out unreasonable values
`);
res.json({
avg_delivery_days: Number(deliveryData[0]?.avg_delivery_days) || 0,
median_delivery_days: Number(deliveryData[0]?.median_delivery_days) || 0,
min_delivery_days: Number(deliveryData[0]?.min_delivery_days) || 0,
max_delivery_days: Number(deliveryData[0]?.max_delivery_days) || 0,
total_orders_with_delivery: Number(deliveryData[0]?.total_orders_with_delivery) || 0
});
} catch (error) {
console.error('Error fetching delivery metrics:', error);
res.status(500).json({ error: 'Failed to fetch delivery metrics' });
}
});
module.exports = router; module.exports = router;

File diff suppressed because it is too large Load Diff