import Button from '@/components/Button'; import { BaseDeliveryOrder, Marketing } from '@/types/api/marketing/marketing'; import { Icon } from '@iconify/react'; import { Document, Image, Page, pdf, Text, View } from '@react-pdf/renderer'; import { useMemo, useState } from 'react'; import { formatDate, formatNumber, formatVechicleNumber } from '@/lib/helper'; import { format } from 'path'; import { date } from 'yup'; import pdfStyles from '@/components/pages/marketing/pdf/styles/MarketingPDFStyles'; import toast from 'react-hot-toast'; interface DeliveryOrderExportProps { data?: Marketing; deliveryOrder: BaseDeliveryOrder; className?: string; } const DeliveryOrderExport = ({ data, deliveryOrder, }: DeliveryOrderExportProps) => { const [isGeneratingPDF, setIsGeneratingPDF] = useState(false); const salesData = data; const handleDownloadPDF = async () => { if (!salesData) { toast.error('No sales order data available'); return; } setIsGeneratingPDF(true); try { const blob = await pdf( ).toBlob(); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = `${deliveryOrder?.do_number || 'delivery-order'}.pdf`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); } catch (error) { toast.error('Failed to generate PDF. Please try again.'); } finally { setIsGeneratingPDF(false); } }; if (!salesData) { return (
No sales order data available
); } return salesData?.so_number && salesData.so_number !== 'Belum dibuat' ? ( ) : null; }; export default DeliveryOrderExport; const PDFDocument = ({ data, deliveryOrder, }: { data: Marketing; deliveryOrder: BaseDeliveryOrder; }) => { const grandTotal = useMemo(() => { return ( deliveryOrder.deliveries?.reduce((a, b) => a + b.total_price, 0) ?? 0 ); }, []); return ( {/* Header Section */} PT LUMBUNG TELUR INDONESIA SOHO Building Lt.3 (Paris Van Java), Jalan Karang Tinggal, Kel. Cipedes, Kec. Sukajadi, Kota Bandung 40162 {/* Delivery Order Title */} DELIVERY ORDER {deliveryOrder.do_number || '-'} {/* Depature Table */} Ship To Depature From {data?.customer?.name || '-'} ({data?.customer?.type || '-'}) {data?.customer.email || ''} - {data?.customer.phone || ''} {data?.customer.address || ''} {deliveryOrder.warehouse?.name || '-'} {formatDate(deliveryOrder.delivery_date, 'DD MMM YYYY')} {deliveryOrder.warehouse?.area?.name} {/* Delivery Table */} Product Shipped Item Description Vehicle Number Unit Price Quantity Total Amount {deliveryOrder.deliveries?.map((item, index) => { return ( {item.product_warehouse?.product?.name || '-'} {formatVechicleNumber(item.vehicle_number) || '-'} Rp{formatNumber(item.unit_price || 0)} {formatNumber(item.qty || 0)} Rp{formatNumber(item.total_price || 0)} ); }) || []} {/* Grand Total Row inside table */} Grand Total Rp{formatNumber(grandTotal)} {/* Footer with Special Instructions */} From Sales Order {data?.so_number || '-'} -{' '} {formatDate(data.so_date, 'DD MMM YYYY')} PT LUMBUNG TELUR INDONESIA ); };