src/Controller/WidgetController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Hermes\Article;
  4. use App\Entity\Hermes\ArticleFamille;
  5. use App\Entity\Hermes\ArticleGamme;
  6. use App\Entity\Hermes\Client;
  7. use App\Entity\Hermes\ClientArticleIndispensable;
  8. use App\Entity\Hermes\ClientGroupe;
  9. use App\Entity\Hermes\UserCommercial;
  10. use App\Repository\ArticleMarqueRepository;
  11. use App\Repository\ArticleRepository;
  12. use App\Repository\ClientRestrictionVenteRepository;
  13. use App\Repository\UserClientRepository;
  14. use App\Services\Trie\TrieServices;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Contracts\Cache\CacheInterface;
  20. use Symfony\Contracts\Cache\ItemInterface;
  21. class WidgetController extends AbstractController
  22. {
  23.     public function __construct(
  24.         private ManagerRegistry $doctrine,
  25.         private HermesController $hermesController,
  26.         private ClientRestrictionVenteRepository $clientRestrictionVenteRepository,
  27.         private PromotionController $promotionController,
  28.         private ArticleRepository $articleRepository,
  29.         private TrieServices $trieServices,
  30.     ) {
  31.         $this->doctrine $doctrine;
  32.     }
  33.     public function header(
  34.         CacheInterface $cache,
  35.         UserClientRepository $userClientRepository,
  36.         ArticleMarqueRepository $articleMarqueRepository,
  37.         ArticleRepository $articleRepository
  38.     ): Response {
  39.         $indispensables null;
  40.         $marquesPrioritaires = [];
  41.         $bonsPlansWeb = [];
  42.         $affichageBonsPlansWeb false;
  43.         $restrictionCategorie = [];
  44.         $user null;
  45.         $clientGroupe null;
  46.         $client null;
  47.         $groupeDom $this->doctrine->getRepository(ClientGroupe::class, 'hermes')->findOneBy(['nom' => 'T-DOM']);
  48.         if ($this->getUser()) {
  49.             $email $this->getUser()->getUserIdentifier();
  50.             $user $userClientRepository->findOneBy(['email' => $email]);
  51.             $client $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
  52.             if (null !== $client) {
  53.                 $clientGroupe $client->getClientGroupe();
  54.                 /* @phpstan-ignore-next-line */
  55.                 $indispensables $this->doctrine->getRepository(ClientArticleIndispensable::class, 'hermes')->findIndispensables($client);
  56.             }
  57.             $restrictionCategorie $this->clientRestrictionVenteRepository->findRestriction($client'Categorie');
  58.             $marques $articleMarqueRepository->findByCheckRestrictionVente($client);
  59.             $bonsPlansWeb $articleRepository->findByCheckRestrictionVenteFilters($clienttrue);
  60.             === \count($bonsPlansWeb) ? $affichageBonsPlansWeb false $affichageBonsPlansWeb true;
  61.             foreach ($marques as $marque) {
  62.                 if (
  63.                     $marque->getisPrioritaire()
  64.                     && null !== $marque->getClientGroupes()
  65.                     && !\in_array($clientGroupe$marque->getClientGroupes()->getValues(), false)
  66.                 ) {
  67.                     $marquesPrioritaires[] = $marque;
  68.                 }
  69.             }
  70.         }
  71.         $accessoireMenus $this->hermesController->getMenuAccessoire();
  72.         $panier null;
  73.         $nbArticlesPanier 0;
  74.         if ($this->getUser()) {
  75.             $email $this->getUser()->getUserIdentifier();
  76.             $panier $userClientRepository->findOneBy(['email' => $email])->getPanier();
  77.             if ($panier) {
  78.                 foreach ($panier->getLignes() as $ligne) {
  79.                     if (!$ligne->getOffert() && !$ligne->getRemise()) {
  80.                         ++$nbArticlesPanier;
  81.                     }
  82.                 }
  83.             }
  84.         }
  85.         // $cache->delete('marques');
  86.         // [$marquesCom, $marquesOem, $marquesAcc] = $cache->get('marques', function (ItemInterface $item) {
  87.         //     $item->expiresAfter(600);
  88.         $marquesCom = [];
  89.         $marquesOem = [];
  90.         $marquesAcc = [];
  91.         if ($this->getUser()) {
  92.             $email $this->getUser()->getUserIdentifier();
  93.             $user $userClientRepository->findOneBy(['email' => $email]);
  94.             $client $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
  95.             if (null !== $client) {
  96.                 $clientGroupe $client->getClientGroupe();
  97.             }
  98.         }
  99.         $articles $this->doctrine->getRepository(Article::class, 'hermes')->findAll();
  100.         foreach ($articles as $article) {
  101.             if (
  102.                 null !== $article->getCategorie()
  103.                 && null !== $article->getArticleMarque()
  104.                 && null !== $article->getArticleMarque()->getClientGroupes()
  105.                 && !\in_array($clientGroupe$article->getArticleMarque()->getClientGroupes()->getValues(), false)
  106.             ) {
  107.                 if ('1-COM' === $article->getCategorie()->getCode()) {
  108.                     if (
  109.                         !\in_array($article->getArticleMarque(), $marquesComtrue)
  110.                         && true === $article->getArticleMarque()->getisVisibleAriane()
  111.                     ) {
  112.                         $marquesCom[] = $article->getArticleMarque();
  113.                     }
  114.                 } elseif ('2-OEM' === $article->getCategorie()->getCode()) {
  115.                     if (
  116.                         !\in_array($article->getArticleMarque(), $marquesOemtrue)
  117.                         && true === $article->getArticleMarque()->getisVisibleAriane()
  118.                     ) {
  119.                         $marquesOem[] = $article->getArticleMarque();
  120.                     }
  121.                 } elseif ('3-ACC' === $article->getCategorie()->getCode()) {
  122.                     if (
  123.                         !\in_array($article->getArticleMarque(), $marquesAcctrue)
  124.                         && true === $article->getArticleMarque()->getisVisibleAriane()
  125.                     ) {
  126.                         $marquesAcc[] = $article->getArticleMarque();
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.         usort($marquesCom, function ($a$b) {
  132.             return ($a->getNom() < $b->getNom()) ? -1;
  133.         });
  134.         usort($marquesOem, function ($a$b) {
  135.             return ($a->getNom() < $b->getNom()) ? -1;
  136.         });
  137.         usort($marquesAcc, function ($a$b) {
  138.             return ($a->getNom() < $b->getNom()) ? -1;
  139.         });
  140.         // return [$marquesCom, $marquesOem, $marquesAcc];
  141.         // });
  142.         usort($marquesPrioritaires, function ($a$b) {
  143.             return ($a->getNom() < $b->getNom()) ? -1;
  144.         });
  145.         $totalHt null;
  146.         $articles null;
  147.         if ($this->getUser()) {
  148.             $totalHt $this->promotionController->getMontantTotalHtWithPromotion($client$user->getPanier());
  149.             $articles = [];
  150.             $articleRepository $this->doctrine->getRepository(Article::class, 'hermes');
  151.             foreach ($user->getPanier()->getLignes() as $ligne) {
  152.                 $article $articleRepository->find($ligne->getArticle());
  153.                 if (null === $ligne->getRemise() && true !== $ligne->getOffert()) {
  154.                     $articles[] = [$article$ligne->getQuantite(), $ligne];
  155.                 }
  156.             }
  157.         }
  158.         $brother $this->doctrine->getRepository(ArticleGamme::class, 'hermes')->findOneBy(['nom' => 'brother']);
  159.         $canon $this->doctrine->getRepository(ArticleGamme::class, 'hermes')->findOneBy(['nom' => 'canon']);
  160.         $epson $this->doctrine->getRepository(ArticleGamme::class, 'hermes')->findOneBy(['nom' => 'epson']);
  161.         $hp $this->doctrine->getRepository(ArticleGamme::class, 'hermes')->findOneBy(['nom' => 'hp']);
  162.         $promotions $this->articleRepository->findByCheckRestrictionVenteFilters($clientnull4);
  163.         $promotions $this->trieServices->sortByIsPrioritaire($promotions);
  164.         return $this->render('partial/_header.html.twig', [
  165.             'client' => $client,
  166.             'clientGroupe' => $clientGroupe,
  167.             'restrictionCategorie' => $restrictionCategorie,
  168.             // PANIER
  169.             'panier' => $panier,
  170.             'nbArticlePanier' => $nbArticlesPanier,
  171.             'articles' => $articles,
  172.             'totalHt' => $totalHt,
  173.             // PRODUITS
  174.             'groupeDom' => $groupeDom,
  175.             'brother' => $brother,
  176.             'canon' => $canon,
  177.             'epson' => $epson,
  178.             'hp' => $hp,
  179.             'accessoireMenus' => $accessoireMenus,
  180.             // MARQUES
  181.             'marquesPrioritaires' => $marquesPrioritaires,
  182.             'marquesAcc' => $marquesAcc,
  183.             'marquesCom' => $marquesCom,
  184.             'marquesOem' => $marquesOem,
  185.             // INDISPENSABLES
  186.             'indispensables' => $indispensables,
  187.             // DESTOCKAGE (anciennement BONS PLANS WEB)
  188.             'affichageBonsPlansWeb' => $affichageBonsPlansWeb,
  189.             'promotions' => $promotions,
  190.         ]);
  191.     }
  192.     public function footer(UserClientRepository $userClientRepository): Response
  193.     {
  194.         $commercial null;
  195.         if ($this->getUser()) {
  196.             $email $this->getUser()->getUserIdentifier();
  197.             $user $userClientRepository->findOneBy(['email' => $email]);
  198.             if ($user->getCompte()->getCommercial()) {
  199.                 $client $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getCompte()->getSuperClient()->getNumero()]);
  200.                 $commercial $this->doctrine->getRepository(UserCommercial::class, 'hermes')->find(['id' => $client->getCommercial()]);
  201.             }
  202.         }
  203.         return $this->render('partial/_footer.html.twig', [
  204.             'commercial' => $commercial,
  205.         ]);
  206.     }
  207.     // liste des references pour autocomplétion de la barre de recherche
  208.     #[Route('/references-autocompletion'name'references_autocompletion')]
  209.     public function produits(
  210.         CacheInterface $cache,
  211.         ArticleRepository $articleRepository,
  212.         UserClientRepository $userClientRepository
  213.     ): Response {
  214.         // $produits = $this->doctrine->getRepository(Article::class, 'hermes')->findBy(['isVisibleAriane' => 1], ['designation' => 'ASC']);
  215.         $email $this->getUser()->getUserIdentifier();
  216.         $user $userClientRepository->findOneBy(['email' => $email]);
  217.         $client $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
  218.         $produits $articleRepository->getAutocompletion($client);
  219.         $familles $this->doctrine->getRepository(ArticleFamille::class, 'hermes')->findBy([], ['nom' => 'ASC']);
  220.         $cache->delete('produits');
  221.         $cacheReturn $cache->get('produits', function (ItemInterface $item) use ($produits$familles) {
  222.             $item->expiresAfter(3600);
  223.             $rechProduit = [];
  224.             foreach ($produits as $produit) {
  225.                 // if ((null !== $produit->getArticleMarque() && $produit->getArticleMarque()->getisVisibleAriane())  || null === $produit->getArticleMarque()) {
  226.                 if (!empty($produit->getNumero())) {
  227.                     $rechProduit[] = $produit->getNumero();
  228.                 }
  229.                 if (!empty($produit->getDescription1())) {
  230.                     $rechProduit[] = $produit->getDescription1();
  231.                 }
  232.                 if (!empty($produit->getCodeBarre())) {
  233.                     $rechProduit[] = $produit->getCodeBarre();
  234.                 }
  235.             }
  236.             // }
  237.             foreach ($familles as $famille) {
  238.                 if (!empty($famille->getNom())) {
  239.                     $rechProduit[] = $famille->getNom();
  240.                 }
  241.             }
  242.             return $rechProduit;
  243.         });
  244.         return $this->json($cacheReturn);
  245.     }
  246. }