mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-20 05:28:11 +02:00
Gammes de l'API à valider dans la Grille, analyses pleine largeur, référence dans Meilleures ventes
- API /api/v1 : PUT /products/:codein/gamme et POST /gammes déposent une proposition (table gammes_a_valider) au lieu d'enregistrer. La Grille la charge comme modification non enregistrée (badge « API ») : Enregistrer la valide, Annuler la rejette. Lecture : champ gammeAValider, statut a_valider dans la réponse ; OpenAPI mise à jour. - Meilleures ventes, Ventes par mois, Publicités : plus de largeur max centrée, les pages occupent toute la largeur. - Meilleures ventes : colonne Référence (référence fournisseur), recherche et export Excel compris. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FaniLFvegAZNXFrFFSStqa
This commit is contained in:
21 files changed
+413
-73
No files matched your search
@@ -7,6 +7,7 @@ import { BulkActionToolbar } from "@/features/grid/components/bulk-action-toolba
|
||||
import { GridFilterBar } from "@/features/grid/components/grid-filter-bar";
|
||||
import { rowsKeyFor, useGridStore } from "@/features/grid/store/use-grid-store";
|
||||
import { useStorePatch } from "@/features/grid/hooks/use-store-patch";
|
||||
import { getGammesAValider } from "@/features/grid/api/gammes-a-valider-actions";
|
||||
import type { ProductRow } from "@/types/grid";
|
||||
import { AlertCircle, Loader2, RefreshCw } from "lucide-react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
@@ -231,6 +232,26 @@ export function GridClient({ codeFournisseur, nomFournisseur, fournisseurs, maga
|
||||
return () => controller.abort();
|
||||
}, [codeFournisseur, refreshRequest, setRows, isMounted]);
|
||||
|
||||
// Gammes proposées par l'API : relues une fois les lignes du fournisseur
|
||||
// chargées (ou retrouvées en mémoire), puis affichées comme modifications
|
||||
// non enregistrées, à valider.
|
||||
const lignesChargeesLe = useGridStore((s) => (s.rowsMeta?.key === rowsKeyFor(codeFournisseur) ? s.rowsMeta.loadedAt : null));
|
||||
useEffect(() => {
|
||||
if (!isMounted || lignesChargeesLe === null) return;
|
||||
let annule = false;
|
||||
getGammesAValider(codeFournisseur)
|
||||
.then((res) => {
|
||||
if (annule) return;
|
||||
if (!res.success) {
|
||||
console.error("[grid] gammes à valider KO:", res.error);
|
||||
return;
|
||||
}
|
||||
useGridStore.getState().chargerGammesAValider(res.propositions);
|
||||
})
|
||||
.catch((e) => console.error("[grid] gammes à valider KO:", e));
|
||||
return () => { annule = true; };
|
||||
}, [codeFournisseur, lignesChargeesLe, isMounted]);
|
||||
|
||||
// Compléments de l'API FF pour le magasin choisi, appliqués à leur arrivée.
|
||||
useStorePatch(codeFournisseur, isMounted);
|
||||
|
||||
|
||||
Reference in new issue
Block a user