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\CreateInvoiceRequest; 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\GetNearWaitingRequest; use App\Http\Requests\Api\Order\GetRequest; use App\Http\Requests\Api\Order\MakeDeliveryOfferRequest; use App\Http\Requests\Api\Order\PayOrderRequest; use App\Http\Requests\Api\Order\RespondDeliveryOfferRequest; use App\Http\Requests\Api\Order\UpdateDeliveryStatusRequest; use App\Http\Requests\Api\Order\WithdrawOrderRequest; use App\Http\Resources\OrderResource; use App\Http\Resources\OrdersResource; use App\Models\Order; use App\Models\Setting; use App\Models\User; use App\Models\WithdrawReason; use App\Services\ChatService; use App\Services\OrderService; use App\Traits\ApiTrait; use App\Traits\GeneralTrait; use App\Traits\Uploadable; use Illuminate\Http\Request; use App\Jobs\ServerCloseOrder; use Carbon\Carbon; class OrderController extends Controller { use ApiTrait, GeneralTrait, Uploadable; public function createOrder(CreateOrderRequest $request) { $user = auth('api')->user(); $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']); } //order finally succeeded $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(); // fetch orders if($request['status'] == 'finished'){ $orders = $user->userOrders() ->whereIn('status', ['finished','closed']) ->where(function ($query) use ($request) { if ($request['type'] == 'special_request') { $query->where('type', 'special_request'); } else { $query->where('type', '!=', 'special_request'); } })->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); } else { $orders = $user->userOrders() ->where('status', $request['status']) ->where(function ($query) use ($request) { if ($request['type'] == 'special_request') { $query->where('type', 'special_request'); } else { $query->where('type', '!=', 'special_request'); } })->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); } // response data $data = []; $page = $request['page'] ?? 1; $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 delegateOrders(GetRequest $request) { $delegate = auth('api')->user(); // fetch orders $orders = $delegate->delegateOrders() ->where('status', $request['status']) ->where(function ($query) use ($request) { if ($request['type'] == 'special_request') { $query->where('type', 'special_request'); } else { $query->where('type', '!=', 'special_request'); } })->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); // response data $data = []; $page = $request['page'] ?? 1; $data['orders'] = OrdersResource::collection($orders); $data['pagination'] = $this->paginationModel($orders); return $this->dataReturn($data); } public function userFinishOrder(Request $request){ $user = auth('api')->user(); $order = $user->userOrders()->where('id', $request['order_id'])->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // check if payment is complete if ($order->payment_type != 'cash' && $order->payment_status == 'false') { $msg = trans('order.payment_not_done_yet'); return $this->failMsg($msg); } $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 delegateSingleOrder(Request $request) { $delegate = auth('api')->user(); // find order // $order = Order::where('id', $request['order_id'])->where('needs_delivery', 'true')->whereHas('store')->first(); $order = Order::where('id', $request['order_id'])->where('needs_delivery', 'true')->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 delegateAcceptOrder(Request $request, ChatService $chat) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all(), 'delegate_id' => auth('api')->user()->id]; $data = $order_service->delegateAcceptOrder($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.successfully_accepted'); return $this->successMsg($msg); } public function delegateCreateOrderInvoice(CreateInvoiceRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->delegateCreateOrderInvoice($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.invoiceCreatedSuccessfully'); return $this->successMsg($msg); } public function delegateIntransitOrder(UpdateDeliveryStatusRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->delegateIntransitOrder($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.successfully_intransit'); return $this->successMsg($msg); } public function makeDeliveryOffer(MakeDeliveryOfferRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->makeDeliveryOffer($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.offer_sent'); return $this->successMsg($msg); } public function userAcceptDeliveryOffer(RespondDeliveryOfferRequest $request, ChatService $chat) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->userAcceptDeliveryOffer($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.offer_accepted'); return $this->successMsg($msg); } public function userRejectDeliveryOffer(RespondDeliveryOfferRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data = $order_service->userRejectDeliveryOffer($order_service_data); if (isset($data['fail_msg'])) { return $this->failMsg($data['fail_msg']); } $msg = trans('order.offer_rejected'); return $this->successMsg($msg); } 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 delegateFinishOrder(FinishOrderRequest $request) { $delegate = auth('api')->user(); // find order $order = $delegate->delegateOrders()->where('id', $request['order_id'])->where('status', 'inprogress')->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // check if payment is complete if ($order->payment_type != 'cash' && $order->payment_status == 'false') { $msg = trans('order.payment_not_done_yet'); 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 delegateWithdrawOrder(WithdrawOrderRequest $request) { $delegate = auth('api')->user(); // find order $order = $delegate->delegateOrders()->where('id', $request['order_id'])->where('status', 'inprogress')->first(); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } if ($order->payment_status == 'true') { $msg = trans('order.not_available'); return $this->failMsg($msg); } // withdraw order $order_service = new OrderService(); $order_service_data = ['order' => $order, 'reason' => $request['reason']]; $order_service->withdrawOrder($order_service_data); $msg = trans('order.withdraw_successfully'); return $this->successMsg($msg); } public function delegateRejectOrder(WithdrawOrderRequest $request) { $delegate = auth('api')->user(); // find order $order = Order::find($request['order_id']); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } // withdraw order $order_service = new OrderService(); $order_service_data = ['order' => $order, 'reason' => $request['reason']]; $order_service->rejectOrder($order_service_data); $msg = trans('order.withdraw_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