src/EventListener/OrderCreatedListener.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\MailerService;
  4. use ApiPlatform\Core\EventListener\EventPriorities;
  5. use App\Entity\OrderProduct;
  6. use App\Entity\Orders;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpKernel\Event\ViewEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Symfony\Component\Validator\Validator\ValidatorInterface;
  13. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  14. class OrderCreatedListener implements EventSubscriberInterface
  15. {
  16.     private $mailerService;
  17.     private EntityManagerInterface $entityManager;
  18.     private $validator;
  19.     public function __construct(MailerService $mailerServiceEntityManagerInterface $entityManagerValidatorInterface $validator)
  20.     {
  21.         $this->mailerService $mailerService;
  22.         $this->entityManager $entityManager;
  23.         $this->validator $validator;
  24.     }
  25.     public static function getSubscribedEvents()
  26.     {
  27.         return [
  28.             KernelEvents::VIEW => ['updateOrdersSum'EventPriorities::POST_WRITE],
  29.             KernelEvents::CONTROLLER => 'onControllerEvent',
  30.         ];
  31.     }
  32.     public function updateOrdersSum(ViewEvent $event)
  33.     {
  34.         $order $event->getControllerResult();
  35.         $method $event->getRequest()->getMethod();
  36.         if (!$order instanceof Orders AND ( $method == 'POST' OR  $method == 'PUT')) {
  37.             return;
  38.         }
  39.         
  40.         // $order = $this->entityManager->getRepository(Orders::class)->findOneBy(['id' => $MainOrder->getOrder()->getId()]);
  41.         // $order->setSynced(false);
  42.         // $this->entityManager->flush();
  43.     }
  44.     public function onControllerEvent(ControllerEvent $event)
  45.     {
  46.         $controller $event->getController();
  47.         $request $event->getRequest();
  48.         $method $request->getMethod();
  49.         $id $request->attributes->get('id');
  50.         // var_dump($id);
  51.         if($method == 'DELETE'){
  52.             $orderProduct $this->entityManager->getRepository(OrderProduct::class)->findOneBy(['id' => $id]);
  53.             if(!is_null$orderProduct ) AND !is_null$orderProduct->getOrder() ))
  54.                 $this->countSumOrdered($orderProduct->getOrder()->getId(), $id );
  55.         }
  56.         // echo( $controller instanceof); die;
  57.         // Перевірка, що контролер є екземпляром вашого контролера, який обробляє видалення
  58.         // if ($controller instanceof ) {
  59.         //     // Ваша логіка для обробки видалення OrderProduct
  60.         // }
  61.     }
  62.     public function countSumOrdered($id$delete_id=false){
  63.         $order $this->entityManager->getRepository(Orders::class)->findOneBy(['id' => $id]);
  64.         $orderProducts $this->entityManager->getRepository(OrderProduct::class)->findBy(['order' => $id]);
  65.         // var_dump($delete_id);
  66.         $totalSumOrder 0;
  67.         foreach($orderProducts as $orderProduct){
  68.             // var_dump($orderProduct->getId());
  69.             if($delete_id AND $delete_id == $orderProduct->getId()){
  70.                 continue;
  71.             }
  72.             $count = (float) $orderProduct->getCount();
  73.             $price = (float) $orderProduct->getPriceForOne();
  74.             $discount = (float) $orderProduct->getDiscount();
  75.             $totalSum = ($count $price) - $discount;
  76.             $totalSumOrder += round($totalSum2);
  77.         }
  78.         // $order->setDescription($order->getId());
  79.         $order->setSumOrdered((float)$totalSumOrder);
  80.         $this->entityManager->flush();
  81.         // die;
  82.     }
  83. }