<?php
/**
* Created by Elements.at New Media Solutions GmbH
*
*/
namespace App\Controller;
use App\Twig\ConfigHelper;
use Pimcore\Model\DataObject\Forklift;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ProductForkliftController extends AbstractController
{
public function overviewAction(Request $request, ConfigHelper $configHelper): JsonResponse|Response
{
$siteConfig = $configHelper->getSiteConfig();
$products = new Forklift\Listing();
$products->addConditionParam("intNumber != '' AND intNumber IS NOT NULL");
if ($siteConfig) {
$products->addConditionParam('config LIKE :config', ['config' => '%,' . $siteConfig->getId() . ',%']);
}
$countries = [];
$engineTypes = [];
$workingHourMin = 1000000000;
$workingHourMax = 1;
$yearOfManufactureMin = 1950;
$yearOfManufactureMax = 1;
$capacityMin = 1000000000;
$capacityMax = 1;
foreach ($products as $product) {
$countries[] = $product->getCountry();
$engineTypes[$product->getEngineType()] = $product->getEngineType();
if ($product->getHours() < $workingHourMin) {
$workingHourMin = $product->getHours();
}
if ($product->getHours() > $workingHourMax) {
$workingHourMax = $product->getHours();
}
if ($product->getYoc() < $yearOfManufactureMin) {
$yearOfManufactureMin = $product->getYoc();
}
if ($product->getYoc() > $yearOfManufactureMax) {
$yearOfManufactureMax = $product->getYoc();
}
if ($product->getCapacity() < $capacityMin) {
$capacityMin = $product->getCapacity();
}
if ($product->getCapacity() > $capacityMax) {
$capacityMax = $product->getCapacity();
}
}
if ($yearOfManufactureMin == $yearOfManufactureMax) {
$yearOfManufactureMin = $yearOfManufactureMin - 1;
}
if ($workingHourMin == $workingHourMax) {
$workingHourMin = $workingHourMin - 1;
}
if ($capacityMin == $capacityMax) {
$capacityMin = $capacityMin - 1;
}
asort($countries);
asort($engineTypes);
$returnArray = [
'products' => $products,
'countries' => array_unique($countries),
'engineTypes' => $engineTypes,
'workingHourMin' => $workingHourMin,
'workingHourMax' => $workingHourMax,
'yearOfManufactureMin' => $yearOfManufactureMin,
'yearOfManufactureMax' => $yearOfManufactureMax,
'capacityMin' => $capacityMin,
'capacityMax' => $capacityMax,
];
if ($request->get('countries', [])) {
$products->addConditionParam('country LIKE :country', ['country' => '%' . implode(',', $request->get('countries', [])) . '%']);
}
if ($request->get('engineType')) {
$products->addConditionParam('engineType = :engineType', ['engineType' => $request->get('engineType')]);
}
if (!is_null($request->get('workingHoursMin'))) {
$products->addConditionParam('cast(hours as signed) >= :workingHoursMin OR hours IS NULL', ['workingHoursMin' => $request->get('workingHoursMin')]);
}
if (!is_null($request->get('workingHoursMax'))) {
$products->addConditionParam('cast(hours as signed) <= :workingHoursMax OR hours IS NULL', ['workingHoursMax' => $request->get('workingHoursMax')]);
}
if (!is_null($request->get('yearOfManufactureMin'))) {
$products->addConditionParam('yoc >= :yearOfManufactureMin OR yoc IS NULL', ['yearOfManufactureMin' => $request->get('yearOfManufactureMin')]);
}
if (!is_null($request->get('yearOfManufactureMax'))) {
$products->addConditionParam('yoc <= :yearOfManufactureMax OR yoc IS NULL', ['yearOfManufactureMax' => $request->get('yearOfManufactureMax')]);
}
if (!is_null($request->get('capacityMin'))) {
$products->addConditionParam('capacity >= :capacityMin OR capacity IS NULL', ['capacityMin' => $request->get('capacityMin')]);
}
if (!is_null($request->get('yearOfManufactureMax'))) {
$products->addConditionParam('capacity <= :capacityMax OR capacity IS NULL', ['capacityMax' => $request->get('capacityMax')]);
}
if ($request->get('search')) {
$products->addConditionParam('manufacturer LIKE :search OR model LIKE :search OR engine LIKE :search', ['search' => '%' . $request->get('search') . '%']);
}
if ($request->isXmlHttpRequest() && $request->get('ajax')) {
return $this->json([
'success' => true,
'html' => $this->render('includes/product/product-content.html.twig', $returnArray)->getContent(),
]);
}
return $this->renderTemplate('productForklift/overview.html.twig', $returnArray);
}
public function detailAction(Request $request, Forklift $id): Response
{
$product = $id;
return $this->renderTemplate('productForklift/detail.html.twig', [
'product' => $product,
]);
}
}