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);
}
}