src/WellCommerce/Bundle/BaselinkerBundle/EventListener/BaselinkerSubscriber.php line 104

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\BaselinkerBundle\EventListener;
  14. use Psr\Container\ContainerInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use WellCommerce\Bundle\AppBundle\Entity\Shop;
  17. use WellCommerce\Bundle\BaselinkerBundle\Service\Client\BaselinkerClient;
  18. use WellCommerce\Bundle\CoreBundle\DependencyInjection\AbstractServiceSubscriber;
  19. use WellCommerce\Bundle\CoreBundle\Doctrine\Event\EntityEvent;
  20. use WellCommerce\Bundle\OrderBundle\DataSet\Admin\OrderStatusDataSet;
  21. use WellCommerce\Bundle\OrderBundle\Entity\Order;
  22. use WellCommerce\Bundle\OrderBundle\Entity\OrderStatus;
  23. use WellCommerce\Bundle\OrderBundle\Entity\OrderStatusHistory;
  24. use WellCommerce\Bundle\OrderBundle\Entity\Shipment;
  25. use WellCommerce\Bundle\OrderBundle\Service\Shipment\Adapter\ShipmentAdapterCollection;
  26. use WellCommerce\Bundle\OrderBundle\Service\Shipment\Adapter\ShipmentAdapterInterface;
  27. use WellCommerce\Component\Form\Event\FormEvent;
  28. /**
  29.  * Class SmsApiSubscriber
  30.  *
  31.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  32.  */
  33. class BaselinkerSubscriber extends AbstractServiceSubscriber implements EventSubscriberInterface
  34. {
  35.     protected OrderStatusDataSet        $dataSet;
  36.     protected BaselinkerClient          $client;
  37.     protected ShipmentAdapterCollection $adapterCollection;
  38.     public function __construct(
  39.         ContainerInterface $locator,
  40.         OrderStatusDataSet $dataSet,
  41.         BaselinkerClient $client,
  42.         ShipmentAdapterCollection $adapterCollection
  43.     ) {
  44.         parent::__construct($locator);
  45.         $this->dataSet           $dataSet;
  46.         $this->client            $client;
  47.         $this->adapterCollection $adapterCollection;
  48.     }
  49.     public static function getSubscribedEvents(): array
  50.     {
  51.         return [
  52.             'admin.shop.pre_form_init'         => ['onShopFormAdminInit'],
  53.             'admin.order_status.pre_form_init' => ['onOrderStatusFormAdminInit'],
  54.             'order_status_history.post_create' => ['onOrderStatusHistoryCreated'0],
  55.             'shipment.post_create'             => ['onShipmentCreated'0],
  56.         ];
  57.     }
  58.     public function onShipmentCreated(EntityEvent $event)
  59.     {
  60.         $shipment $event->getEntity();
  61.         if ($shipment instanceof Shipment) {
  62.             $token $shipment->getOrder()->getShop()->getBaselinkerToken();
  63.             if (empty($token)) {
  64.                 return;
  65.             }
  66.             $courierCode $this->getAdapter($shipment)->getBaselinkerCourierCode();
  67.             if (!empty($courierCode)) {
  68.                 $this->client->syncShipment($shipment$courierCode);
  69.             }
  70.         }
  71.     }
  72.     public function onOrderStatusHistoryCreated(EntityEvent $event)
  73.     {
  74.         $history $event->getEntity();
  75.         if ($history instanceof OrderStatusHistory) {
  76.             $order  $history->getOrder();
  77.             $status $history->getOrderStatus();
  78.             $token $order->getShop()->getBaselinkerToken();
  79.             if (empty($token)) {
  80.                 return;
  81.             }
  82.             if ($order instanceof Order && $status instanceof OrderStatus) {
  83.                 $this->client->syncOrderStatus($order$status);
  84.             }
  85.         }
  86.     }
  87.     public function onOrderStatusFormAdminInit(FormEvent $event)
  88.     {
  89.         $resource $event->getResource();
  90.         if ($resource instanceof OrderStatus) {
  91.             $form    $event->getForm();
  92.             $builder $event->getFormBuilder();
  93.             $shop    $this->getShopStorage()->getCurrentShop();
  94.             $token   $shop->getBaselinkerToken();
  95.             if (empty($token)) {
  96.                 return;
  97.             }
  98.             $statuses   $this->client->getOrderStatuses();
  99.             $options    = [];
  100.             $options[0] = '--- wybierz ---';
  101.             foreach ($statuses as $status) {
  102.                 $options[$status['id']] = $status['name'];
  103.             }
  104.             $baselinkerData $form->addChild($builder->getElement('nested_fieldset', [
  105.                 'name'  => 'baselinker_data',
  106.                 'label' => 'Ustawienia Baselinker',
  107.             ]));
  108.             $baselinkerData->addChild($builder->getElement('select', [
  109.                 'name'    => 'baselinkerId',
  110.                 'label'   => 'Status Baselinker',
  111.                 'options' => $options,
  112.             ]));
  113.         }
  114.     }
  115.     public function onShopFormAdminInit(FormEvent $event)
  116.     {
  117.         $resource $event->getResource();
  118.         if ($resource instanceof Shop) {
  119.             $form    $event->getForm();
  120.             $builder $event->getFormBuilder();
  121.             $baselinkerData $form->addChild($builder->getElement('nested_fieldset', [
  122.                 'name'  => 'baselinker_data',
  123.                 'label' => 'Ustawienia Baselinker',
  124.             ]));
  125.             $baselinkerData->addChild($builder->getElement('text_field', [
  126.                 'name'  => 'baselinkerToken',
  127.                 'label' => 'Token API',
  128.             ]));
  129.             $orderStatuses $this->dataSet->getResult('select', [], ['default_option' => '---']);
  130.             $baselinkerData->addChild($builder->getElement('select', [
  131.                 'name'        => 'baselinkerOrderStatus',
  132.                 'label'       => 'Status nowych zamówień',
  133.                 'options'     => $orderStatuses,
  134.                 'transformer' => $builder->getRepositoryTransformer('entity'OrderStatus::class),
  135.             ]));
  136.             $token $resource->getBaselinkerToken();
  137.             if (empty($token)) {
  138.                 return;
  139.             }
  140.             $series     $this->client->getInvoiceSeries();
  141.             $options    = [];
  142.             $options[0] = '--- wybierz ---';
  143.             foreach ($series as $item) {
  144.                 $options[$item['id']] = $item['type'] . ' - ' $item['name'];
  145.             }
  146.             $baselinkerData->addChild($builder->getElement('select', [
  147.                 'name'    => 'baselinkerInvoiceSeriesId',
  148.                 'label'   => 'Seria dla faktur',
  149.                 'options' => $options,
  150.             ]));
  151.         }
  152.     }
  153.     protected function getAdapter(Shipment $shipment): ShipmentAdapterInterface
  154.     {
  155.         return $this->adapterCollection->get($shipment->getCourier());
  156.     }
  157. }