<?php
namespace Postroyka\ApiBundle\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Postroyka\AccountBundle\Provider\ExtendedUserProvider;
use Postroyka\ApiBundle\Libs\Bitrix24;
use Submarine\OrdersBundle\Entity\OrderItem;
use Submarine\OrdersBundle\Event\OrderEvent;
use Submarine\PagesBundle\Entity\Page;
/**
* Взаимодействие с API Битрикс
*/
class OrderListener
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* @var ExtendedUserProvider
*/
private $extendedUserProvider;
public function __construct(EntityManagerInterface $entityManager, ExtendedUserProvider $extendedUserProvider)
{
$this->entityManager = $entityManager;
$this->extendedUserProvider = $extendedUserProvider;
}
/**
* @param OrderEvent $event
*/
public function onOrderCreate(OrderEvent $event)
{
$order = $event->getOrder();
$extendedUser = $this->extendedUserProvider->getByUser($order->getUser());
$options = $order->getOptions();
$b24api = new Bitrix24([
'domain' => 'https://crm.postroyka.by',
'auth' => 'nadclykiua0jjkx6',
// 'domain' => 'https://dev-b24.postroyka.by',
// 'auth' => '40bd001563085fc35165329ea1ff5c5ecbdbbeef',
]);
$contact_data['fields'] = [
'NAME' => html_entity_decode($extendedUser->getFirstName()) ?: 'Не указано',
'SECOND_NAME' => html_entity_decode($extendedUser->getSecondName()) ?: '',
'LAST_NAME' => '',
'EMAIL' => [[
'VALUE' => $options->get('email')->getValue(),
'VALUE_TYPE' => 'WORK'
]],
'PHONE' => [[
'VALUE' => preg_replace("/[^\d]/", '', $options->get('phone')->getValue()),
'VALUE_TYPE' => 'WORK'
]],
'ADDRESS' => $options->get('address')->getValue(),
];
$contact_id = $b24api->getOrCreateContact($contact_data);
$order_to_bitrix = [
'TITLE' => 'Заказ №' . $order->getId() . ' на Postroyka.by',
'CATEGORY_ID' => 0,
'CONTACT_ID' => $contact_id,
'ORIGIN_ID' => $order->getId(),
'COMMENTS' => html_entity_decode($options->get('comment')->getValue()),
'PAYMENT_METHOD' => $order->getPaymentMethod(),
'NEED_RECALL' => $order->getOptionValue("do_not_callback"),
];
$deal_id = $b24api->addDeal($order_to_bitrix);
if ($deal_id) {
$products = [];
/** @var OrderItem $orderItem */
foreach ($order->getItems() as $orderItem) {
$temp_product = $b24api->getProduct(['XML_ID' => $orderItem->getEntityId()]);
/** @var Page $page */
$page = $this->entityManager->getRepository($orderItem->getEntityName())->find($orderItem->getEntityId());
$measure_name = $page->getField('unit')->getValue();
$productItem = [
'PRODUCT_ID' => $temp_product[0]['ID'],
'PRICE' => $orderItem->getUnitPrice(),
'QUANTITY' => $orderItem->getFullLength(),
'MEASURE_NAME' => $measure_name,
];
if($orderItem->getLength()){
$productItem["PROPS"] = [
'code' => 'PROP_NAREZKA',
'title' => 'Нарезка',
'value' => $orderItem->getQuantity() . ' шт. по ' . $orderItem->getLength() . 'м.'
];
}
if ($temp_product) {
$productItem["PRODUCT_ID"] = $temp_product[0]['ID'];
} else {
$productItem['PRODUCT_NAME'] = $orderItem->getTitle();
}
$products[] = $productItem;
}
$b24api->addDealProductsRow($deal_id, array_values($products));
}
}
}