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 [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 */}
|
||||||
|
|||||||
Reference in New Issue
Block a user