Checkpoint: Création de la page Factures BAP et restructuration de l'interface
Nouvelles fonctionnalités : ✅ Nouvelle page "Factures BAP" qui affiche uniquement les factures avec Abonnement = NON (isSubscription = 0) ✅ La page Factures BAP inclut les colonnes Type d'achat et Ventilation comptable avec édition directe ✅ Les colonnes Type d'achat et Ventilation ont été supprimées de la page Factures principale ✅ Menu "Factures BAP" ajouté dans la navigation du DashboardLayout ✅ Route /invoices-bap configurée dans App.tsx Architecture : - client/src/pages/InvoicesBAP.tsx : Nouvelle page pour les factures BAP (non-abonnement) - client/src/pages/Invoices.tsx : Page principale modifiée (colonnes Type d'achat et Ventilation supprimées) - client/src/App.tsx : Route /invoices-bap ajoutée - client/src/components/DashboardLayout.tsx : Menu "Factures BAP" ajouté Fonctionnement : 1. La page "Factures" affiche toutes les factures avec les colonnes : Fournisseur, N° Facture, Date, Montant, Service, Abonnement, Score, Statut, Actions 2. La page "Factures BAP" affiche uniquement les factures non-abonnement (Abonnement = NON) avec les colonnes supplémentaires : Type d'achat et Ventilation comptable 3. Les deux pages conservent toutes les fonctionnalités d'édition directe, export, suppression, etc. 4. Le filtrage est automatique basé sur le champ isSubscription (0 = NON, 1 = OUI) Cette restructuration permet une meilleure organisation des factures selon leur nature (abonnement ou BAP).
This commit is contained in:
@@ -407,8 +407,6 @@ export default function Invoices() {
|
||||
<TableHead>Date</TableHead>
|
||||
<TableHead>Montant</TableHead>
|
||||
<TableHead>Service</TableHead>
|
||||
<TableHead>Type achat</TableHead>
|
||||
<TableHead>Ventilation</TableHead>
|
||||
<TableHead>Abonnement</TableHead>
|
||||
<TableHead>Score</TableHead>
|
||||
<TableHead>Statut</TableHead>
|
||||
@@ -469,47 +467,6 @@ export default function Invoices() {
|
||||
<option value="__ADD_NEW__" className="font-semibold text-blue-600">➜ Ajouter...</option>
|
||||
</select>
|
||||
</TableCell>
|
||||
<TableCell className="text-sm">
|
||||
<select
|
||||
value={invoice.typeAchat || ""}
|
||||
onChange={(e) => {
|
||||
updateFieldMutation.mutate({
|
||||
id: invoice.id,
|
||||
data: { typeAchat: e.target.value as "CAPEX" | "OPEX" | undefined },
|
||||
});
|
||||
}}
|
||||
className="w-full px-2 py-1 border rounded text-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
>
|
||||
<option value="">-</option>
|
||||
<option value="CAPEX">CAPEX</option>
|
||||
<option value="OPEX">OPEX</option>
|
||||
</select>
|
||||
</TableCell>
|
||||
<TableCell className="text-sm">
|
||||
<select
|
||||
value={invoice.ventilationComptable || ""}
|
||||
onChange={(e) => {
|
||||
if (e.target.value === "__ADD_NEW__") {
|
||||
setPendingInvoiceId(invoice.id);
|
||||
setAddDialogType("ventilation");
|
||||
setAddDialogOpen(true);
|
||||
e.target.value = invoice.ventilationComptable || "";
|
||||
} else {
|
||||
updateFieldMutation.mutate({
|
||||
id: invoice.id,
|
||||
data: { ventilationComptable: e.target.value || undefined },
|
||||
});
|
||||
}
|
||||
}}
|
||||
className="w-full px-2 py-1 border rounded text-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
>
|
||||
<option value="">-</option>
|
||||
{allocations?.map((alloc) => (
|
||||
<option key={alloc.id} value={alloc.name}>{alloc.name}</option>
|
||||
))}
|
||||
<option value="__ADD_NEW__" className="font-semibold text-blue-600">➜ Ajouter...</option>
|
||||
</select>
|
||||
</TableCell>
|
||||
<TableCell className="text-sm">
|
||||
<select
|
||||
value={invoice.isSubscription ? "OUI" : "NON"}
|
||||
|
||||
Reference in New Issue
Block a user