Skip to content

Commit

Permalink
fix: add cartListener (#14)
Browse files Browse the repository at this point in the history
Co-authored-by: mdevaud <mdevaud@openstudio.fr>
  • Loading branch information
mdevaud and mdevaud authored Jun 21, 2024
1 parent e5cd67d commit 4316c18
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 29 deletions.
2 changes: 1 addition & 1 deletion Config/module.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<language>en_US</language>
<language>fr_FR</language>
</languages>
<version>2.0.1</version>
<version>2.0.2</version>
<authors>
<author>
<name>mdevaud</name>
Expand Down
58 changes: 58 additions & 0 deletions EventListeners/CartListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php

namespace SubOrderGenerator\EventListeners;

use OpenApi\Events\ModelExtendDataEvent;
use SubOrderGenerator\Model\SubOrderQuery;
use SubOrderGenerator\Service\SubOrderService;
use SubOrderGenerator\SubOrderGenerator;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Thelia\Core\Event\Cart\CartCreateEvent;
use Thelia\Core\Event\Cart\CartEvent;
use Thelia\Core\Event\TheliaEvents;

class CartListener implements EventSubscriberInterface
{
public function __construct(
private RequestStack $requestStack,
private SubOrderService $subOrderService
)
{
}

public function clearSubOrderSession(){
$session = $this->requestStack->getCurrentRequest()->getSession();
$session->remove(SubOrderGenerator::SUBORDER_TOKEN_SESSION_KEY);
}

public function updateCart(ModelExtendDataEvent $event){

$session = $this->requestStack->getCurrentRequest()->getSession();
//if no suborder token found do nothing
if(null === $subOrderToken = $session->get(SubOrderGenerator::SUBORDER_TOKEN_SESSION_KEY)){
return;
}

if(null === $suborderLink = SubOrderQuery::create()->findOneByToken($subOrderToken)){
throw new NotFoundHttpException('No subOrder Associated to token');
}
$order = $suborderLink->getOrderRelatedBySubOrderId();

$event->setExtendDataKeyValue("total_amount_sub_order", round($order->getTotalAmount() - $this->subOrderService->getAmountAlreadyPaid($suborderLink),2) );
}


public static function getSubscribedEvents()
{
return [
TheliaEvents::CART_ADDITEM => ['clearSubOrderSession', 128],
TheliaEvents::CART_DELETEITEM => ['clearSubOrderSession', 128],
TheliaEvents::CART_UPDATEITEM => ['clearSubOrderSession', 128],
TheliaEvents::CART_CLEAR => ['clearSubOrderSession', 128],
TheliaEvents::CART_CREATE_NEW =>['clearSubOrderSession', 128],
ModelExtendDataEvent::ADD_EXTEND_DATA_PREFIX . "cart" => ['updateCart', 10],
];
}
}
21 changes: 3 additions & 18 deletions EventListeners/SubOrderPayListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace SubOrderGenerator\EventListeners;

use OpenApi\Events\ModelExtendDataEvent;
use OpenApi\Model\Api\CartItem;
use SubOrderGenerator\Model\SubOrder;
use SubOrderGenerator\Model\SubOrderQuery;
use SubOrderGenerator\Service\SubOrderService;
Expand All @@ -16,6 +17,8 @@
use Thelia\Core\Event\Order\OrderPayTotalEvent;
use Thelia\Core\Event\Payment\IsValidPaymentEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Model\Event\CartEvent;
use Thelia\Model\Event\CartItemEvent;
use Thelia\Model\Order as OrderModel;

class SubOrderPayListener implements EventSubscriberInterface
Expand Down Expand Up @@ -88,30 +91,12 @@ public function changeTotalForSubOrder(OrderPayTotalEvent $event){
}
}

public function updateCart(ModelExtendDataEvent $event){

$session = $this->requestStack->getCurrentRequest()->getSession();
//if no suborder token found do nothing
if(null === $subOrderToken = $session->get(SubOrderGenerator::SUBORDER_TOKEN_SESSION_KEY)){
return;
}

if(null === $suborderLink = SubOrderQuery::create()->findOneByToken($subOrderToken)){
throw new NotFoundHttpException('No subOrder Associated to token');
}
$order = $suborderLink->getOrderRelatedBySubOrderId();

$event->setExtendDataKeyValue("total_amount_sub_order", round($order->getTotalAmount() - $this->subOrderService->getAmountAlreadyPaid($suborderLink),2) );

}

public static function getSubscribedEvents()
{
return [
TheliaEvents::ORDER_PAY => ['paySubOrder', 200],
TheliaEvents::MODULE_PAYMENT_IS_VALID => ['filterSubOrderPayment'],
TheliaEvents::ORDER_PAY_GET_TOTAL => ['changeTotalForSubOrder', 70],
ModelExtendDataEvent::ADD_EXTEND_DATA_PREFIX . "cart" => ['updateCart', 10],
];
}
}
11 changes: 1 addition & 10 deletions Service/SubOrderService.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
use Thelia\Model\OrderProductAttributeCombination;
use Thelia\Model\OrderProductTax;
use Thelia\Model\OrderStatusQuery;
use Thelia\Model\ProductQuery;
use Thelia\Model\ProductSaleElementsQuery;

class SubOrderService
Expand Down Expand Up @@ -161,14 +160,6 @@ public function fillCartFromSubOrderChild(Order $childOrder)
foreach ($orderProducts as $orderProduct) {
$newEvent = new CartEvent($cart);
$newEvent->setQuantity($orderProduct->getQuantity());
$product = ProductQuery::create()
->filterByVisible(true)
->filterByRef($orderProduct->getProductRef())
->findOne();

if (null === $product) {
continue;
}

$pse = ProductSaleElementsQuery::create()
->filterById($orderProduct->getProductSaleElementsId())
Expand All @@ -184,7 +175,7 @@ public function fillCartFromSubOrderChild(Order $childOrder)
continue;
}

$newEvent->setProduct($product->getId());
$newEvent->setProduct($pse->getProductId());
$newEvent->setNewness(true);
$newEvent->setAppend(false);
$newEvent->setProductSaleElementsId($pse->getId());
Expand Down

0 comments on commit 4316c18

Please sign in to comment.