$supplyId, 'description' => trim((string) ($item['description'] ?? '')), 'quantity' => $qty, 'unit_cost' => $unitCost, 'received_qty' => 0, ]; } if (empty($items)) { throw new RuntimeException('Valid line items required.'); } $status = (string) ($payload['status'] ?? 'ordered'); $status = in_array($status, [PurchaseOrder::STATUS_DRAFT, PurchaseOrder::STATUS_ORDERED], true) ? $status : PurchaseOrder::STATUS_ORDERED; $tax = 0.0; $total = $subtotal + $tax; return DB::transaction(function () use ($payload, $items, $status, $subtotal, $tax, $total) { $po = PurchaseOrder::query()->create([ 'po_number' => $payload['po_number'] ?? null, 'supplier_id' => $payload['supplier_id'] ?? null, 'order_date' => $payload['order_date'] ?? null, 'expected_date' => $payload['expected_date'] ?? null, 'notes' => $payload['notes'] ?? null, 'status' => $status, 'subtotal' => $subtotal, 'tax' => $tax, 'total' => $total, ]); foreach ($items as $item) { $item['purchase_order_id'] = $po->id; PurchaseOrderItem::query()->create($item); } return $po->refresh(); }); } }