src/Controller/ContentController.php line 172

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use ContainerELzgxgm\getGoogleMapService;
  4. use DateTime;
  5. use Exception;
  6. use PhpOffice\PhpSpreadsheet\IOFactory;
  7. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  8. use Pimcore\Config;
  9. use Pimcore\Model\DataObject;
  10. use Pimcore\Controller\FrontendController;
  11. use Pimcore\Model\DataObject\ProductMarca;
  12. use Pimcore\Model\Document;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Symfony\Component\HttpFoundation\Cookie;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use App\Service\Product\ProductHelper;
  21. #use App\Ecommerce\Tool\RecentlyViewedProducts;
  22. use App\Model\DefaultProduct;
  23. use App\Model\ShopCategory;
  24. use App\Model\DefaultMarca;
  25. use App\Service\HelperService;
  26. //use OutputDataConfigToolkitBundle\Service;
  27. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  28. use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\Helper;
  29. use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper;
  30. use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
  31. use Pimcore\Model\DataObject\Product;
  32. use Pimcore\Model\DataObject\ProductCategory;
  33. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  34. #use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  35. use Symfony\Component\Security\Core\User\UserInterface;
  36. use Knp\Component\Pager\Pagination\SlidingPagination;
  37. use Knp\Component\Pager\PaginatorInterface;
  38. class ContentController extends FrontendController {
  39.     public function defaultAction(
  40.         Request $request,
  41.         HelperService $helperService,
  42.         Config $config
  43.     ) {
  44.        return $this->render('Shop/ProductDetails/productDetail.html.twig');
  45.         //return new Response("views must be change to twig");
  46.        // $this->checkAccess($request);
  47.        // $this->setCookieTemplate();
  48.         //recuperar la key del systemSettings.
  49.         $apikey $config['services']['google']['browser_api_key'];
  50.         //listar las dos tiendas con el condicional.
  51.         $companies = new DataObject\Company\Listing();
  52.         $companies->setCondition("sede = ?"1);
  53.         $companies->setOrderKey("title");
  54.         //test
  55.         $puntodeventa = new DataObject\Colaborador\Listing();
  56.         $puntodeventa->setOrderKey(["comunidad_autonoma","provincia","ciudad","name"]);
  57.         $puntodeventa->setCondition("ispuntoventa = ?"1);
  58.         $puntodeventa->addConditionParam("showinweb = ?"1"AND");
  59.         $this->view->puntodeventa $puntodeventa;
  60.         $aplicadores = new DataObject\Colaborador\Listing();
  61.         $aplicadores->setOrderKey(["comunidad_autonoma","provincia","ciudad","name"]);
  62.         $aplicadores->setCondition("isaplicador = ?"1);
  63.         $aplicadores->addConditionParam("showinweb = ?"1"AND");
  64.         $this->view->aplicadores $aplicadores;
  65.         $this->view->companies $companies;
  66.         $this->view->apikey $apikey;
  67.         $this->view->unique $helperService->generateUniqueCode();
  68.     }
  69.     public function homeAction(UserInterface $user nullRequest $request){
  70.         $lang $request->getLocale();
  71.         $params = [];
  72.         $ratesDateCookie $request->cookies->get('lastRatesChanges');
  73.         $filePath __DIR__.'/../../public/var/assets/excel_de_tarifas/temp/changes.xlsx';
  74.         try {
  75.             $spreadsheet IOFactory::load($filePath);
  76.             $sheet $spreadsheet->getActiveSheet();
  77.             $lastRow $sheet->getHighestRow();
  78.             $lastChanges $sheet->getCell('A'.$lastRow);
  79.         } catch (Exception){
  80.             $lastChanges null;
  81.         }
  82.         if ($user){
  83.             if (isset($ratesDateCookie) && $ratesDateCookie $lastChanges) {
  84.                 $params['modal'] = $lastChanges;
  85.             }
  86.             $response = new Response();
  87.             $response->headers->setCookie(new Cookie('lastRatesChanges'$lastChangesstrtotime('now + 30 days')));
  88.             $response->sendHeaders();
  89.         }
  90.         $params["categories"] = $this->getCategories();
  91.         $params["marcas"] = $this->getMarcas();
  92.         $params["companies"] = $this->getCompanies();
  93.         $params["bannerSliders"] = $this->getBannerSliders();
  94.         $params["team_members"] = $this->getTeamMembers();
  95.         return $this->render('Default/index.html.twig'$params);
  96.     }
  97.     protected function getCategories(): DataObject\ProductCategory\Listing
  98.     {
  99.         $categories = new DataObject\ProductCategory\Listing();
  100.         $categories->setUnpublished(false);
  101.         $categories->setOrderKey("order");
  102.         $categories->setCondition('o_parentId = ?', [10]);
  103.         $categories->load();
  104.         return $categories;
  105.     }
  106.     protected function getMarcas(): DataObject\ProductMarca\Listing
  107.     {
  108.         $marcas = new DataObject\ProductMarca\Listing();
  109.         $marcas->setUnpublished(false);
  110.         $marcas->setOrderKey("order");
  111.         $marcas->load();
  112.         return $marcas;
  113.     }
  114.     protected function getBannerSliders(): DataObject\Banner\Listing
  115.     {
  116.         $listing = new DataObject\Banner\Listing();
  117.         $listing->setOrderKey("o_key");
  118.         $listing->setOrder("asc");
  119.         $banners $listing->addConditionParam('o_published = ?', [1]);
  120.         $banners->load();
  121.         return $banners;
  122.     }
  123.     protected function getCompanies(): DataObject\Company\Listing
  124.     {
  125.         $companies = new DataObject\Company\Listing();
  126.         $companies->setOrderKey(["sede","title"]);
  127.         $companies->setOrder(["desc","asc"]);
  128.         $companies->load();
  129.         return $companies;
  130.     }
  131.     protected function getTeamMembers(): DataObject\TeamMember\Listing
  132.     {
  133.         $teamMembers = new DataObject\TeamMember\Listing();
  134.         $teamMembers->setUnpublished(false);
  135.         $teamMembers->setCondition('is_active = ?', [true]);
  136.         $teamMembers->setOrderKey(["order""o_id"]);
  137.         $teamMembers->setOrder(["asc""asc"]);
  138.         $teamMembers->load();
  139.         return $teamMembers;
  140.     }
  141.     public  function aboutUsAction(Request $request){
  142.         return $this->render('Content/aboutUs.html.twig');
  143.     }
  144.     public function footerAction(Request $request){
  145.         return $this->render('include/footer.html.twig');
  146.     }
  147.     public function pointsOfSaleAction(Request $request){
  148.         //getting objects
  149.         $colaboradores = new DataObject\Colaborador\Listing();
  150.         $colaboradores->setCondition("showinweb = ?"1);
  151.         $colaboradores->addConditionParam("showinmap = ?"1"AND");
  152.         $colaboradores->setOrderKey("name");
  153.         $company DataObject\Company::getById(415);
  154.         return $this->render('Content/pointsOfSale.html.twig',[
  155.             'collaborators' => $colaboradores,
  156.             'company'       => $company
  157.         ]);
  158.     }
  159.     public function indrustryProfessionalsAction(Request $request){
  160.         //getting objects
  161.         $professionals = new DataObject\Colaborador\Listing();
  162.         $professionals->addConditionParam("showinweb = ?"1);
  163.         $professionals->addConditionParam("showinmap = ?"1"AND");
  164.         $professionals->setOrderKey("name");
  165.         $brands $professionals->getClass()->getFieldDefinition("brands");
  166.         $specialitazions $professionals->getClass()->getFieldDefinition("specialization");
  167.         $brands $brands->getOptions();
  168.         $specialitazions $specialitazions->getOptions();
  169.         $company DataObject\Company::getById(415);
  170.         return $this->render('Content/industryProfessionals.html.twig',[
  171.             'professionals' => $professionals,
  172.             'company'       => $company,
  173.             'brands'        => $brands,
  174.             'specializations' => $specialitazions
  175.         ]);
  176.     }
  177.     /**
  178.      * @Route("/ajax_professional", name="ajax_professional")
  179.      */
  180.     public function modalProfessionalsAjaxAction(Request $request){
  181.         $id $request->get('data');
  182.         $lang $request->get('lang');
  183.         //getting objects
  184.         $professional DataObject\Colaborador::getById($id);
  185.         $company DataObject\Company::getById(415);
  186.         return $this->render('Content/dataProfessionalsModal.html.twig',
  187.         [
  188.             'professional' => $professional,
  189.             'company'      => $company,
  190.             'lang'         => $lang
  191.         ]);
  192.     }
  193.     /**
  194.     * @Route("/detailCart", name="detailCart")
  195.     * @Security("is_granted('ROLE_USER')")
  196.     */
  197.     public function detailCartAction(Request $request){
  198.         return $this->render('Cart/main-cart.html.twig');
  199.     }
  200.     public function tarifaAction(
  201.         Request $request,
  202.         HelperService $helperService
  203.     ) {
  204.         $pdfFile "catalogo_provisional2025";
  205.         /*
  206.         $orgFolder = PIMCORE_PRIVATE_VAR . "/securePDF/" ;
  207.         if (file_exists($orgFolder . $pdfFile )) {
  208.             $copyFolder = PIMCORE_WEB_ROOT . "/static2/pdfjsviewer/tmpPdf/";
  209.             $tmpFileName = uniqid() . ".pdf";
  210.             copy($orgFolder . $pdfFile , $copyFolder . $tmpFileName);
  211.             $this->view->pdf = $tmpFileName;
  212.         }*/
  213.         $params = [];
  214.         $params["unique"] = $helperService->generateUniqueCode();
  215.         $params["pdf"] =  $pdfFile;
  216.         return $this->render('PDF/viewerframe.html.twig'$params);
  217.     }
  218.     #[Route('/tarifaPDF/{pdf}'name'tarifa-pdf-view')]
  219.     public function tarifaPDFAction(
  220.         Request $request,
  221.         $pdf,
  222.         HelperService $helperService
  223.     ) {
  224.         $pdf $pdf.'.pdf';
  225.         $parameters = array(
  226.             //Same parameters as defalt viewer.
  227.             //Tell to the bundle where is the pdf. (absolute path for outside temporal folder pdf, just the <name>.pdf for inside temporal folder)
  228.             'pdf' => $pdf ,
  229.             //Tell to the bundle that its necessary to delete pdf after render.
  230.             'deletePdfInTmpAfterRenderized' => false,
  231.             //pdf.js viewer options
  232.             'showToolBar' => true,
  233.             'showLeftToolbarButton' => true,
  234.             'showSearchInDocumentButton' => true,
  235.             'showPreviousPageButton' => true,
  236.             'showPreviousPageButton' => true,
  237.             'showFindPageInputText' => true,
  238.             'showNumberOfPagesLabel' => true,
  239.             'showZoomInButton'=> true,
  240.             'showZoomOutButton'=> true,
  241.             'showScaleSelectComboBox'=> true,
  242.             'showPresentationModeButton'=> true,
  243.             'showOpenFileButton'=> false,
  244.             'showPrintButton'=> false,
  245.             'showDownloadButton'=> false,
  246.             'showViewBookmarkButton'=> false,
  247.             'showToolsButton'=> true,
  248.         );
  249.   //      $this->view->unique = $helperService->generateUniqueCode();
  250. //        return $this->render('PDF/custom.html.php', $parameters);
  251.         return  $this->render('PDF/custom.html.twig',$parameters);
  252.     }
  253.     /**
  254.      * Pdf system deletion from tmpDir
  255.      *
  256.      * @param string $PdfTmpPath , relative path to the pdf from webroot dir
  257.      * @Route("/deletePDF")
  258.      *
  259.      * @return Response, Error in pdf deletion. If it's ok, this function must return an empty string.
  260.      */
  261.     public function deletePDF (Request $request){
  262.         try{
  263.             unlink(substr($request->get('PdfTmpPath'), 1));
  264.         } catch (Exception $e){
  265.             return new Response('Can not delete pdf file from temporal directory, '.$e->getMessage().', please configure tmpPdfDirectory and pdf variables');
  266.         }
  267.         return new Response('');
  268.     }
  269.     public function cuantapinturanecesarioresultAction(
  270.         Request $request,
  271.         HelperService $helperService
  272.     ) {
  273.         $this->checkAccess($request);
  274.         $this->setCookieTemplate();
  275.         $this->view->unique $helperService->generateUniqueCode();
  276.     }
  277.     /**
  278.      * marcasAction
  279.      *
  280.      * @param Request $request
  281.      * @param HelperService $helperService
  282.      * @return void
  283.      */
  284.     public function marcasAction(
  285.         Request $request,
  286.         HelperService $helperService
  287.     ) {
  288.         $this->checkAccess($request);
  289.         $this->setCookieTemplate();
  290.         $marcas = new DataObject\ProductMarca\Listing();
  291.         $marcas->setUnpublished(false);
  292.         $marcas->setOrderKey("order");
  293.         $this->view->marcas $marcas;
  294.         $this->view->unique $helperService->generateUniqueCode();
  295.         \Pimcore\Cache::disable();
  296.     }
  297.     /**
  298.      * categoriasAction
  299.      *
  300.      * @param Request $request
  301.      * @param HelperService $helperService
  302.      * @return void
  303.      */
  304.     public function categoriasAction(
  305.         Request $request,
  306.         HelperService $helperService
  307.     ) {
  308.         $this->checkAccess($request);
  309.         $this->setCookieTemplate();
  310.         $categories = new DataObject\ProductCategory\Listing();
  311.         $categories->setUnpublished(false);
  312.         $categories->setOrderKey("order");
  313.         $categories->setCondition('o_path LIKE ?', ['/Categorias de producto/']);
  314.         // $categories->setCondition('(productos IS NOT NULL OR productos <> \'\') AND o_path LIKE ?', ['/Categorias de producto/']);
  315.         $this->view->categories $categories;
  316.         $this->view->unique $helperService->generateUniqueCode();
  317.         \Pimcore\Cache::disable();
  318.     }
  319.     /**
  320.      * @Route("/colaboradoresmap/{lang}")
  321.      */
  322.     public function colaboradoresmapAction(
  323.         Request $request,
  324.         $lang,
  325.         HelperService $helperService,
  326.         Config $config) {
  327.         $this->checkAccess($request);
  328.         $this->setCookieTemplate();
  329.         $apikey $config['services']['google']['browser_api_key'];
  330.         $colaboradores = new DataObject\Colaborador\Listing();
  331.         $colaboradores->setCondition("showinweb = ?"1);
  332.         $colaboradores->addConditionParam("showinmap = ?"1"AND");
  333.         $colaboradores->setOrderKey("name");
  334.         $this->view->unique $helperService->generateUniqueCode();
  335.         return $this->render(":Content:puntodeventamap.html.php", ["colaboradores" => $colaboradores"linkTitle" => $this->get("translator")->trans("lnk_open_in_google_map", array(), null$lang), "api_key" => $apikey]);
  336.         // $this->view->colaboradores = $colaboradores;
  337.     }
  338.     public function setCookieTemplate() {
  339.         $cookieListener $this->get(\Pimcore\Bundle\CoreBundle\EventListener\Frontend\CookiePolicyNoticeListener::class);
  340.         $cookieListener->loadTemplateFromResource("@App/Resources/views/Misc/cookie-policy-bsn-template.html");
  341.     }
  342.     private function checkAccess(Request $request) {
  343.         if (!(($request->query->get('pimcore_preview') == "true") || ($request->query->get('pimcore_editmode') == "true"))) {
  344.             // $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  345.         }
  346.     }
  347.     /**
  348.     * @Route("/squareMeters", name="squareMeters")
  349.     *
  350.     */
  351.     public function squareMetersAction(Request $request){
  352.         return $this->render('Content/squareMeters.html.twig');
  353.     }
  354.     /**
  355.     * @Route("/calculatePaint", name="calculatePaint")
  356.     *
  357.     */
  358.     public function calculatePaintAction(Request $request){
  359.         return $this->render('Content/calculatePaint.html.twig');
  360.     }
  361.     /**
  362.     * @Route("/paintingSchemes", name="paintingSchemes")
  363.     *
  364.     */
  365.     public function paintingSchemesAction(){
  366.         return $this->render('Content/paintingSchemes.html.twig');
  367.     }
  368.     #[Route('/rates'name'rates-view')]
  369.     public function ratesView(Request $request): Response
  370.     {
  371.         $locale $request->getLocale();
  372.         $params['_locale'] = $locale;
  373.         //get the Excel file with the price changes
  374.         $filePath __DIR__.'/../../public/var/assets/excel_de_tarifas/temp/changes.xlsx';
  375.         $arrayData = [];
  376.         try {
  377.             $spreadsheet IOFactory::load($filePath);
  378.             $sheet $spreadsheet->getActiveSheet();
  379.             foreach ($sheet->getRowIterator() as $row) {
  380.                 $cellIterator $row->getCellIterator();
  381.                 $cellIterator->setIterateOnlyExistingCells(false);
  382.                 $value $sheet->getCell('A' $row->getRowIndex())->getValue();
  383.                 $brands = [];
  384.                 foreach ($sheet->getColumnIterator('B') as $column){
  385.                     $columnIterator =  $column->getCellIterator();
  386.                     $columnIterator->setIterateOnlyExistingCells(false);
  387.                     $brandName $sheet->getCell($column->getColumnIndex().$row->getRowIndex())->getValue();
  388.                     $brands[] = ProductMarca::getByName($brandName)->load();
  389.                 }
  390.                 $date = new DateTime();
  391.                 $date->modify('+' $value ' days');
  392.                 $formattedDateFull strftime('%e %B %Y'$value);
  393.                 $arrayData[] = [
  394.                     'date' => $formattedDateFull,
  395.                     'brands' => $brands
  396.                 ];
  397.             }
  398.         } catch (Exception){
  399.         }
  400.         $params['path'] = '/excel_de_tarifas/ExporterWeb.xlsx';
  401.         $params['changes'] = $arrayData;
  402.         return $this->render('Content/rates.html.twig'$params);
  403.     }
  404.     #[Route('/recent-events'name'recent-events')]
  405.     public function eventsViewAction(): Response
  406.     {
  407.         return $this->render('Content/events.html.twig');
  408.     }
  409.     /**
  410.     * @Route("/calculatePaintResult", name="calculatePaintResult")
  411.     *
  412.     */
  413.     public function calculatePaintResultAction(
  414.         Request $request,
  415.         Factory $ecommerceFactory,
  416.         HelperService $helperService,
  417.         ListHelper $listHelper,
  418.         PaginatorInterface $paginator,
  419.     ){
  420.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  421.         $resultado = array();
  422.         if (!empty($params['limit'])) {
  423.             $limit $params['limit'];
  424.         }
  425.         $resultado["tipo-embarcacion"] = $params["radio_1"];
  426.         if (preg_match("/^mo/i"$params["radio_1"])) {
  427.             $resultado["tipo-embarcacion"] = $resultado["tipo-embarcacion"] . $params["radio_2"];
  428.         }
  429.         $resultado["base-embarcacion"] = $params["radio_3"];
  430.         $resultado["dimension-eslora"] = $params["value1"];
  431.         $resultado["dimension-manga"] = $params["value2"];
  432.         $resultado["dimension-calado"] = $params["value3"];
  433.         $resultado["resultado-litre"] = round(floatval($params["value_1"]), 2);
  434.         if (!key_exists("calculvariant"$params)) {
  435.             if (empty($params["calculvariant"])) {
  436.                 $params["calculvariant"] = $params["value_hidden"];
  437.             }
  438.         }
  439.         if ($request->get('filterdefinition') instanceof \Pimcore\Model\DataObject\FilterDefinition) {
  440.             $filterDefinition $request->get('filterdefinition');
  441.         }
  442.         if (empty($filterDefinition)) {
  443.             $filterDefinition \Pimcore\Config::getWebsiteConfig()->get('resultcuantapinturaFilterdefinition');
  444.         }
  445.         if (empty($limit)) {
  446.             $limit $filterDefinition->getPageLimit();
  447.         }
  448.         //setting assortment tenant
  449.         $environment $ecommerceFactory->getEnvironment();
  450.         $environment->setCurrentAssortmentTenant("default");
  451.         // create product list
  452.         $indexService $ecommerceFactory->getIndexService();
  453.         $products $indexService->getProductListForCurrentTenant();
  454.         $products->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  455.         $products->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  456.         $products->addCondition("calculvariant LIKE '%#" $params["value_hidden"] . "#%'"'calculvariant');
  457.         $params["products"] = $products;
  458.         // create and init filter service
  459.         $filterService $ecommerceFactory->getFilterService();
  460.         $listHelper->setupProductList($filterDefinition$products$params$filterServicetrue);
  461.         $params["filterService"] = $filterService;
  462.         $params["filterDefinition"] = $filterDefinition;
  463.         $currentPage $request->get('page'1);
  464.         $productTotal count($products);
  465.         $maxPage ceil($productTotal $limit);
  466.         if($currentPage $maxPage){
  467.             $currentPage $maxPage;
  468.         }
  469.         /** @var SlidingPagination $paginator */
  470.         $paginator $paginator->paginate(
  471.             $products,
  472.             $currentPage,
  473.             $limit
  474.         );
  475.         $params["paginator"] = $paginator;
  476.         $params['paginationVariables'] = $paginator->getPaginationData();
  477.         $params['perPage'] = $limit;
  478.         $params['resultado'] = $resultado;
  479.         return $this->render('Content/calculatePaintResult.html.twig',$params);
  480.     }
  481.     public function privacyPolicyAction(){
  482.         return $this->render('Content/policy/privacyPolicy.html.twig');
  483.     }
  484.     public function termsAndConditionsAction(){
  485.         return $this->render('Content/policy/termsAndConditions.html.twig');
  486.     }
  487.     public function dataProtectionAction(){
  488.         return $this->render('Content/policy/dataProtection.html.twig');
  489.     }
  490.     public function cookiePolicyAction(){
  491.         return $this->render('Content/policy/cookiePolicy.html.twig');
  492.     }
  493. }