src/Controller/ShopController.php line 156

Open in your IDE?
  1. <?php
  2. /*
  3.  * To change this license header, choose License Headers in Project Properties.
  4.  * To change this template file, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. namespace App\Controller;
  8. use App\Model\DefaultMarca;
  9. use App\Service\CartService;
  10. use App\Service\ProductService;
  11. use App\Service\ShopService;
  12. use Symfony\Component\HttpFoundation\Cookie;
  13. use App\Twig\Extension\ProductExtension;
  14. use Pimcore\Model\DataObject;
  15. use Pimcore\Controller\FrontendController;
  16. use Pimcore\Model\DataObject\Folder;
  17. use Pimcore\Model\Document;
  18. use Pimcore\Twig\Extension\Templating\HeadTitle;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use App\Model\DefaultProduct;
  25. use Pimcore\Config;
  26. use App\Model\ShopCategory;
  27. use App\Service\HelperService;
  28. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  29. use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\Helper;
  30. use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper;
  31. use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
  32. use Pimcore\Model\DataObject\FilterDefinition;
  33. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  34. use Knp\Component\Pager\Pagination\SlidingPagination;
  35. use Knp\Component\Pager\PaginatorInterface;
  36. use App\Templating\Helper\BreadcrumbHelperService;
  37. use Symfony\Component\Security\Core\User\UserInterface;
  38. use App\Model\Customer;
  39. /**
  40.  * ShopController
  41.  */
  42. class ShopController extends FrontendController
  43. {
  44.     /**
  45.      * onKernelController
  46.      */
  47.     public function onKernelController(FilterControllerEvent $event)
  48.     {
  49.         parent::onKernelController($event);
  50.         //$this->view->category = ShopCategory::getById($event->getRequest()->get('category'));
  51.     }
  52.     /**
  53.      * defaultAction
  54.      */
  55.     public function defaultAction(
  56.         Request $request,
  57.         HelperService $helperService
  58.     )
  59.     {
  60.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  61.         //  $this->checkAccess($request);
  62.         // $this->setCookieTemplate();
  63.         $params['unique'] = $helperService->generateUniqueCode();
  64.     }
  65.     #[Route('/categories-filter',name'categoriesFilter')]
  66.     public function categoriesFilter(
  67.         UserInterface $user null,
  68.         Request $request,
  69.         HeadTitle $headTitleHelper,
  70.         BreadcrumbHelperService $breadcrumbHelperService,
  71.         Factory $ecommerceFactory,
  72.         HelperService $helperService,
  73.         ListHelper $listHelper,
  74.         PaginatorInterface $paginator,
  75.     ){
  76.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  77.         //needed to make sure category filter filters for active category
  78.         $params['parentCategoryIds'] = $params['currentCategory'] ?? null;
  79.         $category ShopCategory::getById($params['currentCategory']);
  80.         $params['category'] = $category;
  81.         if($category){
  82.             $headTitleHelper($category->getTitle());
  83.             $breadcrumbHelperService->enrichCategoryPage($category);
  84.         }
  85.         // create product list
  86.         $indexService $ecommerceFactory->getIndexService();
  87.         $products $indexService->getProductListForCurrentTenant();
  88.         $products->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  89.         $products->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  90.         $params["products"] = $products;
  91.         // load current filter
  92.         if ($category) {
  93.             $filterDefinition $category->getFilterdefinition();
  94.             $trackingManager Factory::getInstance()->getTrackingManager();
  95.             $trackingManager->trackCategoryPageView($category->getTitle(), null);
  96.         }
  97.         if ($request->get('filterdefinition') instanceof FilterDefinition) {
  98.             $filterDefinition $request->get('filterdefinition');
  99.         }
  100.         if (empty($filterDefinition)) {
  101.             $filterDefinition Config::getWebsiteConfig()->get('fallbackFilterdefinition');
  102.         }
  103.         $environment $ecommerceFactory->getEnvironment();
  104.         $environment->setCurrentAssortmentTenant('OptimizedMysql');
  105.         // create and init filter service
  106.         $filterService $ecommerceFactory->getFilterService();
  107.         $listHelper->setupProductList($filterDefinition$products$params$filterServicetrue);
  108.         $params["filterService"] = $filterService;
  109.         $params["filterDefinition"] = $filterDefinition;
  110.         //init pagination
  111.         $paginator $paginator->paginate(
  112.             $products,
  113.             $request->get('page'1),
  114.             $filterDefinition->getPageLimit()
  115.         );
  116.         $params["paginator"] = $paginator;
  117.         $params['paginationVariables'] = $paginator->getPaginationData();
  118.         //check if layout should not be included
  119.         $params["showLayout"] = ($request->get('noLayout')) ? false true;
  120.         $params["listViewStyle"] = (array_key_exists('listViewStyle'$params)) ? $params['listViewStyle'] : 'grid';
  121.         $params["unique"] = $helperService->generateUniqueCode();
  122.         // track product impressions
  123.         $trackingManager $ecommerceFactory->getTrackingManager();
  124.         foreach ($paginator as $product) {
  125.             $trackingManager->trackProductImpression($product);
  126.         }
  127.         $params['categories'] = $this->getCategories();
  128.         $params['brands'] = $this->getMarcas();
  129.         return $this->render('Shop/filters/productSubCategories.html.twig',$params);
  130.     }
  131.     public function listAction(
  132.         UserInterface $user null,
  133.         Request $request,
  134.         HeadTitle $headTitleHelper,
  135.         BreadcrumbHelperService $breadcrumbHelperService,
  136.         Factory $ecommerceFactory,
  137.         HelperService $helperService,
  138.         ListHelper $listHelper,
  139.         PaginatorInterface $paginator,
  140.     ):Response
  141.     {
  142.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  143.         $brandName $request->get('brandname');
  144.         $brandId $request->get('brand');
  145.         $isSeoFriendlyUrl preg_match('/productos\/marcas/'$brandName);
  146.         if ($isSeoFriendlyUrl) {
  147.             $params["marca"] = $params["brand"];
  148.         }
  149.             //needed to make sure category filter filters for active category
  150.         $params['parentCategoryIds'] = $params['category'] ?? null;
  151.         //current Category for subFilter Proposes
  152.         $params['currentCategory'] = $params['category'] ?? null;
  153.         $category ShopCategory::getById($params['category'] ?? null);
  154.         $params['category'] = $category;
  155.         if($category){
  156.             $headTitleHelper($category->getTitle());
  157.             $breadcrumbHelperService->enrichCategoryPage($category);
  158.         }
  159.         // create product list
  160.         $indexService $ecommerceFactory->getIndexService();
  161.         $products $indexService->getProductListForCurrentTenant();
  162.         $products->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  163.         $products->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  164.         $params["products"] = $products;
  165.         // load current filter
  166.         if ($category) {
  167.             $filterDefinition $category->getFilterdefinition();
  168.             $trackingManager Factory::getInstance()->getTrackingManager();
  169.             $trackingManager->trackCategoryPageView($category->getTitle(), null);
  170.         }
  171.         if ($request->get('filterdefinition') instanceof FilterDefinition) {
  172.             $filterDefinition $request->get('filterdefinition');
  173.         }
  174.         if (empty($filterDefinition)) {
  175.             $filterDefinition Config::getWebsiteConfig()->get('fallbackFilterdefinition');
  176.         }
  177.         $environment $ecommerceFactory->getEnvironment();
  178.         $environment->setCurrentAssortmentTenant('OptimizedMysql');
  179.         // create and init filter service
  180.         $filterService $ecommerceFactory->getFilterService();
  181.         $listHelper->setupProductList($filterDefinition$products$params$filterServicetrue);
  182.         $params["filterService"] = $filterService;
  183.         $params["filterDefinition"] = $filterDefinition;
  184.         //init pagination
  185.         $paginator $paginator->paginate(
  186.             $products,
  187.             $request->get('page'1),
  188.             $filterDefinition->getPageLimit()
  189.         );
  190.         $params["paginator"] = $paginator;
  191.         $params['paginationVariables'] = $paginator->getPaginationData();
  192.         //check if layout should not be included
  193.         $params["showLayout"] = ($request->get('noLayout')) ? false true;
  194.         $params["listViewStyle"] = (array_key_exists('listViewStyle'$params)) ? $params['listViewStyle'] : 'grid';
  195.         $params["unique"] = $helperService->generateUniqueCode();
  196.         // track product impressions
  197.         $trackingManager $ecommerceFactory->getTrackingManager();
  198.         foreach ($paginator as $product) {
  199.             $trackingManager->trackProductImpression($product);
  200.         }
  201.         //subCategories Logic
  202.         if ($params['currentCategory']){
  203.                 if ($params['currentCategory'] == 21822){//Awlcraft G-H LINE
  204.                     return $this->redirect('/es/Pinturas/Acabados/Awlgrip-GH-Line/GH-Line-Solidos_c21836/awlgrip-top-coat-g-h-line_p2580');
  205.                 }
  206.                 elseif ($params['currentCategory'] == 21828){//Alcraft Se E Line metalizados
  207.                     return $this->redirect('/es/Pinturas/Acabados/Awlcraft-Se/Awlcraft-Se-E-Line-Metalizados_c21828/awlcraft-se-e-line_p2336');
  208.                 }
  209.                 elseif ($params['currentCategory'] == 21829){//Alcraft Se L Line metalizados
  210.                     return $this->redirect('/es/Pinturas/Acabados/Awlcraft-Se/Awlcraft-Se-l-Line-Solidos_c21829/awlcralf-se-l-line_p21578');
  211.                 }
  212.                 elseif ($params['currentCategory'] == 21825){//Alcraft 2000 Metalizados
  213.                     return $this->redirect('/es/Pinturas/Acabados/Awlcraft-2000/Awlcraft-2000-Metalizados_c21825/awlcraft-2000-metallics_p21474');
  214.                 }
  215.                 elseif ($params['currentCategory'] == 21824){//Alcraft 2000 Solidos
  216.                     return $this->redirect('/es/Pinturas/Acabados/Awlcraft-2000/Awlcraft-2000-solidos_c21824/awlcraft-2000-topcoat_p21665');
  217.                 }
  218.                 elseif ($params['currentCategory'] == 21832){//International  Perfection
  219.                     return $this->redirect('/es/Pinturas/Acabados/Perfection-Topcoat/Perfection_c21832/perfection_p898');
  220.                 }
  221.             return $this->render('Shop/listing.html.twig'$params);
  222.         }
  223.         //end subCategories Logic
  224.         return $this->render('Shop/listing.html.twig'$params);
  225.     }
  226.     public function detailAction(
  227.         Request $request,
  228.         ProductService $productService
  229.     ): Response
  230.     {
  231.         $user $this->getUser();
  232.         $lang $request->getLocale();
  233.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  234.         $product DefaultProduct::getById($params['product']);
  235.         if ($user) {
  236.             //User ID to get product discount
  237.             $params['userIdSage'] = $user->getIdSage();
  238.         }
  239.         if ($product) {
  240.             if ($product->getType() == DataObject\AbstractObject::OBJECT_TYPE_VARIANT) {
  241.                 $parentObj DefaultProduct::getById($product->getParentId());
  242.                 if ($product->getClassId() == $parentObj->getClassId()) {
  243.                     $product $parentObj;
  244.                 }
  245.             }
  246.             if ($product->isPartOfKit()){
  247.                 return $this->redirect('/' $lang);
  248.             }
  249.             $marca $product->getMarcaObject();
  250.             if ($marca) {
  251.                 $params['marca'] = array($marca->getId());
  252.             }
  253.             $params['product'] = $product;
  254.         }
  255.         $params['filterBtnActive'] = true;
  256.         $params['kit'] = [];
  257.         foreach ($product->getKitProducts() as $relatedProductKit) {
  258.             $params['kit'][] = DefaultProduct::getById($relatedProductKit->getId());
  259.         }
  260.         $params['company'] = DataObject\Company::getById(415);
  261.         $lastVisitedProductsIds json_decode($request->cookies->get('last_visited_products''[]'), true);
  262.         $productID $params['product']->getId();
  263.         if (!in_array($productID$lastVisitedProductsIds)) {
  264.             // Add the ID of the currently visited product to the beginning of the array
  265.             array_unshift($lastVisitedProductsIds$productID);
  266.         }
  267.         $lastVisitedProductsIds array_slice($lastVisitedProductsIds011);
  268.         $lastVisitedProducts = [];
  269.         foreach ($lastVisitedProductsIds as $productID) {
  270.             $lastVisitedProducts[] = DefaultProduct::getById($productID);
  271.         }
  272.         $params['lastVisitedProducts'] = $lastVisitedProducts;
  273.         // Get Related Product for product bundle
  274.         $relatedProducts $productService->getRelatedProducts($product);
  275.         $params['relatedProducts'] = $relatedProducts;
  276.         $response $this->render('Shop/ProductDetails/productDetail.html.twig'$params);
  277.         $cookie = new Cookie('last_visited_products'json_encode($lastVisitedProductsIds), time() + 86400); // 86400 segundos = 1 día
  278.         $response->headers->setCookie($cookie);
  279.         return $response;
  280.     }
  281.     /**
  282.      * searchAction
  283.      * @Route("/search")
  284.      */
  285.     public function searchAction(
  286.         Request $request,
  287.         ProductExtension $productExtension
  288.     )
  289.     {
  290.         $products = [];
  291.         $productList Factory::getInstance()->getIndexService()->getProductListForTenant('OptimizedMysql');
  292.         $productList->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL "'productstatus');
  293.         //Remove extra spaces between words to avoid affecting matches.
  294.         $params['keyword'] = trim(preg_replace('/\s+/'' '$request->get('input')));
  295.         $params['isEmpty'] = false;
  296.         if (key_exists('keyword'$params)) {
  297.             $productList->addQueryCondition($params['keyword'], 'search');
  298.             if ($productList->count() === 0){
  299.                 $productList->resetConditions();
  300.                 $query "bsncode LIKE '%" $params['keyword'] . "%'";
  301.                 $productList->addCondition($query'bsncode');
  302.             }
  303.         }
  304.         $language $request->query->get('lang');
  305.         $count 0;
  306.         $maxProducts 75// Maximum number of products allowed in $products
  307.         foreach ($productList as $product) {
  308.             $auxParent $product->getParent();
  309.             if (!$auxParent instanceof Folder){
  310.                 $product $product->getParent();
  311.             }
  312.             $auxParent = new \stdClass();
  313.             $auxParent->id $product->getId();
  314.             $auxParent->name $product->getName();
  315.             $auxParent->bsnCode $product->getBsncode();
  316.             $found false;
  317.             foreach ($products as $existingProduct) {
  318.                 if ($existingProduct['id'] == $auxParent->id) {
  319.                     $found true;
  320.                     break;
  321.                 }
  322.             }
  323.             if (!$found) {
  324.                 // Convert both the product name and the search term to their form without accents using iconv()
  325.                 $productNameWithoutAccents iconv('UTF-8''ASCII//TRANSLIT//IGNORE'$auxParent->name);
  326.                 $searchTermWithoutAccents iconv('UTF-8''ASCII//TRANSLIT//IGNORE'$params['keyword']);
  327.                 if (strcasecmp(trim($productNameWithoutAccents), $searchTermWithoutAccents) == 0) { // Check if product name matches search term exactly
  328.                     unset($products);
  329.                     $products[] = [
  330.                         'id' => $product->getId(),
  331.                         'name' => $product->getName(),
  332.                         'brand' => $product->getMarca(),
  333.                         'item' => DefaultProduct::getById($product->getId())
  334.                     ];
  335.                     break; // Stop iterating if exact match is found
  336.                 }
  337.                 else if ($count $maxProducts) { // Check if the maximum limit has been reached
  338.                     $products[] = [
  339.                         'id' => $product->getId(),
  340.                         'name' => $product->getName(),
  341.                         'brand' => $product->getMarca(),
  342.                         'item' => DefaultProduct::getById($product->getId()),
  343.                     ];
  344.                     $count++;
  345.                 } else {
  346.                     break; // Stop iterating if maximum limit has been reached
  347.                 }
  348.             }
  349.         }
  350.         foreach ($products as &$product) {
  351.             $productName strtolower($product['name']);
  352.             $distance levenshtein($params['keyword'], $productName);
  353.             $score 100 $distance// Asigna un puntaje inversamente proporcional a la distancia
  354.             $product['score'] = $score;
  355.         }
  356.         // Paso 3: Ordenar los productos según el puntaje
  357.         usort($products, function($a$b) {
  358.             return $b['score'] - $a['score'];
  359.         });
  360.         $params['products'] = $products;
  361.         $params['lang'] = $language;
  362.         return $this->render('layout/includes/navbar-serach-suggestion-items.html.twig'$params);
  363.     }
  364.     /**
  365.      * searchdocumentAction
  366.      *
  367.      * @param Request $request
  368.      * @param Factory $ecommerceFactory
  369.      * @param HelperService $helperService,
  370.      * @param ListHelper $listHelper
  371.      * @param PaginatorInterface $paginator
  372.      * @return void
  373.      */
  374.     public function searchdocumentAction(
  375.         Request $request,
  376.         Factory $ecommerceFactory,
  377.         HelperService $helperService,
  378.         ListHelper $listHelper,
  379.         PaginatorInterface $paginator
  380.     )
  381.     {
  382.         //    $this->checkAccess($request);
  383.         //    $this->setCookieTemplate();
  384.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  385.         $limit $params['limit'];
  386.         $params["orderBy"] = "name#ASC";
  387.         $actPage $params['page'];
  388.         if (empty($actPage)) {
  389.             $actPage 1;
  390.         }
  391.         if ($request->get('filterdefinition') instanceof \Pimcore\Model\DataObject\FilterDefinition) {
  392.             $filterDefinition $request->get('filterdefinition');
  393.         }
  394.         if (empty($filterDefinition)) {
  395.             $filterDefinition \Pimcore\Config::getWebsiteConfig()->fallbackFilterdefinition;
  396.         }
  397.         $this->view->filterDefinitionObject $filterDefinition;
  398.         if (empty($limit)) {
  399.             $limit $filterDefinition->getPageLimit();
  400.         }
  401.         $productList Factory::getInstance()->getIndexService()->getProductListForCurrentTenant();
  402.         $productList->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  403.         if (empty($params['keyword'])) {
  404.             $params['keyword'] = $params['searchwords'];
  405.         }
  406.         if (key_exists('keyword'$params)) {
  407.             //  foreach (explode(' ', $params['keyword']) as $term) {
  408.             $productList->addQueryCondition($params['keyword'], 'search');
  409.             // }
  410.         }
  411.         $filterService Factory::getInstance()->getFilterService();
  412.         $params['filterService'] = $filterService;
  413.         $params['products'] = $productList;
  414.         $params['searchwords'] = $params['keyword'];
  415.         /** @var SlidingPagination $paginator */
  416.         $paginator $paginator->paginate(
  417.             $productList,
  418.             $request->get('page'1),
  419.             $limit
  420.         );
  421.         $params["paginator"] = $paginator;
  422.         $params['paginationVariables'] = $paginator->getPaginationData();
  423.         $params['actPage'] = $actPage;
  424.         $params['limit'] = $limit;
  425.         $params['unique'] = $helperService->generateUniqueCode();
  426.     }
  427.     /**
  428.      * cuantapinturanecesarioresultAction
  429.      *
  430.      * @param Request $request
  431.      * @param Factory $ecommerceFactory
  432.      * @param HelperService $helperService,
  433.      * @param ListHelper $listHelper
  434.      * @param PaginatorInterface $paginator
  435.      *
  436.      * @return void
  437.      */
  438.     public function cuantapinturanecesarioresultAction(
  439.         Request $request,
  440.         Factory $ecommerceFactory,
  441.         HelperService $helperService,
  442.         ListHelper $listHelper,
  443.         PaginatorInterface $paginator
  444.     )
  445.     {
  446.         //$this->checkAccess($request);
  447.         //$this->setCookieTemplate();
  448.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  449.         $limit $params['limit'];
  450.         $params["orderBy"] = "name#ASC";
  451.         $actPage $params['page'];
  452.         if (empty($actPage)) {
  453.             $actPage 1;
  454.         }
  455.         $resultado = array();
  456.         $resultado["tipo-embarcacion"] = $params["radio_1"];
  457.         if (preg_match("/^mo/i"$params["radio_1"], $params["radio_1"])) {
  458.             $resultado["tipo-embarcacion"] = $resultado["tipo-embarcacion"] . $params["radio_2"];
  459.         }
  460.         $resultado["base-embarcacion"] = $params["radio_3"];
  461.         $resultado["dimension-eslora"] = $params["value1"];
  462.         $resultado["dimension-calado"] = $params["value2"];
  463.         $resultado["dimension-manga"] = $params["value3"];
  464.         $resultado["resultado-litre"] = round($params["value_1"], 2);
  465.         $this->view->resultado $resultado;
  466.         if (!key_exists("calculvariant"$params)) {
  467.             if (empty($params["calculvariant"])) {
  468.                 $params["calculvariant"] = $params["value_hidden"];
  469.             }
  470.         }
  471.         if ($request->get('filterdefinition') instanceof \Pimcore\Model\DataObject\FilterDefinition) {
  472.             $filterDefinition $request->get('filterdefinition');
  473.         }
  474.         if (empty($filterDefinition)) {
  475.             $filterDefinition \Pimcore\Config::getWebsiteConfig()->resultcuantapinturaFilterdefinition;
  476.         }
  477.         $params['filterDefinition'] = $filterDefinition;
  478.         if (empty($limit)) {
  479.             $limit $filterDefinition->getPageLimit();
  480.         }
  481.         // create product list
  482.         $products Factory::getInstance()->getIndexService()->getProductListForCurrentTenant();
  483.         $products->setVariantMode(ProductListInterface::VARIANT_MODE_INCLUDE_PARENT_OBJECT);
  484.         $products->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  485.         $products->addCondition("calculvariant LIKE '%#" $params["value_hidden"] . "#%'"'calculvariant');
  486.         $params['products'] = $products;
  487.         // create and init filter service
  488.         $filterService Factory::getInstance()->getFilterService();
  489.         Helper::setupProductList($filterDefinition$products$params$this->view$filterServicetrue);
  490.         $params['filterService'] = $filterService;
  491.         /** @var SlidingPagination $paginator */
  492.         $paginator $paginator->paginate(
  493.             $products,
  494.             $request->get('page'1),
  495.             $limit
  496.         );
  497.         $params["paginator"] = $paginator;
  498.         $params['paginationVariables'] = $paginator->getPaginationData();
  499.         $params['actPage'] = $actPage;
  500.         $params['limit'] = $limit;
  501.         $params['unique'] = $helperService->generateUniqueCode();
  502.     }
  503.     /**
  504.      * setCookieTemplate
  505.      *
  506.      * @return void
  507.      */
  508.     public function setCookieTemplate()
  509.     {
  510.         $cookieListener $this->get(\Pimcore\Bundle\CoreBundle\EventListener\Frontend\CookiePolicyNoticeListener::class);
  511.         $cookieListener->loadTemplateFromResource("@App/Resources/views/Misc/cookie-policy-bsn-template.html");
  512.     }
  513.     /**
  514.      * checkAccess
  515.      *
  516.      * @param Request $request
  517.      * @return void
  518.      */
  519.     private function checkAccess(Request $request)
  520.     {
  521.         if (!(($request->query->get('pimcore_preview') == "true") || ($request->query->get('pimcore_editmode') == "true"))) {
  522.             //  $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  523.         }
  524.     }
  525.     /**
  526.      * @Route("/ajax_productDetail_getStock", name="ajax_productDetail_getStock")
  527.      */
  528.     public function productDetailGetStockAjaxAction(
  529.         Request $request,
  530.         ShopService $shopService,
  531.     ): JsonResponse
  532.     {
  533.         $product DefaultProduct::getById($request->get('id'));
  534.         $params = [];
  535.         if (!is_null($product)) {
  536.             $params['deliveryTime'] = $product->getPlazoentregaprovedor();
  537.             $params['stock']['total'] = $shopService->getStock($product->getBsncode());
  538.             $params['stock']['warehouse'] = $shopService->getStockByWarehouse($product->getBsncode());
  539.         }
  540.         return new JsonResponse($params);
  541.     }
  542.     /**
  543.      * @Route("/ajax_productDetail_new_asset", name="ajax_productDetail_new_asset")
  544.      */
  545.     public function productDetailnewAsset(
  546.         Request $request,
  547.     ){
  548.         $idProduct $request->get('id');
  549.         $product DefaultProduct::getById($idProduct);
  550.         $param['product'] = $product;
  551.         $param['test'] = $idProduct;
  552.         return $this->render('Shop/includes/newAsset.html.twig',$param);
  553.     }
  554.     /**
  555.      * @Route("/ajax_productDetail_info", name="ajax_productDetail_info")
  556.      */
  557.     public function productDetailInfo(
  558.         Request $request,
  559.     ){
  560.         $idProduct $request->get('newId');
  561.         $product DefaultProduct::getById($idProduct);
  562.         $param['deliveryTime'] = $product->getPlazoentregaprovedor();
  563.         return new JsonResponse($param);
  564.     }
  565.     /**
  566.      * @Route("/ajax_variant_info", name="ajax_variant_info")
  567.      */
  568.     public function variantInfo(
  569.         Request $request,
  570.         ShopService $shopService,
  571.         UserInterface $usernull
  572.     ){
  573.         /** @var \Pimcore\Model\DataObject\Customer $user */
  574.         $variant DefaultProduct::getById($request->get('id'));
  575.         $priceWithDiscount $shopService->getProductDiscount($variant->getBsncode(),$user->getIdSage());
  576.         $params['price'] = $variant->getPrice();
  577.         $params['bsnCode'] = $variant->getBsncode();
  578.         $params['stock']['total'] = $shopService->getStock($params['bsnCode']);
  579.         $params['stock']['warehouse'] = $shopService->getStockByWarehouse($params['bsnCode']);
  580.         $params['deliveryTime'] = $variant->getPlazoentregaprovedor();
  581.         $params['priceWithDiscount'] = $priceWithDiscount;
  582.         return new JsonResponse($params);
  583.     }
  584.     /**
  585.      * @Route("/ajax_variant_kit", name="ajax_variant_kit")
  586.      */
  587.     public function variantKitProducts(
  588.         Request $request,
  589.         ShopService $shopService,
  590.         UserInterface $usernull
  591.     ){
  592.         /** @var \Pimcore\Model\DataObject\Customer $user */
  593.         $variant DefaultProduct::getById($request->get('id'));
  594.         $params['variant'] = $variant;
  595.         if ($user) {
  596.             //User ID to get product discount
  597.             $params['userIdSage'] = $user->getIdSage();
  598.         }
  599.         $kitProducts $variant->getKitProducts();
  600.         $params['kit'] = [];
  601.         $params['variantPriceWithDiscount'] = $shopService->getProductDiscount($variant->getBsncode(),$user->getIdSage());
  602.         if($kitProducts){
  603.             foreach ( $kitProducts as $relatedProductKit) {
  604.                 $product DefaultProduct::getById($relatedProductKit->getId());
  605.                 $priceWithDiscount $shopService->getProductDiscount($relatedProductKit->getBsncode(),$user->getIdSage());
  606.                 $params['kit'][] = [
  607.                     'product' => $product,
  608.                     'priceWithDiscount' => $priceWithDiscount
  609.                 ];
  610.             }
  611.         }
  612.         return $this->render('Shop/includes/productDetailKit.html.twig',$params);
  613.     }
  614.     protected function getCategories(): DataObject\ProductCategory\Listing
  615.     {
  616.         $categories = new DataObject\ProductCategory\Listing();
  617.         $categories->setUnpublished(false);
  618.         $categories->setOrderKey("order");
  619.         $categories->setCondition('o_parentId = ?', [10]);
  620.         $categories->load();
  621.         return $categories;
  622.     }
  623.     protected function getMarcas(): DataObject\ProductMarca\Listing
  624.     {
  625.         $marcas = new DataObject\ProductMarca\Listing();
  626.         $marcas->setUnpublished(false);
  627.         $marcas->setOrderKey("order");
  628.         $marcas->load();
  629.         return $marcas;
  630.     }
  631.     #[Route('/ajax_productDetail_getBrandName',name:'ajax-productDetail-getBrandName')]
  632.     public function ajax_productDetail_getBrandName(Request $request): Response
  633.     {
  634.         $product DefaultProduct::getById($request->get('id'));
  635.         return $this->json($product->getMarcaObject()->getName());
  636.     }
  637. }