From b8e9aaa128363c9f74fd18b292b99c4afb019e88 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 9 Jul 2026 15:09:02 +0700 Subject: [PATCH] refactor: improve raw material filtering logic in CuttingPosCombinationDialog to return only matching prices, enhancing search efficiency --- .../form/CuttingPosCartDetailDialog.vue | 71 +++++------- .../form/CuttingPosCombinationDialog.vue | 21 ++-- .../manage/cuttings/form/CuttingPosForm.vue | 108 ++++++++++++++++-- .../cuttings/form/CuttingPosSummaryPanel.vue | 5 - 4 files changed, 142 insertions(+), 63 deletions(-) diff --git a/resources/js/pages/admin/manage/cuttings/form/CuttingPosCartDetailDialog.vue b/resources/js/pages/admin/manage/cuttings/form/CuttingPosCartDetailDialog.vue index 9dfaa20..df4bf6f 100644 --- a/resources/js/pages/admin/manage/cuttings/form/CuttingPosCartDetailDialog.vue +++ b/resources/js/pages/admin/manage/cuttings/form/CuttingPosCartDetailDialog.vue @@ -5,78 +5,63 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; +import { Separator } from '@/components/ui/separator'; import { formatRupiah } from '@/lib/rupiah'; +import type { FormWithErrors } from '@/lib/form'; import type { CuttingMaterialCartItem, CuttingResultCartItem } from '@/types/cutting'; +import CuttingPosMaterialSummaryItems from './CuttingPosMaterialSummaryItems.vue'; +import CuttingPosResultSummaryItems from './CuttingPosResultSummaryItems.vue'; defineProps<{ + form: FormWithErrors & { description: string; processing?: boolean }; materialCart: CuttingMaterialCartItem[]; resultCart: CuttingResultCartItem[]; materialLineCost: (item: CuttingMaterialCartItem) => number; totalMaterialCost: number; + totalResultPieces: number; isCreateMode: boolean; }>(); +const emit = defineEmits<{ + 'remove-material': [index: number]; + 'sync-material-field': [index: number]; + 'remove-combination': [combinationId: number]; + 'sync-combination-result': [combinationId: number, result: number | null]; + 'remove-result': [index: number]; + 'sync-result-totals': [item: CuttingResultCartItem]; + 'sync-result-field': [index: number]; +}>(); + const open = defineModel('open', { required: true });