diff --git a/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue b/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue index 8c00400..46f689e 100644 --- a/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue +++ b/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue @@ -73,6 +73,63 @@ function statusVariant(status: string): 'default' | 'secondary' | 'destructive' return 'outline'; } + +interface GroupedCuttingMaterials { + rawMaterialId: number; + rawMaterialName: string; + unitLabel?: string; + items: any[]; +} + +interface GroupedCuttingResults { + productId: number; + productName: string; + items: any[]; +} + +function getGroupedMaterials(materials: any[]): GroupedCuttingMaterials[] { + const groups: Record = {}; + + materials.forEach((item) => { + const rawMaterial = item.raw_material_price?.raw_material; + const rawMaterialId = rawMaterial?.id ?? 0; + const rawMaterialName = rawMaterial?.name ?? 'Bahan Baku Tidak Diketahui'; + const unitLabel = rawMaterial?.unit_label; + + if (!groups[rawMaterialId]) { + groups[rawMaterialId] = { + rawMaterialId, + rawMaterialName, + unitLabel, + items: [], + }; + } + groups[rawMaterialId].items.push(item); + }); + + return Object.values(groups); +} + +function getGroupedResults(results: any[]): GroupedCuttingResults[] { + const groups: Record = {}; + + results.forEach((item) => { + const product = item.product_variant?.product; + const productId = product?.id ?? 0; + const productName = product?.name ?? 'Produk Tidak Diketahui'; + + if (!groups[productId]) { + groups[productId] = { + productId, + productName, + items: [], + }; + } + groups[productId].items.push(item); + }); + + return Object.values(groups); +}