diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index ea68977..0d4d2dd 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -5,6 +5,7 @@ use App\Models\Orders\Order; use App\Models\Production\WorkOrder; use App\Models\Quote\Quote; +use App\Models\Tenants\Sale; use Illuminate\Support\Facades\DB; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -540,16 +541,42 @@ public function revertOrderConfirmation(int $orderId): array throw new BadRequestHttpException(__('error.order.cannot_revert_not_confirmed')); } - // 상태 변경 - $previousStatus = $order->status_code; - $order->status_code = Order::STATUS_DRAFT; - $order->updated_by = $userId; - $order->save(); + return DB::transaction(function () use ($order, $tenantId, $userId) { + $deletedSaleId = null; - return [ - 'order' => $order->load(['client:id,name', 'items']), - 'previous_status' => $previousStatus, - ]; + // 수주확정 시 생성된 매출이 있으면 삭제 + if ($order->sale_id) { + $sale = Sale::where('tenant_id', $tenantId) + ->where('id', $order->sale_id) + ->first(); + + if ($sale) { + // 수주확정 시 생성된 매출만 삭제 (draft 상태이고 order_confirm 타입) + if ($sale->source_type === Sale::SOURCE_ORDER_CONFIRM + && $sale->status === 'draft') { + $deletedSaleId = $sale->id; + $sale->deleted_by = $userId; + $sale->save(); + $sale->delete(); + } + } + + // 수주의 매출 연결 해지 + $order->sale_id = null; + } + + // 상태 변경 + $previousStatus = $order->status_code; + $order->status_code = Order::STATUS_DRAFT; + $order->updated_by = $userId; + $order->save(); + + return [ + 'order' => $order->load(['client:id,name', 'items']), + 'previous_status' => $previousStatus, + 'deleted_sale_id' => $deletedSaleId, + ]; + }); } /**