'use client'; import Card from '@/components/Card'; import Table from '@/components/Table'; import { formatCurrency, formatDate, formatNumber } from '@/lib/helper'; import { RowSapronakCalculation, TotalSapronakCalculation, } from '@/types/api/closing'; import { ColumnDef } from '@tanstack/react-table'; import { useMemo } from 'react'; import useSWR from 'swr'; import { ClosingApi } from '@/services/api/closing'; import { isResponseSuccess } from '@/lib/api-helper'; import { ClosingGeneralInformation } from '@/types/api/closing'; interface ClosingSapronakCalculationTableProps { projectFlockId: number; closingGeneralInformation?: ClosingGeneralInformation; } const ClosingSapronakCalculationTable = ({ projectFlockId, closingGeneralInformation, }: ClosingSapronakCalculationTableProps) => { const { data: sapronakCalculation, isLoading } = useSWR( `/closing/sapronak-calculation/${projectFlockId}`, () => ClosingApi.getPerhitunganSapronak(projectFlockId), { keepPreviousData: true, } ); // Helper function to create columns with footer support const createColumns = ( total?: TotalSapronakCalculation ): ColumnDef[] => [ { header: 'Tanggal', accessorKey: 'date', cell: (props) => props.row.original.date ? formatDate(props.row.original.date, 'DD MMM YYYY') : '-', footer: 'Total', }, { header: 'No. Referensi', accessorKey: 'reference_number', cell: (props) => (props.row.original.reference_number as string) || '-', footer: '', }, { header: 'QTY Masuk', accessorKey: 'qty_in', cell: (props) => props.row.original.qty_in ? formatNumber(props.row.original.qty_in as number) : '-', footer: total ? () => (
{total?.qty_in ? formatNumber(total?.qty_in) : '-'}
) : '', }, { header: 'QTY Keluar', accessorKey: 'qty_out', cell: (props) => props.row.original.qty_out ? formatNumber(props.row.original.qty_out as number) : '-', footer: total ? () => (
{total?.qty_out ? formatNumber(total?.qty_out) : '-'}
) : '', }, { header: 'QTY Pakai', accessorKey: 'qty_used', cell: (props) => props.row.original.qty_used ? formatNumber(props.row.original.qty_used as number) : '-', footer: total ? () => (
{total?.qty_used ? formatNumber(total?.qty_used) : '-'}
) : '', }, { header: 'Uraian', accessorKey: 'description', cell: (props) => (props.row.original.description as string) || '-', footer: '', }, { header: 'Kategori Produk', accessorKey: 'product_category', cell: (props) => (props.row.original.product_category as string) || '-', footer: '', }, { header: 'Harga Beli/Qty (Rp)', accessorKey: 'unit_price', cell: (props) => props.row.original.unit_price ? formatCurrency(props.row.original.unit_price as number) : '-', footer: total ? () => (
{total?.avg_unit_price ? formatCurrency(total?.avg_unit_price) : '-'}
) : '', }, { header: 'Total Harga (Rp)', accessorKey: 'total_amount', cell: (props) => props.row.original.total_amount ? formatCurrency(props.row.original.total_amount as number) : '-', footer: total ? () => (
{total?.total_amount ? formatCurrency(total?.total_amount) : '-'}
) : '', }, { header: 'Keterangan', accessorKey: 'notes', cell: (props) => (props.row.original.notes as string) || '-', footer: '', }, ]; // Memoize columns untuk setiap kategori const docColumns = useMemo( () => isResponseSuccess(sapronakCalculation) ? createColumns(sapronakCalculation.data?.doc?.total) : createColumns(), [sapronakCalculation] ); const ovkColumns = useMemo( () => isResponseSuccess(sapronakCalculation) ? createColumns(sapronakCalculation.data?.ovk?.total) : createColumns(), [sapronakCalculation] ); const pakanColumns = useMemo( () => isResponseSuccess(sapronakCalculation) ? createColumns(sapronakCalculation.data?.pakan?.total) : createColumns(), [sapronakCalculation] ); const pulletColumns = useMemo( () => isResponseSuccess(sapronakCalculation) ? createColumns(sapronakCalculation.data?.pullet?.total) : createColumns(), [sapronakCalculation] ); return (
{/* Table DOC jika kategori Project Flock Growing */} data={ isResponseSuccess(sapronakCalculation) ? ((closingGeneralInformation?.project_category === 'GROWING' ? sapronakCalculation.data?.doc?.rows : sapronakCalculation.data?.pullet?.rows) ?? []) : [] } columns={ closingGeneralInformation?.project_category === 'GROWING' ? docColumns : pulletColumns } className={{ containerClassName: 'my-4', }} renderFooter={isResponseSuccess(sapronakCalculation)} /> data={ isResponseSuccess(sapronakCalculation) ? (sapronakCalculation.data?.ovk?.rows ?? []) : [] } columns={ovkColumns} className={{ containerClassName: 'my-4', }} renderFooter={isResponseSuccess(sapronakCalculation)} /> data={ isResponseSuccess(sapronakCalculation) ? (sapronakCalculation.data?.pakan?.rows ?? []) : [] } columns={pakanColumns} className={{ containerClassName: 'my-4', }} renderFooter={isResponseSuccess(sapronakCalculation)} />
); }; export default ClosingSapronakCalculationTable;