From ae5f30ff1e0fb3040c7e1291c046cf6a0da70b26 Mon Sep 17 00:00:00 2001 From: Dicken Date: Tue, 26 May 2026 01:13:36 +0200 Subject: [PATCH] Dateien nach "backend/src/routes" hochladen --- backend/src/routes/dashboard.js | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/backend/src/routes/dashboard.js b/backend/src/routes/dashboard.js index dd0d190..c602eff 100644 --- a/backend/src/routes/dashboard.js +++ b/backend/src/routes/dashboard.js @@ -68,3 +68,46 @@ router.put('/note', authenticate, (req, res) => { }); module.exports = router; + +// ── Statistiken ─────────────────────────────────────────────────────────────── +router.get('/stats', authenticate, (req, res) => { + const uid = req.user.id; + + const orders = db.prepare(` + SELECT status, bezahlt, + SUM(COALESCE(custom_price_sum_view,0)) AS revenue + FROM ( + SELECT o.status, o.bezahlt, + SUM(COALESCE(oi.custom_price,0)*COALESCE(oi.stueckzahl,0)) AS custom_price_sum_view + FROM orders o + LEFT JOIN order_items oi ON oi.order_id=o.id + WHERE o.user_id=? + GROUP BY o.id + ) + GROUP BY status, bezahlt + `).all(uid); + + const totalOrders = db.prepare('SELECT COUNT(*) c FROM orders WHERE user_id=?').get(uid).c; + const bezahltOrders = db.prepare('SELECT COUNT(*) c FROM orders WHERE user_id=? AND bezahlt=1').get(uid).c; + const totalRevenue = db.prepare(` + SELECT COALESCE(SUM(oi.custom_price*oi.stueckzahl),0) s + FROM orders o JOIN order_items oi ON oi.order_id=o.id + WHERE o.user_id=? AND o.bezahlt=1 AND oi.custom_price IS NOT NULL + `).get(uid).s; + const offeneRevenue = db.prepare(` + SELECT COALESCE(SUM(oi.custom_price*oi.stueckzahl),0) s + FROM orders o JOIN order_items oi ON oi.order_id=o.id + WHERE o.user_id=? AND o.bezahlt=0 AND oi.custom_price IS NOT NULL AND o.status!='warteliste' + `).get(uid).s; + const thisMonth = new Date(); + thisMonth.setDate(1); thisMonth.setHours(0,0,0,0); + const ordersThisMonth = db.prepare('SELECT COUNT(*) c FROM orders WHERE user_id=? AND created_at>=?').get(uid, thisMonth.toISOString()).c; + const totalCalcs = db.prepare('SELECT COUNT(*) c FROM calculations WHERE user_id=?').get(uid).c; + + const byStatus = { warteliste:0, in_arbeit:0, fertig:0 }; + for (const r of db.prepare('SELECT status, COUNT(*) c FROM orders WHERE user_id=? AND bezahlt=0 GROUP BY status').all(uid)) { + byStatus[r.status] = r.c; + } + + res.json({ totalOrders, bezahltOrders, totalRevenue, offeneRevenue, ordersThisMonth, totalCalcs, byStatus }); +});