• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/order/eventshandler/deliveryrequest.php
  • Класс: Bitrix\Crm\Order\EventsHandler\DeliveryRequest
  • Вызов: DeliveryRequest::OnMessageReceived
static function OnMessageReceived(Main\Event $event)
{
	/** @var int $shipmentId */
	$shipmentId = $event->getParameter('SHIPMENT_ID');

	/** @var Message\Message $message */
	$message = $event->getParameter('MESSAGE');

	/** @var string $addressee */
	$addressee = $event->getParameter('ADDRESSEE');

	if (
		!$message instanceof Message\Message
		|| $addressee !== Manager::MESSAGE_RECIPIENT_ADDRESSEE
	)
	{
		return;
	}

	$shipment = ShipmentRepository::getInstance()->getById($shipmentId);
	if (!$shipment instanceof Crm\Order\Shipment)
	{
		return;
	}

	$order = $shipment->getOrder();

	$entityCommunication = $order->getContactCompanyCollection()->getEntityCommunication();
	$phoneTo = $order->getContactCompanyCollection()->getEntityCommunicationPhone();
	if (!$entityCommunication || !$phoneTo)
	{
		return;
	}

	$authorId = $shipment->getField('RESPONSIBLE_ID')
		? (int)$shipment->getField('RESPONSIBLE_ID')
		: (int)$shipment->getField('EMP_RESPONSIBLE_ID');

	$sendersOptions = [
		Crm\Integration\SmsManager::getSenderCode() => [
			'ACTIVITY_PROVIDER_TYPE_ID' => BaseMessage::PROVIDER_TYPE_SALESCENTER_DELIVERY,
			'MESSAGE_BODY' => $message->getBodyForHtml(),
		]
	];
	if ($message->getType() === Message\Message::TYPE_SHIPMENT_PICKUPED)
	{
		$sendersOptions[Crm\Integration\NotificationsManager::getSenderCode()] = [
			'ACTIVITY_PROVIDER_TYPE_ID' => BaseMessage::PROVIDER_TYPE_SALESCENTER_DELIVERY,
			'TEMPLATE_CODE' => 'ORDER_IN_TRANSIT',
			'PLACEHOLDERS' => [
				'NAME' => $entityCommunication->getCustomerName(),
				'ORDER' => $order->getField('ACCOUNT_NUMBER'),
			]
		];
	}

	Crm\MessageSender\MessageSender::send(
		$sendersOptions,
		[
			'COMMON_OPTIONS' => [
				'PHONE_NUMBER' => $phoneTo,
				'USER_ID' => $authorId,
				'ADDITIONAL_FIELDS' => [
					'ENTITY_TYPE' => $entityCommunication::getEntityTypeName(),
					'ENTITY_TYPE_ID' => $entityCommunication::getEntityType(),
					'ENTITY_ID' => $entityCommunication->getField('ENTITY_ID'),
					'BINDINGS' => Crm\Order\BindingsMaker\ActivityBindingsMaker::makeByShipment(
						$shipment,
						[
							'extraBindings' => [
								[
									'TYPE_ID' => $entityCommunication::getEntityType(),
									'ID' => $entityCommunication->getField('ENTITY_ID'),
								],
							],
						]
					),
				]
			]
		]
	);
}