• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/returncustomer/transportbase.php
  • Класс: Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportBase
  • Вызов: TransportBase::send
public function send(Message\Adapter $message)
{
	$config = $message->getConfiguration();
	$authorId = $config->get('LETTER_CREATED_BY_ID');
	$crmEntityTypeId = Service::getTypeIdByRecipientType($message->getRecipientType());
	$crmEntityId = $message->getRecipientCode();
	$text = $message->replaceFields($config->get('COMMENT'), '#', $crmEntityTypeId);

	if (!$this->responsibleQueue || $this->responsibleQueue->getId() <> $message->getId())
	{
		$responsibleList = $config->get('ASSIGNED_BY');
		if ($responsibleList)
		{
			$responsibleList = explode(',', $responsibleList);
		}
		if (empty($responsibleList))
		{
			$responsibleList = [$authorId];
		}
		$this->responsibleQueue = (new Queue('sender/rc', $message->getId()))
			->enableUserCheck()
			->disableAutoSave()
			->setValues($responsibleList);

		if ($config->get('CHECK_WORK_TIME') === 'Y')
		{
			$this->responsibleQueue->enableWorkTimeCheck();
		}
	}

	$entityFields['TITLE'] = $message->replaceFields($config->get('TITLE'), '#', $crmEntityTypeId);
	$assignedId = $this->getAssignedWithCrmData((int)$crmEntityTypeId, (int)$crmEntityId);
	$isAssignedById = ($config->get('LINK_WITH_RESPONSIBLE') === 'Y') && $assignedId;
	$entityFields['ASSIGNED_BY_ID'] = $isAssignedById ? $assignedId : $this->responsibleQueue->next();

	$selector = (new ActualEntitySelector())
		->setEntity($crmEntityTypeId, $crmEntityId)
		->search();
	$facility = new EntityManageFacility($selector);
	$facility->enableAutoGenRc();

	if ($config->get('ALWAYS_ADD') === 'Y' || $config->get('FROM_PREVIOUS') === 'Y')
	{
		$facility->setRegisterMode(EntityManageFacility::REGISTER_MODE_ALWAYS_ADD);
	}

	switch ($message->getCode())
	{
		case MessageBase::CODE_RC_LEAD:
			if (empty($entityFields['SOURCE_ID']))
			{
				$entityFields['SOURCE_ID'] = 'RC_GENERATOR';
			}
			$facility->registerLead($entityFields);
			break;

		case MessageBase::CODE_RC_DEAL:
			if (empty($entityFields['SOURCE_ID']))
			{
				$entityFields['SOURCE_ID'] = 'RC_GENERATOR';
			}
			$entityFields['CATEGORY_ID'] = $this->detectDealCategoryId(
				$config->get('CATEGORY_ID'),
				$facility
			);


			if ($config->get('FROM_PREVIOUS') === 'Y')
			{
				$lastDeal = $this->getLastDeal($facility, $config->get('DEAL_DAYS_AGO'));
				$lastOrder = $this->getOrderData($lastDeal['ID']);
				if(!$lastDeal || !$lastOrder)
				{
					$this->responsibleQueue->previous();
					return false;
				}

				$entityFields += $lastDeal;
			}


			$registeredId = $facility->registerDeal($entityFields);

			if($registeredId && $config->get('FROM_PREVIOUS') === 'Y')
			{
				$this->copyDealProducts($lastDeal['ID'], $registeredId);
				$this->copyOrder($lastDeal['ID'], $registeredId);
			}
			break;

		default:
			return false;
	}

	if (!$facility->getRegisteredId())
	{
		$this->responsibleQueue->previous();
		return false;
	}

	if (!$text)
	{
		return true;
	}

	$commentId = Timeline\CommentEntry::create([
		'TYPE_ID' => Timeline\TimelineType::COMMENT,
		'AUTHOR_ID' => $authorId,
		'TEXT' => $text,
		'SETTINGS' => [],
		'BINDINGS' => [
			[
				'ENTITY_TYPE_ID' => $facility->getRegisteredTypeId(),
				'ENTITY_ID' => $facility->getRegisteredId(),
				'IS_FIXED' => true
			]
		],
		'ASSOCIATED_ENTITY_TYPE_ID' => $facility->getRegisteredTypeId(),
		'ASSOCIATED_ENTITY_ID' => $facility->getRegisteredId()
	]);

	return $commentId > 0;
}