Checkpoint: Correction de la sélection et suppression des factures.
Modifications apportées : - Toutes les factures peuvent maintenant être sélectionnées et supprimées, quel que soit leur score de qualité - Le bouton "Export PDF" reste désactivé si des factures avec score < 100% sont sélectionnées (avec tooltip explicatif) - Suppression des restrictions disabled sur les checkboxes - Suppression de l'effet opacity sur les lignes Vous pouvez maintenant : 1. Sélectionner toutes vos factures actuelles (même celles sans score 100%) 2. Les supprimer via le bouton "Supprimer" 3. Ré-importer votre fichier PDF pour que les fichiers soient correctement stockés
This commit is contained in:
@@ -115,11 +115,9 @@ export default function Invoices() {
|
||||
|
||||
const handleSelectAll = (checked: boolean) => {
|
||||
if (checked) {
|
||||
// Select only invoices with score 100
|
||||
const eligibleIds = (filteredInvoices || [])
|
||||
.filter(inv => (inv.qualityScore || 0) === 100)
|
||||
.map(inv => inv.id);
|
||||
setSelectedIds(eligibleIds);
|
||||
// Select all invoices (no restriction)
|
||||
const allIds = (filteredInvoices || []).map(inv => inv.id);
|
||||
setSelectedIds(allIds);
|
||||
} else {
|
||||
setSelectedIds([]);
|
||||
}
|
||||
@@ -174,6 +172,11 @@ export default function Invoices() {
|
||||
const isEligibleForExport = (invoice: any) => {
|
||||
return (invoice.qualityScore || 0) === 100;
|
||||
};
|
||||
|
||||
const hasOnlyEligibleSelected = selectedIds.length > 0 && selectedIds.every(id => {
|
||||
const invoice = invoices?.find(inv => inv.id === id);
|
||||
return invoice && isEligibleForExport(invoice);
|
||||
});
|
||||
|
||||
const allEligibleSelected = (filteredInvoices?.length || 0) > 0 &&
|
||||
(filteredInvoices || []).filter(inv => isEligibleForExport(inv)).every(inv => selectedIds.includes(inv.id));
|
||||
@@ -198,8 +201,9 @@ export default function Invoices() {
|
||||
</Button>
|
||||
<Button
|
||||
onClick={handleExport}
|
||||
disabled={selectedIds.length === 0 || exportMutation.isPending}
|
||||
disabled={selectedIds.length === 0 || !hasOnlyEligibleSelected || exportMutation.isPending}
|
||||
className="bg-blue-600 hover:bg-blue-700"
|
||||
title={!hasOnlyEligibleSelected && selectedIds.length > 0 ? "Seules les factures avec un score de 100% peuvent être exportées" : ""}
|
||||
>
|
||||
<Download className="w-4 h-4 mr-2" />
|
||||
PDF ({selectedIds.length})
|
||||
@@ -306,14 +310,12 @@ export default function Invoices() {
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{filteredInvoices.map((invoice) => {
|
||||
const eligible = isEligibleForExport(invoice);
|
||||
return (
|
||||
<TableRow key={invoice.id} className={!eligible ? "opacity-50" : ""}>
|
||||
<TableRow key={invoice.id}>
|
||||
<TableCell>
|
||||
<Checkbox
|
||||
checked={selectedIds.includes(invoice.id)}
|
||||
onCheckedChange={(checked) => handleSelectOne(invoice.id, checked as boolean)}
|
||||
disabled={!eligible}
|
||||
/>
|
||||
</TableCell>
|
||||
<TableCell className="font-medium">
|
||||
|
||||
Reference in New Issue
Block a user