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:
@@ -52,6 +52,8 @@ export default function Invoices() {
|
||||
const [selectedIds, setSelectedIds] = useState<number[]>([]);
|
||||
const [statusFilter, setStatusFilter] = 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 [invoiceToDelete, setInvoiceToDelete] = useState<number | null>(null);
|
||||
const [addDialogOpen, setAddDialogOpen] = useState(false);
|
||||
@@ -236,7 +238,18 @@ export default function Invoices() {
|
||||
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;
|
||||
});
|
||||
|
||||
@@ -420,6 +433,32 @@ export default function Invoices() {
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</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>
|
||||
|
||||
{/* Mode compact/détail + Tri */}
|
||||
|
||||
Reference in New Issue
Block a user