From 66887c9c69244e22b63261de19b9431435b32987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Fri, 30 Jan 2026 11:22:28 +0900 Subject: [PATCH] =?UTF-8?q?fix(API):=20=EC=9E=85=EA=B3=A0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EC=8B=9C=20completed=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UpdateReceivingRequest: status 허용값에 completed 추가, receiving_qty/receiving_date/lot_no 필드 추가 - ReceivingService::update(): status가 completed로 변경 시 LOT번호 자동생성, 입고수량/입고일 설정, 재고 연동(StockService) 처리 Co-Authored-By: Claude Opus 4.5 --- .../V1/Receiving/UpdateReceivingRequest.php | 5 +++- app/Services/ReceivingService.php | 23 ++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/Http/Requests/V1/Receiving/UpdateReceivingRequest.php b/app/Http/Requests/V1/Receiving/UpdateReceivingRequest.php index 1d73d79..4f32a9b 100644 --- a/app/Http/Requests/V1/Receiving/UpdateReceivingRequest.php +++ b/app/Http/Requests/V1/Receiving/UpdateReceivingRequest.php @@ -23,8 +23,11 @@ public function rules(): array 'order_qty' => ['sometimes', 'numeric', 'min:0'], 'order_unit' => ['nullable', 'string', 'max:20'], 'due_date' => ['nullable', 'date'], - 'status' => ['sometimes', 'string', 'in:order_completed,shipping,inspection_pending,receiving_pending'], + 'status' => ['sometimes', 'string', 'in:order_completed,shipping,inspection_pending,receiving_pending,completed'], 'remark' => ['nullable', 'string', 'max:1000'], + 'receiving_qty' => ['nullable', 'numeric', 'min:0'], + 'receiving_date' => ['nullable', 'date'], + 'lot_no' => ['nullable', 'string', 'max:50'], ]; } diff --git a/app/Services/ReceivingService.php b/app/Services/ReceivingService.php index 35ffa59..c00b1c0 100644 --- a/app/Services/ReceivingService.php +++ b/app/Services/ReceivingService.php @@ -186,16 +186,33 @@ public function update(int $id, array $data): Receiving if (array_key_exists('due_date', $data)) { $receiving->due_date = $data['due_date']; } - if (isset($data['status'])) { - $receiving->status = $data['status']; - } if (array_key_exists('remark', $data)) { $receiving->remark = $data['remark']; } + // 입고완료(completed) 상태로 변경 시 입고처리 로직 실행 + $isCompletingReceiving = isset($data['status']) + && $data['status'] === 'completed' + && $receiving->status !== 'completed'; + + if ($isCompletingReceiving) { + // 입고수량 설정 (없으면 발주수량 사용) + $receiving->receiving_qty = $data['receiving_qty'] ?? $receiving->order_qty; + $receiving->receiving_date = $data['receiving_date'] ?? now()->toDateString(); + $receiving->lot_no = $data['lot_no'] ?? $this->generateLotNo(); + $receiving->status = 'completed'; + } elseif (isset($data['status'])) { + $receiving->status = $data['status']; + } + $receiving->updated_by = $userId; $receiving->save(); + // 입고완료 시 재고 연동 + if ($isCompletingReceiving && $receiving->item_id) { + app(StockService::class)->increaseFromReceiving($receiving); + } + return $receiving->fresh(); }); }