diff --git a/src/routes/commandes-auto.js b/src/routes/commandes-auto.js index 1d27498..46ad694 100644 --- a/src/routes/commandes-auto.js +++ b/src/routes/commandes-auto.js @@ -10,35 +10,38 @@ router.get('/', async (req, res) => { const { site = '', codefou = '' } = req.query; const result = await pool.query(` + WITH franco_port AS ( + SELECT fp.code, MAX(fp2.seuil) AS seuil + FROM fouport fp + JOIN fouport2 fp2 ON fp2.fou_no_id = fp.no_id + GROUP BY fp.code + ) SELECT - q.codesite AS site, - q.fou_code AS codefou, - fi.nom AS nom_fou, - COALESCE(fp2.seuil, fc.franco) AS franco_ht, - COUNT(q.art_no_id) AS nb_articles, - SUM(q.qtepropo) AS qte_totale, - ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht, + q.codesite AS site, + q.fou_code AS codefou, + fi.nom AS nom_fou, + COALESCE(fp.seuil, fc.franco) AS franco_ht, + COUNT(q.art_no_id) AS nb_articles, + SUM(q.qtepropo) AS qte_totale, + ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht, CASE - WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN 'N/A' - WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp2.seuil, fc.franco) THEN 'OUI' + WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN 'N/A' + WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp.seuil, fc.franco) THEN 'OUI' ELSE 'NON' - END AS franco_atteint, + END AS franco_atteint, CASE - WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN NULL - ELSE ROUND(COALESCE(fp2.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2) - END AS ecart_franco + WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN NULL + ELSE ROUND(COALESCE(fp.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2) + END AS ecart_franco FROM commande_auto_qtepropo q - LEFT JOIN fouident fi ON fi.code = q.fou_code - LEFT JOIN foucad fc ON fc.foucode = q.fou_code - LEFT JOIN fouport fp ON fp.code = q.fou_code - LEFT JOIN ( - SELECT fou_no_id, MAX(seuil) AS seuil FROM fouport2 GROUP BY fou_no_id - ) fp2 ON fp2.fou_no_id = fp.no_id - LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id + LEFT JOIN fouident fi ON fi.code = q.fou_code + LEFT JOIN foucad fc ON fc.foucode = q.fou_code + LEFT JOIN franco_port fp ON fp.code = q.fou_code + LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id WHERE q.qtepropo > 0 AND ($1 = '' OR q.codesite LIKE $1) AND ($2 = '' OR q.fou_code ILIKE $2) - GROUP BY q.codesite, q.fou_code, fi.nom, fc.franco, fp2.seuil + GROUP BY q.codesite, q.fou_code, fi.nom, fc.franco, fp.seuil ORDER BY q.codesite, montant_propo_ht DESC `, [`%${site}%`, `%${codefou}%`]); @@ -58,35 +61,38 @@ router.get('/:codefou', async (req, res) => { // Résumé par site const resume = await pool.query(` + WITH franco_port AS ( + SELECT fp.code, MAX(fp2.seuil) AS seuil + FROM fouport fp + JOIN fouport2 fp2 ON fp2.fou_no_id = fp.no_id + GROUP BY fp.code + ) SELECT - q.codesite AS site, - q.fou_code AS codefou, - fi.nom AS nom_fou, - COALESCE(fp2.seuil, fc.franco) AS franco_ht, - COUNT(q.art_no_id) AS nb_articles, - SUM(q.qtepropo) AS qte_totale, - ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht, + q.codesite AS site, + q.fou_code AS codefou, + fi.nom AS nom_fou, + COALESCE(fp.seuil, fc.franco) AS franco_ht, + COUNT(q.art_no_id) AS nb_articles, + SUM(q.qtepropo) AS qte_totale, + ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht, CASE - WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN 'N/A' - WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp2.seuil, fc.franco) THEN 'OUI' + WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN 'N/A' + WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp.seuil, fc.franco) THEN 'OUI' ELSE 'NON' - END AS franco_atteint, + END AS franco_atteint, CASE - WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN NULL - ELSE ROUND(COALESCE(fp2.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2) - END AS ecart_franco + WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN NULL + ELSE ROUND(COALESCE(fp.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2) + END AS ecart_franco FROM commande_auto_qtepropo q - LEFT JOIN fouident fi ON fi.code = q.fou_code - LEFT JOIN foucad fc ON fc.foucode = q.fou_code - LEFT JOIN fouport fp ON fp.code = q.fou_code - LEFT JOIN ( - SELECT fou_no_id, MAX(seuil) AS seuil FROM fouport2 GROUP BY fou_no_id - ) fp2 ON fp2.fou_no_id = fp.no_id - LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id + LEFT JOIN fouident fi ON fi.code = q.fou_code + LEFT JOIN foucad fc ON fc.foucode = q.fou_code + LEFT JOIN franco_port fp ON fp.code = q.fou_code + LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id WHERE q.qtepropo > 0 AND q.fou_code ILIKE $1 AND ($2 = '' OR q.codesite LIKE $2) - GROUP BY q.codesite, q.fou_code, fi.nom, fc.franco, fp2.seuil + GROUP BY q.codesite, q.fou_code, fi.nom, fc.franco, fp.seuil ORDER BY q.codesite `, [codefou, `%${site}%`]);