diff --git a/app/Services/Quote/QuoteService.php b/app/Services/Quote/QuoteService.php index cc71695..34e05e0 100644 --- a/app/Services/Quote/QuoteService.php +++ b/app/Services/Quote/QuoteService.php @@ -689,11 +689,23 @@ public function convertToOrder(int $id): Quote } // 수주 상세 품목 생성 (노드 연결 포함) + // formula_source 없는 레거시 데이터용: sort_order 기반 분배 준비 + $locationCount = count($productItems); + $hasFormulaSource = $quote->items->contains(fn ($item) => ! empty($item->formula_source)); + $itemsPerLocation = (! $hasFormulaSource && $locationCount > 1) + ? intdiv($quote->items->count(), $locationCount) + : 0; + $serialIndex = 1; - foreach ($quote->items as $quoteItem) { + foreach ($quote->items as $index => $quoteItem) { $productMapping = $this->resolveLocationMapping($quoteItem, $productItems); $locIdx = $this->resolveLocationIndex($quoteItem, $productItems); + // sort_order 기반 분배 (formula_source/note 매칭 모두 실패 시) + if ($locIdx === 0 && $itemsPerLocation > 0) { + $locIdx = min(intdiv($index, $itemsPerLocation), $locationCount - 1); + } + $productMapping['order_node_id'] = isset($nodeMap[$locIdx]) ? $nodeMap[$locIdx]->id : null; $orderItem = OrderItem::createFromQuoteItem($quoteItem, $order->id, $serialIndex, $productMapping);