feat: implement movement and article route handlers and register them in the main application entry point

This commit is contained in:
Michael committed 2026-04-24 10:05:37 +02:00
1 parent b4a9331fa8
commit d3052a6235
3 files changed
+54 -1

No files matched your search

+1
View File
@@ -58,6 +58,7 @@ app.listen(PORT, () => {
console.log(' GET /api/articles[?search=&codein=&ean=&codefou=&actif=&page=&limit=]');
console.log(' GET /api/articles/:id');
console.log(' GET /api/articles/:id/referentiel');
console.log(' GET /api/articles/:id/dernier-fournisseur[?site=]');
console.log(' GET /api/articles/:id/mouvements');
console.log(' GET /api/fournisseurs[?search=]');
console.log(' GET /api/fournisseurs/:code/articles');
+32
View File
@@ -258,6 +258,38 @@ router.get('/:id/referentiel', async (req, res) => {
}
});
// GET /api/articles/:id/dernier-fournisseur?site=
// Retourne le fournisseur réel (dernière entrée en stock GenreMvt=1) par site
// C'est le seul moyen fiable d'identifier qui a livré le produit actuellement en rayon
router.get('/:id/dernier-fournisseur', async (req, res) => {
try {
const pool = getPool();
const { site = '' } = req.query;
const result = await pool.query(`
SELECT DISTINCT ON (m.Site)
m.Site,
m.DatMvt AS date_derniere_entree,
m.CODEFOU AS codefou,
fa.RAISONSOCIALE AS nom_fournisseur,
m.QteMvt AS qte_entree,
m.Prmp AS prmp
FROM MvtArt m
LEFT JOIN FOUADR1 fa ON fa.CODE = m.CODEFOU AND fa.SIT_CODE = '000'
WHERE m.ArtNoId = $1
AND m.GenreMvt = 1
AND m.CODEFOU IS NOT NULL
AND m.CODEFOU != ''
AND ($2 = '' OR m.Site LIKE $2)
ORDER BY m.Site, m.DatMvt DESC
`, [req.params.id, `%${site}%`]);
res.json({ artnoid: req.params.id, fournisseurs_par_site: result.rows });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// GET /api/articles/:id/mouvements?dateDebut=&dateFin=&site=&page=&limit=
router.get('/:id/mouvements', async (req, res) => {
try {
+21 -1
View File
@@ -51,7 +51,27 @@ router.get('/articles', async (req, res) => {
a.CODEIN, a.LIBELLE1,
m.LibMvt, m.GenreMvt, m.QteMvt, m.ValMvt,
m.MntMvtHt, m.MntMvtTTC, m.MargeMvt,
m.QteStock, m.Prmp, m.ValStock, m.CODEFOU
m.QteStock, m.Prmp, m.ValStock,
m.CODEFOU AS codefou_mouvement,
-- Pour les ventes (GenreMvt=3), le vrai fournisseur = dernière entrée avant cette vente
CASE WHEN m.GenreMvt = 3 THEN (
SELECT e.CODEFOU FROM MvtArt e
WHERE e.ArtNoId = m.ArtNoId AND e.Site = m.Site
AND e.GenreMvt = 1 AND e.CODEFOU IS NOT NULL AND e.CODEFOU != ''
AND e.DatMvt <= m.DatMvt
ORDER BY e.DatMvt DESC LIMIT 1
) ELSE m.CODEFOU END AS codefou_reel,
CASE WHEN m.GenreMvt = 3 THEN (
SELECT fa.RAISONSOCIALE FROM MvtArt e
LEFT JOIN FOUADR1 fa ON fa.CODE = e.CODEFOU AND fa.SIT_CODE = '000'
WHERE e.ArtNoId = m.ArtNoId AND e.Site = m.Site
AND e.GenreMvt = 1 AND e.CODEFOU IS NOT NULL AND e.CODEFOU != ''
AND e.DatMvt <= m.DatMvt
ORDER BY e.DatMvt DESC LIMIT 1
) ELSE (
SELECT fa2.RAISONSOCIALE FROM FOUADR1 fa2
WHERE fa2.CODE = m.CODEFOU AND fa2.SIT_CODE = '000'
) END AS nom_fournisseur_reel
FROM MvtArt m
JOIN ARTICLES a ON a.NO_ID = m.ArtNoId
WHERE m.DatMvt BETWEEN $1 AND $2