src/Controller/CatalogController.php line 1316

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Agreements;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Service\TrafficTracker;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use App\Entity\Partner;
  11. use App\Entity\Productbywholesaler;
  12. use App\Entity\Vendors;
  13. use App\Entity\Customer;
  14. use App\Entity\Product;
  15. use App\Entity\Category;
  16. use App\Entity\Cta;
  17. use App\Entity\Resources;
  18. use App\Entity\Productline;
  19. use App\Entity\Wholesaler;
  20. use App\Entity\Productopinions;
  21. use App\Entity\User;
  22. use App\Service\DataProductFinder;
  23. use App\Service\HeaderData;
  24. use App\Form\Catalog\CatalogProductSearch;
  25. use App\Service\Translation;
  26. use Doctrine\ORM\Tools\Pagination\Paginator;
  27. use App\Form\Catalog\SearchPromotion;
  28. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  29. use App\Service\SanitizeService;
  30. use App\Entity\Bundle;
  31. use Doctrine\ORM\Query\Expr\Join;
  32. use App\Service\PriceCalculatorService;
  33. use App\Service\ConnectifService;
  34. use App\Service\Currency\OperationalCurrencyProvider;
  35. use App\Service\JsonSearchService;
  36. use App\Entity\WarehouseProduct;
  37. use App\Service\ExtraFieldsService;
  38. class CatalogController extends AbstractController
  39. {
  40.     private $connectifService;
  41.     private $operationalCurrencyProvider;
  42.     public function __construct(ConnectifService $connectifServiceOperationalCurrencyProvider $operationalCurrencyProvider)
  43.     {
  44.         $this->connectifService $connectifService;
  45.         $this->operationalCurrencyProvider $operationalCurrencyProvider;
  46.     }
  47.     /**
  48.      * @Route("/catalog/default/goto", name="catalog_goto")
  49.      */
  50.     public function index(TrafficTracker $trafficTracker)
  51.     {
  52.         $trafficTracker->registerTraffic();
  53.         $user $this->getUser();
  54.         if ($user->getPartner()) {
  55.             $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  56.             $partner $partnerRepository->MyPartnerQuery($user)->setMaxResults(1)->getQuery()->getSingleResult();
  57.             return $this->redirectToRoute('catalog_index', ['partnerId' => $partner->getId()]);
  58.         }
  59.         if ($user->getCustomer()) {
  60.             $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  61.             $customer $customerRepository->MyCustomerQuery($user)->setMaxResults(1)->getQuery()->getSingleResult();
  62.             return $this->redirectToRoute('catalog_index', ['partnerId' => $customer->getPartner()->getId()]);
  63.         }
  64.         return $this->redirectToRoute('catalog_customizemarket');
  65.     }
  66.     /**
  67.      * @Route("/catalog/default/index/{partnerId}", name="catalog_index", requirements={"partnerId"="\d+"})
  68.      */
  69.     public function catalog(Request $requestHeaderData $buildHeaderDataTranslation $translationTrafficTracker $trafficTrackerPriceCalculatorService $priceCalculatorOperationalCurrencyProvider $operationalCurrencyProvider$partnerId)
  70.     {
  71.         $trafficTracker->registerTraffic();
  72.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  73.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  74.         $data = array();
  75.         $locale $request->getLocale();
  76.         $user $this->getUser();
  77.         //TODO wholesaler can't enter in index - goes to customize. to delete?
  78.         if (!is_null($user->getWholesaler())) {
  79.             $idwholesaler $user->getWholesaler()->getId();
  80.         } elseif (!is_null($user->getPartner())) {
  81.             $partner $partnerRepository->MyPartnerQuery($user)
  82.                 ->andWhere('p.id = :partnerId ')
  83.                 ->setParameter('partnerId'$partnerId)
  84.                 ->setMaxResults(1)->getQuery()->getSingleResult();
  85.             $idwholesaler $partner->getWholesaler()->getId();
  86.         }
  87.         //TODO customer can enter in index???
  88.         elseif (!is_null($user->getCustomer())) {
  89.             $customer $customerRepository->MyCustomerQuery($user)
  90.                 ->andWhere('c.id = :customerId ')
  91.                 ->setParameter('customerId'$user->getCustomer()->getId())
  92.                 ->setMaxResults(1)->getQuery()->getSingleResult();
  93.             $partner $customer->getPartner();
  94.             $idwholesaler $partner->getwholesaler()->getId();
  95.         }
  96.         $carouselImages $this->getDoctrine()->getRepository(\App\Entity\Catalogcarouselimages::class)->findBy(['wholesaler' => $idwholesaler]);
  97.         return $this->render('/catalog/default/index.html.twig', [
  98.             'partner' => $partner,
  99.             'idWholesaler' => $partner->getWholesaler()->getId(),
  100.             'headerData' => $buildHeaderData->buildHeaderData($user),
  101.             'coverProducts' => $this->catalogCoverProducts(),
  102.             'carousel' => $carouselImages,
  103.             'locale' => $locale,
  104.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  105.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  106.             'server_name' => $_ENV["LOCAL_SERVER_NAME"],
  107.             'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency(),
  108.             'priceCalculator' => $priceCalculator,
  109.             'cnClientInfo' => ($this->connectifService->cnClientInfo($user)),
  110.             'cnCart' => $this->connectifService->cnCart($user),
  111.             'operationalCurrency' => $operationalCurrencyProvider->provide($partner),
  112.         ]);
  113.     }
  114.     /**
  115.      * @Route("/catalog/default/customizemarket", name="catalog_customizemarket")
  116.      */
  117.     public function customizemarket(HeaderData $buildHeaderDataTranslation $translationTrafficTracker $trafficTrackerPriceCalculatorService $priceCalculatorRequest $request)
  118.     {
  119.         $trafficTracker->registerTraffic();
  120.         $user $this->getUser();
  121.         $idwholesaler $user->getWholesaler()->getId();
  122.         $carouselImages $this->getDoctrine()->getRepository(\App\Entity\Catalogcarouselimages::class)->findBy(['wholesaler' => $idwholesaler]);
  123.         return $this->render('/catalog/default/index.html.twig', [
  124.             'data' => array(),
  125.             'headerData' => $buildHeaderData->buildHeaderData($user),
  126.             'coverProducts' => $this->catalogCoverProducts(),
  127.             'carousel' => $carouselImages,
  128.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  129.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  130.             'partner' => $partnerRepository $this->getDoctrine()->getRepository(Partner::class)->find(7),
  131.             'locale' => $request->getLocale(),
  132.             'idWholesaler' => $idwholesaler,
  133.             'server_name' => $_ENV["LOCAL_SERVER_NAME"],
  134.             'useSymbol' => $user->getWholesaler()->getUseSymbolCurrency(),
  135.             'priceCalculator' => $priceCalculator,
  136.             'operationalCurrency' => $this->operationalCurrencyProvider->provide($user->getWholesaler())
  137.         ]);
  138.     }
  139.     /**
  140.      * @Route("/catalog/default/vendor/{id}/{page}", name="catalog_vendor", requirements={"id"="\d+"}, defaults={"page"=1})
  141.      */
  142.     public function vendor($id$pageTranslatorInterface $translatorTranslation $translationHeaderData $buildHeaderDataTrafficTracker $trafficTrackerPriceCalculatorService $priceCalculatorRequest $requestOperationalCurrencyProvider $operationalCurrencyProvider)
  143.     {
  144.         $trafficTracker->registerTraffic();
  145.         $user $this->getUser();
  146.         $entityManager $this->getDoctrine()->getManager();
  147.         $vendorRepository $this->getDoctrine()->getRepository(Vendors::class);
  148.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  149.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  150.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  151.         $userRepository $this->getDoctrine()->getRepository(User::class);
  152.         $operationalCurrency $operationalCurrencyProvider->provide($userRepository->getCompany($user));
  153.         $vendor $vendorRepository->find($id);
  154.         $customer null;
  155.         $hasFilter false;
  156.         $locale $request->getLocale();
  157.         if ($user->getPartner()) {
  158.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  159.         } elseif ($user->getWholesaler()) {
  160.             $partner $partnerRepository->MyPartnerQuery($user)
  161.                 ->andWhere('p.wholesaler = :wholesaler ')
  162.                 ->setParameter('wholesaler'$user->getWholesaler()->getId())
  163.                 ->setMaxResults(1)
  164.                 ->getQuery()
  165.                 ->getOneOrNullResult();
  166.         } else {
  167.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getSingleResult();
  168.             $partner $customer->getPartner();
  169.         }
  170.         $wholesaler $partner->getWholesaler();
  171.         //Mirar si el mayorista tiene agreement para ese fabricante?
  172.         $hasAgreement $userRepository->checkWholesalerAgreementByVendor($user$vendor);
  173.         if (!$hasAgreement) {
  174.             if ($user->getWholesaler()) {
  175.                 return $this->redirectToRoute('catalog_customizemarket');
  176.             } else {
  177.                 return $this->redirectToRoute('catalog_goto');
  178.             }
  179.         }
  180.         $productsQuery $productRepository->MyProductQuery($user)
  181.             ->andWhere('p.cansellalone = 1 and p.isflavour = 0 and p.cansell = 1')
  182.             ->andWhere('pl.vendor = :vendorId')
  183.             ->leftJoin('p.productLine''pl')
  184.             ->leftJoin('pl.categories''cat')
  185.             ->setParameter('vendorId'$id);
  186.         $programms $entityManager->createQuery("SELECT vp FROM \App\Entity\Vendorprogramms vp "
  187.             "JOIN App\Entity\Product p "
  188.             "JOIN App\Entity\Productbywholesaler pbw "
  189.             'where vp.id = p.vendorProgramm and pbw.product=p.id and pbw.wholesaler = :idWholesaler and pbw.unregistrationdate is null and vp.vendor = :vendorId and p.cansell = 1')
  190.             ->setParameter('idWholesaler'$wholesaler->getId())
  191.             ->setParameter('vendorId'$id)
  192.             ->getResult();
  193.         $productLines $entityManager->createQuery("SELECT pl FROM \App\Entity\Productline pl "
  194.             "JOIN App\Entity\Product p "
  195.             "JOIN App\Entity\Productbywholesaler pbw "
  196.             'where pl.id = p.productLine and pbw.product=p.id and pbw.wholesaler = :idWholesaler and pl.vendor = :vendorId and pl.unregistrationdate is null and pbw.unregistrationdate is null and p.cansell = 1')
  197.             ->setParameter('idWholesaler'$wholesaler->getId())
  198.             ->setParameter('vendorId'$id)
  199.             ->getResult();
  200.         $categories $entityManager->createQuery("SELECT c FROM \App\Entity\Category c "
  201.             "JOIN App\Entity\Product p "
  202.             "JOIN App\Entity\Productbywholesaler pbw "
  203.             "JOIN c.productlines pl "
  204.             'where pl.id = p.productLine and pbw.product=p.id and pbw.wholesaler = :idWholesaler and pl.vendor = :vendorId and pl.unregistrationdate is null and pbw.unregistrationdate is null and p.cansell = 1')
  205.             ->setParameter('idWholesaler'$wholesaler->getId())
  206.             ->setParameter('vendorId'$id)
  207.             ->getResult();
  208.         $form $this->createForm(CatalogProductSearch::class, null, array(
  209.             'translator' => $translator,
  210.             'translation' => $translation,
  211.             'text' => $request->get('text'),
  212.             'productline' => $request->get('productline'),
  213.             'locale' => $locale,
  214.             'productlines' => $productLines,
  215.             'programm' => $programms,
  216.             'categories' => $categories,
  217.             'vendors' => array(),
  218.         ));
  219.         $form->handleRequest($request);
  220.         if ($form->get('text')->getData() || $form->get('productline')->getData() || $form->get('programm')->getData()) {
  221.             $hasFilter true;
  222.             //save query in bd
  223.             $catalogQuery = new \App\Entity\Catalogquerys();
  224.             $catalogQuery->setUser($user);
  225.         }
  226.         $filters = [
  227.             'text' => null,
  228.             'programm' => null,
  229.             'productline' => null,
  230.             'category' => null
  231.         ];
  232.         //Custom filters
  233.         if ($form->get('text')->getData()) {
  234.             $productsQuery $productsQuery
  235.                 ->andWhere("p.name like :text or p.sku like :text ")
  236.                 ->setParameter('text''%' $form->get('text')->getData() . '%');
  237.             $catalogQuery->setText($form->get('text')->getData());
  238.             $filters['text'] = $form->get('text')->getData();
  239.         }
  240.         if ($form->get('programm')->getData()) {
  241.             $productsQuery $productsQuery
  242.                 ->andWhere("p.vendorProgramm = :programm ")
  243.                 ->setParameter('programm'$form->get('programm')->getData());
  244.             $catalogQuery->setIdProgramm($form->get('programm')->getData());
  245.             $filters['programm'] = $form->get('programm')->getData();
  246.         }
  247.         if ($form->get('productline')->getData()) {
  248.             $productsQuery $productsQuery
  249.                 ->andWhere("p.productLine = :pl ")
  250.                 ->setParameter('pl'$form->get('productline')->getData());
  251.             $catalogQuery->setIdProductline($form->get('productline')->getData());
  252.             $filters['productline'] = $form->get('productline')->getData();
  253.         }
  254.         if ($form->get('category')->getData()) {
  255.             $productsQuery $productsQuery
  256.                 ->andWhere("cat.id = :cat ")
  257.                 ->setParameter('cat'$form->get('category')->getData());
  258.             $filters['category'] = $form->get('category')->getData();
  259.         }
  260.         $pbwIds "";
  261.         $productsWithoutFilterCtas $this->catalogSingleVendorProducts($vendor);
  262.         $featuredCtas $this->filterCatalogSingleVendorProducts($productsWithoutFilterCtas$filters);
  263.         $lengthFeaturedProducts sizeof($featuredCtas);
  264.         $limit 18;
  265.         if ($page == 1) {
  266.             $limit $limit $lengthFeaturedProducts;
  267.             $featuredProducts = array();
  268.             foreach ($featuredCtas as $cta) {
  269.                 array_push($featuredProducts$cta->getProductbywholesaler());
  270.             }
  271.             $featuredCtasArray = array();
  272.             foreach ($featuredCtas as $cta) {
  273.                 $featuredCtasArray[$cta->getProductbywholesaler()->getId()] = $cta;
  274.             }
  275.         }
  276.         $offset 18;
  277.         if ($lengthFeaturedProducts 0//if get data from campaign
  278.         {
  279.             $pbwIds = array();
  280.             foreach ($featuredCtas as $cta) {
  281.                 array_push($pbwIds$cta->getProductbywholesaler()->getId());
  282.             }
  283.             $offset 18 $lengthFeaturedProducts;
  284.         }
  285.         $productbywholesalerRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  286.         $productsbywholesaler $productbywholesalerRepository->MyProductbywholesalerQuery($user)
  287.             ->leftJoin("pbw.product""p");
  288.         if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  289.             $productsbywholesaler $productsbywholesaler
  290.                 ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  291.                 ->andWhere('pbc.Product = pbw.product');
  292.         }
  293.         $productsbywholesaler $productsbywholesaler
  294.             ->andWhere('pbw.product IN (:products)')
  295.             ->andWhere('pbw.id NOT IN (:featuredProducts)')
  296.             ->setParameter('products'$productsQuery->getQuery()->execute())
  297.             ->setParameter('featuredProducts'$pbwIds)
  298.             ->orderBy('p.name''asc');
  299.         //if filter, save result
  300.         if ($hasFilter) {
  301.             $result '';
  302.             foreach ($productsbywholesaler->orderBy('p.name''asc')->getQuery()->execute() as $product) {
  303.                 $result $result $product->getId() . ',';
  304.             }
  305.             $catalogQuery->setResult($result);
  306.             $entityManager->persist($catalogQuery);
  307.             $entityManager->flush();
  308.         }
  309.         $productsbywholesaler->setFirstResult($offset * ($page 1))->setMaxResults($limit);
  310.         $paginator = new Paginator($productsbywholesaler$fetchJoinCollection true);
  311.         $maxPages ceil($paginator->count() / $limit);
  312.         $thisPage $page;
  313.         return $this->render('/catalog/default/vendor.html.twig', [
  314.             'vendor' => $vendor,
  315.             'products' => $paginator->getIterator(),
  316.             'partner' => $partner,
  317.             'headerData' => $buildHeaderData->buildHeaderData($user),
  318.             'form' => $form->createView(),
  319.             'customer' => $customer,
  320.             'locale' => $locale,
  321.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  322.             'productRepository' => $this->getDoctrine()->getRepository(Product::class),
  323.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  324.             'maxPages' => $maxPages,
  325.             'thisPage' => $thisPage,
  326.             'count' => count($paginator),
  327.             'programms' => count($programms),
  328.             'categories' => count($categories),
  329.             'vendorRepo' => $vendorRepository,
  330.             'vendors' => 0,
  331.             'featuredProducts' => $page == $featuredProducts null,
  332.             'featuredCtasArray' => $page == $featuredCtasArray null,
  333.             'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency(),
  334.             'priceCalculator' => $priceCalculator,
  335.             'operationalCurrency' => $operationalCurrency
  336.         ]);
  337.     }
  338.     /**
  339.      * @Route("/catalog/default/vendors", name="catalog_vendors")
  340.      */
  341.     public function vendors(TranslatorInterface $translatorTranslation $translationHeaderData $buildHeaderDataTrafficTracker $trafficTrackerRequest $request)
  342.     {
  343.         $trafficTracker->registerTraffic();
  344.         $user $this->getUser();
  345.         $locale $request->getLocale();
  346.         $entityManager $this->getDoctrine()->getManager();
  347.         $vendorRepository $this->getDoctrine()->getRepository(Vendors::class);
  348.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  349.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  350.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  351.         $userRepository $this->getDoctrine()->getRepository(User::class);
  352.         if ($user->getPartner()) {
  353.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  354.         } elseif ($user->getWholesaler()) {
  355.             $partner $partnerRepository->MyPartnerQuery($user)
  356.                 ->andWhere('p.wholesaler = :wholesaler ')
  357.                 ->setParameter('wholesaler'$user->getWholesaler()->getId())
  358.                 ->setMaxResults(1)
  359.                 ->getQuery()
  360.                 ->getOneOrNullResult();
  361.         } else {
  362.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getSingleResult();
  363.             $partner $customer->getPartner();
  364.         }
  365.         $wholesaler $partner->getWholesaler();
  366.         $featuredVendorArray $this->catalogFeaturedVendors();
  367.         $lengthFeaturedVendorArray sizeof($featuredVendorArray);
  368.         $limit 18;
  369.         $limit $limit $lengthFeaturedVendorArray;
  370.         $offset 18;
  371.         $vendorIds "";
  372.         if ($lengthFeaturedVendorArray 0) {
  373.             $offset 18 $lengthFeaturedVendorArray;
  374.             $vendorIds = array();
  375.             foreach ($featuredVendorArray as $cta) {
  376.                 array_push($vendorIds$cta->getVendor()->getId());
  377.             }
  378.         }
  379.         $vendors $entityManager->createQueryBuilder()
  380.             ->select('DISTINCT v')
  381.             ->from('App\Entity\Vendors''v')
  382.             ->join('App\Entity\Productline''pl''WITH''pl.vendor = v.id')
  383.             ->join('App\Entity\Product''p''WITH''p.productLine = pl.id')
  384.             ->join('App\Entity\Productbywholesaler''pbw''WITH''pbw.product = p.id')
  385.             ->where('pbw.wholesaler = :idWholesaler');
  386.         if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  387.             $vendors $vendors
  388.                 ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  389.                 ->andWhere('pbc.Product = pbw.product');
  390.         }
  391.         $vendors $vendors
  392.             ->andWhere('pbw.unregistrationdate IS NULL')
  393.             ->andWhere('v.id NOT IN (:vendors)')
  394.             ->orderBy('v.name''ASC')
  395.             ->setParameter('idWholesaler'$wholesaler->getId())
  396.             ->setParameter('vendors'$vendorIds);
  397.         $vendors->setMaxResults($limit);
  398.         $paginator = new Paginator($vendors$fetchJoinCollection false);
  399.         $maxPages ceil($paginator->count() / $limit);
  400.         return $this->render('/catalog/default/vendors.html.twig', [
  401.             'vendors' => $paginator,
  402.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  403.             'headerData' => $buildHeaderData->buildHeaderData($user),
  404.             'remaining' => $paginator->count() - $limit,
  405.             'nextOffset' => $offset,
  406.             'featuredVendorArray' => $featuredVendorArray,
  407.         ]);
  408.     }
  409.     /**
  410.      * @Route("/catalog/default/category/{id}/{page}", name="catalog_category", requirements={"id"="\d+"}, defaults={"page"=1})
  411.      */
  412.     public function category($id$pageTranslatorInterface $translatorTranslation $translationHeaderData $buildHeaderDataTrafficTracker $trafficTrackerPriceCalculatorService $priceCalculatorRequest $request)
  413.     {        
  414.         $trafficTracker->registerTraffic();
  415.         $entityManager $this->getDoctrine()->getManager();
  416.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  417.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  418.         $userRespository $this->getDoctrine()->getRepository(User::class);
  419.         $wholesalerRepository $this->getDoctrine()->getRepository(Wholesaler::class);
  420.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  421.         $categoryRepository $this->getDoctrine()->getRepository(Category::class);
  422.         $productlineRepository $this->getDoctrine()->getRepository(Productline::class);
  423.         $locale $request->getLocale();
  424.         $user $this->getUser();
  425.         $category $categoryRepository->find($id);
  426.         $customer null;
  427.         $hasFilter false;
  428.         $target $userRespository->getCompany($this->getUser());
  429.         if ($user->getPartner()) {
  430.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  431.             $wholesaler $partner->getWholesaler();
  432.             $partnerId $partner->getId();
  433.         } elseif ($user->getCustomer()) {
  434.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getSingleResult();
  435.             $partner $customer->getPartner();
  436.             $wholesaler $partner->getWholesaler();
  437.             $partnerId $partner->getId();
  438.         } else {
  439.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->getQuery()->getSingleResult();
  440.             $partnerId '';
  441.         }
  442.         $productsQuery $productRepository->MyProductQuery($user)
  443.             ->andWhere('p.cansellalone = 1 and p.isflavour = 0 and c.id = :catId and p.cansell = 1')
  444.             ->leftJoin('p.productLine''pl')
  445.             ->leftJoin('pl.categories''c')
  446.             ->leftJoin('pl.vendor''v')
  447.             ->setParameter('catId'$id);
  448.         $productLines $entityManager->createQuery("SELECT pl FROM \App\Entity\Productline pl "
  449.             "JOIN App\Entity\Product p "
  450.             "JOIN App\Entity\Productbywholesaler pbw "
  451.             "JOIN pl.categories cat "
  452.             'where pl.id = p.productLine and pbw.product=p.id and pbw.wholesaler = :idWholesaler and cat.id = :catId and pl.unregistrationdate is null and pbw.unregistrationdate is null')
  453.             ->setParameter('idWholesaler'$wholesaler->getId())
  454.             ->setParameter('catId'$id)
  455.             ->getResult();
  456.         $vendors $entityManager->createQuery("SELECT v FROM \App\Entity\Vendors v "
  457.             "JOIN App\Entity\Productline pl "
  458.             "JOIN App\Entity\Product p "
  459.             "JOIN App\Entity\Productbywholesaler pbw "
  460.             "JOIN pl.categories cat "
  461.             'where pl.vendor = v.id and pl.id = p.productLine and pbw.product=p.id and pbw.wholesaler = :idWholesaler and cat.id = :catId and pl.unregistrationdate is null and pbw.unregistrationdate is null')
  462.             ->setParameter('idWholesaler'$wholesaler->getId())
  463.             ->setParameter('catId'$id)
  464.             ->getResult();
  465.         $form $this->createForm(CatalogProductSearch::class, null, array(
  466.             'translator' => $translator,
  467.             'translation' => $translation,
  468.             'text' => $request->get('text'),
  469.             'productline' => $request->get('productline'),
  470.             'locale' => $locale,
  471.             'productlines' => $productLines,
  472.             'programm' => array(),
  473.             'categories' => array(),
  474.             'vendors' => $vendors,
  475.         ));
  476.         $form->handleRequest($request);
  477.         if ($form->get('text')->getData() || $form->get('productline')->getData()) {
  478.             $hasFilter true;
  479.             //save query in bd
  480.             $catalogQuery = new \App\Entity\Catalogquerys();
  481.             $catalogQuery->setUser($user);
  482.         }
  483.         //Custom filters
  484.         if ($form->get('text')->getData()) {
  485.             $productsQuery $productsQuery
  486.                 ->andWhere("p.name like :text or p.sku like :text ")
  487.                 ->setParameter('text''%' $form->get('text')->getData() . '%');
  488.         }
  489.         if ($form->get('productline')->getData()) {
  490.             $productsQuery $productsQuery
  491.                 ->andWhere("p.productLine = :pl ")
  492.                 ->setParameter('pl'$form->get('productline')->getData());
  493.         }
  494.         if ($form->get('vendor')->getData()) {
  495.             $productsQuery $productsQuery
  496.                 ->andWhere("v.id = :vId ")
  497.                 ->setParameter('vId'$form->get('vendor')->getData());
  498.         }
  499.         $productbywholesalerRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  500.         $productsbywholesaler $productbywholesalerRepository->MyProductbywholesalerQuery($user)
  501.             ->leftJoin("pbw.product""p");
  502.         if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  503.             $productsbywholesaler $productsbywholesaler
  504.                 ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  505.                 ->andWhere('pbc.Product = pbw.product');
  506.         }
  507.         $productsbywholesaler $productsbywholesaler
  508.             ->andWhere('pbw.product IN (:products)')
  509.             ->setParameter('products'$productsQuery->getQuery()->execute())
  510.             ->orderBy('p.name''asc');
  511.         if ($hasFilter) {
  512.             $result '';
  513.             foreach ($productsbywholesaler->orderBy('p.name''asc')->getQuery()->execute() as $product) {
  514.                 $result $result $product->getId() . ',';
  515.             }
  516.             $catalogQuery->setResult($result);
  517.             $entityManager->persist($catalogQuery);
  518.             $entityManager->flush();
  519.         }
  520.         $limit 18;
  521.         $productsbywholesaler->setFirstResult($limit * ($page 1))->setMaxResults($limit);
  522.         $paginator = new Paginator($productsbywholesaler$fetchJoinCollection true);
  523.         $maxPages ceil($paginator->count() / $limit);
  524.         $thisPage $page;
  525.         return $this->render('/catalog/default/category.html.twig', [
  526.             'category' => $category,
  527.             'products' => $paginator->getIterator(),
  528.             'partnerId' => $partnerId,
  529.             'partner' => null,
  530.             'headerData' => $buildHeaderData->buildHeaderData($user),
  531.             'form' => $form->createView(),
  532.             'customer' => $customer,
  533.             'locale' => $locale,
  534.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  535.             'productRepository' => $this->getDoctrine()->getRepository(Product::class),
  536.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  537.             'maxPages' => $maxPages,
  538.             'thisPage' => $thisPage,
  539.             'count' => count($paginator),
  540.             'programms' => 0,
  541.             'categories' => 0,
  542.             'vendors' => count($vendors),
  543.             'category_name' => $translation->getTranslationBy($category$locale'name'),
  544.             'useSymbol' => $wholesaler->getUseSymbolCurrency(),
  545.             'priceCalculator' => $priceCalculator,
  546.             'operationalCurrency' => $this->operationalCurrencyProvider->provide($target),
  547.             'cnClientInfo' => ($this->connectifService->cnClientInfo($user)),
  548.         ]);
  549.     }
  550.     /**
  551.      * @Route("/catalog/default/view/{id}", name="catalog_view", requirements={"id"="\d+"})
  552.      */
  553.     public function view($idTrafficTracker $trafficTrackerTranslatorInterface $translatorTranslation $translationDataProductFinder $dataProductFinderHeaderData $buildHeaderDataPriceCalculatorService $priceCalculatorJsonSearchService $jsonSearchServiceRequest $requestExtraFieldsService $extraFieldsService)
  554.     {
  555.         $trafficTracker->registerTraffic();
  556.         $entityManager $this->getDoctrine()->getManager();
  557.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  558.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  559.         $wholesalerRepository $this->getDoctrine()->getRepository(Wholesaler::class);
  560.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  561.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  562.         $resourceRepository $this->getDoctrine()->getRepository(Resources::class);
  563.         $userRepository $this->getDoctrine()->getRepository(User::class);
  564.         $licensetypeRepository $this->getDoctrine()->getRepository(\App\Entity\Licensetype::class);
  565.         $user $this->getUser();
  566.         $locale $request->getLocale();
  567.         $commercialEmail '';
  568.         $markup_value 0;
  569.         $discount 0;
  570.         $isVendor false;
  571.         $pbw $pbwRepository->MyProductbywholesalerQuery($user)
  572.             ->andWhere('pbw.id = :id')->setParameter('id'$id);
  573.         if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  574.             $pbw $pbw
  575.                 ->leftJoin("pbw.product""p")
  576.                 ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  577.                 ->andWhere('pbc.Product = pbw.product');
  578.         }
  579.         $pbw $pbw
  580.             ->setMaxResults(1)
  581.             ->getQuery()
  582.             ->getOneOrNullResult();
  583.         $partner null;
  584.         if ($user->getPartner()) {
  585.             if (!$pbw || $pbw->getProduct()->getProducttype() == null || $pbw->getProduct()->getCanSellAlone() == 0) {
  586.                 return $this->redirect($this->generateUrl('catalog_goto'));
  587.             }
  588.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  589.             $commercialUser $this->getDoctrine()->getRepository(\App\Entity\User::class)->find($partner->getIdcommercialagent());
  590.             $commercialEmail $commercialUser->getEmail();
  591.             $isPartner true;
  592.             $isWholesaler false;
  593.             $wholesaler $user->getPartner()->getWholesaler();
  594.             $target $partner;
  595.             if (!$pbw) {
  596.                 return $this->redirect($this->generateUrl('catalog_goto'));
  597.             }
  598.         } elseif ($user->getWholesaler()) {
  599.             if (!$pbw || $pbw->getProduct()->getProducttype() == null || $pbw->getProduct()->getCanSellAlone() == 0) {
  600.                 return $this->redirect($this->generateUrl('catalog_customizemarket'));
  601.             }
  602.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->getQuery()->getSingleResult();
  603.             
  604.             //TODO hotfix por un calculo necesiario para el product DataFinder - eliminar el precio de allí
  605.             $partner $entityManager->createQuery('SELECT p FROM App\Entity\Partner p '
  606.             'where p.wholesaler = :wholesaler ')
  607.             ->setParameters(array('wholesaler' => $wholesaler->getId()))
  608.             ->setMaxResults(1)
  609.             ->getOneOrNullResult();
  610.             $isPartner false;
  611.             $isWholesaler true;
  612.             $wholesaler $user->getWholesaler();
  613.             $target $wholesaler;
  614.         } elseif ($user->getVendor()) {
  615.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->setMaxResults(1)->getQuery()->getSingleResult();
  616.             $partner $entityManager->createQuery('SELECT p FROM App\Entity\Partner p '
  617.                 'where p.wholesaler = :wholesaler ')
  618.                 ->setParameters(array('wholesaler' => $wholesaler->getId()))
  619.                 ->setMaxResults(1)
  620.                 ->getOneOrNullResult();
  621.             $isPartner false;
  622.             $isVendor true;
  623.             $isWholesaler false;
  624.             $target $wholesaler;
  625.         } else {
  626.             if (!$pbw || $pbw->getProduct()->getCanSellAlone() == 0) {
  627.                 return $this->redirect($this->generateUrl('catalog_goto'));
  628.             }
  629.             $customer $customerRepository->MyCustomerQuery($user)
  630.                 ->andWhere('c.id = :customerId ')
  631.                 ->setParameter('customerId'$user->getCustomer()->getId())
  632.                 ->getQuery()->getSingleResult();
  633.             $wholesaler $user->getCustomer()->getPartner()->getWholesaler();
  634.             $partner $customer->getPartner();
  635.             $commercialUser $this->getDoctrine()->getRepository(\App\Entity\User::class)->find($customer->getIdcommercialagent());
  636.             $commercialEmail $commercialUser->getEmail();
  637.             $isPartner false;
  638.             $isWholesaler false;
  639.             $target $customer;
  640.         }
  641.         $promotion null;
  642.         if ($pbwRepository->getProductPromotion($pbw1)['pp']) {
  643.             $promotion $pbwRepository->getProductPromotion($pbw1)['pp']->getPromotion();
  644.         }
  645.         $customers $customerRepository->MyCustomerQuery($user)
  646.             ->andWhere('c.unregistrationdate is NULL ')
  647.             ->andWhere('c.is_self_consumption is NULL ')
  648.             ->orderBy('c.company''DESC')
  649.             ->getQuery()
  650.             ->getResult();
  651.         if ($user->getPartner()) {
  652.             $selfConsumptionCustomer $partnerRepository->getSelfConsumptionCustomer($partner);
  653.             if ($selfConsumptionCustomer) {
  654.                 array_unshift($customers$selfConsumptionCustomer);
  655.             }
  656.         }
  657.         // TO-DO : revisar si se tiene que borrar.
  658.         $licenseTypeIds=$jsonSearchService->searchKeyInArray($productRepository->getParentSkuIds($pbw->getProduct())->getParameters(), 'licenseType');
  659.         $licenseTypes=[];
  660.         if($licenseTypeIds){
  661.             foreach($licenseTypeIds[0] as $value){
  662.                 $lt $licensetypeRepository->find((int)$value);
  663.                 $licenseTypes[$lt->getId()] = $translation->getTranslationBy($lt$locale'name');   
  664.             }
  665.         }
  666.         $parametersTranslated $extraFieldsService->translateExtraFields(
  667.             $productRepository->getParentSkuIds($pbw->getProduct())->getParameters() ?? []
  668.         );
  669.         $data_to_view = array(
  670.             'headerData' => $buildHeaderData->buildHeaderData($user),
  671.             'recomended' => $this->similarProducts($pbw->getId()),
  672.             'resources' => $this->relatedResources($pbw->getId()),
  673.             'ratingreview' => $this->ratingReview($pbw->getProduct()->getId()),
  674.             'images' => $pbwRepository->getImages($pbw),
  675.             'defaultimage' => $pbwRepository->getDefaultImages($pbw),
  676.             'canSell' => $pbw->getProduct()->getCanSell(),
  677.             'commercialEmail' => $commercialEmail,
  678.             'ispartner' => $isPartner,
  679.             'partnerDiscount' => $discount,
  680.             'locale' => $locale,
  681.             'isWholesaler' => $isWholesaler,
  682.             'isVendor' => $isVendor,
  683.             'promotion' => $promotion,
  684.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  685.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  686.             'userRepository' => $this->getDoctrine()->getRepository(User::class),
  687.             'partner' => $partner,
  688.             'i18n' => $translation,
  689.             'customers' => $customers,
  690.             'resourceRepository' => $resourceRepository,
  691.             'useSymbol' => $wholesaler->getUseSymbolCurrency(),
  692.             'priceCalculator' => $priceCalculator,
  693.             'target' => $target//Partner, Customer or Wholesaler
  694.             'cnClientInfo' => ($this->connectifService->cnClientInfo($user)),
  695.             'cnProductVisited' => ($this->connectifService->cnProductVisited()),
  696.             'cnCart' => ($user->getPartner() || $user->getCustomer()) ? $this->connectifService->cnCart($user) : null,
  697.             'operationalCurrency' => $this->operationalCurrencyProvider->provide($target),
  698.             'licenseType' => $licenseTypes
  699.             'wholesaler' => $wholesaler,
  700.             'warehouseProductRepository' => $this->getDoctrine()->getRepository(WarehouseProduct::class),
  701.             'parametersTranslated' => $parametersTranslated
  702.         );
  703.         $typeofproduct $pbw->getProduct()->getProductType();
  704.         $dataPbw $dataProductFinder->findData($pbwRepository$typeofproduct$pbw$partner$wholesaler->getId(), $user);
  705.         $data_to_view array_merge($data_to_view$dataPbw);
  706.         return $this->render('/catalog/default/view.html.twig'$data_to_view);
  707.     }
  708.     /**    
  709.      * @Route("/catalog/default/genericsearch/{page}", name="catalog_genericsearch", defaults={"page"=1})
  710.      *
  711.      * Save reviews from a Product in BD
  712.      * 
  713.      */
  714.     public function genericsearch($pageTrafficTracker $trafficTrackerRequest $requestSanitizeService $sanitizeServiceHeaderData $buildHeaderDataPriceCalculatorService $priceCalculator)
  715.     {
  716.         if (!$sanitizeService->getSanitize($request->get('text'))) {
  717.             return $this->redirectToRoute('catalog_genericsearch');
  718.         }
  719.         $trafficTracker->registerTraffic();
  720.         $user $this->getUser();
  721.         $search '';
  722.         $entityManager $this->getDoctrine()->getManager();
  723.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  724.         $wholesalerRepository $this->getDoctrine()->getRepository(Wholesaler::class);
  725.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  726.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  727.         $productbywholesalerRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  728.         if ($user->getPartner()) {
  729.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  730.             $wholesaler $partner->getWholesaler();
  731.             $partnerId $partner->getId();
  732.             $target=$user->getPartner();
  733.         } elseif ($user->getCustomer()) {
  734.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getSingleResult();
  735.             $partner $customer->getPartner();
  736.             $wholesaler $partner->getWholesaler();
  737.             $partnerId $partner->getId();
  738.             $target=$user->getCustomer();
  739.         } else {
  740.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->getQuery()->getSingleResult();
  741.             $partnerId '';
  742.             $partner null;
  743.             $target=$wholesaler;
  744.         }
  745.         $products $productRepository->MyProductQuery($user)
  746.             ->andWhere('p.cansellalone = 1 and p.isflavour = 0 and p.cansell = 1');
  747.         //Custom filters      
  748.         if ($request->get('text')) {
  749.             $productIds $productRepository->MyProductQuery($user)
  750.                 ->andWhere('p.name like :text or p.sku like :text ')
  751.                 ->setParameter('text''%' $request->get('text') . '%')
  752.                 ->andWhere('p.cansellalone = 1 and p.cansell = 1')
  753.                 ->getQuery()
  754.                 ->execute();
  755.             $products
  756.                 ->andWhere('p.name like :text or p.sku like :text ')
  757.                 ->setParameter('text''%' $request->get('text') . '%');
  758.             foreach ($productIds as $pId) {
  759.                 $parentId $productRepository->getParentSkuIds($pId);
  760.                 $products->orWhere('p.id = :parentId')->setParameter('parentId'$parentId);
  761.             }
  762.         }
  763.         $productsbywholesaler $productbywholesalerRepository->MyProductbywholesalerQuery($user)
  764.             ->andWhere('pbw.product IN (:products)')
  765.             ->setParameter('products'$products->getQuery()->execute());
  766.         //if search
  767.         if ($request->get('text')) {
  768.             $result '';
  769.             //search result
  770.             foreach ($productsbywholesaler->getQuery()->execute() as $product) {
  771.                 $result $result $product->getId() . ',';
  772.             }
  773.             //save query in bd
  774.             $catalogQuery = new \App\Entity\Catalogquerys();
  775.             $catalogQuery->setText($request->get('text'));
  776.             $catalogQuery->setUser($user);
  777.             $catalogQuery->setResult($result);
  778.             $entityManager->persist($catalogQuery);
  779.             $entityManager->flush();
  780.         }
  781.         $limit 12;
  782.         $productsbywholesaler->setFirstResult($limit * ($page 1))->setMaxResults($limit);
  783.         $paginator = new Paginator($productsbywholesaler$fetchJoinCollection true);
  784.         $maxPages ceil($paginator->count() / $limit);
  785.         $thisPage $page;
  786.         $search '"' $request->get('text') . '"';
  787.         return $this->render('/catalog/default/genericsearch.html.twig', [
  788.             'products' => $paginator->getIterator(),
  789.             'categories' => null//array(),
  790.             'partnerId' => $partnerId,
  791.             'partner' => $partner,
  792.             'headerData' => $buildHeaderData->buildHeaderData($user),
  793.             'search' => $search,
  794.             'maxPages' => $maxPages,
  795.             'thisPage' => $thisPage,
  796.             'count' => count($paginator),
  797.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  798.             'productRepository' => $this->getDoctrine()->getRepository(Product::class),
  799.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  800.             'useSymbol' => $wholesaler->getUseSymbolCurrency(),
  801.             'priceCalculator' => $priceCalculator,
  802.             'target' => $target
  803.         ]);
  804.     }
  805.     /**    
  806.      * @Route("/catalog/default/writereview", name="catalog_writereview")
  807.      *
  808.      * Save reviews from a Product in BD
  809.      * 
  810.      */
  811.     public function writereview(Request $requestTrafficTracker $trafficTracker)
  812.     {
  813.         $trafficTracker->registerTraffic();
  814.         $entityManager $this->getDoctrine()->getManager();
  815.         $user $this->getUser();
  816.         $id $request->request->get('idproduct');
  817.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  818.         $productByWholesaler $pbwRepository->find($id);
  819.         $review $request->request->get('review');
  820.         $rating $request->request->get('rating');
  821.         $productOpinions = new Productopinions();
  822.         $productOpinions->setProduct($productByWholesaler->getProduct());
  823.         $productOpinions->setUser($user);
  824.         $productOpinions->setScore($rating);
  825.         $productOpinions->setComment($review);
  826.         $entityManager->persist($productOpinions);
  827.         $entityManager->flush();
  828.         $response = new \Symfony\Component\HttpFoundation\JsonResponse();
  829.         $response->setStatusCode(200);
  830.         return $response;
  831.     }
  832.     /**
  833.      * @Route("/catalog/default/loadvendors", name="catalog_load_vendors")
  834.      *
  835.      *
  836.      * 
  837.      */
  838.     public function getMoreVendors(Request $requestTranslatorInterface $translator)
  839.     {
  840.         $user $this->getUser();
  841.         $em $this->getDoctrine()->getManager();
  842.         $offset $request->get('offset');
  843.         $limit 6;
  844.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  845.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  846.         $vendorRepository $this->getDoctrine()->getRepository(Vendors::class);
  847.         if ($user->getPartner()) {
  848.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  849.         } elseif ($user->getWholesaler()) {
  850.             $partner $partnerRepository->MyPartnerQuery($user)
  851.                 ->andWhere('p.wholesaler = :wholesaler ')
  852.                 ->setParameter('wholesaler'$user->getWholesaler()->getId())
  853.                 ->setMaxResults(1)
  854.                 ->getQuery()
  855.                 ->getOneOrNullResult();
  856.         } else {
  857.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getSingleResult();
  858.             $partner $customer->getPartner();
  859.         }
  860.         $wholesaler $partner->getWholesaler();
  861.         $featuredVendorArray $this->catalogFeaturedVendors();
  862.         $lengthFeaturedVendorArray sizeof($featuredVendorArray);
  863.         $vendorIds "";
  864.         if ($lengthFeaturedVendorArray 0) {
  865.             $vendorIds = array();
  866.             foreach ($featuredVendorArray as $cta) {
  867.                 array_push($vendorIds$cta->getVendor()->getId());
  868.             }
  869.         }
  870.         $vendors $em->createQuery("SELECT DISTINCT v from App\Entity\Vendors v "
  871.             "JOIN App\Entity\Productline pl "
  872.             "JOIN App\Entity\Product p "
  873.             "JOIN App\Entity\Productbywholesaler pbw "
  874.             "WHERE pl.vendor = v.id and pbw.product = p.id and p.productLine = pl.id and pbw.wholesaler = :idWholesaler and pbw.unregistrationdate is null and v.id NOT IN (:vendors) "
  875.             "ORDER BY v.name ASC")
  876.             ->setParameter("idWholesaler"$wholesaler->getId())
  877.             ->setParameter('vendors'$vendorIds)
  878.             ->setFirstResult($offset)
  879.             ->setMaxResults($limit);
  880.         $vendorsResult $vendors->getResult();
  881.         $vendorsArray = array();
  882.         foreach ($vendorsResult as $vendor) {
  883.             array_push($vendorsArray, array('id' => $vendor->getId(), 'name' => $vendor->getName(), 'img' => $vendorRepository->getRouteCompanyLogo($vendor)));
  884.         }
  885.         $paginator = new Paginator($vendors$fetchJoinCollection true);
  886.         $maxPages ceil($paginator->count() / $limit);
  887.         $data = array(
  888.             'vendors' => $vendorsArray,
  889.             'newOffset' => $offset sizeof($vendorsResult),
  890.             'remaining' => $paginator->count() - $limit $offset,
  891.         );
  892.         $response json_encode($data);
  893.         return new Response($response200, array(
  894.             'Content-Type' => 'application/json'
  895.         ));
  896.     }
  897.     /**
  898.      * Get recomended products(6) to show in catalog index
  899.      * 
  900.      * @param $idwholesaler
  901.      * 
  902.      */
  903.     private function catalogCoverProducts()
  904.     {
  905.         $user $this->getUser();
  906.         /** @var UserRepository */
  907.         $userRepository $this->getDoctrine()->getRepository(User::class);
  908.         /** @var CtaRepository */
  909.         $ctaRepository $this->getDoctrine()->getRepository(Cta::class);
  910.         $wholesalerId $userRepository->getParentWholesaler($user)->getId();
  911.         $recomendedArray = array();
  912.         for ($i 30$i <= 41$i++) {
  913.             $cta $ctaRepository->MyCtaQuery($wholesalerId$i);
  914.             if (is_null($cta)) {
  915.                 $cta $ctaRepository->MyCtaDefaultQuery($wholesalerId$i);
  916.             }
  917.             array_push($recomendedArray$cta);
  918.         }
  919.         return $recomendedArray;
  920.     }
  921.     /**
  922.      * Get Featued Vendors (6) to show in vendor page
  923.      * 
  924.      * @param $vendor
  925.      * 
  926.      */
  927.     private function catalogFeaturedVendors()
  928.     {
  929.         $user $this->getUser();
  930.         /** @var UserRepository */
  931.         $userRepository $this->getDoctrine()->getRepository(User::class);
  932.         /** @var CtaRepository */
  933.         $ctaRepository $this->getDoctrine()->getRepository(Cta::class);
  934.         $wholesalerId $userRepository->getParentWholesaler($user)->getId();
  935.         $featuredVendorArray = array();
  936.         for ($i 63$i <= 68$i++) {
  937.             $cta $ctaRepository->MyCtaQuery($wholesalerId$i);
  938.             if (is_null($cta)) {
  939.                 $cta $ctaRepository->MyCtaDefaultQuery($wholesalerId$i);
  940.             }
  941.             if (!is_null($cta)) {
  942.                 array_push($featuredVendorArray$cta);
  943.             }
  944.         }
  945.         return $featuredVendorArray;
  946.     }
  947.     /**
  948.      * Get SingleVendorProducts (3) to show in vendor page
  949.      * 
  950.      * @param $vendor
  951.      * 
  952.      */
  953.     private function catalogSingleVendorProducts($vendor)
  954.     {
  955.         $user $this->getUser();
  956.         /** @var UserRepository */
  957.         $userRepository $this->getDoctrine()->getRepository(User::class);
  958.         /** @var CtaRepository */
  959.         $ctaRepository $this->getDoctrine()->getRepository(Cta::class);
  960.         $wholesalerId $userRepository->getParentWholesaler($user)->getId();
  961.         $singleVendorProductsArray = array();
  962.         for ($i 57$i <= 59$i++) {
  963.             $cta $ctaRepository->MyCtaDinamicVendorQuery($wholesalerId$i$vendor);
  964.             if (is_null($cta)) {
  965.                 $cta $ctaRepository->MyCtaDefaultDinamicVendorQuery($wholesalerId$i$vendor);
  966.             }
  967.             if (!is_null($cta) && !is_null($cta->getProductbywholesaler())) {
  968.                 array_push($singleVendorProductsArray$cta);
  969.             }
  970.         }
  971.         return $singleVendorProductsArray;
  972.     }
  973.     private function filterCatalogSingleVendorProducts($products$filters)
  974.     {
  975.         $user $this->getUser();
  976.         /** @var ProductRepository */
  977.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  978.         /** @var UserRepository */
  979.         $userRepository $this->getDoctrine()->getRepository(User::class);
  980.         $singleVendorProductsArray array_filter($products, function ($obj) use ($filters$productRepository$user) {
  981.             $cumpleTexto true;
  982.             if (isset($filters['text'])) {
  983.                 $texto $filters['text'];
  984.                 $cumpleTexto stripos($obj->getProductbywholesaler()->getProduct()->getName(), $texto) !== false || stripos($obj->getProductbywholesaler()->getProduct()->getSku(), $texto) !== false;
  985.             }
  986.             $cumpleNumericos true;
  987.             if (isset($filters['programm'])) {
  988.                 $cumpleNumericos $cumpleNumericos && $obj->getProductbywholesaler()->getProduct()->getVendorProgramm()->getId() == $filters['programm'];
  989.             }
  990.             if (isset($filters['productline'])) {
  991.                 $cumpleNumericos $cumpleNumericos && $obj->getProductbywholesaler()->getProduct()->getProductline()->getId() == $filters['productline'];
  992.             }
  993.             if (isset($filters['category'])) {
  994.                 $productsQuery $productRepository->MyProductQuery($user)
  995.                     ->andWhere('p.cansellalone = 1 and p.isflavour = 0 and p.cansell = 1 and p.id = :id')
  996.                     ->leftJoin('p.productLine''pl')
  997.                     ->leftJoin('pl.categories''cat')
  998.                     ->andWhere("cat.id = :cat ")
  999.                     ->setParameter('cat'$filters['category'])
  1000.                     ->setParameter('id'$obj->getProductbywholesaler()->getProduct()->getId())
  1001.                     ->getQuery()
  1002.                     ->getResult();
  1003.                 $cumpleNumericos $cumpleNumericos && $productsQuery;
  1004.             }
  1005.             return $cumpleTexto && $cumpleNumericos;
  1006.         });
  1007.         return $singleVendorProductsArray;
  1008.     }
  1009.     /**
  1010.      * Get selected partner and all allowed to switch
  1011.      * 
  1012.      * @param $partnerId
  1013.      * 
  1014.      */
  1015.     private function partnerSelection($partnerId)
  1016.     {
  1017.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  1018.         // Get the list of all partners we can view the catalog for
  1019.         // TODO - why myquery? only return 1 result
  1020.         $partners $partnerRepository->MyPartnerQuery($this->getUser())
  1021.             ->orderBy('p.name''ASC')
  1022.             ->getQuery()
  1023.             ->getResult();
  1024.         if ($partnerId) {
  1025.             // Verify that we are allowed to view this partner
  1026.             $partner $partnerRepository->MyPartnerQuery($this->getUser())
  1027.                 ->andWhere('p.id = :partnerId ')
  1028.                 ->setParameter('partnerId'$partnerId)
  1029.                 ->setMaxResults(1)
  1030.                 ->getQuery()
  1031.                 ->getResult();
  1032.         }
  1033.         if (!$partner) {
  1034.             throw $this->createNotFoundException();
  1035.         }
  1036.         return array($partner$partners);
  1037.     }
  1038.     /**
  1039.      * Get reviews for a Product to show in catalog single view
  1040.      * 
  1041.      * @param $idproduct
  1042.      * 
  1043.      */
  1044.     public function ratingReview($idproduct)
  1045.     {
  1046.         $entityManager $this->getDoctrine()->getManager();
  1047.         $productOpinions $entityManager->createQuery("SELECT po from App\Entity\Productopinions po "
  1048.             "WHERE po.product = :idproduct "
  1049.             "ORDER BY po.product DESC ")
  1050.             ->setParameter("idproduct"$idproduct)
  1051.             ->getResult();
  1052.         return $productOpinions;
  1053.     }
  1054.     /**
  1055.      * Get similar products(6) to show in catalog view
  1056.      * 
  1057.      * @param $idPbw
  1058.      * 
  1059.      */
  1060.     private function similarProducts($idPbw)
  1061.     {
  1062.         //TODO checkear if borrado de vendor exclusivo
  1063.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1064.         $pbw $pbwRepository->find($idPbw);
  1065.         $idVendor $pbw->getProduct()->getProductline()->getVendor()->getId();
  1066.         $user $this->getUser();
  1067.         if ($user->getVendor()) {
  1068.             $pbws $pbwRepository->MyProductbywholesalerQuery($user)
  1069.                 ->leftJoin('p.productLine''pl');
  1070.             if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  1071.                 $pbws $pbws
  1072.                     ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  1073.                     ->andWhere('pbc.Product = pbw.product');
  1074.             }
  1075.             $pbws $pbws
  1076.                 ->andWhere('pbw.unregistrationdate is null and pbw.id != :idPbw and pbw.wholesaler = :wholesalerId ')
  1077.                 ->andWhere('p.cansellalone = 1 and p.isflavour = 0 ')
  1078.                 ->andWhere('pl.vendor = :idVendor ')
  1079.                 ->setParameter('idPbw'$idPbw)
  1080.                 ->setParameter('wholesalerId'$pbw->getWholesaler()->getId())
  1081.                 ->setParameter('idVendor'$idVendor)
  1082.                 ->setMaxResults(6)
  1083.                 ->getQuery()
  1084.                 ->getResult();
  1085.         } else {
  1086.             $pbws $pbwRepository->MyProductbywholesalerQuery($user)
  1087.                 ->leftJoin('pbw.product''p');
  1088.             if ($user->getCustomer() && $user->getCustomer()->getPartner()->getCustomProducts()) {
  1089.                 $pbws $pbws
  1090.                     ->leftJoin("App\Entity\ProductByCustomer""pbc"Join::WITH'pbc.Product = p.id')
  1091.                     ->andWhere('pbc.Product = pbw.product');
  1092.             }
  1093.             $pbws $pbws
  1094.                 ->leftJoin('p.productLine''pl')
  1095.                 ->andWhere('pbw.unregistrationdate is null and pbw.id != :idPbw and pbw.wholesaler = :wholesalerId ')
  1096.                 ->andWhere('p.cansellalone = 1 and p.isflavour = 0 ')
  1097.                 ->andWhere('pl.vendor = :idVendor ')
  1098.                 ->setParameter('idPbw'$idPbw)
  1099.                 ->setParameter('wholesalerId'$pbw->getWholesaler()->getId())
  1100.                 ->setParameter('idVendor'$idVendor)
  1101.                 ->setMaxResults(6)
  1102.                 ->getQuery()
  1103.                 ->getResult();
  1104.         }
  1105.         return $pbws;
  1106.     }
  1107.     /**
  1108.      * Get related resources for product to show in catalog view
  1109.      * 
  1110.      * @param $idPbw
  1111.      * 
  1112.      */
  1113.     private function relatedResources($idPbw)
  1114.     {
  1115.         $user $this->getUser();
  1116.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1117.         $pbw $pbwRepository->find($idPbw);
  1118.         $productline $pbw->getProduct()->getProductline();
  1119.         $resourcesRepository $this->getDoctrine()->getRepository(\App\Entity\Resources::class);
  1120.         $queryData $resourcesRepository->findAllMyActiveResources($user);
  1121.         $queryData->join('r.productLines''pl');
  1122.         $queryData->andWhere('pl.id = :productline');
  1123.         $queryData->setParameter('productline'$productline->getId());
  1124.         $resources $queryData->getQuery()->execute();
  1125.         return $resources;
  1126.     }
  1127.     /**
  1128.      * @Route("/catalog/default/promotions", name="catalog_promotions")
  1129.      */
  1130.     public function promotions($page 1TrafficTracker $trafficTrackerTranslatorInterface $translatorTranslation $translationHeaderData $buildHeaderDataPriceCalculatorService $priceCalculatorRequest $request)
  1131.     {
  1132.         $trafficTracker->registerTraffic();
  1133.         $locale $request->getLocale();
  1134.         $user $this->getUser();
  1135.         $currentDate date("Y-m-d");
  1136.         $idWholesaler null;
  1137.         $pl null;
  1138.         $vd null;
  1139.         $pw null;
  1140.         $NameProduct null;
  1141.         $arrayid null;
  1142.         $newarrayid null;
  1143.         $arrayidTemp = array();
  1144.         $arrayPbwUrl = array();
  1145.         /** @var EntityManager */
  1146.         $entityManager $this->getDoctrine()->getManager();
  1147.         /** @var PartnerRepository */
  1148.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  1149.         /** @var CustomerRepository */
  1150.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  1151.         $categoryRepository $this->getDoctrine()->getRepository(Category::class);
  1152.         $vendorRepository $this->getDoctrine()->getRepository(Vendors::class);
  1153.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1154.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  1155.         $searchName $translator->trans('app.Promos.Promotions');
  1156.         if ($user->getPartner()) {
  1157.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getOneOrNullResult();
  1158.             $wholesaler $user->getPartner()->getWholesaler();
  1159.         } elseif ($user->getWholesaler()) {
  1160.             $partner =  $partnerRepository->MyPartnerQuery($user)->getQuery()->setMaxResults(1)->getOneOrNullResult();
  1161.             $wholesaler $user->getWholesaler();
  1162.         } else {
  1163.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getOneOrNullResult();
  1164.             $partner $customer->getPartner();
  1165.             $wholesaler $user->getCustomer()->getPartner()->getWholesaler();
  1166.         }
  1167.         $promotions $entityManager->createQuery("SELECT pp FROM App\Entity\Productpromotion pp
  1168.             JOIN pp.promotion p
  1169.             WHERE (pp.stock > 0 OR pp.stock is null)
  1170.             AND p.wholesaler = :wholesaler
  1171.             AND p.deactivated != 1
  1172.             AND p.validated = 1
  1173.             AND p.expirydate >= :date1
  1174.             AND p.startdate <= :date2")
  1175.             ->setParameter("wholesaler"$wholesaler)
  1176.             ->setParameter("date1"$currentDate)
  1177.             ->setParameter("date2"$currentDate);
  1178.         foreach ($promotions->getResult() as $p) {
  1179.             if ($p->getProductByWholesaler()) {
  1180.                 $id $p->getProductByWholesaler()->getProduct()->getId();
  1181.                 $groupId $p->getProductByWholesaler()->getProduct()->getGroupid();
  1182.                 $pbwMain $entityManager->createQuery("SELECT pbw FROM App\Entity\Productbywholesaler pbw
  1183.                     JOIN pbw.product p
  1184.                     WHERE p.id = :groupid
  1185.                     AND pbw.wholesaler = :wholesaler")
  1186.                     ->setParameter("groupid"$groupId)
  1187.                     ->setParameter("wholesaler"$wholesaler)
  1188.                     ->getOneOrNullResult();
  1189.                 $pw[$p->getId()] = $p->getProductByWholesaler();
  1190.                 if ($groupId == $id) {
  1191.                     if (!array_key_exists($groupId$arrayidTemp)) {
  1192.                         $arrayidTemp[$groupId] = array("promotion" => $p->getId(), "isMain" => 1"pbw" => $p"pbwMain" => $pbwMain->getId());
  1193.                     }
  1194.                 } else {
  1195.                     $arrayidTemp[$groupId] = array("promotion" => $p->getId(), "isMain" => 0"pbw" => $p"pbwMain" => $pbwMain->getId());
  1196.                 }
  1197.             }
  1198.             if ($p->getProductline()) {
  1199.                 $pl[$p->getId()] = $p->getProductline()->getVendor();
  1200.             }
  1201.             if ($p->getVendor()) {
  1202.                 $vd[$p->getId()] = $p->getVendor();
  1203.             }
  1204.         }
  1205.         foreach ($arrayidTemp as $key => $pp) {
  1206.             $arrayid[] = $pw[$pp["pbw"]->getId()]->getId();
  1207.             $arrayPbwUrl[$pw[$pp["pbw"]->getId()]->getId()] = $pp["pbwMain"];
  1208.         }
  1209.         if ($arrayid) {
  1210.             $promotions $entityManager->createQuery("SELECT pp FROM App\Entity\Productpromotion pp
  1211.             JOIN pp.promotion p
  1212.             LEFT JOIN pp.productByWholesaler pbw
  1213.             WHERE (pp.stock > 0 OR pp.stock is null)
  1214.             AND p.wholesaler = :wholesaler
  1215.             AND p.deactivated != 1
  1216.             AND p.validated = 1
  1217.             AND p.expirydate >= :date1
  1218.             AND p.startdate <= :date2
  1219.             AND (pbw.id IN (:pbws)
  1220.             OR pp.productLine is not null
  1221.             OR pp.vendor is not null)")
  1222.                 ->setParameter("wholesaler"$wholesaler)
  1223.                 ->setParameter("date1"$currentDate)
  1224.                 ->setParameter("date2"$currentDate)
  1225.                 ->setParameter("pbws"$arrayid);
  1226.         }
  1227.         $form $this->createForm(SearchPromotion::class, null, array(
  1228.             'translator' => $translator,
  1229.             'categories' => array(),
  1230.             'vendors' => array(),
  1231.         ));
  1232.         $form->handleRequest($request);
  1233.         return $this->render('/catalog/default/promotionsview.html.twig', [
  1234.             'searchName' => $searchName,
  1235.             'pl' => $pl,
  1236.             'vd' => $vd,
  1237.             'pw' => $pw,
  1238.             'promotions' => $promotions->getResult(), //$pagination,
  1239.             'headerData' => $buildHeaderData->buildHeaderData($user),
  1240.             'form' => $form->createView(),
  1241.             'partnerId' => $partner,
  1242.             'arrayPbwUrl' => $arrayPbwUrl,
  1243.             'locale' => $locale,
  1244.             'vendorsRepository' => $vendorRepository,
  1245.             'pbwRepository' => $pbwRepository,
  1246.             'productRepository' => $productRepository,
  1247.             'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency(),
  1248.             'priceCalculator' => $priceCalculator
  1249.         ]);
  1250.     }
  1251.     /**
  1252.      * @Route("/catalog/default/bundles", name="catalog_bundles")
  1253.      */
  1254.     public function bundles($page 1TrafficTracker $trafficTrackerTranslatorInterface $translatorTranslation $translationHeaderData $buildHeaderDataRequest $request)
  1255.     {
  1256.         $trafficTracker->registerTraffic();
  1257.         $locale $request->getLocale();
  1258.         $user $this->getUser();
  1259.         $currentDate date("Y-m-d");
  1260.         $idWholesaler null;
  1261.         $NameProduct null;
  1262.         $arrayid null;
  1263.         $newarrayid null;
  1264.         $arrayidTemp = array();
  1265.         $arrayPbwUrl = array();
  1266.         /** @var EntityManager */
  1267.         $entityManager $this->getDoctrine()->getManager();
  1268.         /** @var PartnerRepository */
  1269.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  1270.         /** @var CustomerRepository */
  1271.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  1272.         /** @var BundleRepository */
  1273.         $bundleRepository $this->getDoctrine()->getRepository(Bundle::class);
  1274.         $categoryRepository $this->getDoctrine()->getRepository(Category::class);
  1275.         $vendorRepository $this->getDoctrine()->getRepository(Vendors::class);
  1276.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1277.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  1278.         if ($user->getPartner()) {
  1279.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getOneOrNullResult();
  1280.             $wholesaler $user->getPartner()->getWholesaler();
  1281.         } elseif ($user->getWholesaler()) {
  1282.             $partner =  $partnerRepository->MyPartnerQuery($user)->getQuery()->setMaxResults(1)->getOneOrNullResult();
  1283.             $wholesaler $user->getWholesaler();
  1284.         } else {
  1285.             $customer $customerRepository->MyCustomerQuery($user)->getQuery()->getOneOrNullResult();
  1286.             $partner $customer->getPartner();
  1287.         }
  1288.         $bundles $bundleRepository->MyBundleQuery($user)->andWhere('b.stock > 0')->andWhere('b.endDate >= :date1')->andWhere('b.startDate <= :date2')->setParameter("date1"$currentDate)
  1289.             ->setParameter("date2"$currentDate)->getQuery()->getResult();
  1290.         return $this->render('/catalog/default/bundlesview.html.twig', [
  1291.             'bundles' => $bundles//$pagination,
  1292.             'headerData' => $buildHeaderData->buildHeaderData($user),
  1293.             'partnerId' => $partner,
  1294.             'arrayPbwUrl' => $arrayPbwUrl,
  1295.             'locale' => $locale,
  1296.             'vendorsRepository' => $vendorRepository,
  1297.             'pbwRepository' => $pbwRepository,
  1298.             'productRepository' => $productRepository,
  1299.             'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency()
  1300.         ]);
  1301.     }
  1302.     /**
  1303.      * @Route("/catalog/default/view_bundle/{id}", name="catalog_view_bundle", requirements={"id"="\d+"})
  1304.      */
  1305.     public function viewBundle($idTrafficTracker $trafficTrackerTranslatorInterface $translatorTranslation $translationDataProductFinder $dataProductFinderHeaderData $buildHeaderDataRequest $request)
  1306.     {
  1307.         $session $this->get('session');
  1308.         $trafficTracker->registerTraffic();
  1309.         $entityManager $this->getDoctrine()->getManager();
  1310.         $pbwRepository $this->getDoctrine()->getRepository(Productbywholesaler::class);
  1311.         $partnerRepository $this->getDoctrine()->getRepository(Partner::class);
  1312.         $wholesalerRepository $this->getDoctrine()->getRepository(Wholesaler::class);
  1313.         $customerRepository $this->getDoctrine()->getRepository(Customer::class);
  1314.         $productRepository $this->getDoctrine()->getRepository(Product::class);
  1315.         /** @var BundleRepository */
  1316.         $bundleRepository $this->getDoctrine()->getRepository(Bundle::class);
  1317.         $user $this->getUser();
  1318.         $locale $request->getLocale();
  1319.         // $id es un id de ProductByWholesaler
  1320.         $commercialEmail '';
  1321.         $markup_value 0;
  1322.         $discount 0;
  1323.         //$currentDate = date("Y-m-d");
  1324.         $isVendor false;
  1325.         $bundle $bundleRepository->MyBundleQuery($user)
  1326.             ->andWhere('b.id = :id')
  1327.             ->andWhere('b.active = 1')
  1328.             ->andWhere('b.stock > 0')
  1329.             ->setParameter('id'$id)
  1330.             ->setMaxResults(1)
  1331.             ->getQuery()
  1332.             ->getOneOrNullResult();
  1333.         if (!$bundle) {
  1334.             $session->getFlashBag()->add('danger'$translator->trans('app.General.NoResult'));
  1335.             return $this->redirect($this->generateUrl('catalog_goto'));
  1336.         }
  1337.         $partner null;
  1338.         if ($user->getPartner()) {
  1339.             $partner $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
  1340.             $commercialUser $this->getDoctrine()->getRepository(\App\Entity\User::class)->find($partner->getIdcommercialagent());
  1341.             $commercialEmail $commercialUser->getEmail();
  1342.             $currencyIso $partner->getWholesaler()->getCurrency()->getIso();
  1343.             $isPartner true;
  1344.             $isWholesaler false;
  1345.             $wholesaler $user->getPartner()->getWholesaler();
  1346.         } elseif ($user->getWholesaler()) {
  1347.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->getQuery()->getSingleResult();
  1348.             $currencyIso $wholesaler->getCurrency()->getIso();
  1349.             $partner null;
  1350.             $isPartner false;
  1351.             $isWholesaler true;
  1352.             $wholesaler $user->getWholesaler();
  1353.         } elseif ($user->getVendor()) {
  1354.             $wholesaler $wholesalerRepository->MyWholesalerQuery($user)->setMaxResults(1)->getQuery()->getSingleResult();
  1355.             $currencyIso $wholesaler->getCurrency()->getIso();
  1356.             $partner $entityManager->createQuery('SELECT p FROM App\Entity\Partner p '
  1357.                 'where p.wholesaler = :wholesaler ')
  1358.                 ->setParameters(array('wholesaler' => $wholesaler->getId()))
  1359.                 ->setMaxResults(1)
  1360.                 ->getOneOrNullResult();
  1361.             $isPartner false;
  1362.             $isVendor true;
  1363.             $isWholesaler false;
  1364.         } else {
  1365.             $customer $customerRepository->MyCustomerQuery($user)
  1366.                 ->andWhere('c.id = :customerId ')
  1367.                 ->setParameter('customerId'$user->getCustomer()->getId())
  1368.                 ->getQuery()->getSingleResult();
  1369.             $wholesaler $user->getCustomer()->getPartner()->getWholesaler();
  1370.             $partner $customer->getPartner();
  1371.             $commercialUser $this->getDoctrine()->getRepository(\App\Entity\User::class)->find($customer->getIdcommercialagent());
  1372.             $commercialEmail $commercialUser->getEmail();
  1373.             $isPartner false;
  1374.             $isWholesaler false;
  1375.             $currencyIso $wholesaler->getCurrency()->getIso();
  1376.         }
  1377.         $catalogImages $bundle->getCatalogImages();
  1378.         $images = [];
  1379.         $images[] = 'uploads/images/productImages/' $bundle->getImageName();
  1380.         foreach ($catalogImages as $img) {
  1381.             $images[] = 'uploads/images/productImages/' $img;
  1382.         }
  1383.         $customers $customerRepository->MyCustomerQuery($user)
  1384.             ->andWhere('c.unregistrationdate is NULL ')
  1385.             ->orderBy('c.company''DESC')
  1386.             ->getQuery()
  1387.             ->getResult();
  1388.         $data_to_view = array(
  1389.             'headerData' => $buildHeaderData->buildHeaderData($user),
  1390.             'bundle' => $bundle,
  1391.             'images' => $images,
  1392.             'defaultimage' => $images[0],
  1393.             'commercialEmail' => $commercialEmail,
  1394.             'ispartner' => $isPartner,
  1395.             'currencyIso' => $currencyIso,
  1396.             'locale' => $locale,
  1397.             'isWholesaler' => $isWholesaler,
  1398.             'isVendor' => $isVendor,
  1399.             'pbwRepository' => $this->getDoctrine()->getRepository(Productbywholesaler::class),
  1400.             'vendorsRepository' => $this->getDoctrine()->getRepository(Vendors::class),
  1401.             'userRepository' => $this->getDoctrine()->getRepository(User::class),
  1402.             'partner' => $partner,
  1403.             'i18n' => $translation,
  1404.             'customers' => $customers,
  1405.         );
  1406.         return $this->render('/catalog/default/viewBundle.html.twig'$data_to_view);
  1407.     }
  1408. }