src/Postroyka/ApiBundle/EventListener/OrderListener.php line 36

Open in your IDE?
  1. <?php
  2. namespace Postroyka\ApiBundle\EventListener;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Postroyka\AccountBundle\Provider\ExtendedUserProvider;
  5. use Postroyka\ApiBundle\Libs\Bitrix24;
  6. use Submarine\OrdersBundle\Entity\OrderItem;
  7. use Submarine\OrdersBundle\Event\OrderEvent;
  8. use Submarine\PagesBundle\Entity\Page;
  9. /**
  10.  * Взаимодействие с API Битрикс
  11.  */
  12. class OrderListener
  13. {
  14.     /**
  15.      * @var EntityManagerInterface
  16.      */
  17.     private $entityManager;
  18.     /**
  19.      * @var ExtendedUserProvider
  20.      */
  21.     private $extendedUserProvider;
  22.     public function __construct(EntityManagerInterface $entityManagerExtendedUserProvider $extendedUserProvider)
  23.     {
  24.         $this->entityManager $entityManager;
  25.         $this->extendedUserProvider $extendedUserProvider;
  26.     }
  27.     /**
  28.      * @param OrderEvent $event
  29.      */
  30.     public function onOrderCreate(OrderEvent $event)
  31.     {
  32.         $order $event->getOrder();
  33.         $extendedUser $this->extendedUserProvider->getByUser($order->getUser());
  34.         $options $order->getOptions();
  35.         $b24api = new Bitrix24([
  36.             'domain' => 'https://crm.postroyka.by',
  37.             'auth' => 'nadclykiua0jjkx6',
  38. //            'domain' => 'https://dev-b24.postroyka.by',
  39. //            'auth' => '40bd001563085fc35165329ea1ff5c5ecbdbbeef',
  40.         ]);
  41.         $contact_data['fields'] = [
  42.             'NAME' => html_entity_decode($extendedUser->getFirstName()) ?: 'Не указано',
  43.             'SECOND_NAME' => html_entity_decode($extendedUser->getSecondName()) ?: '',
  44.             'LAST_NAME' => '',
  45.             'EMAIL' => [[
  46.                 'VALUE' => $options->get('email')->getValue(),
  47.                 'VALUE_TYPE' => 'WORK'
  48.             ]],
  49.             'PHONE' => [[
  50.                 'VALUE' => preg_replace("/[^\d]/"''$options->get('phone')->getValue()),
  51.                 'VALUE_TYPE' => 'WORK'
  52.             ]],
  53.             'ADDRESS' => $options->get('address')->getValue(),
  54.         ];
  55.         $contact_id $b24api->getOrCreateContact($contact_data);
  56.         $order_to_bitrix = [
  57.             'TITLE' => 'Заказ №' $order->getId() . ' на Postroyka.by',
  58.             'CATEGORY_ID' => 0,
  59.             'CONTACT_ID' => $contact_id,
  60.             'ORIGIN_ID' => $order->getId(),
  61.             'COMMENTS' => html_entity_decode($options->get('comment')->getValue()),
  62.             'PAYMENT_METHOD' => $order->getPaymentMethod(),
  63.             'NEED_RECALL' => $order->getOptionValue("do_not_callback"),
  64.         ];
  65.         $deal_id $b24api->addDeal($order_to_bitrix);
  66.         if ($deal_id) {
  67.             $products = [];
  68.             /** @var OrderItem $orderItem */
  69.             foreach ($order->getItems() as $orderItem) {
  70.                 $temp_product $b24api->getProduct(['XML_ID' => $orderItem->getEntityId()]);
  71.                 /** @var Page $page */
  72.                 $page $this->entityManager->getRepository($orderItem->getEntityName())->find($orderItem->getEntityId());
  73.                 $measure_name $page->getField('unit')->getValue();
  74.                 $productItem = [
  75.                     'PRODUCT_ID' => $temp_product[0]['ID'],
  76.                     'PRICE' => $orderItem->getUnitPrice(),
  77.                     'QUANTITY' => $orderItem->getFullLength(),
  78.                     'MEASURE_NAME' => $measure_name,
  79.                 ];
  80.                 if($orderItem->getLength()){
  81.                     $productItem["PROPS"] = [
  82.                         'code' => 'PROP_NAREZKA',
  83.                         'title' => 'Нарезка',
  84.                         'value' => $orderItem->getQuantity() . ' шт. по ' $orderItem->getLength() . 'м.'
  85.                     ];
  86.                 }
  87.                 if ($temp_product) {
  88.                     $productItem["PRODUCT_ID"] = $temp_product[0]['ID'];
  89.                 } else {
  90.                     $productItem['PRODUCT_NAME'] = $orderItem->getTitle();
  91.                 }
  92.                 $products[] = $productItem;
  93.             }
  94.             $b24api->addDealProductsRow($deal_idarray_values($products));
  95.         }
  96.     }
  97. }