src/Controller/ContentController.php line 148

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.         return $this->render('Default/index.html.twig'$params);
  94.     }
  95.     protected function getCategories(): DataObject\ProductCategory\Listing
  96.     {
  97.         $categories = new DataObject\ProductCategory\Listing();
  98.         $categories->setUnpublished(false);
  99.         $categories->setOrderKey("order");
  100.         $categories->setCondition('o_parentId = ?', [10]);
  101.         $categories->load();
  102.         return $categories;
  103.     }
  104.     protected function getMarcas(): DataObject\ProductMarca\Listing
  105.     {
  106.         $marcas = new DataObject\ProductMarca\Listing();
  107.         $marcas->setUnpublished(false);
  108.         $marcas->setOrderKey("order");
  109.         $marcas->load();
  110.         return $marcas;
  111.     }
  112.     protected function getCompanies(): DataObject\Company\Listing
  113.     {
  114.         $companies = new DataObject\Company\Listing();
  115.         $companies->setOrderKey(["sede","title"]);
  116.         $companies->setOrder(["desc","asc"]);
  117.         $companies->load();
  118.         return $companies;
  119.     }
  120.     public  function aboutUsAction(Request $request){
  121.         return $this->render('Content/aboutUs.html.twig');
  122.     }
  123.     public function footerAction(Request $request){
  124.         return $this->render('include/footer.html.twig');
  125.     }
  126.     public function pointsOfSaleAction(Request $request){
  127.         //getting objects
  128.         $colaboradores = new DataObject\Colaborador\Listing();
  129.         $colaboradores->setCondition("showinweb = ?"1);
  130.         $colaboradores->addConditionParam("showinmap = ?"1"AND");
  131.         $colaboradores->setOrderKey("name");
  132.         $company DataObject\Company::getById(415);
  133.         return $this->render('Content/pointsOfSale.html.twig',[
  134.             'collaborators' => $colaboradores,
  135.             'company'       => $company
  136.         ]);
  137.     }
  138.     public function indrustryProfessionalsAction(Request $request){
  139.         //getting objects
  140.         $professionals = new DataObject\Colaborador\Listing();
  141.         $professionals->addConditionParam("showinweb = ?"1);
  142.         $professionals->addConditionParam("showinmap = ?"1"AND");
  143.         $professionals->setOrderKey("name");
  144.         $brands $professionals->getClass()->getFieldDefinition("brands");
  145.         $specialitazions $professionals->getClass()->getFieldDefinition("specialization");
  146.         $brands $brands->getOptions();
  147.         $specialitazions $specialitazions->getOptions();
  148.         $company DataObject\Company::getById(415);
  149.         return $this->render('Content/industryProfessionals.html.twig',[
  150.             'professionals' => $professionals,
  151.             'company'       => $company,
  152.             'brands'        => $brands,
  153.             'specializations' => $specialitazions
  154.         ]);
  155.     }
  156.     /**
  157.      * @Route("/ajax_professional", name="ajax_professional")
  158.      */
  159.     public function modalProfessionalsAjaxAction(Request $request){
  160.         $id $request->get('data');
  161.         $lang $request->get('lang');
  162.         //getting objects
  163.         $professional DataObject\Colaborador::getById($id);
  164.         $company DataObject\Company::getById(415);
  165.         return $this->render('Content/dataProfessionalsModal.html.twig',
  166.         [
  167.             'professional' => $professional,
  168.             'company'      => $company,
  169.             'lang'         => $lang
  170.         ]);
  171.     }
  172.     /**
  173.     * @Route("/detailCart", name="detailCart")
  174.     * @Security("is_granted('ROLE_USER')")
  175.     */
  176.     public function detailCartAction(Request $request){
  177.         return $this->render('Cart/main-cart.html.twig');
  178.     }
  179.     public function tarifaAction(
  180.         Request $request,
  181.         HelperService $helperService
  182.     ) {
  183.         $pdfFile "BSN";
  184.         /*
  185.         $orgFolder = PIMCORE_PRIVATE_VAR . "/securePDF/" ;
  186.         if (file_exists($orgFolder . $pdfFile )) {
  187.             $copyFolder = PIMCORE_WEB_ROOT . "/static2/pdfjsviewer/tmpPdf/";
  188.             $tmpFileName = uniqid() . ".pdf";
  189.             copy($orgFolder . $pdfFile , $copyFolder . $tmpFileName);
  190.             $this->view->pdf = $tmpFileName;
  191.         }*/
  192.         $params = [];
  193.         $params["unique"] = $helperService->generateUniqueCode();
  194.         $params["pdf"] =  $pdfFile;
  195.         return $this->render('PDF/viewerframe.html.twig'$params);
  196.     }
  197.     #[Route('/tarifaPDF/{pdf}'name'tarifa-pdf-view')]
  198.     public function tarifaPDFAction(
  199.         Request $request,
  200.         $pdf,
  201.         HelperService $helperService
  202.     ) {
  203.         $pdf $pdf.'.pdf';
  204.         $parameters = array(
  205.             //Same parameters as defalt viewer.
  206.             //Tell to the bundle where is the pdf. (absolute path for outside temporal folder pdf, just the <name>.pdf for inside temporal folder)
  207.             'pdf' => $pdf ,
  208.             //Tell to the bundle that its necessary to delete pdf after render.
  209.             'deletePdfInTmpAfterRenderized' => false,
  210.             //pdf.js viewer options
  211.             'showToolBar' => true,
  212.             'showLeftToolbarButton' => true,
  213.             'showSearchInDocumentButton' => true,
  214.             'showPreviousPageButton' => true,
  215.             'showPreviousPageButton' => true,
  216.             'showFindPageInputText' => true,
  217.             'showNumberOfPagesLabel' => true,
  218.             'showZoomInButton'=> true,
  219.             'showZoomOutButton'=> true,
  220.             'showScaleSelectComboBox'=> true,
  221.             'showPresentationModeButton'=> true,
  222.             'showOpenFileButton'=> false,
  223.             'showPrintButton'=> false,
  224.             'showDownloadButton'=> false,
  225.             'showViewBookmarkButton'=> false,
  226.             'showToolsButton'=> true,
  227.         );
  228.   //      $this->view->unique = $helperService->generateUniqueCode();
  229. //        return $this->render('PDF/custom.html.php', $parameters);
  230.         return  $this->render('PDF/custom.html.twig',$parameters);
  231.     }
  232.     /**
  233.      * Pdf system deletion from tmpDir
  234.      *
  235.      * @param string $PdfTmpPath , relative path to the pdf from webroot dir
  236.      * @Route("/deletePDF")
  237.      *
  238.      * @return Response, Error in pdf deletion. If it's ok, this function must return an empty string.
  239.      */
  240.     public function deletePDF (Request $request){
  241.         try{
  242.             unlink(substr($request->get('PdfTmpPath'), 1));
  243.         } catch (Exception $e){
  244.             return new Response('Can not delete pdf file from temporal directory, '.$e->getMessage().', please configure tmpPdfDirectory and pdf variables');
  245.         }
  246.         return new Response('');
  247.     }
  248.     public function cuantapinturanecesarioresultAction(
  249.         Request $request,
  250.         HelperService $helperService
  251.     ) {
  252.         $this->checkAccess($request);
  253.         $this->setCookieTemplate();
  254.         $this->view->unique $helperService->generateUniqueCode();
  255.     }
  256.     /**
  257.      * marcasAction
  258.      *
  259.      * @param Request $request
  260.      * @param HelperService $helperService
  261.      * @return void
  262.      */
  263.     public function marcasAction(
  264.         Request $request,
  265.         HelperService $helperService
  266.     ) {
  267.         $this->checkAccess($request);
  268.         $this->setCookieTemplate();
  269.         $marcas = new DataObject\ProductMarca\Listing();
  270.         $marcas->setUnpublished(false);
  271.         $marcas->setOrderKey("order");
  272.         $this->view->marcas $marcas;
  273.         $this->view->unique $helperService->generateUniqueCode();
  274.         \Pimcore\Cache::disable();
  275.     }
  276.     /**
  277.      * categoriasAction
  278.      *
  279.      * @param Request $request
  280.      * @param HelperService $helperService
  281.      * @return void
  282.      */
  283.     public function categoriasAction(
  284.         Request $request,
  285.         HelperService $helperService
  286.     ) {
  287.         $this->checkAccess($request);
  288.         $this->setCookieTemplate();
  289.         $categories = new DataObject\ProductCategory\Listing();
  290.         $categories->setUnpublished(false);
  291.         $categories->setOrderKey("order");
  292.         $categories->setCondition('o_path LIKE ?', ['/Categorias de producto/']);
  293.         // $categories->setCondition('(productos IS NOT NULL OR productos <> \'\') AND o_path LIKE ?', ['/Categorias de producto/']);
  294.         $this->view->categories $categories;
  295.         $this->view->unique $helperService->generateUniqueCode();
  296.         \Pimcore\Cache::disable();
  297.     }
  298.     /**
  299.      * @Route("/colaboradoresmap/{lang}")
  300.      */
  301.     public function colaboradoresmapAction(
  302.         Request $request,
  303.         $lang,
  304.         HelperService $helperService,
  305.         Config $config) {
  306.         $this->checkAccess($request);
  307.         $this->setCookieTemplate();
  308.         $apikey $config['services']['google']['browser_api_key'];
  309.         $colaboradores = new DataObject\Colaborador\Listing();
  310.         $colaboradores->setCondition("showinweb = ?"1);
  311.         $colaboradores->addConditionParam("showinmap = ?"1"AND");
  312.         $colaboradores->setOrderKey("name");
  313.         $this->view->unique $helperService->generateUniqueCode();
  314.         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]);
  315.         // $this->view->colaboradores = $colaboradores;
  316.     }
  317.     public function setCookieTemplate() {
  318.         $cookieListener $this->get(\Pimcore\Bundle\CoreBundle\EventListener\Frontend\CookiePolicyNoticeListener::class);
  319.         $cookieListener->loadTemplateFromResource("@App/Resources/views/Misc/cookie-policy-bsn-template.html");
  320.     }
  321.     private function checkAccess(Request $request) {
  322.         if (!(($request->query->get('pimcore_preview') == "true") || ($request->query->get('pimcore_editmode') == "true"))) {
  323.             // $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  324.         }
  325.     }
  326.     /**
  327.     * @Route("/squareMeters", name="squareMeters")
  328.     *
  329.     */
  330.     public function squareMetersAction(Request $request){
  331.         return $this->render('Content/squareMeters.html.twig');
  332.     }
  333.     /**
  334.     * @Route("/calculatePaint", name="calculatePaint")
  335.     *
  336.     */
  337.     public function calculatePaintAction(Request $request){
  338.         return $this->render('Content/calculatePaint.html.twig');
  339.     }
  340.     /**
  341.     * @Route("/paintingSchemes", name="paintingSchemes")
  342.     *
  343.     */
  344.     public function paintingSchemesAction(){
  345.         return $this->render('Content/paintingSchemes.html.twig');
  346.     }
  347.     #[Route('/rates'name'rates-view')]
  348.     public function ratesView(Request $request): Response
  349.     {
  350.         $locale $request->getLocale();
  351.         $params['_locale'] = $locale;
  352.         //get the Excel file with the price changes
  353.         $filePath __DIR__.'/../../public/var/assets/excel_de_tarifas/temp/changes.xlsx';
  354.         $arrayData = [];
  355.         try {
  356.             $spreadsheet IOFactory::load($filePath);
  357.             $sheet $spreadsheet->getActiveSheet();
  358.             foreach ($sheet->getRowIterator() as $row) {
  359.                 $cellIterator $row->getCellIterator();
  360.                 $cellIterator->setIterateOnlyExistingCells(false);
  361.                 $value $sheet->getCell('A' $row->getRowIndex())->getValue();
  362.                 $brands = [];
  363.                 foreach ($sheet->getColumnIterator('B') as $column){
  364.                     $columnIterator =  $column->getCellIterator();
  365.                     $columnIterator->setIterateOnlyExistingCells(false);
  366.                     $brandName $sheet->getCell($column->getColumnIndex().$row->getRowIndex())->getValue();
  367.                     $brands[] = ProductMarca::getByName($brandName)->load();
  368.                 }
  369.                 $date = new DateTime();
  370.                 $date->modify('+' $value ' days');
  371.                 $formattedDateFull strftime('%e %B %Y'$value);
  372.                 $arrayData[] = [
  373.                     'date' => $formattedDateFull,
  374.                     'brands' => $brands
  375.                 ];
  376.             }
  377.         } catch (Exception){
  378.         }
  379.         $params['path'] = '/excel_de_tarifas/ExporterWeb.xlsx';
  380.         $params['changes'] = $arrayData;
  381.         return $this->render('Content/rates.html.twig'$params);
  382.     }
  383.     #[Route('/recent-events'name'recent-events')]
  384.     public function eventsViewAction(): Response
  385.     {
  386.         return $this->render('Content/events.html.twig');
  387.     }
  388.     /**
  389.     * @Route("/calculatePaintResult", name="calculatePaintResult")
  390.     *
  391.     */
  392.     public function calculatePaintResultAction(
  393.         Request $request,
  394.         Factory $ecommerceFactory,
  395.         HelperService $helperService,
  396.         ListHelper $listHelper,
  397.         PaginatorInterface $paginator,
  398.     ){
  399.         $params array_merge($request->query->all(), $request->attributes->all(), $request->request->all());
  400.         $resultado = array();
  401.         if (!empty($params['limit'])) {
  402.             $limit $params['limit'];
  403.         }
  404.         $resultado["tipo-embarcacion"] = $params["radio_1"];
  405.         if (preg_match("/^mo/i"$params["radio_1"])) {
  406.             $resultado["tipo-embarcacion"] = $resultado["tipo-embarcacion"] . $params["radio_2"];
  407.         }
  408.         $resultado["base-embarcacion"] = $params["radio_3"];
  409.         $resultado["dimension-eslora"] = $params["value1"];
  410.         $resultado["dimension-calado"] = $params["value2"];
  411.         $resultado["dimension-manga"] = $params["value3"];
  412.         $resultado["resultado-litre"] = round(floatval($params["value_1"]), 2);
  413.         if (!key_exists("calculvariant"$params)) {
  414.             if (empty($params["calculvariant"])) {
  415.                 $params["calculvariant"] = $params["value_hidden"];
  416.             }
  417.         }
  418.         if ($request->get('filterdefinition') instanceof \Pimcore\Model\DataObject\FilterDefinition) {
  419.             $filterDefinition $request->get('filterdefinition');
  420.         }
  421.         if (empty($filterDefinition)) {
  422.             $filterDefinition \Pimcore\Config::getWebsiteConfig()->get('resultcuantapinturaFilterdefinition');
  423.         }
  424.         if (empty($limit)) {
  425.             $limit $filterDefinition->getPageLimit();
  426.         }
  427.         //setting assortment tenant
  428.         $environment $ecommerceFactory->getEnvironment();
  429.         $environment->setCurrentAssortmentTenant("default");
  430.         // create product list
  431.         $indexService $ecommerceFactory->getIndexService();
  432.         $products $indexService->getProductListForCurrentTenant();
  433.         $products->setVariantMode(ProductListInterface::VARIANT_MODE_HIDE);
  434.         $products->addCondition("productstatus NOT IN ('new','decatelogized','for_delete') OR productstatus IS NULL"'productstatus');
  435.         $products->addCondition("calculvariant LIKE '%#" $params["value_hidden"] . "#%'"'calculvariant');
  436.         $params["products"] = $products;
  437.         // create and init filter service
  438.         $filterService $ecommerceFactory->getFilterService();
  439.         $listHelper->setupProductList($filterDefinition$products$params$filterServicetrue);
  440.         $params["filterService"] = $filterService;
  441.         $params["filterDefinition"] = $filterDefinition;
  442.         $currentPage $request->get('page'1);
  443.         $productTotal count($products);
  444.         $maxPage ceil($productTotal $limit);
  445.         if($currentPage $maxPage){
  446.             $currentPage $maxPage;
  447.         }
  448.         /** @var SlidingPagination $paginator */
  449.         $paginator $paginator->paginate(
  450.             $products,
  451.             $currentPage,
  452.             $limit
  453.         );
  454.         $params["paginator"] = $paginator;
  455.         $params['paginationVariables'] = $paginator->getPaginationData();
  456.         $params['perPage'] = $limit;
  457.         $params['resultado'] = $resultado;
  458.         return $this->render('Content/calculatePaintResult.html.twig',$params);
  459.     }
  460.     public function privacyPolicyAction(){
  461.         return $this->render('Content/policy/privacyPolicy.html.twig');
  462.     }
  463.     public function termsAndConditionsAction(){
  464.         return $this->render('Content/policy/termsAndConditions.html.twig');
  465.     }
  466.     public function dataProtectionAction(){
  467.         return $this->render('Content/policy/dataProtection.html.twig');
  468.     }
  469.     public function cookiePolicyAction(){
  470.         return $this->render('Content/policy/cookiePolicy.html.twig');
  471.     }
  472. }