<?php
namespace App\Controller\cart;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\stock\Produit;
use App\Repository\stock\ProduitRepository;
use App\Repository\user\AbonneRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use App\ControllerModel\user\paramUtilTrait;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\user\UtilisateurRepository;
use App\Repository\stock\VilleRepository;
use App\Repository\client\ClientRepository;
use App\Repository\stock\PrixRigueurRepository;
use App\Repository\cms\MenuRepository;
use App\Repository\stock\LigneCommandeRepository;
use App\Repository\client\EtatClientRepository;
/**
* @Route("/cart")
*/
class CartController extends AbstractController
{
use paramUtilTrait;
public function __construct(AbonneRepository $abonneRepository, MenuRepository $menuRepository, ProduitRepository $productsRepository
,UtilisateurRepository $utilisateurRepository, VilleRepository $villeRepository, ClientRepository $clientRepository, PrixRigueurRepository $prixRigueurRepository,
LigneCommandeRepository $ligneCommandeRepository, EtatClientRepository $etatClientRepository
) {
// parent::__construct();
$this->abonneRepository = $abonneRepository;
$this->menuRepository = $menuRepository;
$this->productsRepository = $productsRepository;
$this->utilisateurRepository = $utilisateurRepository;
$this->villeRepository =$villeRepository ;
$this->clientRepository = $clientRepository;
$this->prixRigueurRepository = $prixRigueurRepository ;
$this->ligneCommandeRepository = $ligneCommandeRepository ;
$this->etatClientRepository = $etatClientRepository;
}
/**
* @Route("/info", name="cart_index")
*/
public function index(Request $request, SessionInterface $session)
{
$panier = $session->get("panier", []);
$em = $this->getDoctrine()->getManager();
$adresseWeb = $request->getHost();
$typeSite = 1;
$objetInitial= $this->abonneRepository->findOneBy(['adresseWeb'=>$adresseWeb]);
$objetInitial= $this->abonneRepository->find(62);
if($typeSite == 1)
$listeMenu = $this->creerTabMenu($em,0,$objetInitial->getId(),$this->menuRepository);
else
$listeMenu = $this->creerTabMenu($em,0,$objetInitial->getId(), $this->menuRepository);
if($objetInitial == null ){
$template = $templateRepository->find(20);
}else{
$template = $objetInitial->getTemplate();
// $template = $em->getRepository($this->cmsBundle . 'Template')->find(1);
}
// On "fabrique" les données
$dataPanier = [];
$total = 0;
//$session->remove("panier");
// var_dump($panier); exit;
foreach($panier as $id => $quantite){
$product = $this->productsRepository->find($id);
$dataPanier[] = [
"produit" => $product,
"quantite" => $quantite['quantite'],
"prix" => $quantite['prix']
];
$total += $quantite['prix'] * $quantite['quantite']; //$product->getPrice()
}
if($template != null ){
if($template->getNomDossierTemplate()==''){
$nomTemplate = "Default";
}else{
$nomTemplate = $template->getNomDossierTemplate();
}
}else{
$nomTemplate = "Default";
//var_dump(1);exit;
}
//exit;
$objetAbonne = $objetInitial;
return $this->render('site/'.$nomTemplate.'/cart/index.html.twig', compact("dataPanier", "total", "listeMenu", "typeSite","objetAbonne" ));
}
/**
* @Route("/add", name="cart_add")
*/
public function add(Request $request, SessionInterface $session)
{
// On récupère le panier actuel
$quantite = $request->get('qteSaisie');
$unite = $request->get('qteUnite');
$prix = $request->get('prixProduct');
$id = $request->get('id');
// var_dump($quantite,$unite,$prix, $id );exit;
$rep =array();
$total=0;
//if($unite == 2)
//$unite = 1000;
//$quantiteTotal = (int)$quantite * (int)$unite;
$quantiteChoisie["qteUnite"] = $unite;
$quantiteChoisie["prix"] = $prix;
$quantiteChoisie["quantite"] = $quantite;
$panier = $session->get("panier", []);
//var_dump($quantiteChoisie);exit;
if(!empty($panier[$id])){
$quantiteActuel = $panier[$id];
//var_dump($quantiteTotal);exit;
$quantiteChoisie["quantite"] = $quantiteActuel["quantite"] + $quantite ;
$panier[$id]= $quantiteChoisie;
}else{
$panier[$id] = $quantiteChoisie;
}
// On sauvegarde dans la session
$session->set("panier", $panier);
//var_dump($panier);exit;
foreach($panier as $id => $infoQuantite){
//var_dump($id);exit;
$product = $this->productsRepository->getOneProduitAjax($id);
$dataPanier[] = [
"produit" => $product,
"quantite" => $infoQuantite["quantite"],
"prix" => $infoQuantite["prix"],
"unite" => $infoQuantite["qteUnite"]
];
$total += $prix * $quantite; //$product->getPrice()
}
//return $this->redirectToRoute("cart_index");
$rep['panierCount'] =count($panier);
$rep['panierList'] =$dataPanier;
$rep['panierTotal']= $total ;
return new Response(json_encode($rep));
}
/**
* @Route("/remove/{id}", name="cart_remove")
*/
public function remove(Produit $product, SessionInterface $session)
{
// On récupère le panier actuel
$panier = $session->get("panier", []);
$id = $product->getId();
if(!empty($panier[$id])){
if($panier[$id] > 1){
$panier[$id]--;
}else{
unset($panier[$id]);
}
}
// On sauvegarde dans la session
$session->set("panier", $panier);
return $this->redirectToRoute("cart_index");
}
/**
* @Route("/delete/{id}", name="cart_delete")
*/
public function delete(Produit $product, SessionInterface $session)
{
// On récupère le panier actuel
$panier = $session->get("panier", []);
$id = $product->getId();
if(!empty($panier[$id])){
unset($panier[$id]);
}
// On sauvegarde dans la session
$session->set("panier", $panier);
return $this->redirectToRoute("cart_index");
}
/**
* @Route("/delete", name="cart_delete_all")
*/
public function deleteAll(SessionInterface $session)
{
$session->remove("panier");
return $this->redirectToRoute("cart_index");
}
/**
* @Route("/save/order", name="cart_save_order")
*/
public function saveOrder( Request $request, SessionInterface $session)
{
// On récupère le panier actuel
$adresseWeb = $request->getHost();
$objetInitial= $this->abonneRepository->findOneBy(['adresseWeb'=>$adresseWeb]);
//$objetInitial= $this->abonneRepository->find(62);
$objetutilisateur = $this->utilisateurRepository->findOneBy(['abonne'=>$objetInitial]);
$em = $this->getDoctrine()->getManager();
$objetClient = $this->saveClient($em, $request->get('nomPrenoms'), "", "", $request->get('tel'), $codeGenere=rand(), 0, 0, $objetutilisateur->getId(), $password="", $this->utilisateurRepository, $this->villeRepository, $this->clientRepository, $this->prixRigueurRepository, $this->etatClientRepository);
$objetCommande = $this->saveCommande($em, $codeCommande=rand(), $montant=0, $objetClient["client"], $objetutilisateur);
$panier = $session->get("panier", []);
$total = 0;
$msg = "";
foreach($panier as $id => $infoQuantite){
if($id != ""){
$objetProduit = $this->productsRepository->find($id);
$objetPrixRigueur = $this->prixRigueurRepository->findOneBy(["produit"=>$objetProduit, 'infoPrixRigueur'=>$infoQuantite["prix"] ]);
$this->saveLigneCommande($em, $codeVente=rand(), $objetInfoLivrer = NULL, $objetCommande, $objetProduit, $objetPrixRigueur, $infoQuantite["quantite"], $idLigneCommande = 0, $etat=1, $this->ligneCommandeRepository) ;
$montantTotal = $infoQuantite["prix"] * $infoQuantite["quantite"];
$msg .= "%0A".$objetProduit->getNomProduit()." ...... ". $infoQuantite["prix"] ." x ".$infoQuantite["quantite"]." =".$montantTotal ."%0A";
$total += $montantTotal;
}
}
$objetCommande->setMontantCommande($total);
$em->persist($objetCommande);
$em->flush();
//reponse
$rep["msg"]=$msg ;// "Commande effectuée avec succes ! ";
$session->remove("panier");
return new Response(json_encode($rep));
}
}