feat: Add PostgreSQL client for FF Nancy data, replacing HTTP API calls with bulk SQL queries for improved performance.

This commit is contained in:
Michael committed 2026-03-20 11:39:40 +01:00
1 parent d5b518477a
commit b4f583415b
2 files changed
+7 -12

No files matched your search

+4 -9
View File
@@ -121,12 +121,10 @@ export async function getProductRows(input: GetProductRowsInput): Promise<Produc
p.marge += Number(row.marge) || 0;
p.receptions += Number(row.qte_recue) || 0;
// Suivi magasins actifs (pour workingStores)
// Suivi magasins actifs (pour workingStores) : 1 vente suffit
if (Number(row.qte_vendue) > 0) {
if (!storeMonthsByCodein.has(row.codein)) storeMonthsByCodein.set(row.codein, new Map());
const storeMonths = storeMonthsByCodein.get(row.codein)!;
if (!storeMonths.has(row.site)) storeMonths.set(row.site, new Set());
storeMonths.get(row.site)!.add(periode);
storeMonthsByCodein.get(row.codein)!.set(row.site, new Set()); // on garde juste le site
}
}
@@ -155,13 +153,10 @@ export async function getProductRows(input: GetProductRowsInput): Promise<Produc
product.tauxMarge = product.totalCa > 0 ? (product.totalMarge / product.totalCa) * 100 : 0;
// workingStores : sites avec ventes sur ≥ 3 mois distincts
// workingStores : sites avec au moins 1 vente sur les 12 derniers mois
const storeMonths = storeMonthsByCodein.get(codein);
if (storeMonths) {
product.workingStores = [...storeMonths.entries()]
.filter(([, periods]) => periods.size >= 3)
.map(([site]) => site)
.sort();
product.workingStores = [...storeMonths.keys()].sort();
}
// Commandes en cours
+3 -3
View File
@@ -172,9 +172,9 @@ export async function pgGetMensuelByFournisseur(
TO_CHAR(m.datmvt, 'YYYY-MM') AS mois,
-- genremvt=3 : vente → qtemvt négatif, retour → qtemvt positif
-- qte_vendue nette = SUM(-qtemvt) : ventes moins retours
SUM(CASE WHEN m.genremvt = 3 THEN -m.qtemvt ELSE 0 END)::float AS qte_vendue,
SUM(CASE WHEN m.genremvt = 3 THEN m.mntmvtttc ELSE 0 END)::float AS ca_ht,
SUM(CASE WHEN m.genremvt = 3 THEN m.margemvt ELSE 0 END)::float AS marge,
SUM(CASE WHEN m.genremvt = 3 THEN -m.qtemvt ELSE 0 END)::float AS qte_vendue,
SUM(CASE WHEN m.genremvt = 3 THEN -m.mntmvtttc ELSE 0 END)::float AS ca_ht,
SUM(CASE WHEN m.genremvt = 3 THEN -m.margemvt ELSE 0 END)::float AS marge,
MAX(m.qtestock)::float AS stock_fin_mois,
SUM(CASE WHEN m.genremvt IN (1, 2) THEN -m.qtemvt ELSE 0 END)::float AS qte_recue
FROM mvtart m