get('panier'));
$panier->verification();
$panierSession = $session->get('panier');
// dd( $montant=$panier->montant());
$montant=$panier->montant();
return $this->render ('panier.html.twig',[
"panier"=> $panierSession,
"montant"=>$montant,
// dd($panierSession)
]);
}
/**
*
* @Route("/ajouter",name="panier_ajouter")
*/
public function panier_ajouter(Request $request,OeuvresRepository $repoOeuvre,Panier $panier)
{
/*
dans la class request se trouve les superglobal
la propriete request concerne $_PoST
$request->request= $_POST
pour accedr a des position de ce tbleau on utlise la methosde
*/
$idOeuvre = $request->request->get('oeuvre');
$quantity=$request->request->get('quantity');
$oeuvre=$repoOeuvre->find($idOeuvre);
$panier->add($idOeuvre,$oeuvre->getPrix(),$quantity,$oeuvre->getPrix());
return $this->redirectToRoute("app_panier");
}
/**
*
* @Route("/vider",name="panier_vider")
*/
public function panier_vider(Panier $panier)
{
$panier->vider();
return $this->redirectToRoute("app_panier");
}
/**
*
* @Route("/retirer/{id}",name="panier_retirer")
*/
public function panier_retirer($id, Panier $panier)
{
$panier->remove($id);
return $this->redirectToRoute("app_panier");
}
/**
*
* @Route("/payer",name="panier_payer")
*/
public function panier_payer(Panier $panier)
{
$user=$this->getUser();//pour pouvoir acceder à cette fonction faut etre connecté
$panier->paiement($user);
$this->addFlash("success","commande prise en compte");
return $this->redirectToRoute("app_panier");
}
/**
* @Route("/commandes",name="mes_commandes")
*/
public function mesCommandes()
{
return $this->redirectToRoute('panier/mes_commandes.html.twig');
}
}
page htmll twig panier
{% include "_flashes.html.twig" %}
{% if panier.id is defined and panier.id|length > 0 %}
id |
{# titre | #}
prix |
quantité |
total |
supprimer |
{% set size = panier.id|length - 1 %}
{% for i in 0.. size %}
{{ panier.id[i] }}
|
{# {{panier.titre[i] }} #}
|
{{panier.prix[i] }}
|
{% if panier.quantity[i] %}
{{panier.quantity[i] }}{{dump(panier.quantity)}}
{% else %}
indispo pour le moment
{% endif %}
{# {{panier.quantity[i] }} #}
|
{# {{panier.prix[i] * panier.quantity[i] }} #}
|
|
{% endfor %}
montant total |
{{ montant}}€ |
|
vider le panier
{% if app.user %}
payer
{% else %}
Veuillez vous
connecter
ou vous
inscrire pour déposer votre message
{% endif %}
{% endif %}
panier.php
session=$session;
$this->repoOeuvre=$repoOeuvre;
$this->manager=$manager;
}
public function creation(){
$array=[
'id'=>[],
'prix'=>[],
'quantity'=>[],
// 'titre'=>[]
];
return $array;
}
public function add($id,$prix,$quantity)
{
$panier=$this->session->get('panier');
$panier->verification();
if(empty($panier))
{
$panier=$this->creation();
$this->session->set('panier',$panier);
}
$position_search=array_search($id,$panier['id'] );
if($position_search!==false)
{
// dd('quantity');
$panier['quantity'][$position_search]+=$quantity;
}
else{
$panier['id'][]=$id;
$panier['prix'][]=$prix;
$panier['quantity'][]=$quantity;
// $panier['titre'][]=$titre;
}
$this->session->set('panier',$panier);
}
public function vider()
{
$panier=$this->creation();
$this->session->set('panier',$panier);
}
public function remove($id)
{
$panier=$this->session->get('panier');
$position=array_search($id,$panier['id'] );
array_splice($panier['id'],$position,1 );
// array_splice($panier['titre'],$position,1 );
array_splice($panier['prix'],$position,1 );
array_splice($panier['quantity'],$position,1);
$this->session->set('panier',$panier);
}
public function montant()
{
$montant=0;
$panier=$this->session->get('panier');
$size = count($panier['id'] );
for ($i=0;$i<$size;$i++)
{
// dd( $panier);
if (is_numeric($panier['quantity'][$i]) && is_numeric($panier['prix'][$i])) {
$montant +=$panier['quantity'][$i]*$panier['prix'][$i];
// dump($montant);
}
}
$montant=round($montant,2);
return $montant;
}
public function verification()
{
$panier=$this->session->get('panier');
$size=count($panier['id'] );
for ($i=0;$i<$size;$i++)
{
$oeuvre=$this->repoOeuvre->find($panier['id'][$i] );
if($oeuvre->getStock())
{
if($oeuvre->getStock() < $panier ['quantity'][$i] )
{
$oeuvre['quantity'][$i]=$oeuvre->getStock();
}
}
else
{
$panier['quantity'][$i]=0;
}
}
$this->session->set('panier',$panier);
}
public function paiement($user)
{
$this->verification();
$panier=$this->session->get('panier');
$size=count($panier['id'] );
$acces=false;
for($i=0; $i<$size;$i++)// si $i ! 0 alors acces is true
{
if($panier['quantity'][$i] )
{
$acces=true;
}
}
if($acces)
{
$commande=new Commande;
$commande->setUser($user);
$commande->setMontant($this->montant());
$commande->setDateAt(new \DateTimeImmutable('now'));
$commande->setEtat(0);// 0=en cours de tratement; 1 expedié;2 livré
$this->manager->persist($commande);
$this->manager->flush();
for($i=0;$i < $size;$i++)
{
if($panier['quantity'][$i] )
{
$oeuvre=$this->repoOeuvre->find($panier['id'][$i] );
$detail=new DetailsCommande;
$detail->setCommande($commande);
$detail->setOeuvre($oeuvre);
$detail->setQuantity($panier['quantity'][$i] );
$detail->setPrix($panier['prix'][$i] );
$this->manager->persist($detail);
$this->manager->flush();
$stockBdd=$oeuvre->getStock();
$newStock=$stockBdd - $panier['quantity'][$i];
$oeuvre->setStock($newStock);
$this->manager->persist($oeuvre);
$this->manager->flush();
$this->remove($panier['id'][$i] );
}
}
}
}
}