diff --git a/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx b/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx
index 6b6f6a81..885cd8fc 100644
--- a/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx
+++ b/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx
@@ -1,21 +1,27 @@
-import Table from '@/components/Table';
import { DeliveryOrderProductFormValues } from '@/components/pages/marketing/form/repeater/delivery-order/DeliverOrderProduct.schema';
import Button from '@/components/Button';
import { Icon } from '@iconify/react';
-import * as TanStack from '@tanstack/react-table';
-import { useMemo, useRef } from 'react';
-import {
- cn,
- formatCurrency,
- formatDate,
- formatNumber,
- formatVechicleNumber,
-} from '@/lib/helper';
+import { useRef } from 'react';
+import { formatCurrency, formatDate, formatNumber } from '@/lib/helper';
+import DeliveryOrderExport from '@/components/pages/marketing/pdf/DeliveryOrderExport';
+import { Marketing } from '@/types/api/marketing/marketing';
type DeliveryOrderProductTableProps = {
data: DeliveryOrderProductFormValues[];
- formType?: 'add' | 'edit' | 'add_deliver' | 'edit_deliver';
- onEdit: (id: number) => void;
+ formType?:
+ | 'add'
+ | 'edit'
+ | 'add_deliver'
+ | 'edit_deliver'
+ | 'add_delivery'
+ | 'edit_delivery'
+ | 'detail'
+ | 'rejected'
+ | 'pending'
+ | string
+ | null;
+ marketing?: Marketing;
+ onEdit: (id: number, values: DeliveryOrderProductFormValues) => void;
onDelete: (id: number) => void;
onAddProductClick: () => void;
};
@@ -26,201 +32,168 @@ const DeliveryOrderProductTable = ({
onEdit,
onDelete,
onAddProductClick,
+ marketing,
}: DeliveryOrderProductTableProps) => {
const onEditRef = useRef(onEdit);
onEditRef.current = onEdit;
const onDeleteRef = useRef(onDelete);
onDeleteRef.current = onDelete;
- const canAddData = data.filter((item) => !Boolean(item.qty));
-
- const columns = useMemo(() => {
- const cols = [
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.do_number,
- header: 'No. Pengiriman',
- cell: (
- props: TanStack.CellContext
- ) => (
- <>
- {props.row.original.do_number ? props.row.original.do_number : '-'}
- >
- ),
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.vehicle_number,
- header: 'No. Polisi',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.vehicle_number
- ? formatVechicleNumber(props.row.original.vehicle_number as string)
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) =>
- row.marketing_product?.kandang?.label,
- header: 'Kandang',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) =>
- row.marketing_product?.product_warehouse?.label,
- header: 'Produk',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) =>
- row.delivery_date
- ? formatDate(row.delivery_date as string, 'DD MMM YYYY')
- : '-',
- header: 'Tanggal Delivery',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.delivery_date
- ? formatDate(
- props.row.original.delivery_date as string,
- 'DD MMM YYYY'
- )
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.unit_price,
- header: 'Harga Satuan (Rp)',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.unit_price
- ? formatCurrency(
- parseFloat(props.row.original.unit_price as string)
- )
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.total_weight,
- header: 'Total Bobot (Kg)',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.total_weight
- ? formatNumber(
- parseFloat(props.row.original.total_weight as string)
- )
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.qty,
- header: 'Kuantitas',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.qty
- ? formatNumber(parseFloat(props.row.original.qty as string))
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.avg_weight,
- header: 'Avg. Bobot (Kg)',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.avg_weight
- ? formatNumber(parseFloat(props.row.original.avg_weight as string))
- : '-',
- },
- {
- accessorFn: (row: DeliveryOrderProductFormValues) => row.total_price,
- header: 'Total Penjualan (Rp)',
- cell: (
- props: TanStack.CellContext
- ) =>
- props.row.original.total_price
- ? formatCurrency(
- parseFloat(props.row.original.total_price as string)
- )
- : '-',
- },
-
- {
- header: 'Aksi',
- cell: (
- props: TanStack.CellContext
- ) => (
-
- <>
- {props.row.original.qty && (
- <>
-
-
- >
- )}
- {!props.row.original.qty && '-'}
- >
-
- ),
- },
- ];
- if (formType == 'add_deliver') {
- return cols.filter((col) => col.header != 'No. Pengiriman');
- }
- return cols;
- }, [formType, onEditRef]);
-
return (
<>
-
- data={data}
- columns={columns}
- className={{
- tableWrapperClassName: 'overflow-x-auto min-h-full!',
- tableClassName: 'font-inter w-full table-auto min-h-full!',
- headerRowClassName: 'border-b border-b-gray-200',
- headerColumnClassName:
- 'px-2 py-2 text-xs font-semibold text-gray-500 last:flex last:flex-row last:justify-end first:flex first:flex-row first:justify-start',
- bodyRowClassName: 'border-b border-b-gray-200',
- bodyColumnClassName:
- 'px-2 py-2 last:flex last:flex-row last:justify-end',
- paginationClassName: 'hidden',
- }}
- emptyContent={
-
- Belum ada data pengiriman
-
- }
- />
-
-
+
+ {data.map((item) => {
+ const doItem = marketing?.delivery_order?.find(
+ (doItem) => doItem.do_number === item.do_number
+ );
+ return (
+
+
+
+
+ |
+ Label
+ |
+
+
+ Value
+ {(formType === 'add_delivery' ||
+ formType === 'edit_delivery' ||
+ formType === 'detail') && (
+
+
+
+
+ )}
+
+ |
+
+ <>
+
+ | Tanggal Pengiriman |
+
+ {item.delivery_date ? (
+ formatDate(item.delivery_date, 'DD MMM YYYY')
+ ) : (
+ Belum diisi
+ )}
+ |
+
+ {item.do_number && (
+
+ | No. Pengiriman |
+ {item.do_number} |
+
+ )}
+
+ | No. Polisi |
+
+ {item.vehicle_number}
+ |
+
+
+ | Gudang |
+
+ {item.marketing_product?.product_warehouse?.label}
+ |
+
+
+ | Produk |
+
+ {item.marketing_product?.product_warehouse?.label}
+ |
+
+
+ | Qty |
+
+ {item.qty
+ ? `${formatNumber(parseFloat(item.qty as string))} ${item.marketing_product?.uom ?? ''}`
+ : '-'}
+ |
+
+
+ | Avg Bobot |
+
+ {item.avg_weight
+ ? formatNumber(
+ parseFloat(item.avg_weight as string)
+ ) + ' Kg'
+ : '-'}
+ |
+
+
+ | Total Bobot |
+
+ {formatNumber(parseFloat(item.total_weight as string))}
+ |
+
+
+ | Total Harga Satuan |
+
+ {formatCurrency(parseFloat(item.unit_price as string))}
+ |
+
+
+ | Total Penjualan |
+
+ {formatCurrency(parseFloat(item.total_price as string))}
+ |
+
+ {doItem && (
+
+ |
+ Dokumen Pengiriman
+ |
+
+
+ |
+
+ )}
+ >
+
+
+
+ );
+ })}
>
);
diff --git a/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx b/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx
index 4e8247be..5ac9eede 100644
--- a/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx
+++ b/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx
@@ -1,16 +1,14 @@
'use client';
import Button from '@/components/Button';
-import Table from '@/components/Table';
import { SalesOrderProductFormValues } from '@/components/pages/marketing/form/repeater/sales-order/SalesOrderProduct.schema';
import {
- cn,
formatCurrency,
formatNumber,
formatVechicleNumber,
} from '@/lib/helper';
import { Icon } from '@iconify/react';
-import { useMemo, useRef, useState } from 'react';
+import { useMemo, useRef } from 'react';
import * as TanStack from '@tanstack/react-table';
import CheckboxInput from '@/components/input/CheckboxInput';
@@ -156,15 +154,51 @@ const SalesOrderProductTable = ({
style={{
borderRadius: '0.5rem',
}}
- className='border-none'
+ className='border-none w-full'
>
-
+
- |
+ |
Label
|
- Value
+
+ Value
+ {formType !== 'success' && (
+
+
+
+
+ )}
+
|
<>
@@ -178,48 +212,47 @@ const SalesOrderProductTable = ({
{item.product_warehouse?.label}
-
- | Kategori |
- Telur |
-
| Produk |
{item.product_warehouse?.label}
|
-
- | Tipe Konversi |
- Peti 15Kg |
-
-
- | Total Peti |
-
- {formatNumber(parseFloat(item.qty as string))}
- |
-
| Total Bobot |
- {formatNumber(parseFloat(item.total_weight as string))}
+ {item.total_weight
+ ? formatNumber(
+ parseFloat(item.total_weight as string)
+ ) + ' Kg'
+ : '-'}
|
- | Total Butir Telur |
+ Avg Bobot |
- {formatNumber(parseFloat(item.qty as string))}
+ {item.avg_weight
+ ? formatNumber(parseFloat(item.avg_weight as string)) +
+ ' Kg'
+ : '-'}
+ |
+
+
+ | Qty |
+
+ {`${formatNumber(parseFloat(item.qty as string))} ${item.uom || ''}`}
|
| Total Harga Satuan |
- {formatNumber(parseFloat(item.unit_price as string))}
+ {formatCurrency(parseFloat(item.unit_price as string))}
|
| Total Penjualan |
- {formatNumber(parseFloat(item.total_price as string))}
+ {formatCurrency(parseFloat(item.total_price as string))}
|
>
@@ -233,7 +266,7 @@ const SalesOrderProductTable = ({