From bc2770c24df96c9a2b766624445f8f5b2e282dd9 Mon Sep 17 00:00:00 2001 From: Mekan1206 Date: Wed, 29 Apr 2026 22:40:09 +0500 Subject: [PATCH] good --- .../resources/Order/OrderIndexResource.php | 2 +- .../resources/Order/OrderShowResource.php | 2 +- app/Http/Requests/CheckoutOrderRequest.php | 28 +++++++++++++++---- .../Api/V1/Order/OrderIndexResource.php | 2 +- .../Vendor/Order/VendorOrderIndexResource.php | 2 +- .../Vendor/Order/VendorOrderShowResource.php | 2 +- .../Order/Concerns/OrderFieldsForUpdate.php | 4 +++ 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderIndexResource.php b/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderIndexResource.php index b99a56a..9658209 100644 --- a/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderIndexResource.php +++ b/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderIndexResource.php @@ -19,7 +19,7 @@ class OrderIndexResource extends JsonResource return [ 'id' => $this->id, 'status' => OrderStatus::formattedStatusFor($this->status), - 'shipping_method' => OrderShipping::formattedShippingMethod($this->shipping_method), + 'shipping_method' => $this->formattedShippingMethod(), 'notes' => $this->notes, 'delivery_time' => $this->delivery_time, 'delivery_at' => $this->delivery_at, diff --git a/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderShowResource.php b/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderShowResource.php index e6b8937..0b0f1e3 100644 --- a/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderShowResource.php +++ b/app/Http/Controllers/Api/V1/Entrepreneur/resources/Order/OrderShowResource.php @@ -19,7 +19,7 @@ class OrderShowResource extends JsonResource return [ 'id' => $this->id, 'status' => OrderStatus::formattedStatusFor($this->status), - 'shipping_method' => OrderShipping::formattedShippingMethod($this->shipping_method), + 'shipping_method' => $this->formattedShippingMethod(), 'notes' => $this->notes, 'delivery_time' => $this->delivery_time, 'delivery_at' => $this->delivery_at, diff --git a/app/Http/Requests/CheckoutOrderRequest.php b/app/Http/Requests/CheckoutOrderRequest.php index e4b8d34..2b2c934 100644 --- a/app/Http/Requests/CheckoutOrderRequest.php +++ b/app/Http/Requests/CheckoutOrderRequest.php @@ -9,10 +9,26 @@ use App\Models\System\Settings\Location\Region; use App\Models\System\Settings\OS; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Str; +use App\Models\Ecommerce\Product\Order\Shipping\OrderShippingMethod; use Illuminate\Validation\Rule; class CheckoutOrderRequest extends FormRequest { + /** + * Prepare the data for validation. + */ + protected function prepareForValidation(): void + { + if (! $this->has('shipping_method_id') && $this->has('shipping_method')) { + $method = OrderShippingMethod::query()->where('slug', $this->shipping_method)->first(); + if ($method) { + $this->merge([ + 'shipping_method_id' => $method->id, + ]); + } + } + } + /** * Configure the validator instance. * @@ -39,7 +55,8 @@ class CheckoutOrderRequest extends FormRequest 'customer_phone' => ['required', 'integer', 'between:61000000,71999999'], 'customer_address' => ['required', 'string', 'max:255'], - 'shipping_method' => ['required', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))], + 'shipping_method_id' => ['required', 'integer', 'exists:order_shipping_methods,id'], + 'shipping_method' => ['nullable', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))], 'shipping_price' => ['nullable', 'numeric'], 'product_ids' => ['required', 'array'], @@ -67,13 +84,16 @@ class CheckoutOrderRequest extends FormRequest */ protected function passedValidation(): void { + $shippingMethod = OrderShippingMethod::query()->find($this->shipping_method_id); + $this->merge([ 'number' => Str::random(30), 'status' => OrderStatus::default(), 'user_id' => auth()->id(), 'notes' => $this->notes ?: null, 'province_id' => $this->province_id ?: null, - 'shipping_price' => $this->shipping_price ?: OrderShipping::priceFor($this->shipping_method), + 'shipping_method' => $this->shipping_method ?: $shippingMethod?->slug, + 'shipping_price' => $this->shipping_price ?: ($shippingMethod?->price ?? 0), 'delivery_time' => $this->delivery_time ?: OrderShipping::MORNING, 'delivery_at' => $this->delivery_at ?: date('Y-m-d'), 'source_app' => $this->source ?: OS::MOBILE_APP, @@ -88,9 +108,7 @@ class CheckoutOrderRequest extends FormRequest public function messages(): array { return [ - 'shipping_method.in' => sprintf('Valid sources: %s', implode(', ', array_keys( - OrderShipping::values() - ))), + 'shipping_method_id.exists' => 'The selected shipping method is invalid.', 'payment_type_id.in' => sprintf('Valid sources: %s', implode(', ', array_keys( OrderPayment::values() ))), diff --git a/app/Http/Resources/Api/V1/Order/OrderIndexResource.php b/app/Http/Resources/Api/V1/Order/OrderIndexResource.php index 5b55f03..2381eee 100644 --- a/app/Http/Resources/Api/V1/Order/OrderIndexResource.php +++ b/app/Http/Resources/Api/V1/Order/OrderIndexResource.php @@ -19,7 +19,7 @@ class OrderIndexResource extends JsonResource return [ 'id' => $this->id, 'status' => OrderStatus::formattedStatusFor($this->status), - 'shipping_method' => OrderShipping::formattedShippingMethod($this->shipping_method), + 'shipping_method' => $this->formattedShippingMethod(), 'notes' => $this->notes, 'customer_name' => $this->customer_name, 'customer_phone' => $this->customer_phone, diff --git a/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderIndexResource.php b/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderIndexResource.php index 9fa1d5b..702c9ff 100644 --- a/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderIndexResource.php +++ b/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderIndexResource.php @@ -19,7 +19,7 @@ class VendorOrderIndexResource extends JsonResource return [ 'id' => $this->id, 'status' => OrderStatus::formattedStatusFor($this->status), - 'shipping_method' => OrderShipping::formattedShippingMethod($this->shipping_method), + 'shipping_method' => $this->formattedShippingMethod(), 'notes' => $this->notes, 'delivery_time' => $this->delivery_time, 'delivery_at' => $this->delivery_at?->format('d.m.Y'), diff --git a/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderShowResource.php b/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderShowResource.php index 58cb0d0..460e0a5 100644 --- a/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderShowResource.php +++ b/app/Http/Resources/Api/V1/Vendor/Order/VendorOrderShowResource.php @@ -19,7 +19,7 @@ class VendorOrderShowResource extends JsonResource return [ 'id' => $this->id, 'status' => OrderStatus::formattedStatusFor($this->status), - 'shipping_method' => OrderShipping::formattedShippingMethod($this->shipping_method), + 'shipping_method' => $this->formattedShippingMethod(), 'notes' => $this->notes, 'delivery_time' => $this->delivery_time, 'delivery_at' => $this->delivery_at, diff --git a/app/Nova/Resources/Ecommerce/Product/Order/Concerns/OrderFieldsForUpdate.php b/app/Nova/Resources/Ecommerce/Product/Order/Concerns/OrderFieldsForUpdate.php index 3c8b770..debbe93 100644 --- a/app/Nova/Resources/Ecommerce/Product/Order/Concerns/OrderFieldsForUpdate.php +++ b/app/Nova/Resources/Ecommerce/Product/Order/Concerns/OrderFieldsForUpdate.php @@ -62,6 +62,10 @@ class OrderFieldsForUpdate Text::make(__('Shipping price'), 'shipping_price') ->rules('required', 'numeric') ->dependsOn('shippingMethod', function ($field, $request, $formData) { + if ($formData->shipping_price) { + return; + } + if ($formData->shippingMethod) { $method = OrderShippingMethodModel::query()->find($formData->shippingMethod); if ($method) {