/**
* =========================================================================
* PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0
* Interface Client - Onglet : Livraisons
* =========================================================================
*/
window.pano_ClientLivraisonsTab = ({ data, myClientData, refreshData, showToast, activeModal, targetId, openLocalModal, closeCurrentLayer }) => {
const { useState, useEffect, useMemo } = React;
const [isSaving, setIsSaving] = useState(false);
const [rejectReason, setRejectReason] = useState('');
const {
PackageIcon, MapPinIcon, CheckCircleIcon, ExternalLinkIcon, LoaderIcon, AlertTriangleIcon, EyeIcon, XIcon, PlusIcon
} = window.pano_getIcons();
const Modal = window.pano_Modal || (() => null);
const StatusBadge = window.pano_StatusBadge || (({status}) => {status});
const IconBadge = window.pano_IconBadge || (() => null);
const Button = window.pano_Button || (() => null);
const ExternalLinkIconComp = window.pano_getIcons ? window.pano_getIcons().ExternalLinkIcon : (() => null);
const CardGrid = window.pano_CardGrid || (({children, className}) =>
{children}
);
const DataCard = window.pano_DataCard || (({children, className, variant}) => {children}
);
const SearchBar = window.pano_SearchBar || (() => null);
const EmptySearch = window.pano_EmptySearch || (() => null);
const PaginationFooter = window.pano_PaginationFooter || (() => null);
const deliveryConfirmModal = activeModal === 'delivery_confirm' ? targetId : null;
const rejectA1Target = activeModal === 'reject_a1' ? data.panneaux?.find(c => c.id === targetId) : null;
const { visiblePanels } = window.pano_getPanelAccessRights ? window.pano_getPanelAccessRights(data.panneaux || [], myClientData.id) : { visiblePanels:[] };
const deliveries = visiblePanels.filter(c => c.physicalPanels > 0 && c.status !== 'Brouillon');
const {
searchQuery, setSearchQuery,
visibleCount, setVisibleCount,
filteredData: filteredDeliveries
} = window.pano_useSearchAndPagination(deliveries, (c, q) => {
return (c.name && c.name.toLowerCase().includes(q)) ||
(c.shippingAddress && c.shippingAddress.toLowerCase().includes(q)) ||
(c.location && c.location.toLowerCase().includes(q)) ||
(c.tracking_number && c.tracking_number.toLowerCase().includes(q)) ||
(c.shipping_status && c.shipping_status.toLowerCase().includes(q));
});
const attentionDeliveries = [];
const otherDeliveries = [];
filteredDeliveries.forEach(c => {
if (c.shipping_status === 'Expédié' || c.shipping_status === 'Attente validation client') {
attentionDeliveries.push(c);
} else {
otherDeliveries.push(c);
}
});
const displayedOtherDeliveries = otherDeliveries.slice(0, visibleCount);
useEffect(() => {
const url = new URL(window.location);
const confirmDelivery = url.searchParams.get('confirm_delivery');
if (confirmDelivery) {
url.searchParams.delete('confirm_delivery');
window.history.replaceState({}, '', url);
openLocalModal('delivery_confirm', confirmDelivery);
}
}, []);
const handleConfirmDelivery = async () => {
if (!deliveryConfirmModal) return;
const d = await window.pano_apiFetch('panneaux/shipping', { body: { id: deliveryConfirmModal, shipping_status: 'Réception confirmée' }, setLoading: setIsSaving, successMessage: "Réception confirmée !" });
if (d) { refreshData(); closeCurrentLayer(); }
};
const renderDeliveryCard = (c) => {
const variant = c.shipping_status === 'Attente validation client' ? 'warning' : 'default';
return (
{c.shipping_status === 'Attente validation client' && (
Maquette modifiée à valider
Notre équipe a généré une nouvelle maquette pour votre projet. Veuillez la contrôler et la valider formellement pour lancer l'impression.
{c.a1PdfId && (
)}
)}
{c.shipping_status === 'Expédié' && (
En acheminement
{c.tracking_number ? (
{c.tracking_number}
) : (
Votre commande est en route.
)}
{c.tracking_link && (
)}
{c.shipping_status === 'Expédié' && (
)}
);
};
return (
Livraisons
{deliveries.length > 0 && SearchBar && (
)}
{deliveries.length === 0 ? (
) : filteredDeliveries.length === 0 ? (
EmptySearch &&
) : (
<>
{attentionDeliveries.length > 0 && (
Action requise
{attentionDeliveries.map(c => renderDeliveryCard(c))}
)}
{otherDeliveries.length > 0 && (
Toutes les livraisons
{displayedOtherDeliveries.map(c => renderDeliveryCard(c))}
{PaginationFooter && (
)}
)}
>
)}
{deliveryConfirmModal && Modal && (
)}
{rejectA1Target && Modal && (
)}
);
};
/* EOF ========== [_react/_clients_livraisons.jsx] */