Edit File: OrderController.php
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Http\Requests\Api\Order\CreateInvoiceRequest; use App\Http\Requests\Api\Order\UpdateInvoiceRequest; use App\Http\Requests\Api\Order\SubmitCodeRequest; use App\Http\Requests\Api\Order\EnquiryRequest; 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\RespondDeliveryOfferRequest; use App\Http\Requests\Api\Order\CreateOrderRequest; use App\Http\Requests\Api\Order\AddServicesRequest; use App\Http\Requests\Api\Order\UpdateDeliveryStatusRequest; use App\Http\Requests\Api\Order\ChangePaymentMethodRequest; use App\Http\Requests\Api\Order\FinishOrderRequest; use App\Http\Requests\Api\Order\CancelOrderRequest; use App\Http\Requests\Api\Order\WithdrawOrderRequest; use App\Http\Requests\Api\Order\PayOrderRequest; use App\Http\Requests\Api\Order\AcceptInvoiceRequest; use App\Http\Requests\Api\Order\RefuseInvoiceRequest; use App\Http\Resources\AdsResource; use App\Http\Resources\OrderResource; use App\Http\Resources\OrdersResource; use App\Models\Ads; use App\Models\DeliveryOffer; use App\Models\OrderServices; use App\Models\Order; use App\Models\OrderImage; use App\Models\OrderProduct; use App\Models\OrderProductAdditive; use App\Models\Product; use App\Models\User; use App\Models\ProductAdditive; use App\Models\ProductGroup; use App\Models\Setting; use App\Models\Store; use App\Models\WithdrawReason; use App\Services\ChatService; use App\Services\CouponService; use App\Services\OrderService; use App\Traits\ApiTrait; use App\Traits\GeneralTrait; use App\Traits\Uploadable; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use App\Jobs\NotifyUser; use URL; use App\Http\Resources\DelegateResource; use App\Http\Resources\CompanyResource; 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 delegateUploadOrderImages(Request $request) { $user = auth('api')->user(); $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $order=$order_service->delegateUploadOrderImages($order_service_data); if(isset($order['fail_msg'])){ return $this->failMsg($order['fail_msg']); } //order finally succeeded $msg = trans('dashboard.alerts.updated_successfully'); $data['order_id'] = $order->id; return $this->successReturn($msg,$data); } public function addextraservices(AddServicesRequest $request) { // dd($request->validated()); $user = auth('api')->user(); $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $order=$order_service->addextraservices($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']); } return $this->successReturn('',$data); } public function filterDelegates(EnquiryRequest $request) { $order_service = (new OrderService()); $data=$order_service->filterDelegates($request->validated()); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } return $this->successReturn('',$data); } public function userOrders(GetRequest $request) { $user = auth('api')->user(); // fetch orders // dd($user->userOrders,$request->all()); $orders = $user->userOrders() ->where(function ($query) use ($request) { if($request['status'] == 'finished') { $query->whereIn('status',['finished','closed']); } elseif($request['status'] == 'inprogress') { $query->where(function ($query) { $query->where('status', 'inprogress') ->orWhere(function ($query) { $query->where('status', 'open') ->where('payment_status', 'true'); }); }); }elseif($request['status'] == 'open'){ $query->where(['payment_status'=>'false','status'=>'open']); } else{ $query->where('status',$request['status']); } }) ->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); // dd($orders); // 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 invoiceDetails(Request $request) { $user = auth('api')->user(); // find order $order = Order::find($request['order_id']); if (!$order) { $msg = trans('order.not_available'); return $this->failMsg($msg); } $services=0.0; $orderservices =OrderServices::where('order_id',$order->id)->get(); foreach($orderservices as $service){ if($service->price){ $services+=$service->price; } } // response data $data = []; $data['price'] = number_format($order->price,2, '.', '')??'0.0'; $data['deposit'] = number_format($order->deposit,2, '.', '')??'0.0'; $data['remain'] = number_format($order->remain,2, '.', '')??'0.0'; $data['services'] =number_format($services,2, '.', '')??'0.0'; $data['delivery_price'] = number_format($order->delivery_price,2, '.', '')??'0.0'; $data['shipping_price'] = number_format($order->shipping_price,2, '.', '')??'0.0'; $data['added_value'] = number_format($order->added_value,2, '.', '')??'0.0'; $data['total_price'] = number_format($order->total_price,2, '.', '')??'0.0'; return $this->dataReturn($data); } public function delegateDetails(Request $request) { $user=User::find($request['delegate_id']); $data = []; if($user && $user->type=='delegate'){ $data['delegate'] = new DelegateResource($user); }elseif($user&& $user->type=='company'){ $data['delegate'] = new CompanyResource($user); } return $this->dataReturn($data); } public function delegateOrders(GetRequest $request) { $delegate = auth('api')->user(); $join = $delegate->delegateJoinRequests()->latest()->first(); // fetch orders $orders =Order::where(function ($query) use ($request,$join,$delegate) { if ($request['status'] == 'finished') { $query->whereIn('status',['finished','closed']) ->where('delegate_id', '=', $delegate->id); } elseif ($request['status'] == 'open') { $query->where('status', 'open') ->whereNotIn('id', WithdrawReason::select('order_id')->where('user_id', '=', $delegate->id)->get()->toArray()) ->where('user_id', '!=', $delegate->id) ->where('category_id', $join->category_id) ->where('car_type_id', $join->car_type_id) ->orderBy('created_at', 'desc'); } else{ $query->where('status',$request['status']) ->where('delegate_id', '=', $delegate->id); } })->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); // response data // dd($orders); $data = []; $page = $request['page']?? 1; $data['orders'] = OrdersResource::collection($orders); $data['pagination'] = $this->paginationModel($orders); return $this->dataReturn($data); } public function delegateNearWaitingOrders(GetNearWaitingRequest $request) { $delegate = auth('api')->user(); $join = $delegate->delegateJoinRequests()->latest()->first(); $ads = Ads::latest()->take(5)->get(); $orders = Order:: where('status', 'open') ->whereNotIn('id', WithdrawReason::select('order_id')->where('user_id', '=', $delegate->id)->get()->toArray()) ->where('user_id', '!=', $delegate->id) ->where('category_id', $join->category_id) ->where('car_type_id', $join->car_type_id) ->orderBy('created_at', 'desc') ->paginate($this->paginateNum()); $page = $request['page']?? 1; // $data['is_available']=$delegate->is_available; // $data['ads']=AdsResource::collection($ads); $data['orders'] = OrdersResource::collection($orders); $data['pagination'] = $this->paginationModel($orders); return $this->dataReturn($data); } public function delegateSingleOrder(Request $request) { $delegate = auth('api')->user(); // find order // dd($delegate); $order = Order::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 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 delegateRefuseOrder(Request $request, ChatService $chat) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all(),'delegate_id'=>auth('api')->user()->id]; $data=$order_service->delegateRefuseOrder($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.successfully_refused'); 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 UpdateInvoice(UpdateInvoiceRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data=$order_service->UpdateInvoice($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.invoiceCreatedSuccessfully'); return $this->successMsg($msg); } public function submitCode(SubmitCodeRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data=$order_service->SubmitCode($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.code_submited'); return $this->successMsg($msg); } public function confirmPayment(Request $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data=$order_service->confirmPayment($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans( 'dashboard.alerts.updated_successfully' ); return $this->successMsg($msg); } public function userAcceptInvoice(AcceptInvoiceRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data=$order_service->userAcceptInvoice($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.successfully_accepted_invoice'); return $this->successMsg($msg); } public function userRefuseInvoice(RefuseInvoiceRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data=$order_service->userRefuseInvoice($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.successfully_refused_invoice'); 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 cancelDeliveryOffer(RespondDeliveryOfferRequest $request) { $order_service = (new OrderService()); $order_service_data = ['request' => $request->all()]; $data= $order_service->cancelDeliveryOffer($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 userAcceptDeliveryOffer(RespondDeliveryOfferRequest $request, ChatService $chat) { // dd($request->all()); $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'])->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->delegateFinishOrder($order_service_data); $msg = trans('order.finished_successfully'); return $this->successMsg($msg); } public function userFinishOrder(FinishOrderRequest $request){ $delegate = auth('api')->user(); // find order $order = $delegate->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 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']]; $data=$order_service->cancelOrder($order_service_data); if(isset($data['fail_msg'])){ return $this->failMsg($data['fail_msg']); } $msg = trans('order.canceled_successfully'); return $this->successMsg($msg); } public function delegateWithdrawOrder(WithdrawOrderRequest $request){ $delegate = auth('api')->user(); // find order $order = Order::where('id', $request['order_id'])->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]; $order_service->withdrawOrder($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($request['payment_type']=='wallet'){ 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,'payment_type'=>$request['payment_type']]; $order_service->payOrderDepositeWithWallet($order_service_data); $msg = trans('order.paid_successfully'); return $this->successMsg($msg); } }
Back to File Manager