HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Orders/Kms/OrderApiController.php
<?php

namespace App\Orders\Kms;


use App\Orders\Requests\ByStatusRequest;
use App\Orders\Resources\Order as OrderResource;
use Illuminate\Http\Response;
use Illuminate\View\View;
use Komma\KMS\Core\SectionController;
use App\Orders\Models\Order;
use App\Orders\OrderStatus;
use App\Orders\SearchRequest;

class OrderApiController extends SectionController
{
    protected string $slug = "orders";

    /** @var string */
    protected string $classModelName = Order::class;

    private OrderService $orderService;

    /**
     * Constructor
     */
    public function __construct()
    {
        $orderSection = new OrderSection($this->slug);
        $this->orderService = new OrderService();

        parent::__construct($orderSection);
    }

    public function indexByStatus(ByStatusRequest $request) {
        if(!$request->ajax()) abort(Response::HTTP_BAD_REQUEST, 'Only ajax requests are allowed');
        return OrderResource::collection($this->orderService->byStatus($request->get('statuses'))->get());
    }

    /**
     * Search for orders
     *
     * @param SearchRequest $request
     * @return View|\Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function OrderSearch(SearchRequest $request)
    {
        //Determine how many results per page we need to show, or simply 5 if not specified by the user.
        $resultsPerPage = (is_numeric($request->get('perPage')) ? (int) $request->get('perPage') : 10);

        //Build an array of search fields to search a given value in;
        $searchFields = [
            $request->get('search_for') => $request->get('search_value'),
            'status' => $request->has('status') && in_array($request->get('status'), OrderStatus::getAsArray()) ? $request->get('status') : 'each'
        ];

        //Search
        $ordersCollectionPaginator = $this->orderService->search($searchFields)->orderBy('created_at', 'desc')->paginate($resultsPerPage);
        $ordersCollectionPaginator->appends($request->all()); //Add existing query string parameters to the current pagination links

        //Return results as json
        return OrderResource::collection($ordersCollectionPaginator);
    }

    public function show($model)
    {
        $model->load('orderedProducts');
        return new OrderResource($model);
    }
}