src/Event/OrderRecalculateSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Event;
  4. use App\Component\Order\Events;
  5. use App\Component\Order\Model\OrderInterface;
  6. use App\Component\Order\Model\OrderItemInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\EventDispatcher\GenericEvent;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\VarDumper\VarDumper;
  11. class OrderRecalculateSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var SessionInterface
  15.      */
  16.     private $session;
  17.     public function __construct(SessionInterface $session)
  18.     {
  19.         $this->session $session;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             Events::ORDER_CREATED => 'recalculate',
  25.             Events::ORDER_UPDATED => 'recalculate',
  26.         ];
  27.     }
  28.     public function recalculate(GenericEvent $event): void
  29.     {
  30.         /** @var OrderInterface $entity */
  31.         $entity $event->getSubject();
  32.         $itemsTotal 0;
  33.         $itemsPriceTotal 0;
  34.         /** @var OrderItemInterface  $item */
  35.         foreach ($entity->getItems() as $item) {
  36.             $itemsTotal += $item->getQuantity();
  37.             $item->setPriceTotal($item->getProduct()->getPrice() * $item->getQuantity());
  38.             $itemsPriceTotal += $item->getPriceTotal();
  39.         }
  40.         if ($entity->getDiscount() !== null) {
  41.             $itemsPriceTotal -= $itemsPriceTotal $entity->getDiscount()->getDiscount() / 100;
  42.         }
  43.         $priceTotal $itemsPriceTotal;
  44.         if ($entity->getPayment() !== null) {
  45.             $priceTotal += $entity->getPayment()->getPrice();
  46.         }
  47.         if ($entity->getShipment() !== null) {
  48.             $priceTotal += $entity->getShipment()->getPrice();
  49.         }
  50.         $entity->setItemsTotal($itemsTotal);
  51.         $entity->setItemsPriceTotal($itemsPriceTotal);
  52.         $entity->setPriceTotal($priceTotal);
  53.     }
  54. }