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

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.             $statuses   $this->client->getOrderStatuses();
  94.             $options    = [];
  95.             $options[0] = '--- wybierz ---';
  96.             foreach ($statuses as $status) {
  97.                 $options[$status['id']] = $status['name'];
  98.             }
  99.             $baselinkerData $form->addChild($builder->getElement('nested_fieldset', [
  100.                 'name'  => 'baselinker_data',
  101.                 'label' => 'Ustawienia Baselinker',
  102.             ]));
  103.             $baselinkerData->addChild($builder->getElement('select', [
  104.                 'name'    => 'baselinkerId',
  105.                 'label'   => 'Status Baselinker',
  106.                 'options' => $options,
  107.             ]));
  108.         }
  109.     }
  110.     public function onShopFormAdminInit(FormEvent $event)
  111.     {
  112.         $resource $event->getResource();
  113.         if ($resource instanceof Shop) {
  114.             $form    $event->getForm();
  115.             $builder $event->getFormBuilder();
  116.             $baselinkerData $form->addChild($builder->getElement('nested_fieldset', [
  117.                 'name'  => 'baselinker_data',
  118.                 'label' => 'Ustawienia Baselinker',
  119.             ]));
  120.             $baselinkerData->addChild($builder->getElement('text_field', [
  121.                 'name'  => 'baselinkerToken',
  122.                 'label' => 'Token API',
  123.             ]));
  124.             $orderStatuses $this->dataSet->getResult('select', [], ['default_option' => '---']);
  125.             $baselinkerData->addChild($builder->getElement('select', [
  126.                 'name'        => 'baselinkerOrderStatus',
  127.                 'label'       => 'Status nowych zamówień',
  128.                 'options'     => $orderStatuses,
  129.                 'transformer' => $builder->getRepositoryTransformer('entity'OrderStatus::class),
  130.             ]));
  131.             $token $resource->getBaselinkerToken();
  132.             if (empty($token)) {
  133.                 return;
  134.             }
  135.             $series     $this->client->getInvoiceSeries();
  136.             $options    = [];
  137.             $options[0] = '--- wybierz ---';
  138.             foreach ($series as $item) {
  139.                 $options[$item['id']] = $item['type'] . ' - ' $item['name'];
  140.             }
  141.             $baselinkerData->addChild($builder->getElement('select', [
  142.                 'name'    => 'baselinkerInvoiceSeriesId',
  143.                 'label'   => 'Seria dla faktur',
  144.                 'options' => $options,
  145.             ]));
  146.         }
  147.     }
  148.     protected function getAdapter(Shipment $shipment): ShipmentAdapterInterface
  149.     {
  150.         return $this->adapterCollection->get($shipment->getCourier());
  151.     }
  152. }