src/Controller/Controller_Frontoffice/Panier/PanierController.php line 104

  1. <?php
  2. namespace App\Controller\Controller_Frontoffice\Panier;
  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\Token;
  11. use App\Entity\Articles;
  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 PanierController extends AbstractController
  29. {
  30.     #[Route('/panier'name'panier')]
  31.     public function panierAction(EntityManagerInterface $entityManager,Request $request): Response
  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.         $session = new Session();
  41.         $panier = array();
  42.         $petitpan = array();
  43.         if($session->get("panier")){
  44.             $panier $session->get("panier");
  45.         }
  46.         if($session->get("petitpan")){
  47.             $petitpan $session->get("petitpan");
  48.         }
  49.         $n count($panier);
  50.         $article = array();
  51.         $total 0;
  52.         $i=0;
  53.         $totalTva 0;
  54.         $livraison 0;
  55.         foreach ($panier as $p){
  56.             $repository $entityManager->getRepository(Articles::class);
  57.             $pr $repository->findOneById($p->getIdArticle());
  58.             if($pr){
  59.                 $prixU 0;
  60.                 if($typeCompte == "PARTICULIER"){
  61.                     $prixU $pr->getPrixTTC();
  62.                     if($pr->getPrixPromo() > && $pr->getPrixPromo() < $pr->getPrixTTC()){
  63.                         $prixU $pr->getPrixPromo();
  64.                     }
  65.                 }else{
  66.                     $prixU $pr->getPrixProTTC();
  67.                     if($pr->getPrixPromo() > && $pr->getPrixPromo() < $pr->getPrixProTTC()){
  68.                         $prixU $pr->getPrixPromo();
  69.                     }
  70.                 }
  71.                 $prixTotal $p->getQte()*$prixU;
  72.                 $article[$i]["obj"] = $pr;
  73.                 $p->setPrixU($prixU);
  74.                 $p->setPrixTotal($prixTotal);
  75.                 $article[$i]["pan"] = $p;
  76.                 $total $total $prixTotal;
  77.                 //$totalTva = $totalTva + ((($article[$i]["obj"]->getPrixHT()*$article[$i]["obj"]->getTva())/100)*$article[$i]["qte"]);
  78.                 $i++;
  79.             }
  80.         }
  81.         $repository $entityManager->getRepository(Entreprise :: class);
  82.         $entreprise $repository->findOneById(1);
  83.         if($total <= $entreprise->getPrixMinCmd() && $total 0){
  84.             $livraison $entreprise->getFraisLivraison();
  85.         }
  86.         if($total $entreprise->getPrixMinCmd2()){
  87.             $livraison $entreprise->getFraisLivraison2();
  88.         }
  89.         $connect ="";
  90.         if($session->get("connectU")){
  91.             $connect $session->get("connectU");
  92.         }
  93.         $totalPromo 0;
  94.         
  95.         $response "";
  96.         $codePromo "";
  97.         if($request->getMethod() == "POST"){
  98.             $formName $request->get("formName");
  99.             if ($formName == "updateQte") {
  100.                 $ids $request->get("ids");
  101.                 for ($i 0$i count($ids); $i++) {
  102.                     $qte $_POST["quant-".$ids[$i]];
  103.                     $prixTotal $qte $panier[$ids[$i]]->getPrixU();
  104.                     $panier[$ids[$i]]->setQte($qte);
  105.                     $panier[$ids[$i]]->setPrixTotal($prixTotal);
  106.                     //----- update database ------//
  107.                     if($session->get("connectU") && $session->get("connectU") == "OK"){
  108.                         $idCommande $session->get("commande");
  109.                         
  110.                         $repository $entityManager->getRepository(Panier::class);
  111.                         $panierDB $repository->findOneBy(array("idCommande"=>$idCommande,"idArticle"=>$panier[$ids[$i]]->getIdArticle()));
  112.                         if($panierDB){
  113.                             $panierDB->setQte($qte);
  114.                             $panierDB->setPrixTotal($prixTotal);
  115.                             $entityManager->flush();
  116.                         }
  117.                     }
  118.                 }
  119.                 return $this->redirect("/panier/");
  120.             }
  121.             elseif($formName == "codePromo"){
  122.                 if($total 0){
  123.                     $codePromo $request->get("codePromo");
  124.                     $repository $entityManager->getRepository(CodePromo::class);
  125.                     $promo $repository->findOneByCode($codePromo);
  126.                     
  127.                     if(!$promo){
  128.                         $response "Code promo invalide !";
  129.                     }
  130.                     else{
  131.                         $expired false;
  132.                         if($promo->getIfDateFin() == 1){
  133.                             $now = new \DateTime();
  134.                             if($now->format("Y-m-d H:i") > $promo->getDateFin()->format("Y-m-d H:i")){
  135.                                 $expired true;
  136.                             }
  137.                         }
  138.                         if($expired == true){
  139.                             $totalTTC $total;
  140.                             $totalPromo = ($totalTTC*$promo->getPromo())/100;
  141.                             $response "OK";
  142.                         }
  143.                     }
  144.                    
  145.                 }
  146.             }
  147.            
  148.         }
  149.         //----------- update commande --------//
  150.         if($session->get("connectU") && $session->get("connectU") == "OK"){
  151.             
  152.             $idCommande $session->get("commande");
  153.             $repository $entityManager->getRepository(Commande::class);
  154.             $commande $repository->findOneById($idCommande);
  155.             if($commande){
  156.                 $commande->setTotal($total);
  157.                 //----- livraison ----//
  158.     
  159.                 $commande->setLivraison($livraison);
  160.     
  161.                 //----- promo ----//
  162.     
  163.                 $commande->setCodePromo($codePromo);
  164.                 $commande->setPromo($totalPromo);
  165.     
  166.                 $entityManager->flush();
  167.             }
  168.         }
  169.         return $this->render('frontoffice_bundle/panier/panier.html.twig',
  170.          array('controller_name' => 'PanierController',"npanier"=>$n,"articles"=>$article,"total"=>$total,"connect"=>$connect,"totalTva"=>$totalTva,
  171.          "totalPromo"=>$totalPromo,"response"=>$response,"codePromo"=>$codePromo,"livraison"=>$livraison));
  172.     }
  173.     #[Route('/deleteFromPanier'name'deleteFromPanier')]
  174.     public function deletecPanierAction(EntityManagerInterface $entityManager,Request $request): Response
  175.     {
  176.         
  177.         $session = new Session();
  178.         $panier = array();
  179.         $petitpan = array();
  180.         if($session->get("panier")){
  181.             $panier $session->get("panier");
  182.             //----- delete where user is connected -----//
  183.             if($session->get("connectU") && $session->get("connectU") == "OK"){
  184.                 $idCommande $session->get("commande");
  185.                 
  186.                 $repository $entityManager->getRepository(Panier::class);
  187.                 $panierDB $repository->findOneBy(array("idCommande"=>$idCommande,"idArticle"=>$panier[$_GET['id']]->getIdArticle()));
  188.                 if($panierDB){
  189.                     $repository $entityManager->getRepository(Commande::class);
  190.                     $commande $repository->findOneById($idCommande);
  191.                     $commande->setTotal($commande->getTotal()-$panierDB->getPrixTotal());
  192.                     $total $commande->getTotal();
  193.                     $livraison 0;
  194.                     $repository $entityManager->getRepository(Entreprise::class);
  195.                     $entreprise $repository->findOneById(1);
  196.                     if($total <= $entreprise->getPrixMinCmd() && $total 0){
  197.                         $livraison $entreprise->getFraisLivraison();
  198.                     }
  199.                     if($total $entreprise->getPrixMinCmd2()){
  200.                         $livraison $entreprise->getFraisLivraison2();
  201.                     }
  202.                     //----- update code Promo -----//
  203.                     $commande->setLivraison($livraison);
  204.                     $entityManager->remove($panierDB);
  205.                     $entityManager->flush();
  206.                 }
  207.             }
  208.             unset($panier[$_GET['id']]);
  209.             $session->set("panier",$panier);
  210.             //----petit panier
  211.             if($session->get("petitpan")){
  212.                 $petitpan $session->get("petitpan");
  213.                 unset($petitpan[$_GET['id']]);
  214.                 $session->set("petitpan",$petitpan);
  215.             }
  216.         }
  217.         $response "OK";
  218.         return new Response($response);
  219.     }
  220.     //----- ajouter dans le panier
  221.     #[Route('/addpanier'name'addpanier')]
  222.     public function addPanierAction(EntityManagerInterface $entityManager,Request $request): Response
  223.     {
  224.         $session = new Session();
  225.         $typeCompte "PARTICULIER";
  226.         if($session->get("connectU") == "OK" && $session->get("userU") != null){
  227.             if($session->get("userU")->getCodeType() == 2){
  228.                 $typeCompte "PRO";
  229.             }
  230.         }
  231.         
  232.         $session = new Session();
  233.         $panier = array();
  234.         $petitpan= array();
  235.         if($session->get("panier")){
  236.             $panier $session->get("panier");
  237.         }
  238.         //------petit panier
  239.         if($session->get("petitpan")){
  240.             $petitpan $session->get("petitpan");
  241.         }
  242.         
  243.         $idArticle $request->get("idArticle");
  244.         $quantite $request->get("quantite");
  245.         if (array_key_exists($idArticle$panier)) {
  246.             $response "EXIST";
  247.         }
  248.         else{
  249.             $repository $entityManager->getRepository(Articles::class);
  250.             $t $repository->findOneById($idArticle);
  251.             if($quantite $t->getMinQte()){
  252.                 $response "QUANTITY";
  253.             }
  254.             else{
  255.                 $repository $entityManager->getRepository(SousCategories::class);
  256.                 $sc $repository->findOneById($t->getIdSousCategorie());
  257.                 $designation "";
  258.                 if($sc){
  259.                     $designation $sc->getTitre();
  260.                 }
  261.                 $infoArticle $t->getTitre();
  262.                 if(!empty($infoArticle)){
  263.                     $designation $designation." (".$infoArticle.")";
  264.                 }
  265.                 $prixU 0;
  266.                 if($typeCompte == "PARTICULIER"){
  267.                     $prixU $t->getPrixTTC();
  268.                     if($t->getPrixPromo() > && $t->getPrixPromo() < $t->getPrixTTC()){
  269.                         $prixU $t->getPrixPromo();
  270.                     }
  271.                 }else{
  272.                     $prixU $t->getPrixProTTC();
  273.                     if($t->getPrixPromo() > && $t->getPrixPromo() < $t->getPrixProTTC()){
  274.                         $prixU $t->getPrixPromo();
  275.                     }
  276.                 }
  277.                 $prixTotal $quantite*$prixU;
  278.                 $p = new Panier();
  279.                 $p->setIdArticle($idArticle);
  280.                 $p->setDesignation($designation);
  281.                 $p->setPrixU($prixU);
  282.                 $p->setPrixTotal($prixTotal);
  283.                 $p->setQte($quantite);
  284.                 $p->setUnite($t->getUnite());
  285.                 $panier[$idArticle] = $p;
  286.                 $session->set("panier",$panier);
  287.                 //-----mettre  l'article dans la session pour le petit panier
  288.                 $petitpan[$idArticle]['produit'] = $t;
  289.                 $petitpan[$idArticle]['panier'] = $p;
  290.                 $session->set("petitpan",$petitpan);
  291.                 //-----IF USER CONNECTED - SAVE DATA IN DATA BASE.
  292.                 if($session->get("connectU") && $session->get("connectU") == "OK"){
  293.                     
  294.                     $idCommande $session->get("commande");
  295.                     $p->setIdCommande($idCommande);
  296.                     $entityManager->persist($p);
  297.                     $entityManager->flush();
  298.                     $repository $entityManager->getRepository(Commande::class);
  299.                     $commande $repository->findOneById($idCommande);
  300.                     $totalC $commande->getTotal();
  301.                     $t $totalC $prixTotal;
  302.                     $commande->setTotal($t);
  303.                     //----- livraison ----//
  304.                     $livraison 0;
  305.                     $repository $entityManager->getRepository(Entreprise::class);
  306.                     $entreprise $repository->findOneById(1);
  307.                     if($t <= $entreprise->getPrixMinCmd() && $t 0){
  308.                         $livraison $entreprise->getFraisLivraison();
  309.                     }
  310.                     if($t $entreprise->getPrixMinCmd2()){
  311.                         $livraison $entreprise->getFraisLivraison2();
  312.                     }
  313.                     $commande->setLivraison($livraison);
  314.                     $entityManager->flush();
  315.                 }
  316.                 $response "OK";
  317.             }
  318.         }
  319.         return new Response($response);
  320.     }
  321. }