import React, { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { safeFormat } from "@/lib/dateUtils"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 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 } from "lucide-react"; import ReconciliationModal from "@/components/modals/ReconciliationModal"; export default function BLReconciliation() { const { user } = useAuthUnified(); const { selectedStoreId } = useStore(); const { toast } = useToast(); const queryClient = useQueryClient(); const permissions = usePermissions(user?.role); // Redirection pour les employés if (user?.role === 'employee') { return (
Accès restreint
Seuls les managers 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. | Magasin | 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.group?.name}
|
{/* Actions selon le statut de rapprochement et les permissions */}
{!delivery.reconciled ? (
// Livraison non rapprochée : Valider + Supprimer
<>
{permissions.canValidate('reconciliation') && (
)}
{permissions.canDelete('reconciliation') && (
)}
>
) : (
// Livraison rapprochée : Dévalider (admin seulement) + Supprimer
<>
{user?.role === 'admin' && (
)}
{permissions.canDelete('reconciliation') && (
)}
>
)}
{/* Bouton Voir les détails toujours disponible */}
|
Les livraisons de fournisseurs en mode automatique sont validées automatiquement lorsqu'elles ont le statut "delivered" et un numéro de BL. {user?.role === 'admin' ? ( " Vous pouvez dévalider ces rapprochements si nécessaire." ) : ( " Seuls les administrateurs peuvent dévalider ces rapprochements." )}
Les livraisons de fournisseurs en mode automatique apparaîtront ici.
|
Fournisseur
|
N° BL | Date Livr. | Date Valid. | Montant BL | Ref. Facture | Montant Fact. | Magasin | Actions |
|---|---|---|---|---|---|---|---|---|
|
{delivery.supplier?.name}
|
{delivery.blNumber || '-'}
|
{safeFormat(delivery.scheduledDate, 'dd/MM/yy')}
|
{delivery.reconciled && delivery.updatedAt ?
safeFormat(delivery.updatedAt, 'dd/MM/yy') :
'-'
}
|
{delivery.blAmount ?
`${parseFloat(delivery.blAmount).toFixed(2)}€` :
'-'
}
|
{delivery.invoiceReference || '-'}
|
{delivery.invoiceAmount ?
`${parseFloat(delivery.invoiceAmount).toFixed(2)}€` :
'-'
}
|
{delivery.group?.name}
|
{/* Dévalider automatique - admin uniquement */}
{user?.role === 'admin' && (
)}
|