From a24de6c35e5761f43a3ffd36f20abf26023330ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 21 Mar 2026 17:20:38 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[=EC=9E=91=EC=97=85=EC=9D=BC=EC=A7=80]?= =?UTF-8?q?=20STOCK=20=EC=9E=91=EC=97=85=EC=A7=80=EC=8B=9C=20bending=5Finf?= =?UTF-8?q?o=20API=20fallback=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WorkOrderService::show()에서 STOCK 작업지시의 options에 bending_info가 없을 때 수주의 bending_lot에서 동적 생성. React 작업일지 모달에서도 정상 표시되도록 수정. --- app/Services/OrderService.php | 17 +++++++++++++++-- app/Services/WorkOrderService.php | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index ccf7bd4b..919395db 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -2208,7 +2208,20 @@ public function checkBendingStockForOrder(int $orderId): array * order.options.bending_lot 코드를 work_order.options.bending_info 구조로 매핑하여 * 절곡 작업일지에서 데이터를 정상 표시할 수 있도록 한다. */ + /** + * 외부에서 호출 가능한 static wrapper (WorkOrderService에서 사용) + */ + public function buildStockBendingInfoStatic(array $bendingLot, int $quantity): ?array + { + return self::buildStockBendingInfoFromLot($bendingLot, $quantity); + } + private function buildStockBendingInfo(array $bendingLot, int $quantity): ?array + { + return self::buildStockBendingInfoFromLot($bendingLot, $quantity); + } + + private static function buildStockBendingInfoFromLot(array $bendingLot, int $quantity): ?array { $prodCode = $bendingLot['prod_code'] ?? ''; $specCode = $bendingLot['spec_code'] ?? ''; @@ -2219,7 +2232,7 @@ private function buildStockBendingInfo(array $bendingLot, int $quantity): ?array } // length_code → mm 변환 - $lengthMm = $this->stockLengthCodeToMm($prodCode, $lengthCode); + $lengthMm = self::stockLengthCodeToMmStatic($prodCode, $lengthCode); if ($lengthMm <= 0) { return null; } @@ -2287,7 +2300,7 @@ private function buildStockBendingInfo(array $bendingLot, int $quantity): ?array /** * STOCK 재고생산 length_code → mm 변환 */ - private function stockLengthCodeToMm(string $prodCode, string $lengthCode): int + private static function stockLengthCodeToMmStatic(string $prodCode, string $lengthCode): int { // 연기차단재 전용 길이 if ($prodCode === 'G') { diff --git a/app/Services/WorkOrderService.php b/app/Services/WorkOrderService.php index afd4493f..ed6842e2 100644 --- a/app/Services/WorkOrderService.php +++ b/app/Services/WorkOrderService.php @@ -273,6 +273,24 @@ public function show(int $id) throw new NotFoundHttpException(__('error.not_found')); } + // STOCK(재고생산) 작업지시: bending_info 없으면 수주의 bending_lot에서 동적 생성 + if (empty($workOrder->options['bending_info']) && $workOrder->salesOrder) { + $orderOptions = $workOrder->salesOrder->options ?? []; + $bendingLot = $orderOptions['bending_lot'] ?? null; + if ($bendingLot && ($workOrder->salesOrder->order_type_code ?? '') === 'STOCK') { + $stockBendingInfo = app(\App\Services\OrderService::class) + ->buildStockBendingInfoStatic( + $bendingLot, + (int) ($orderOptions['target_stock_qty'] ?? $workOrder->salesOrder->quantity ?? 1) + ); + if ($stockBendingInfo) { + $opts = $workOrder->options ?? []; + $opts['bending_info'] = $stockBendingInfo; + $workOrder->options = $opts; + } + } + } + return $workOrder; }