fix: resolve duplicate rows in commandes-auto caused by fouport multi-site join
This commit is contained in:
1 parent
2f920d8623
commit
7312b84233
1 file changed
+48
-42
@@ -10,35 +10,38 @@ router.get('/', async (req, res) => {
|
|||||||
const { site = '', codefou = '' } = req.query;
|
const { site = '', codefou = '' } = req.query;
|
||||||
|
|
||||||
const result = await pool.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
|
SELECT
|
||||||
q.codesite AS site,
|
q.codesite AS site,
|
||||||
q.fou_code AS codefou,
|
q.fou_code AS codefou,
|
||||||
fi.nom AS nom_fou,
|
fi.nom AS nom_fou,
|
||||||
COALESCE(fp2.seuil, fc.franco) AS franco_ht,
|
COALESCE(fp.seuil, fc.franco) AS franco_ht,
|
||||||
COUNT(q.art_no_id) AS nb_articles,
|
COUNT(q.art_no_id) AS nb_articles,
|
||||||
SUM(q.qtepropo) AS qte_totale,
|
SUM(q.qtepropo) AS qte_totale,
|
||||||
ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht,
|
ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht,
|
||||||
CASE
|
CASE
|
||||||
WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN 'N/A'
|
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(fp2.seuil, fc.franco) THEN 'OUI'
|
WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp.seuil, fc.franco) THEN 'OUI'
|
||||||
ELSE 'NON'
|
ELSE 'NON'
|
||||||
END AS franco_atteint,
|
END AS franco_atteint,
|
||||||
CASE
|
CASE
|
||||||
WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN NULL
|
WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN NULL
|
||||||
ELSE ROUND(COALESCE(fp2.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2)
|
ELSE ROUND(COALESCE(fp.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2)
|
||||||
END AS ecart_franco
|
END AS ecart_franco
|
||||||
FROM commande_auto_qtepropo q
|
FROM commande_auto_qtepropo q
|
||||||
LEFT JOIN fouident fi ON fi.code = q.fou_code
|
LEFT JOIN fouident fi ON fi.code = q.fou_code
|
||||||
LEFT JOIN foucad fc ON fc.foucode = 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 franco_port fp ON fp.code = q.fou_code
|
||||||
LEFT JOIN (
|
LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id
|
||||||
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
|
|
||||||
WHERE q.qtepropo > 0
|
WHERE q.qtepropo > 0
|
||||||
AND ($1 = '' OR q.codesite LIKE $1)
|
AND ($1 = '' OR q.codesite LIKE $1)
|
||||||
AND ($2 = '' OR q.fou_code ILIKE $2)
|
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
|
ORDER BY q.codesite, montant_propo_ht DESC
|
||||||
`, [`%${site}%`, `%${codefou}%`]);
|
`, [`%${site}%`, `%${codefou}%`]);
|
||||||
|
|
||||||
@@ -58,35 +61,38 @@ router.get('/:codefou', async (req, res) => {
|
|||||||
|
|
||||||
// Résumé par site
|
// Résumé par site
|
||||||
const resume = await pool.query(`
|
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
|
SELECT
|
||||||
q.codesite AS site,
|
q.codesite AS site,
|
||||||
q.fou_code AS codefou,
|
q.fou_code AS codefou,
|
||||||
fi.nom AS nom_fou,
|
fi.nom AS nom_fou,
|
||||||
COALESCE(fp2.seuil, fc.franco) AS franco_ht,
|
COALESCE(fp.seuil, fc.franco) AS franco_ht,
|
||||||
COUNT(q.art_no_id) AS nb_articles,
|
COUNT(q.art_no_id) AS nb_articles,
|
||||||
SUM(q.qtepropo) AS qte_totale,
|
SUM(q.qtepropo) AS qte_totale,
|
||||||
ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht,
|
ROUND(SUM(q.qtepropo * cp.pa), 2) AS montant_propo_ht,
|
||||||
CASE
|
CASE
|
||||||
WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN 'N/A'
|
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(fp2.seuil, fc.franco) THEN 'OUI'
|
WHEN SUM(q.qtepropo * cp.pa) >= COALESCE(fp.seuil, fc.franco) THEN 'OUI'
|
||||||
ELSE 'NON'
|
ELSE 'NON'
|
||||||
END AS franco_atteint,
|
END AS franco_atteint,
|
||||||
CASE
|
CASE
|
||||||
WHEN COALESCE(fp2.seuil, fc.franco) IS NULL OR COALESCE(fp2.seuil, fc.franco) = 0 THEN NULL
|
WHEN COALESCE(fp.seuil, fc.franco) IS NULL OR COALESCE(fp.seuil, fc.franco) = 0 THEN NULL
|
||||||
ELSE ROUND(COALESCE(fp2.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2)
|
ELSE ROUND(COALESCE(fp.seuil, fc.franco) - SUM(q.qtepropo * cp.pa), 2)
|
||||||
END AS ecart_franco
|
END AS ecart_franco
|
||||||
FROM commande_auto_qtepropo q
|
FROM commande_auto_qtepropo q
|
||||||
LEFT JOIN fouident fi ON fi.code = q.fou_code
|
LEFT JOIN fouident fi ON fi.code = q.fou_code
|
||||||
LEFT JOIN foucad fc ON fc.foucode = 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 franco_port fp ON fp.code = q.fou_code
|
||||||
LEFT JOIN (
|
LEFT JOIN cube_pa cp ON cp.artnoid = q.art_no_id
|
||||||
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
|
|
||||||
WHERE q.qtepropo > 0
|
WHERE q.qtepropo > 0
|
||||||
AND q.fou_code ILIKE $1
|
AND q.fou_code ILIKE $1
|
||||||
AND ($2 = '' OR q.codesite LIKE $2)
|
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
|
ORDER BY q.codesite
|
||||||
`, [codefou, `%${site}%`]);
|
`, [codefou, `%${site}%`]);
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user