local/modules/OpenApi/EventListener/OrderListener.php line 26

  1. <?php
  2. namespace OpenApi\EventListener;
  3. use OpenApi\Model\Api\Address;
  4. use OpenApi\Model\Api\ModelFactory;
  5. use OpenApi\OpenApi;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Thelia\Core\Event\Order\OrderEvent;
  9. use Thelia\Core\Event\TheliaEvents;
  10. use Thelia\Model\OrderAddressQuery;
  11. class OrderListener implements EventSubscriberInterface
  12. {
  13.     protected $request;
  14.     protected $modelFactory;
  15.     public function __construct(RequestStack $requestStackModelFactory $modelFactory)
  16.     {
  17.         $this->request $requestStack->getCurrentRequest();
  18.         $this->modelFactory $modelFactory;
  19.     }
  20.     public function setPickupAddress(OrderEvent $event): void
  21.     {
  22.         /** @var Address $pickupAddress */
  23.         $pickupAddressJson $this->request->getSession()->get(OpenApi::PICKUP_ADDRESS_SESSION_KEY);
  24.         $pickupAddress $this->modelFactory->buildModel('Address'$pickupAddressJson);
  25.         if (null === $pickupAddress || null === $pickupAddress->getAddress1() || null === $pickupAddress->getCity()) {
  26.             return;
  27.         }
  28.         $orderAddress OrderAddressQuery::create()
  29.             ->findPK($event->getOrder()->getDeliveryOrderAddressId())
  30.             ->setCompany($pickupAddress->getCompany())
  31.             ->setAddress1($pickupAddress->getAddress1())
  32.             ->setAddress2($pickupAddress->getAddress2())
  33.             ->setAddress3($pickupAddress->getAddress3())
  34.             ->setZipcode($pickupAddress->getZipcode())
  35.             ->setCity($pickupAddress->getCity())
  36.         ;
  37.         $orderAddress->save();
  38.         $event->setDeliveryAddress($orderAddress->getId());
  39.         // Reset pickup address
  40.         $this->request->getSession()->set(OpenApi::PICKUP_ADDRESS_SESSION_KEYnull);
  41.     }
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             TheliaEvents::ORDER_BEFORE_PAYMENT => ['setPickupAddress'256],
  46.         ];
  47.     }
  48. }