Checkpoint: Ajout de deux nouveaux filtres sur la page Factures : Abonnement (OUI/NON basé sur isSubscription) et Entité (SANTINOVA/ITINOVA basé sur ventilationComptable === 'SANTINOVA'). Filtrage côté client, aucune modification backend nécessaire.

This commit is contained in:
Manus
2026-07-30 08:15:56 +00:00
parent 827c9ec41e
commit aebc607e8a

View File

@@ -52,6 +52,8 @@ export default function Invoices() {
const [selectedIds, setSelectedIds] = useState<number[]>([]); const [selectedIds, setSelectedIds] = useState<number[]>([]);
const [statusFilter, setStatusFilter] = useState<string>("all"); const [statusFilter, setStatusFilter] = useState<string>("all");
const [recipientFilter, setRecipientFilter] = useState<string>("all"); const [recipientFilter, setRecipientFilter] = useState<string>("all");
const [subscriptionFilter, setSubscriptionFilter] = useState<string>("all"); // all | yes | no
const [entityFilter, setEntityFilter] = useState<string>("all"); // all | santinova | itinova
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const [invoiceToDelete, setInvoiceToDelete] = useState<number | null>(null); const [invoiceToDelete, setInvoiceToDelete] = useState<number | null>(null);
const [addDialogOpen, setAddDialogOpen] = useState(false); const [addDialogOpen, setAddDialogOpen] = useState(false);
@@ -236,7 +238,18 @@ export default function Invoices() {
if ((inv as any).recipientName !== recipientFilter) return false; if ((inv as any).recipientName !== recipientFilter) return false;
} }
} }
// Filter by subscription
if (subscriptionFilter !== "all") {
const isSub = (inv as any).isSubscription === 1 || (inv as any).isSubscription === true;
if (subscriptionFilter === "yes" && !isSub) return false;
if (subscriptionFilter === "no" && isSub) return false;
}
// Filter by entity (SANTINOVA = ventilationComptable === 'SANTINOVA', ITINOVA = autre)
if (entityFilter !== "all") {
const ventil = ((inv as any).ventilationComptable || "").toUpperCase();
if (entityFilter === "santinova" && ventil !== "SANTINOVA") return false;
if (entityFilter === "itinova" && ventil === "SANTINOVA") return false;
}
return true; return true;
}); });
@@ -420,6 +433,32 @@ export default function Invoices() {
</SelectContent> </SelectContent>
</Select> </Select>
</div> </div>
{/* Filtre Abonnement */}
<div className="flex items-center gap-2 min-w-[180px]">
<Select value={subscriptionFilter} onValueChange={setSubscriptionFilter}>
<SelectTrigger className="w-full">
<SelectValue placeholder="Abonnement" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">Tous (abonnement)</SelectItem>
<SelectItem value="yes">Abonnement : OUI</SelectItem>
<SelectItem value="no">Abonnement : NON</SelectItem>
</SelectContent>
</Select>
</div>
{/* Filtre Entité */}
<div className="flex items-center gap-2 min-w-[180px]">
<Select value={entityFilter} onValueChange={setEntityFilter}>
<SelectTrigger className="w-full">
<SelectValue placeholder="Entité" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">Toutes entités</SelectItem>
<SelectItem value="santinova">SANTINOVA</SelectItem>
<SelectItem value="itinova">ITINOVA</SelectItem>
</SelectContent>
</Select>
</div>
</div> </div>
{/* Mode compact/détail + Tri */} {/* Mode compact/détail + Tri */}