Edit File: OrderController.php
<?php namespace App\Http\Controllers\Api\User; use App\Enums\NotificationTypeEnum; use App\Enums\OrderPayStatus; use App\Http\Controllers\Controller; use App\Http\Requests\Api\User\Order\{CancelOrderRequest, CompleteOrderRequest, OrderSummaryRequest, PayOrderRequest, StoreOrderRequest}; use App\Http\Resources\Api\User\Orders\{OrderDetailsResource, OrderInvoiceResource, OrdersResource}; use App\Models\Order; use App\Notifications\OrderNotification; use App\Services\Api\FinancialTransactionsService; use App\Services\Api\OrderService; use App\Services\CallService; use App\Services\User\WalletService; use App\Traits\{OrderTrait, PaginationTrait, ResponseTrait}; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Notification; class OrderController extends Controller { use ResponseTrait, PaginationTrait, OrderTrait; public function __construct( private OrderService $orderService, private FinancialTransactionsService $financialService ) { } public function store(StoreOrderRequest $request) { $result = $this->orderService->store($request->validated()); return $this->response($result['key'], $result['msg'], ['order_id' => isset($result['order_id']) ? $result['order_id'] : null]); } public function summary(OrderSummaryRequest $request) { $order = $this->orderService->orderSummary($request->validated()); return $this->response($order['key'], $order['msg'], isset($order['summary']) ? $order['summary'] : null); } public function index($status) { $orderStatus = $this->orderStatusesForUser($status); $orders = $this->orderService->getOrderAccordingToStatus( user: 'user_id', statuses: $orderStatus, with: ['provider:id,store_name,image'] ); return $this->successData([ 'orders' => OrdersResource::collection($orders), 'pagination' => $this->paginationModel($orders), ]); } public function show($id) { try { $order = $this->orderService->details( id: $id, user: 'user_id', with: ['orderItems.orderItemAddons.addon', 'provider.providerWorkTimes', 'delegate', 'cancellationReason'] ); return $this->successData(OrderDetailsResource::make($order)); } catch (\Exception $e) { return $this->response('fail',__('apis.not_found')); } } public function payOrder($order_id, PayOrderRequest $request): JsonResponse { $result = $this->orderService->payInvoice(order_id: $order_id, request: $request); if ($result['key'] != 'fail') { Notification::send($request->order?->provider, new OrderNotification(order: $request->order, type: NotificationTypeEnum::ORDER_WAS_PAID->value)); } return $this->response($result['key'], $result['msg']); } public function cancelOrder($order_id, CancelOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); if (isset($result['row']) && $result['row']->pay_status == OrderPayStatus::PAID->value) { (new WalletService())->charge(user: $request->order?->user, balance: $request->order?->final_total); } Notification::send($request->order?->provider, new OrderNotification(order: $request->order, type: NotificationTypeEnum::Cancelled->value)); return $this->response($result['key'], $result['msg']); } public function finishOrder($order_id, CompleteOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); $this->financialService->createOrderTransaction(request: $request); Notification::send($request->order?->provider, new OrderNotification(order: $request->order, type: NotificationTypeEnum::Client_delivered->value)); return $this->response($result['key'], $result['msg']); } public function orderInvoiceView($order_num = null) { $order = $this->orderService->displayOrderByOrderNumber( order_num: $order_num, // conditions: ['pay_status' => true], // TODO: check this ); abort_unless($order, 404); $response = OrderInvoiceResource::make($order)->resolve(); return view('app.normal_order_invoice', compact('response')); } public function makeCall($order_id): JsonResponse { $result = (new CallService())->makeCall(Order::class, 'user_id', $order_id, 'order'); return $this->response($result['key'], $result['msg'], $result['data']); } }
Back to File Manager