src/Controller/Controller_Frontoffice/Article/ArticleController.php line 483

  1. <?php
  2. namespace App\Controller\Controller_Frontoffice\Article;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Entity\Commande;
  7. use App\Entity\Membres;
  8. use App\Entity\Newsletter;
  9. use App\Entity\Panier;
  10. use App\Entity\Articles;
  11. use App\Entity\Token;
  12. use App\Entity\CodePromo;
  13. use App\Entity\HistoriquePrixArticle;
  14. use App\Entity\Images;
  15. use App\Entity\Slider;
  16. use App\Entity\SousCategories;
  17. use App\Entity\Entreprise;
  18. use App\Entity\Categories;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  22. use Symfony\Component\HttpFoundation\Session\Session;
  23. use Symfony\Component\Serializer\Serializer;
  24. use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
  25. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  26. use Knp\Component\Pager\PaginatorInterface;
  27. use Symfony\Component\Serializer\SerializerInterface;;
  28. class ArticleController extends AbstractController
  29. {
  30.     #[Route('/products'name'tous_produit')]
  31.     public function productsAction(PaginatorInterface $paginator,Request $request,SerializerInterface $serializer,EntityManagerInterface $entityManager,)
  32.     {
  33.         $session = new Session();
  34.         $typeCompte "PARTICULIER";
  35.         if ($session->get("connectU") == "OK" && $session->get("userU") != null) {
  36.             if ($session->get("userU")->getCodeType() == 2) {
  37.                 $typeCompte "PRO";
  38.             }
  39.         }
  40.         $panier = array();
  41.         if($session->get("panier")){
  42.             $panier $session->get("panier");
  43.         }
  44.         $n count($panier);
  45.         $repository $entityManager->getRepository(Categories::class);
  46.         $categories $repository->findAll();
  47.         $repository $entityManager->getRepository(Articles::class);
  48.         $articles $repository->findBy(array("etat" => 1));
  49.         $listArticles = array();
  50.         $listArticleJS = array();
  51.         for($i=0;$i<count($articles);$i++){
  52.             $listArticles[$i]["article"] = $articles[$i];
  53.             $repository $entityManager->getRepository(SousCategories::class);
  54.             // $sCat = $repository->findOneById($articles[$i]['idSousCategorie']);
  55.             $sCat $repository->findOneById($articles[$i]->getIdSousCategorie());
  56.             $listArticles[$i]["categorie"] = "--";
  57.             if($sCat){
  58.                 $listArticles[$i]["categorie"] = $sCat->getTitre();
  59.             }
  60.             $listArticleJS[$articles[$i]->getId()] = $articles[$i];
  61.         }
  62.         $jsonArticle $serializer->serialize($listArticleJS'json');
  63.         $pagination $paginator->paginate(
  64.             $listArticles,
  65.             $request->query->getInt('page'1),
  66.             6
  67.         );
  68.         
  69.         $jsonArticle $serializer->serialize($listArticleJS'json');
  70.         return $this->render('frontoffice_bundle/article/tousProducts.html.twig', [
  71.             "listArticles" => $listArticles,
  72.             "categories" => $categories,
  73.             "articles" => $pagination,
  74.             "typeCompte" => $typeCompte,
  75.             "articlesJson" => $jsonArticle,
  76.             "listarticles" => $listArticles,
  77.             "npanier"=> $n,
  78.             'controller_name' => 'ArticleController'
  79.         ]);
  80.     }
  81.     
  82.     #[Route('/products/{name}/{id}/'name'prodsuct')]
  83.     #[Route('/products/{name}/{id}/{idSC}/'name'product_with_sc')]
  84.     public function productAction(PaginatorInterface $paginator,Request $request,SerializerInterface $serializer,EntityManagerInterface $entityManager,)
  85.     {
  86.         $session = new Session();
  87.         $typeCompte "PARTICULIER";
  88.         if ($session->get("connectU") == "OK" && $session->get("userU") != null) {
  89.             if ($session->get("userU")->getCodeType() == 2) {
  90.                 $typeCompte "PRO";
  91.             }
  92.         }
  93.         $panier = array();
  94.         if($session->get("panier")){
  95.             $panier $session->get("panier");
  96.         }
  97.         $n count($panier);
  98.         $name $request->attributes->get('name');
  99.         $id $request->attributes->get('id');
  100.         $idSC $request->attributes->get('idSC');
  101.         $repository $entityManager->getRepository(Categories::class);
  102.         $cats $repository->findAll();
  103.         $categories = [];
  104.         foreach ($cats as $cat) {
  105.             $categories[]["categorie"] = $cat;
  106.             $repository $entityManager->getRepository(SousCategories::class);
  107.             $sousCats $repository->findByIdCategorie($cat->getId());
  108.             $categories[]["sousCategorie"] = $sousCats;
  109.         }
  110.         if ($idSC == 0) {
  111.             $result $entityManager->createQuery("SELECT a.id FROM App\Entity\SousCategories a where a.idCategorie = " $id)->getScalarResult();
  112.             $ids array_map('current'$result);
  113.         } else {
  114.             $ids $idSC;
  115.         }
  116.         $repository $entityManager->getRepository(Articles::class);
  117.         $articles $repository->findBy(array("idSousCategorie" => $ids"etat" => 1));
  118.         // $listArticles = [];
  119.         // $listArticleJS = [];
  120.         // foreach ($articles as $article) {
  121.         //     $listArticles[]["article"] = $article;
  122.         //     $repository = $entityManager->getRepository(SousCategories::class);
  123.         //     $sCat = $repository->findOneById($article->getIdSousCategorie());
  124.         //     $listArticles[]["categorie"] = "--";
  125.         //     if ($sCat) {
  126.         //         $listArticles[]["categorie"] = $sCat->getTitre();
  127.         //     }
  128.         //     $listArticleJS[$article->getId()] = $article;
  129.         // }
  130.         $listArticles = array();
  131.         $listArticleJS = array();
  132.         for($i=0;$i<count($articles);$i++){
  133.             $listArticles[$i]["article"] = $articles[$i];
  134.             $repository $entityManager->getRepository(SousCategories::class);
  135.             // $sCat = $repository->findOneById($articles[$i]['idSousCategorie']);
  136.             $sCat $repository->findOneById($articles[$i]->getIdSousCategorie());
  137.             $listArticles[$i]["categorie"] = "--";
  138.             if($sCat){
  139.                 $listArticles[$i]["categorie"] = $sCat->getTitre();
  140.             }
  141.             // $listArticleJS[$articles[$i]['id']] = $articles[$i];
  142.             $listArticleJS[$articles[$i]->getId()] = $articles[$i];
  143.         }
  144.         $jsonArticle $serializer->serialize($listArticleJS'json');
  145.         
  146.         $pagination $paginator->paginate(
  147.             $listArticles,
  148.             $request->query->getInt('page'1)/*page number*/,
  149.             6/*limit per page*/
  150.         );
  151.         $jsonArticle $serializer->serialize($listArticleJS'json');
  152.         return $this->render('frontoffice_bundle/article/product.html.twig', [
  153.             "nom" => $name,
  154.             "listArticles" => $listArticles,
  155.             "categories" => $categories,
  156.             "articles" => $pagination,
  157.             "typeCompte" => $typeCompte,
  158.             "articlesJson" => $jsonArticle,
  159.             "listarticles" => $listArticles,
  160.             "npanier"=>$n,
  161.             'controller_name' => 'ArticleController'
  162.         ]);
  163.     }
  164.     
  165.     #[Route('/product/{name}/{nameProduct}/{id}/'name'detailsproduct')]
  166.     public function detailsProductAction($name,$id,$nameProductEntityManagerInterface $entityManager,Request $request): Response
  167.     {
  168.         $session = new Session();
  169.         $typeCompte "PARTICULIER";
  170.         if($session->get("connectU") == "OK" && $session->get("userU") != null){
  171.             if($session->get("userU")->getCodeType() == 2){
  172.                 $typeCompte "PRO";
  173.             }
  174.         }
  175.         $panier = array();
  176.         if($session->get("panier")){
  177.             $panier $session->get("panier");
  178.         }
  179.         $n count($panier);
  180.         $repository $entityManager->getRepository(Categories::class);
  181.         $cats $repository->findAll();
  182.         $categories = array();
  183.         for($i=0;$i<count($cats);$i++){
  184.             $categories[$i]["categorie"] = $cats[$i];
  185.             $repository $entityManager->getRepository(SousCategories::class);
  186.             $sousCats $repository->findByIdCategorie($cats[$i]->getId());
  187.             $categories[$i]["sousCategorie"] = $sousCats;
  188.         }
  189.         $repository $entityManager->getRepository(Articles::class);
  190.         $article $repository->findOneById($id);
  191.         if(!$article){
  192.             return $this->redirect("/");
  193.         }
  194.         $repository $entityManager->getRepository(SousCategories::class);
  195.         $scat $repository->findOneById($article->getIdSousCategorie());
  196.         $repository $entityManager->getRepository(Images::class);
  197.         $images $repository->findByIdArticle($id);
  198.         $repository $entityManager->getRepository(HistoriquePrixArticle::class);
  199.         $historique $repository->findBy(array("idArticle"=>$id),array("date"=>"DESC"));
  200.         $historiqueChart = array();
  201.         $index 0;
  202.         for($i=count($historique)-1;$i>=0;$i--){
  203.             $historiqueChart[$index] = $historique[$i];
  204.             $index++;
  205.             if($index 10){
  206.                 break;
  207.             }
  208.         }
  209.         $percent 0;
  210.         if(count($historiqueChart) > 2){
  211.             $i1 count($historiqueChart)-1;
  212.             $i2 count($historiqueChart)-2;
  213.             $prix1 0;
  214.             $prix2 0;
  215.             if($typeCompte == "PARTICULIER"){
  216.                 $prix1 $historiqueChart[$i1]->getPrixTTC();
  217.                 if($historiqueChart[$i1]->getPrixPromo() > && $historiqueChart[$i1]->getPrixPromo() < $historiqueChart[$i1]->getPrixTTC()){
  218.                     $prix1 $historiqueChart[$i1]->getPrixPromo();
  219.                 }
  220.                 $prix2 $historiqueChart[$i2]->getPrixTTC();
  221.                 if($historiqueChart[$i2]->getPrixPromo() > && $historiqueChart[$i2]->getPrixPromo() < $historiqueChart[$i2]->getPrixTTC()){
  222.                     $prix2 $historiqueChart[$i2]->getPrixPromo();
  223.                 }
  224.             }else{
  225.                 $prix1 $historiqueChart[$i1]->getPrixProTTC();
  226.                 if($historiqueChart[$i1]->getPrixPromo() > && $historiqueChart[$i1]->getPrixPromo() < $historiqueChart[$i1]->getPrixProTTC()){
  227.                     $prix1 $historiqueChart[$i1]->getPrixPromo();
  228.                 }
  229.                 $prix2 $historiqueChart[$i2]->getPrixProTTC();
  230.                 if($historiqueChart[$i2]->getPrixPromo() > && $historiqueChart[$i2]->getPrixPromo() < $historiqueChart[$i2]->getPrixProTTC()){
  231.                     $prix2 $historiqueChart[$i2]->getPrixPromo();
  232.                 }
  233.             }
  234.             //----
  235.             if($prix2 0){
  236.                 $percent = (($prix1-$prix2)/$prix2)*100;
  237.             }
  238.             $percent round($percent2);
  239.         }
  240.         $query $entityManager->createQuery(
  241.             'SELECT c 
  242.             FROM App\Entity\SousCategories c
  243.             INNER JOIN App\Entity\Articles a
  244.             WITH a.idSousCategorie = c.id'
  245.         );
  246.         
  247.         $categoriesList =  $query->getResult();
  248.         //----- articles similaires -----//
  249.         //$result = $entityManager->createQuery("SELECT a.id FROM BackofficeBundle:SousCategories a where a.idCategorie = ".$scat->getIdCategorie())->getScalarResult();
  250.         $result $entityManager->createQueryBuilder()
  251.             ->select('a.id')
  252.             ->from('App\Entity\SousCategories''a')
  253.             ->where('a.idCategorie = :cat1')
  254.             ->setParameter('cat1'$scat->getIdCategorie())
  255.             ->getQuery()
  256.             ->getScalarResult();
  257.         $ids array_map('current'$result);
  258.         
  259.         $connection $entityManager->getConnection();
  260.         // $statement = $connection->prepare("SELECT * FROM App\Entity\Articles where idSousCategorie IN ('".implode("','", $ids)."') AND id !=".$article->getId()."  ORDER BY RAND() LIMIT 4");
  261.         $query $entityManager->createQuery('
  262.             SELECT a 
  263.             FROM App\Entity\Articles a
  264.             WHERE a.idSousCategorie IN (:ids)
  265.             AND a.id != :article_id
  266.         ')
  267.         ->setParameter('ids'$ids)
  268.         ->setParameter('article_id'$article->getId())
  269.         ->setMaxResults(4);
  270.         
  271.         $articles $query->getResult();
  272.         
  273.         // $statement->execute();
  274.         // $articles = $statement->fetchAll();
  275.         
  276.         //$repository = $entityManager->getRepository(Articles');
  277.         //$articles = $repository->findBy(array("idSousCategorie"=>$ids),array(),4);
  278.         $listArticles = array();
  279.         $listArticleJS = array();
  280.         for($i=0;$i<count($articles);$i++){
  281.             $listArticles[$i]["article"] = $articles[$i];
  282.             $repository $entityManager->getRepository(SousCategories::class);
  283.             // $sCat = $repository->findOneById($articles[$i]['idSousCategorie']);
  284.             $sCat $repository->findOneById($articles[$i]->getIdSousCategorie());
  285.             $listArticles[$i]["categorie"] = "--";
  286.             if($sCat){
  287.                 $listArticles[$i]["categorie"] = $sCat->getTitre();
  288.             }
  289.             // $listArticleJS[$articles[$i]['id']] = $articles[$i];
  290.             $listArticleJS[$articles[$i]->getId()] = $articles[$i];
  291.         }
  292.         $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
  293.         JsonEncoder()));
  294.         $jsonArticle $serializer->serialize($listArticleJS'json');
  295.         //------- mes derniere consultation -----//
  296.         /*$old = $session->get("articles");
  297.         if(!$old){
  298.             $old = array();
  299.         }
  300.         if(!in_array($article->getId(), $old)){
  301.             $new = array();
  302.             $index = 0;
  303.             $new[$index] = $article->getId();
  304.             $index++;
  305.             for($i=0;$i<3;$i++){
  306.                 if($i == count($old)){
  307.                     break;
  308.                 }
  309.                 else{
  310.                     $new[$index] = $old[$i];
  311.                 }
  312.                 $index++;
  313.             }
  314.             $session->set("articles",$new);
  315.         }*/
  316.         return $this->render('frontoffice_bundle/article/detailsProduct.html.twig', array("npanier"=>$n,"nom"=>$name,"categoriesList"=>$categoriesList ,"categories"=>$categories,"historiqueChart"=>$historiqueChart,"article"=>$article,"images"=>$images,"scat"=>$scat,"typeCompte"=>$typeCompte,"articles"=>$listArticles,"articlesJson"=>$jsonArticle,"percent"=>$percent,'controller_name' => 'ArticleController'));
  317.     }
  318.     //------ promo
  319.     #[Route('/promotions'name'promotions')]
  320.     public function promotionsAction(EntityManagerInterface $entityManager,Request $request,PaginatorInterface $paginator): Response
  321.     {
  322.          $session = new Session();
  323.          $name="";
  324.          $id=0;
  325.          $idSC 0;
  326.          $typeCompte "PARTICULIER";
  327.  
  328.          $requestSql "a.prixPromo > 0 and a.prixPromo < a.prixTTC and a.etat = 1";
  329.  
  330.          if($session->get("connectU") == "OK" && $session->get("userU") != null){
  331.              if($session->get("userU")->getCodeType() == 2){
  332.                  $typeCompte "PRO";
  333.  
  334.                  $requestSql "a.prixPromo > 0 and a.prixPromo < a.prixProTTC and a.etat = 1";
  335.              }
  336.          }
  337.  
  338.          $panier = array();
  339.          if($session->get("panier")){
  340.              $panier $session->get("panier");
  341.          }
  342.          $n count($panier);
  343.          
  344.          $repository $entityManager->getRepository(Categories::class);
  345.          $cats $repository->findAll();
  346.  
  347.          $categories = array();
  348.  
  349.          for($i=0;$i<count($cats);$i++){
  350.              $categories[$i]["categorie"] = $cats[$i];
  351.  
  352.              $repository $entityManager->getRepository(SousCategories::class);
  353.              $sousCats $repository->findByIdCategorie($cats[$i]->getId());
  354.  
  355.              $categories[$i]["sousCategorie"] = $sousCats;
  356.          }
  357.  
  358.  
  359.          $repo $entityManager->getRepository(Articles::class);
  360.  
  361.          $qb $repo->createQueryBuilder('a');
  362.          $qb->select('a');
  363.          $qb->where($requestSql);
  364.  
  365.          $articles $qb->getQuery()->getResult();
  366.  
  367.          $listArticles = array();
  368.  
  369.  
  370.          $listArticleJS = array();
  371.  
  372.          for($i=0;$i<count($articles);$i++){
  373.              $listArticles[$i]["article"] = $articles[$i];
  374.  
  375.              $repository $entityManager->getRepository(SousCategories::class);
  376.              $sCat $repository->findOneById($articles[$i]->getIdSousCategorie());
  377.  
  378.              $listArticles[$i]["categorie"] = "--";
  379.  
  380.              $listArticles[$i]["cat"] = "--";
  381.  
  382.              if($sCat){
  383.                  $listArticles[$i]["categorie"] = $sCat->getTitre();
  384.  
  385.                  $repository $entityManager->getRepository(Categories::class);
  386.                  $c $repository->findOneById($sCat->getIdCategorie());
  387.  
  388.                  if($c){
  389.                      $listArticles[$i]["cat"] = $c->getTitre();
  390.                  }
  391.              }
  392.  
  393.              $listArticleJS[$articles[$i]->getId()] = $articles[$i];
  394.  
  395.          }
  396.  
  397.          $pagination $paginator->paginate(
  398.              $listArticles// query NOT result
  399.              $request->query->getInt('page'1), // page number
  400.              // limit per page
  401.          );
  402.  
  403.          $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
  404.          JsonEncoder()));
  405.          $jsonArticle $serializer->serialize($listArticleJS'json');
  406.  
  407.          return $this->render('frontoffice_bundle/article/promotions.html.twig',
  408.           array("nom"=>$name,"categories"=>$categories,"articles"=>$pagination,"typeCompte"=>$typeCompte,"articlesJson"=>$jsonArticle,'controller_name' => 'ArticleController',"npanier"=>$n));
  409.     }
  410. }