src/Controller/SiteGiftIdeaController.php line 26

Open in your IDE?
  1. <?php 
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Sylius\Component\Locale\Context\LocaleContextInterface;
  9. use Sylius\Component\Channel\Context\ChannelContextInterface;
  10. use Sylius\Component\Core\Repository\ProductRepositoryInterface;
  11. use Sylius\Component\Core\Repository\ProductVariantRepositoryInterface;
  12. use Sylius\Component\Product\Model\ProductAttributeInterface;
  13. use Sylius\Bundle\ProductBundle\Doctrine\ORM\ProductAttributeValueRepository;
  14. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  15. use App\Entity\Product\ProductVariant;
  16. use App\Entity\SiteGiftIdeaLink;
  17. /**
  18.  * Page "Idées Cadeaux"
  19.  */
  20. class SiteGiftIdeaController extends AbstractController
  21. {
  22.     public function indexAction(
  23.         Request $request,
  24.         Breadcrumbs $breadcrumbs,
  25.         ProductAttributeValueRepository $productAttributeValueRepository,
  26.         ChannelContextInterface $channelContext,
  27.         LocaleContextInterface $localeContext,
  28.         ProductVariantRepositoryInterface $productVariantRepository
  29.     ) {
  30.         // dump($budget);
  31.         // Récupère les liens de "Idées cadeaux"
  32.         $em $this->get('doctrine')->getManager();
  33.         $siteGiftIdeaLinkRepository $em->getRepository(SiteGiftIdeaLink::class);
  34.         $siteGiftIdeaLinks $siteGiftIdeaLinkRepository->findBy([
  35.             'enabled' => true
  36.         ], [
  37.             'position' => 'ASC'
  38.         ]);
  39.         // if(!empty($_GET)) {
  40.         // }
  41.         // dump($_GET);
  42.         // dump($_GET);
  43.         // dump($_POST);
  44.         // dump($_REQUEST);
  45.         $budget = (!empty($_GET['budget']))?(int)$_GET['budget']:null;
  46.         $pour_qui = (!empty($_GET['pour_qui']))?$_GET['pour_qui']:null;
  47.         $quel_age = (!empty($_GET['quel_age']))?$_GET['quel_age']:null;
  48.         // $pour_qui = $request->request->get('pour_qui', null);
  49.         // $quel_age = $request->request->get('quel_age', null);
  50.         // // $data = (array) $request->request->all();
  51.         // dump($request->request->get('budget', null));
  52.         // Pour qui : Propriété "giftFor" des déclinaisons produits
  53.         // Par âge : Caractéristique "Tranche d'âge"
  54.         // Budget : <10€, <20€, <30€, <40€ ou <50€ (en dur)
  55.         // Récupère les valeurs de la caractéristiques "Tranche d'âge"
  56.         $productAttributeRepository $em->getRepository(ProductAttributeInterface::class);
  57.         $productAttribute $productAttributeRepository->findOneByCode('Tranche_Age');
  58.         $breadcrumbs->addRouteItem("sylius.ui.home""sylius_shop_homepage");
  59.         $breadcrumbs->addItem("Idées cadeaux");
  60.         $displayVariants "";
  61.         if($budget 0) {
  62.             $variants =  $this->getVariantsFromParams(
  63.                 $budget*100
  64.                 $pour_qui,
  65.                 $quel_age,
  66.                 $channelContext,
  67.                 $localeContext,
  68.                 $productAttributeValueRepository,
  69.                 $productVariantRepository);
  70.         
  71.             $displayVariants $this->render('site_gift_idea_ajax.html.twig', [
  72.                 'variants' => $variants
  73.             ])->getContent();;
  74.         }
  75.         return $this->render('site_gift_idea_page.html.twig', [
  76.             'giftFor' => ProductVariant::GIFT_FOR_VALUES,
  77.             'ages' => $productAttribute,
  78.             'siteGiftIdeaLinks' => $siteGiftIdeaLinks,
  79.             'displayProducts' => $displayVariants,
  80.             'budget' => $budget,
  81.             'pour_qui' => $pour_qui,
  82.             'quel_age' => $quel_age
  83.         ]);
  84.     }
  85.     public function ajaxAction(
  86.         Request $request,
  87.         Breadcrumbs $breadcrumbs,
  88.         ChannelContextInterface $channelContext,
  89.         LocaleContextInterface $localeContext,
  90.         ProductAttributeValueRepository $productAttributeValueRepository,
  91.         ProductRepositoryInterface $productRepository,
  92.         ProductVariantRepositoryInterface $productVariantRepository
  93.     ) {
  94.         $budget intval($request->request->get('budget'null));
  95.         $pour_qui $request->request->get('pour_qui'null);
  96.         $quel_age $request->request->get('quel_age'null);
  97.         $variants $this->getVariantsFromParams(
  98.             $budget
  99.             $pour_qui,
  100.             $quel_age,
  101.             $channelContext,
  102.             $localeContext,
  103.             $productAttributeValueRepository,
  104.             $productVariantRepository);
  105.         // $channel = $channelContext->getChannel();
  106.         // $locale = $localeContext->getLocaleCode();
  107.         // $productsIds = [];
  108.         // if (empty($quel_age) == false) {
  109.         //     // Récupère les formes qui ont cette valeur de caractéristique
  110.         //     $productsIds = array_unique(array_map(function ($row) {
  111.         //         return $row->getProduct()->getId();
  112.         //     }, $productAttributeValueRepository->findByJsonChoiceKey($quel_age)));
  113.         // }
  114.         // $variants = $productVariantRepository->createQueryBuilder('o')
  115.         // ->addSelect('channelPricing')
  116.         // ->innerJoin('o.translations', 'translation', 'WITH', 'translation.locale = :locale')
  117.         // ->setParameter('locale', $locale)
  118.         // ->andWhere('o.enabled = 1')
  119.         // ->andWhere('o.onHand >= 5')
  120.         // ->orderBy('RAND()');
  121.         // if (empty($budget)) {
  122.         //     $variants = $variants->innerJoin('o.channelPricings', 'channelPricing', 'WITH', 'channelPricing.channelCode = :channelCode')
  123.         //     ->setParameter('channelCode', $channel->getCode());
  124.         // } else {
  125.         //     $variants = $variants->innerJoin('o.channelPricings', 'channelPricing', 'WITH', 'channelPricing.channelCode = :channelCode AND channelPricing.price <= :price')
  126.         //     ->setParameter('price', $budget)
  127.         //     ->setParameter('channelCode', $channel->getCode());
  128.         // }
  129.         // if (empty($pour_qui) == false) {
  130.         //     // $variants = $variants
  131.         //     // ->andWhere('o.giftFor = :giftFor')
  132.         //     // ->setParameter('giftFor', $pour_qui);
  133.         //     // $variants = $variants->innerJoin('o.productVariantAttribute', 'productVariantAttribute', 'WITH', 'productVariantAttribute.json_value = "'.$pour_qui.'"')
  134.         //     // ->setParameter('price', $budget)
  135.         //     // ->setParameter('channelCode', $channel->getCode());
  136.         // }
  137.         // if (count($productsIds) > 0) {
  138.         //     $variants = $variants
  139.         //     ->innerJoin('o.product', 'product', 'WITH', 'product.id IN (:productsId)')
  140.         //     ->setParameter('productsId', $productsIds);
  141.         // }
  142.       
  143.         // if (empty($pour_qui)) {
  144.         //     $variants = $variants
  145.         //     ->setMaxResults( 50 )
  146.         //     ->getQuery()
  147.         //     ->getResult();
  148.         // }else{
  149.         //     // dump('ici');
  150.         //     $allVariants = $variants
  151.         //     // ->setMaxResults( 50 )
  152.         //     ->getQuery()
  153.         //     ->getResult();
  154.         //     $giftVariant = [];
  155.         //     if (count($allVariants) > 0 ) {
  156.     
  157.         //         foreach($allVariants as $variant){
  158.         //             $index = 0;
  159.         //             foreach($variant->getAttributes() as $attribute){
  160.         //                 if($attribute->getAttribute()->getId() == 67){
  161.         //                     foreach($attribute->getValue() as $value){
  162.         //                         if($value == $pour_qui){
  163.         //                             if($index == 50){
  164.         //                                 break;
  165.         //                             }
  166.         //                             $index++;
  167.         //                             $giftVariant[$variant->getId()] = $variant;
  168.         //                         }
  169.         //                     }
  170.         //                 }
  171.         //             }
  172.         //         }  
  173.         
  174.         //     }
  175.         //     $variants = $giftVariant;
  176.                         
  177.         // }
  178.         
  179.         // dump($variants);
  180.         return $this->render('site_gift_idea_ajax.html.twig', [
  181.             'variants' => $variants
  182.         ]);
  183.     }
  184.     private function getVariantsFromParams(
  185.         $budget
  186.         $pour_qui,
  187.         $quel_age,
  188.         ChannelContextInterface $channelContext,
  189.         LocaleContextInterface $localeContext,
  190.         ProductAttributeValueRepository $productAttributeValueRepository,
  191.         ProductVariantRepositoryInterface $productVariantRepository) {
  192.         $channel $channelContext->getChannel();
  193.         $locale $localeContext->getLocaleCode();
  194.         $productsIds = [];
  195.         if (empty($quel_age) == false) {
  196.             // Récupère les formes qui ont cette valeur de caractéristique
  197.             $productsIds array_unique(array_map(function ($row) {
  198.                 return $row->getProduct()->getId();
  199.             }, $productAttributeValueRepository->findByJsonChoiceKey($quel_age)));
  200.         }
  201.         $variants $productVariantRepository->createQueryBuilder('o')
  202.         ->addSelect('channelPricing')
  203.         ->innerJoin('o.translations''translation''WITH''translation.locale = :locale')
  204.         ->setParameter('locale'$locale)
  205.         ->andWhere('o.enabled = 1')
  206.         ->andWhere('o.onHand >= 5')
  207.         ->orderBy('RAND()');
  208.         if (empty($budget)) {
  209.             $variants $variants->innerJoin('o.channelPricings''channelPricing''WITH''channelPricing.channelCode = :channelCode')
  210.             ->setParameter('channelCode'$channel->getCode());
  211.         } else {
  212.             $minBudget $budget 1000;
  213.             $variants $variants->innerJoin('o.channelPricings''channelPricing''WITH''channelPricing.channelCode = :channelCode AND channelPricing.price <= :price AND channelPricing.price >= :minPrice')
  214.             ->setParameter('price'$budget)
  215.             ->setParameter('minPrice'$minBudget)
  216.             ->setParameter('channelCode'$channel->getCode());
  217.         }
  218.         if (empty($pour_qui) == false) {
  219.             // $variants = $variants
  220.             // ->andWhere('o.giftFor = :giftFor')
  221.             // ->setParameter('giftFor', $pour_qui);
  222.             // $variants = $variants->innerJoin('o.productVariantAttribute', 'productVariantAttribute', 'WITH', 'productVariantAttribute.json_value = "'.$pour_qui.'"')
  223.             // ->setParameter('price', $budget)
  224.             // ->setParameter('channelCode', $channel->getCode());
  225.         }
  226.         if (count($productsIds) > 0) {
  227.             $variants $variants
  228.             ->innerJoin('o.product''product''WITH''product.id IN (:productsId)')
  229.             ->setParameter('productsId'$productsIds);
  230.         }
  231.       
  232.         if (empty($pour_qui)) {
  233.             $variants $variants
  234.             ->setMaxResults50 )
  235.             ->getQuery()
  236.             ->getResult();
  237.         }else{
  238.             // dump('ici');
  239.             $allVariants $variants
  240.             // ->setMaxResults( 50 )
  241.             ->getQuery()
  242.             ->getResult();
  243.             $giftVariant = [];
  244.             if (count($allVariants) > ) {
  245.     
  246.                 foreach($allVariants as $variant){
  247.                     $index 0;
  248.                     foreach($variant->getAttributes() as $attribute){
  249.                         if($attribute->getAttribute()->getId() == 67){
  250.                             foreach($attribute->getValue() as $value){
  251.                                 if($value == $pour_qui){
  252.                                     if($index == 50){
  253.                                         break;
  254.                                     }
  255.                                     $index++;
  256.                                     $giftVariant[$variant->getId()] = $variant;
  257.                                 }
  258.                             }
  259.                         }
  260.                     }
  261.                 }  
  262.         
  263.             }
  264.             $variants $giftVariant;
  265.                         
  266.         }
  267.         return $variants;
  268.     }
  269. }