|
- <?php
-
- namespace Lc\ShopBundle\Controller\Frontend ;
-
- use App\Entity\ReductionCredit;
- use App\Form\Frontend\OrderProductsType;
- use Doctrine\ORM\EntityManagerInterface;
- use Lc\ShopBundle\Context\MerchantUtilsInterface;
- use Lc\ShopBundle\Context\OrderProductInterface;
- use Lc\ShopBundle\Context\OrderReductionCartInterface;
- use Lc\ShopBundle\Context\OrderReductionCreditInterface;
- use Lc\ShopBundle\Context\OrderUtilsInterface;
- use Lc\ShopBundle\Context\ProductFamilyInterface;
- use Lc\ShopBundle\Context\ReductionCartInterface;
- use Lc\ShopBundle\Model\OrderReductionCart;
- use Lc\ShopBundle\Model\ProductFamily;
- use Lc\ShopBundle\Services\UserUtils;
- use Lc\ShopBundle\Services\UtilsManager;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\Routing\Generator\UrlGenerator;
- use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
- use Symfony\Component\Security\Core\Security;
-
- class CartController extends BaseController
- {
- protected $orderUtils ;
- protected $userUtils ;
- protected $priceUtils ;
- protected $router ;
- protected $productFamilyRepository ;
- protected $orderProductRepository ;
-
- protected $productFamily ;
- protected $orderProducts = [] ;
-
-
- public function __construct(EntityManagerInterface $em, Security $security, MerchantUtilsInterface $merchantUtils,
- UrlGeneratorInterface $router, UtilsManager $utilsManager)
- {
- parent::__construct($em, $security, $merchantUtils);
- $this->orderUtils = $utilsManager->getOrderUtils() ;
- $this->userUtils = $utilsManager->getUserUtils() ;
- $this->priceUtils = $utilsManager->getPriceUtils() ;
- $this->router = $router ;
- $this->productFamilyRepository = $this->em->getRepository($this->em->getClassMetaData(ProductFamilyInterface::class)->getName()) ;
- $this->orderProductRepository = $this->em->getRepository($this->em->getClassMetaData(OrderProductInterface::class)->getName()) ;
- }
-
- public function addProductFamily(Request $request)
- {
- $user = $this->security->getUser() ;
- $visitor = $this->userUtils->getVisitorCurrent() ;
-
- $return = [] ;
- $data = $request->request->all() ;
-
- if(isset($data['order_products']['id_product_family'])) {
- $idProductFamily = $data['order_products']['id_product_family'] ;
- $this->productFamily = $this->productFamilyRepository->find($idProductFamily) ;
-
- // alerte si cookies non acceptés
- if (!$user && !$visitor) {
- $this->addFlash('error', 'Vous devez <a href="'.$this->router->generate('frontend_page', ['devAlias' => 'politique-de-confidentialite']).'">accepter les cookies</a> ou vous <a href="'.$this->router->generate('fos_user_security_login').'">connecter</a> pour ajouter un produit.');
- return false ;
- }
-
- if($this->productFamily) {
- $form = $this->createForm(OrderProductsType::class, ['id_product_family' => $this->productFamily->getId()]);
- $form->handleRequest($request);
-
- if ($form->isSubmitted() && $form->isValid()) {
- $orderShop = $this->orderUtils->getCartCurrent() ;
- $data = $form->getData() ;
- foreach($data as $orderProduct) {
- if($orderProduct instanceof OrderProductInterface) {
- if($orderProduct->getQuantityOrder() > 0) {
- $addOrderProduct = $this->orderUtils->addOrderProduct($orderShop, $orderProduct) ;
- }
- if(isset($addOrderProduct) && $addOrderProduct && $orderProduct->getQuantityOrder() > 0) {
- $this->orderProducts[] = $orderProduct ;
- }
- }
- }
- }
- }
- }
-
- return new JsonResponse($return) ;
- }
-
- public function redirectToReferer($request) {
- $referer = $request->headers->get('referer');
-
- if($referer) {
- return $this->redirect($referer);
- }
- else {
- return $this->redirectToRoute('frontend_order_cart');
- }
- }
-
- public function deleteReductionCart(Request $request)
- {
- $id = $request->get('id') ;
-
- $orderReductionCartRepository = $this->em->getRepository($this->em->getClassMetadata(OrderReductionCartInterface::class)->getName()) ;
- $orderReductionCart = $orderReductionCartRepository->findOneById((int) $id) ;
-
- $orderShop = $this->orderUtils->getCartCurrent() ;
-
- if($orderReductionCart && $orderShop->getOrderReductionCarts() && $orderShop->getOrderReductionCarts()->contains($orderReductionCart)) {
- $this->em->remove($orderReductionCart) ;
- $this->em->flush() ;
-
- $this->addFlash('success', 'La réduction a bien été supprimée de votre panier.') ;
- }
- else {
- $this->addFlash('error', 'Une erreur est survenue lors de la suppression de la réduction. ') ;
- }
-
- return $this->redirectToReferer($request) ;
- }
-
- public function addReductionCredit(Request $request)
- {
- $id = $request->get('id') ;
- $orderShop = $this->orderUtils->getCartCurrent() ;
- $user = $this->security->getUser() ;
-
- $reductionCreditRepository = $this->em->getRepository(ReductionCredit::class) ;
- $reductionCredit = $reductionCreditRepository->find($id) ;
-
- if($orderShop && $user && $reductionCredit
- && $this->orderUtils->isReductionCreditAllowAddToOrder($orderShop, $reductionCredit)
- && !$this->orderUtils->isReductionCreditAddedToOrder($orderShop, $reductionCredit)) {
-
- $return = $this->orderUtils->createOrderReductionCredit($orderShop, $reductionCredit) ;
-
- if($return) {
- $this->addFlash('success', 'Votre avoir a bien été ajouté à votre panier.') ;
- }
- else {
- $this->addFlash('error', 'Vous ne pouvez pas effectuer cette action. Le montant de la commande est insuffisant.') ;
- }
- }
- else {
- $this->addFlash('error', "Impossible d'effectuer cette action");
- }
-
- return $this->redirectToReferer($request) ;
- }
-
- public function deleteReductionCredit(Request $request)
- {
- $id = $request->get('id') ;
-
- $orderReductionCreditRepository = $this->em->getRepository($this->em->getClassMetadata(OrderReductionCreditInterface::class)->getName()) ;
- $orderReductionCredit = $orderReductionCreditRepository->findOneById((int) $id) ;
-
- $orderShop = $this->orderUtils->getCartCurrent() ;
-
- if($orderReductionCredit && $orderShop->getOrderReductionCredits() && $orderShop->getOrderReductionCredits()->contains($orderReductionCredit)) {
- $this->em->remove($orderReductionCredit) ;
- $this->em->flush() ;
-
- $this->addFlash('success', 'Votre avoir a bien été supprimé de votre panier.') ;
- }
- else {
- $this->addFlash('error', 'Une erreur est survenue lors de la suppression de votre avoir. ') ;
- }
-
- $referer = $request->headers->get('referer');
-
- if($referer) {
- return $this->redirect($referer);
- }
- else {
- return $this->redirectToRoute('frontend_order_cart');
- }
- }
-
- }
|