src/EventListener/CheckoutEventListener.php line 142

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace App\EventListener;
  15. use App\Model\CustomerManagementFramework\Activity\OrderActivity;
  16. use CustomerManagementFrameworkBundle\ActivityManager\ActivityManagerInterface;
  17. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  18. use Pimcore\Event\Model\Ecommerce\CommitOrderProcessorEvent;
  19. use Pimcore\Event\Model\Ecommerce\OrderManagerEvent;
  20. use Pimcore\Event\Model\Ecommerce\SendConfirmationMailEvent;
  21. use Pimcore\Localization\LocaleServiceInterface;
  22. use Pimcore\Mail;
  23. use Pimcore\Model\DataObject\OnlineShopOrder;
  24. use Pimcore\Model\Document\Email;
  25. class CheckoutEventListener
  26. {
  27.     /**
  28.      * @var Factory
  29.      */
  30.     protected $ecommerceFactory;
  31.     /**
  32.      * @var ActivityManagerInterface
  33.      */
  34.     protected $activityManager;
  35.     /**
  36.      * @var LocaleServiceInterface
  37.      */
  38.     protected $localeService;
  39.     /**
  40.      * CheckoutEventListener constructor.
  41.      *
  42.      * @param Factory $ecommerceFactory
  43.      * @param ActivityManagerInterface $activityManager
  44.      */
  45.     public function __construct(Factory $ecommerceFactoryActivityManagerInterface $activityManagerLocaleServiceInterface $localeService)
  46.     {
  47.         $this->ecommerceFactory $ecommerceFactory;
  48.         $this->activityManager $activityManager;
  49.         $this->localeService $localeService;
  50.     }
  51.     /**
  52.      * @param OrderManagerEvent $event
  53.      *
  54.      * @throws \Exception
  55.      */
  56.     public function onUpdateOrder(OrderManagerEvent $event)
  57.     {
  58.         $cart $event->getCart();
  59.         /**
  60.          * @var $order OnlineShopOrder
  61.          */
  62.         $order $event->getOrder();
  63.         $checkout $this->ecommerceFactory->getCheckoutManager($cart);
  64.         $deliveryAddress $checkout->getCheckoutStep('deliveryaddress') ? $checkout->getCheckoutStep('deliveryaddress')->getData() : null;
  65.         $billingAddress $checkout->getCheckoutStep('billingaddress') ? $checkout->getCheckoutStep('billingaddress')->getData() : null;
  66.         $collectInfo $checkout->getCheckoutStep('collectInfo') ? $checkout->getCheckoutStep('collectInfo')->getData() : null;
  67.         if ($collectInfo) {
  68.             $data $collectInfo;
  69.             //inserting customer info from checkout step delivery
  70.             $order->setCustomerFirstname(property_exists($data'firstname') ? $data->firstname '');
  71.             $order->setCustomerLastname(property_exists($data'lastname') ? $data->lastname '');
  72.             $order->setCustomerCompany(property_exists($data'company') ? $data->company '');
  73.             $order->setCustomerEmail($data->email);
  74.             $order->setCustomerOrderedBy(property_exists($data'orderedBy') ? $data->orderedBy '');
  75.             $order->setCustomerGdcNumber(property_exists($data'gdcNumber') && $data->gdcNumber $data->gdcNumber '');
  76.         }
  77.         if ($deliveryAddress) {
  78.             $data $deliveryAddress;
  79.             //inserting delivery and billing address from checkout step delivery
  80.             $order->setDeliveryFirstname(property_exists($data'firstname') ? $data->firstname '');
  81.             $order->setDeliveryLastname(property_exists($data'lastname') ? $data->lastname '');
  82.             $order->setDeliveryCompany($data->company);
  83.             $order->setDeliveryLine1($data->line1);
  84.             $order->setDeliveryLine2($data->line2);
  85.             $order->setDeliveryComment($data->comment);
  86.             $order->setDeliveryPhone($data->phone);
  87.             $order->setDeliveryZip($data->zip);
  88.             $order->setDeliveryCity($data->city);
  89.             $order->setDeliveryCounty($data->county);
  90.             $order->setDeliveryCountry($data->countryCode);
  91.         }
  92.         if ($billingAddress) {
  93.             $data $billingAddress;
  94.             //inserting delivery and billing address from checkout step delivery
  95.             $order->setBillingFirstname(property_exists($data'firstname') ? $data->firstname '');
  96.             $order->setBillingLastname(property_exists($data'lastname') ? $data->lastname '');
  97.             $order->setBillingCompany($data->company);
  98.             $order->setBillingLine1($data->line1);
  99.             $order->setBillingLine2($data->line2);
  100.             $order->setBillingZip($data->zip);
  101.             $order->setBillingCity($data->city);
  102.             $order->setBillingCounty($data->county);
  103.             $order->setBillingCountry($data->countryCode);
  104.         }
  105.         //save sign-up or rejoin data to order
  106.         $order->setHiddenData(json_encode($collectInfo));
  107.         $order->save();
  108.         //attach order to customer
  109.         $customer $order->getCustomer();
  110.         if ($customer) {
  111.             $customer->setGeneralOrders(array_merge($customer->getGeneralOrders(), [$order]));
  112.             $customer->save();
  113.         }
  114.     }
  115.     /**
  116.      * @param SendConfirmationMailEvent $event
  117.      */
  118.     public function sendConfirmationMail(SendConfirmationMailEvent $event)
  119.     {
  120.         $order $event->getOrder();
  121.         $mail = new Mail();
  122.         $mail->setDocument(Email::getByPath('/' $this->localeService->getLocale() . '/mails/confirmation-mail'));
  123.         $mail->setParams([
  124.             'ordernumber' => $order->getOrdernumber(),
  125.             'order' => $order
  126.         ]);
  127.         $mail->addTo($order->getCustomerEMail());
  128.         $mail->send();
  129.         $event->setSkipDefaultBehaviour(false);
  130.     }
  131.     /**
  132.      * @param CommitOrderProcessorEvent $event
  133.      *
  134.      * @throws \Pimcore\Bundle\EcommerceFrameworkBundle\Exception\UnsupportedException
  135.      */
  136.     public function postCommitOrder(CommitOrderProcessorEvent $event)
  137.     {
  138.         $order $event->getOrder();
  139.         if ($this->activityManager && $order->getCustomer()) {
  140.             $this->activityManager->trackActivity(new OrderActivity($order->getCustomer(), $order));
  141.         }
  142.     }
  143. }