diff --git a/package.json b/package.json
index 3416a673..6d3edacd 100644
--- a/package.json
+++ b/package.json
@@ -49,4 +49,4 @@
"tailwindcss": "^4",
"typescript": "^5"
}
-}
\ No newline at end of file
+}
diff --git a/src/components/pages/marketing/detail/MarketingDetail.tsx b/src/components/pages/marketing/detail/MarketingDetail.tsx
index 1b3945e5..d196732e 100644
--- a/src/components/pages/marketing/detail/MarketingDetail.tsx
+++ b/src/components/pages/marketing/detail/MarketingDetail.tsx
@@ -32,6 +32,7 @@ import { useRouter } from 'next/navigation';
import { useState } from 'react';
import toast from 'react-hot-toast';
import SalesOrderExport from '@/components/pages/marketing/pdf/SalesOrderExport';
+import DeliveryOrderExport from '../pdf/DeliveryOrderExport';
const MarketingDetail = ({
initialValues,
@@ -386,10 +387,10 @@ const MarketingDetail = ({
/>
-
+
);
diff --git a/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx b/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx
index e69de29b..c2b19660 100644
--- a/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx
+++ b/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx
@@ -0,0 +1,235 @@
+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 pdfStyles from './styles/MarketingPDFStyles';
+import { formatDate, formatNumber, formatVechicleNumber } from '@/lib/helper';
+import { format } from 'path';
+import { date } from 'yup';
+
+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) {
+ alert('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) {
+ console.error('Error generating PDF:', error);
+ alert('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
+
+
+
+
+ );
+};