feat: add performance analytics routes for sales, hit parades, and dashboard metrics

This commit is contained in:
Michael committed 2026-04-01 09:31:13 +02:00
1 parent 2839a615fd
commit 5fb99dc7f5
1 file changed
+35
+35
View File
@@ -122,6 +122,41 @@ router.get('/ca/nomenclature', async (req, res) => {
}
});
// GET /api/performance/ca/fournisseur?dateDebut=&dateFin=&site=
router.get('/ca/fournisseur', async (req, res) => {
try {
const pool = getPool();
const { dateDebut = '2024-01-01', dateFin = '2099-12-31', site = '' } = req.query;
const result = await pool.query(`
SELECT
COALESCE(fi.nom, af.code, 'Inconnu') AS fournisseur,
af.code AS code_fournisseur,
COUNT(DISTINCT m.artnoid) AS nb_articles,
ABS(SUM(m.qtemvt)) AS qte_vendue,
ABS(SUM(m.mntmvtht)) AS ca_ht,
ABS(SUM(m.mntmvtttc)) AS ca_ttc,
SUM(m.margemvt) AS marge,
CASE WHEN SUM(m.mntmvtht) != 0
THEN ROUND(SUM(m.margemvt) / ABS(SUM(m.mntmvtht)) * 100, 2)
ELSE 0 END AS taux_marge
FROM mvtart m
JOIN articles a ON a.no_id = m.artnoid
LEFT JOIN artfou1 af ON af.art_no_id = a.no_id AND af.preference = true
LEFT JOIN fouident fi ON fi.code = af.code
WHERE m.genremvt = 3
AND m.datmvt BETWEEN $1 AND $2
AND m.site LIKE $3
GROUP BY fi.nom, af.code
ORDER BY ca_ttc DESC
`, [dateDebut, dateFin, `%${site}%`]);
res.json({ dateDebut, dateFin, site: site || 'tous', ca_par_fournisseur: result.rows });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// GET /api/performance/ca/gamme?dateDebut=&dateFin=&site=
router.get('/ca/gamme', async (req, res) => {
try {