Edit File: OrderController.php
<?php namespace App\Http\Controllers\Api\Provider; use App\Models\Admin; use Mockery\Matcher\Not; use App\Traits\OrderTrait; use App\Traits\ResponseTrait; use App\Enums\OrderStatusEnum; use App\Traits\PaginationTrait; use App\Services\CallService; use Illuminate\Http\JsonResponse; use App\Services\Api\OrderService; use App\Enums\NotificationTypeEnum; use App\Enums\ProductDeliveryTypesEnum; use App\Http\Controllers\Controller; use App\Notifications\OrderNotification; use Illuminate\Support\Facades\Notification; use App\Http\Resources\Api\Provider\OrdersResource; use App\Http\Resources\Api\Provider\OrderDetailsResource; use App\Http\Requests\Api\Provider\Order\AcceptOrderRequest; use App\Http\Requests\Api\Provider\Order\CancelOrderRequest; use App\Http\Resources\Api\Provider\OrdersStatisticsResource; use App\Http\Requests\Api\Provider\Order\CompleteOrderRequest; use App\Http\Requests\Api\Provider\Order\PreparedOrderRequest; use App\Http\Requests\Api\Provider\Order\PreparingOrderRequest; use App\Models\Order; class OrderController extends Controller { use ResponseTrait, PaginationTrait, OrderTrait; public function __construct(private OrderService $orderService) {} public function index($status) { $orderStatus = $this->orderStatusesForProvider($status); $orders = $this->orderService->getOrderAccordingToStatus( user: 'provider_id', statuses: $orderStatus, paginateNum: $this->paginateNum() ); return $this->successData([ 'orders' => OrdersResource::collection($orders), 'pagination' => $this->paginationModel($orders), ]); } public function show($id) { $order = $this->orderService->details( id: $id, user: 'provider_id', with: ['orderItems.orderItemAddons.addon', 'user', 'delegate', 'cancellationReason'] ); return $this->successData(OrderDetailsResource::make($order)); } public function acceptOrder($order_id, AcceptOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); Notification::send($request->order?->user, new OrderNotification(order: $request->order, type: NotificationTypeEnum::Accepted->value)); return $this->response($result['key'], $result['msg']); } public function preparingOrder($order_id, PreparingOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); Notification::send($request->order?->user, new OrderNotification(order: $request->order, type: NotificationTypeEnum::Preparing->value)); return $this->response($result['key'], $result['msg']); } public function preparedOrder($order_id, PreparedOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); Notification::send($request->order?->user, new OrderNotification(order: $request->order, type: NotificationTypeEnum::Prepared->value)); return $this->response($result['key'], $result['msg']); } public function cancelOrder($order_id, CancelOrderRequest $request): JsonResponse { $result = $this->orderService->changeOrderStatus(request: $request); Notification::send($request->order?->user, 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); $notificationDependsOnOrderStatus = $request->order->receiving_method['value'] == ProductDeliveryTypesEnum::Store->value ? NotificationTypeEnum::Client_delivered->value : NotificationTypeEnum::Delivered_to_delegate->value; if ($notificationDependsOnOrderStatus == NotificationTypeEnum::Client_delivered->value) { Notification::send($request->order?->user, new OrderNotification(order: $request->order, type: $notificationDependsOnOrderStatus)); Notification::send(Admin::first(), new OrderNotification(order: $request->order, type: $notificationDependsOnOrderStatus)); } else { Notification::send($request->order?->user, new OrderNotification(order: $request->order, type: $notificationDependsOnOrderStatus)); Notification::send($request->order?->delegate, new OrderNotification(order: $request->order, type: $notificationDependsOnOrderStatus)); } return $this->response($result['key'], $result['msg']); } public function completedOrdersStatistics() { return $this->successData(OrdersStatisticsResource::make($this->orderService->completedOrdersStatistics())); } public function makeCall($order_id): JsonResponse { $result = (new CallService())->makeCall(Order::class, 'provider_id', $order_id, 'order'); return $this->response($result['key'], $result['msg'], $result['data']); } }
Back to File Manager