Edit File: OrderController.php
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Http\Requests\Api\Order\CancelOrderRequest; use App\Http\Requests\Api\Order\ChangePaymentMethodRequest; use App\Http\Requests\Api\Order\CreateOrderRequest; use App\Http\Requests\Api\Order\EnquiryRequest; use App\Http\Requests\Api\Order\FinishOrderRequest; use App\Http\Requests\Api\Order\GetRequest; use App\Http\Requests\Api\Order\PayOrderRequest; use App\Http\Resources\OrderResource; use App\Http\Resources\OrdersResource; use App\Models\Setting; use App\Models\User; use App\Services\OrderService; use App\Traits\ApiTrait; use App\Traits\GeneralTrait; use App\Traits\Uploadable; use App\Jobs\OrderCheckOrder; use Carbon\Carbon; use Illuminate\Http\Request; use App\Models\Order; class OrderController extends Controller { use ApiTrait, GeneralTrait, Uploadable; public function createOrder(CreateOrderRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $order = $order_service->createOrder($order_service_data); if (isset($order['fail_msg'])) { return $this->failMsg($order['fail_msg']); } $settings = Setting::where('key' , 'max_time')->first()?->value; dispatch(new OrderCheckOrder($order , 'order_time'))->delay(Carbon::parse($order->deliver_date . $order->deliver_time )); dispatch(new OrderCheckOrder($order , 'admin_time'))->delay(Carbon::now()->addHours($settings)); $msg = trans('order.successfully_sent'); $data['order_id'] = $order->id; return $this->successReturn($msg, $data); } public function orderEnquiry(EnquiryRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->validated()]; $data = $order_service->orderEnquiry($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = $data['coupon_msg']; return $this->successReturn($msg, $data); } public function userOrders(GetRequest $request) { $user = auth('api')->user(); $orders = Order::where('user_id' , $user->id) ->where(function ($query) use ($request) { if ($request['status'] == 'finished') { $query->whereIn('status', ['finished' , 'closed']); } else { $query->where('status', $request['status']); } })->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); // response data $data = []; $data['orders'] = OrdersResource::collection($orders); $data['pagination'] = $this->paginationModel($orders); return $this->dataReturn($data); } public function userSingleOrder(Request $request) { $user = auth('api')->user(); // find order $order = $user->userOrders()->where('id', $request['order_id'])->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // response data $data = []; $data['order'] = new OrderResource($order); return $this->dataReturn($data); } public function changePaymentMethod(ChangePaymentMethodRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->changePaymentMethod($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.payment_method_changed'); return $this->successMsg($msg); } public function userFinishOrder(FinishOrderRequest $request) { $delegate = auth('api')->user(); // find order $order = $delegate->userOrders()->where('id', $request['order_id'])->where('status', 'inprogress')->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // order finish order $order_service = new OrderService(); $order_service_data = ['order' => $order]; $order_service->finishOrder($order_service_data); $msg = trans('order.finished_successfully'); return $this->successMsg($msg); } public function cancelOrder(CancelOrderRequest $request) { $user = auth('api')->user(); // find order $order = $user->userOrders()->where('status', 'open')->where('id', $request['order_id'])->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // cancel order $order_service = new OrderService(); $order_service_data = ['order' => $order, 'reason' => $request['reason']]; $order_service->cancelOrder($order_service_data); $msg = trans('order.canceled_successfully'); return $this->successMsg($msg); } public function payOrderWithWallet(PayOrderRequest $request) { $user = auth('api')->user(); // find order $order = $user->userOrders()->where('id', $request['order_id'])->where('payment_status', 'false')->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } if ($user->wallet < $order->total_price) { $msg = trans('order.walletHasNoEnouphCredit'); return $this->failMsg($msg); } // pay order with wallet $order_service = new OrderService(); $order_service_data = ['order' => $order]; $order_service->payOrderWithWallet($order_service_data); $msg = trans('order.paid_successfully'); return $this->successMsg($msg); } }
Back to File Manager