import { Fragment } from 'react'; import { ImagePreviewButton } from '@/components/dialogs'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { formatNumber } from '@/lib/format'; import type { Cutting } from './columns'; export function CuttingItemSubRow({ cutting }: { cutting: Cutting }) { const items = cutting.cutting_materials ?? []; const combinations = cutting.cutting_material_combinations ?? []; const singles = items.filter((item) => item.combination_id === null); const comboItems = items.filter((item) => item.combination_id !== null); const comboGroups: Record = {}; comboItems.forEach((item) => { const comboId = item.combination_id!; if (!comboGroups[comboId]) { comboGroups[comboId] = []; } comboGroups[comboId].push(item); }); const singleByRawMaterial = singles.reduce( (acc, item) => { const name = item.raw_material_price?.raw_material?.name ?? 'BING'; if (!acc[name]) { acc[name] = []; } acc[name].push(item); return acc; }, {} as Record, ); const hasSingle = singles.length > 0; const hasCombo = comboItems.length > 0; let counter = 0; return (
No Foto Varian Pemakaian Hasil {hasSingle && ( <> Single {Object.entries(singleByRawMaterial).map( ([rawMaterialName, groupItems]) => { const totalPemakaian = groupItems.reduce( (sum, item) => sum + Number(item.material_usage), 0, ); const totalHasil = groupItems.reduce( (sum, item) => sum + (item.material_result !== null ? Number(item.material_result) : 0), 0, ); return ( {rawMaterialName} {formatNumber( totalPemakaian, )} {formatNumber( totalHasil, )} {groupItems.map((item) => { counter++; return ( {counter} {item.raw_material_price ?.photo_url ? ( ) : (
N/A
)}
{item.raw_material_price ?.variant ?? '-'} {formatNumber( item.material_usage, )} {item.material_result !== null ? formatNumber( item.material_result, ) : '-'}
); })}
); }, )} )} {hasCombo && ( <> Kombinasi {Object.entries(comboGroups).map( ([comboId, materials]) => { counter++; const combo = combinations.find( (c) => c.id === Number(comboId), ); return ( {counter} Kombinasi{' '} {counter} {combo?.material_result !== null && combo?.material_result !== undefined && ( (Hasil:{' '} {formatNumber( combo.material_result, )} ) )} {materials.map((item) => ( {item .raw_material_price ?.photo_url ? ( ) : (
N/A
)}
{item .raw_material_price ?.raw_material ?.name ?? '-'}{' '} -{' '} {item .raw_material_price ?.variant ?? '-'} {formatNumber( item.material_usage, )} -
))}
); }, )} )} {items.length === 0 && ( Tidak ada bahan baku. )}
); }