diff --git a/attached_assets/{78C105AD-BD53-4D7E-BF93-C1EF197A0988}_1754995961515.png b/attached_assets/{78C105AD-BD53-4D7E-BF93-C1EF197A0988}_1754995961515.png new file mode 100644 index 0000000..52f8721 Binary files /dev/null and b/attached_assets/{78C105AD-BD53-4D7E-BF93-C1EF197A0988}_1754995961515.png differ diff --git a/client/src/pages/BLReconciliationNative.tsx b/client/src/pages/BLReconciliationNative.tsx new file mode 100644 index 0000000..682cc04 --- /dev/null +++ b/client/src/pages/BLReconciliationNative.tsx @@ -0,0 +1,778 @@ +import { useState, useEffect } from "react"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { safeFormat } from "@/lib/dateUtils"; +import { useToast } from "@/hooks/use-toast"; +import { apiRequest } from "@/lib/queryClient"; +import { useStore } from "@/components/Layout"; +import { useAuthUnified } from "@/hooks/useAuthUnified"; +import { usePermissions } from "@shared/permissions"; +import { Search, Edit, FileText, Settings, Eye, AlertTriangle, X, Check, Trash2, Ban, ChevronLeft, ChevronRight } from "lucide-react"; +import type { Supplier } from "@shared/schema"; + +export default function BLReconciliation() { + const { user } = useAuthUnified(); + const { selectedStoreId } = useStore(); + const { toast } = useToast(); + const queryClient = useQueryClient(); + const permissions = usePermissions(user?.role); + + // Vérification des permissions d'accès au module + if (!permissions.canView('reconciliation')) { + return ( +
+ Accès restreint
+ Seuls les directeurs et administrateurs peuvent accéder au module de rapprochement BL/Factures.
+
+ Gestion des rapprochements manuels et automatiques +
++ Les livraisons de fournisseurs en mode manuel apparaîtront ici. +
+| Fournisseur | +N° BL | +Date Livr. | +Montant BL | +Ref. Facture | +Montant Fact. | +Statut | +Actions | +
|---|---|---|---|---|---|---|---|
|
+
+ {delivery.supplier?.name}
+
+ |
+
+
+ {delivery.blNumber || (
+ Non renseigné
+ )}
+
+ |
+
+
+ {safeFormat(delivery.scheduledDate, 'dd/MM/yy')}
+
+ |
+
+
+ {delivery.blAmount ?
+ `${parseFloat(delivery.blAmount).toFixed(2)}€` :
+ Non renseigné
+ }
+
+ |
+
+
+ {delivery.invoiceReference || (
+ Non renseigné
+ )}
+
+ |
+
+
+ {delivery.invoiceAmount ?
+ `${parseFloat(delivery.invoiceAmount).toFixed(2)}€` :
+ Non renseigné
+ }
+
+ |
+
+ {delivery.reconciled ? (
+ |
+
+
+ {permissions.canEdit('reconciliation') && (
+
+ |
+
+ Les livraisons de fournisseurs en mode automatique sont validées automatiquement lorsqu'elles ont le statut "delivered" et un numéro de BL. + {permissions.canEdit('reconciliation') ? ( + " Vous pouvez dévalider ces rapprochements si nécessaire." + ) : ( + " Seuls les directeurs et administrateurs peuvent modifier ces rapprochements." + )} +
++ Les livraisons de fournisseurs en mode automatique apparaîtront ici. +
+|
+ Fournisseur
+ |
+ N° BL | +Date Livr. | +Date Valid. | +Montant BL | +Ref. Facture | +Statut | +Actions | +
|---|---|---|---|---|---|---|---|
|
+
+
+
+ {delivery.supplier?.name}
+
+
+ |
+
+
+ {delivery.blNumber || '-'}
+
+ |
+
+
+ {safeFormat(delivery.scheduledDate, 'dd/MM/yy')}
+
+ |
+
+
+ {delivery.reconciled && delivery.validatedAt ?
+ safeFormat(delivery.validatedAt, 'dd/MM/yy') :
+ '-'
+ }
+
+ |
+
+
+ {delivery.blAmount ?
+ `${parseFloat(delivery.blAmount).toFixed(2)}€` :
+ '-'
+ }
+
+ |
+
+
+ {delivery.invoiceReference || '-'}
+
+ |
+
+ {isDevalidated(delivery) ? (
+ |
+
+
+ {isDevalidated(delivery) && permissions.canEdit('reconciliation') && (
+ <>
+
+ |
+