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) => {
|
const handleSelectAll = (checked: boolean) => {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
// Select only invoices with score 100
|
// Select all invoices (no restriction)
|
||||||
const eligibleIds = (filteredInvoices || [])
|
const allIds = (filteredInvoices || []).map(inv => inv.id);
|
||||||
.filter(inv => (inv.qualityScore || 0) === 100)
|
setSelectedIds(allIds);
|
||||||
.map(inv => inv.id);
|
|
||||||
setSelectedIds(eligibleIds);
|
|
||||||
} else {
|
} else {
|
||||||
setSelectedIds([]);
|
setSelectedIds([]);
|
||||||
}
|
}
|
||||||
@@ -175,6 +173,11 @@ export default function Invoices() {
|
|||||||
return (invoice.qualityScore || 0) === 100;
|
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 &&
|
const allEligibleSelected = (filteredInvoices?.length || 0) > 0 &&
|
||||||
(filteredInvoices || []).filter(inv => isEligibleForExport(inv)).every(inv => selectedIds.includes(inv.id));
|
(filteredInvoices || []).filter(inv => isEligibleForExport(inv)).every(inv => selectedIds.includes(inv.id));
|
||||||
|
|
||||||
@@ -198,8 +201,9 @@ export default function Invoices() {
|
|||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onClick={handleExport}
|
onClick={handleExport}
|
||||||
disabled={selectedIds.length === 0 || exportMutation.isPending}
|
disabled={selectedIds.length === 0 || !hasOnlyEligibleSelected || exportMutation.isPending}
|
||||||
className="bg-blue-600 hover:bg-blue-700"
|
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" />
|
<Download className="w-4 h-4 mr-2" />
|
||||||
PDF ({selectedIds.length})
|
PDF ({selectedIds.length})
|
||||||
@@ -306,14 +310,12 @@ export default function Invoices() {
|
|||||||
</TableHeader>
|
</TableHeader>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{filteredInvoices.map((invoice) => {
|
{filteredInvoices.map((invoice) => {
|
||||||
const eligible = isEligibleForExport(invoice);
|
|
||||||
return (
|
return (
|
||||||
<TableRow key={invoice.id} className={!eligible ? "opacity-50" : ""}>
|
<TableRow key={invoice.id}>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={selectedIds.includes(invoice.id)}
|
checked={selectedIds.includes(invoice.id)}
|
||||||
onCheckedChange={(checked) => handleSelectOne(invoice.id, checked as boolean)}
|
onCheckedChange={(checked) => handleSelectOne(invoice.id, checked as boolean)}
|
||||||
disabled={!eligible}
|
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="font-medium">
|
<TableCell className="font-medium">
|
||||||
|
|||||||
6
todo.md
6
todo.md
@@ -109,3 +109,9 @@
|
|||||||
- [x] Identifier que les fichiers n'ont pas été stockés lors de l'import initial
|
- [x] Identifier que les fichiers n'ont pas été stockés lors de l'import initial
|
||||||
- [x] Ajouter bouton "Supprimer" pour supprimer les factures sélectionnées
|
- [x] Ajouter bouton "Supprimer" pour supprimer les factures sélectionnées
|
||||||
- [x] Créer le dossier storage pour le stockage local
|
- [x] Créer le dossier storage pour le stockage local
|
||||||
|
|
||||||
|
## Correction bouton Supprimer
|
||||||
|
- [x] Permettre la sélection de toutes les factures pour suppression (pas seulement celles à 100%)
|
||||||
|
- [x] Séparer la logique de sélection pour export et suppression
|
||||||
|
- [x] Supprimer les restrictions disabled sur les checkboxes
|
||||||
|
- [x] Ajouter validation pour export PDF (seulement score 100%)
|
||||||
|
|||||||
Reference in New Issue
Block a user