getUserCurrent();
$visitor = $this->getVisitorCurrent();
$return = [];
$data = $request->request->all();
if (isset($data['order_products']['id_product_family'])) {
$idProductFamily = $data['order_products']['id_product_family'];
$this->productFamily = $this->getProductFamilyContainer()->getStore()->getOneById($idProductFamily);
// alerte si cookies non acceptés
if (!$user && !$visitor) {
$this->addFlash(
'error',
'Vous devez accepter les cookies ou vous connecter 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->getOrderShopContainer()->getBuilder()->createIfNotExist(
$this->getSectionCurrent(),
$this->getUserCurrent(),
$this->getVisitorCurrent()
);
$data = $form->getData();
foreach ($data as $orderProduct) {
if ($orderProduct instanceof OrderProductInterface) {
$this->addOrderProduct($orderShop, $orderProduct);
}
}
}
}
}
return new JsonResponse($return);
}
public function addOrderProduct(OrderShopInterface $orderShop, OrderProductInterface $orderProduct): void
{
$this->quantityOrder = $orderProduct->getQuantityOrder();
$orderProductArray = $this->getOrderShopContainer()->getBuilder()->addOrderProduct(
$orderShop,
$orderProduct
);
if (is_array($orderProductArray)) {
foreach($orderProductArray as $orderProduct) {
$this->orderProducts[] = $orderProduct;
}
}
}
/**
* @Route("/order-reduction-cart/delete/{id}", name="delete_reduction_cart")
*/
public function deleteReductionCart(Request $request): RedirectResponse
{
$entityManager = $this->getEntityManager();
$id = $request->get('id');
$orderReductionCart = $this->getOrderReductionCartContainer()->getStore()->getOneById((int) $id);
$orderShop = $this->getCartCurrent();
if ($orderReductionCart && $orderShop->getOrderReductionCarts() && $orderShop->getOrderReductionCarts(
)->contains($orderReductionCart)) {
$entityManager->remove($orderReductionCart);
$entityManager->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);
}
/**
* @Route("/reduction-credit/add/{id}", name="order_reduction_credit")
*/
public function addReductionCredit(Request $request): RedirectResponse
{
$id = $request->get('id');
$orderShop = $this->getCartCurrent();
$user = $this->getUserCurrent();
$orderShopContainer = $this->getOrderShopContainer();
$reductionCredit = $this->getReductionCreditContainer()->getStore()->getOneById($id);
if ($orderShop && $user && $reductionCredit
&& $orderShopContainer->getStore()->isReductionCreditAllowAddToOrder($orderShop, $reductionCredit)
&& !$orderShopContainer->getSolver()->isReductionCreditAddedToOrder($orderShop, $reductionCredit)) {
$return = $orderShopContainer->getBuilder()->addReductionCredit($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);
}
/**
* @Route("/order-reduction-credit/delete/{id}", name="delete_reduction_credit")
*/
public function deleteReductionCredit(Request $request): RedirectResponse
{
$entityManager = $this->getEntityManager();
$id = $request->get('id');
$orderReductionCredit = $this->getOrderReductionCreditContainer()->getStore()->getOneById((int)$id);
$orderShop = $this->getCartCurrent();
if ($orderReductionCredit && $orderShop->getOrderReductionCredits() && $orderShop->getOrderReductionCredits(
)->contains($orderReductionCredit)) {
$entityManager->remove($orderReductionCredit);
$entityManager->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 = $this->getReferer($request);
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('frontend_order_cart', [
'section' => $this->getSectionCurrentSlug()
]);
}
}
protected function redirectToReferer(Request $request): RedirectResponse
{
$referer = $this->getReferer($request);
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('frontend_order_cart', [
'section' => $this->getSectionCurrentSlug()
]);
}
}
}