• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/compilation.php
  • Класс: BitrixSalesCenterControllerCompilation
  • Вызов: Compilation::sendCompilationAction
public function sendCompilationAction(array $productIds, array $options = []): array
{
	$data = [];

	if (!isset($options['ownerId']) || (int)$options['ownerTypeId'] !== CCrmOwnerType::Deal)
	{
		return $data;
	}

	$dealId = (int)$options['ownerId'];

	$dialogId = $options['dialogId'] ?? null;
	$chatId =$this->normalizeChatId($dialogId);

	if (!$dealId)
	{
		$dealId = $this->createDealForCompilation();
		$this->onAfterDealAdd($dealId, $options['sessionId']);
	}

	if (isset($options['stageOnOrderPaid']))
	{
		CrmManager::getInstance()->saveTriggerOnOrderPaid(
			$dealId,
			CCrmOwnerType::Deal,
			$options['stageOnOrderPaid']
		);
	}

	if (isset($options['stageOnDeliveryFinished']))
	{
		CrmManager::getInstance()->saveTriggerOnDeliveryFinished(
			$dealId,
			CCrmOwnerType::Deal,
			$options['stageOnDeliveryFinished']
		);
	}

	$compilationId = null;
	if ($options['compilationId'])
	{
		$productCompilation = CatalogManager::getInstance()->getCompilationById((int)$options['compilationId']);
		if ($productCompilation)
		{
			$compilationId = (int)$productCompilation['ID'];
			if ($options['editable'] && $options['editable'] === 'true')
			{
				CatalogManager::getInstance()->setCompilationProducts((int)$options['compilationId'], $productIds);
			}
		}
	}

	if (!$compilationId)
	{
		$compilationId = CatalogManager::getInstance()->createCompilationForDeal($dealId, $productIds, $chatId);
	}
	if ($compilationId)
	{
		$compilation = CatalogManager::getInstance()->getCompilationById($compilationId);
		if (isset($compilation['PRODUCT_IDS']))
		{
			$productIds = $compilation['PRODUCT_IDS'];
		}
	}

	$compilationLink = CatalogManager::getInstance()->getLinkToProductCompilation($compilationId, $productIds)->getData();

	if ($options['sendingMethod'] === 'sms')
	{
		$isSent = CrmManager::getInstance()->sendCompilationBySms($compilationId, $dealId, $compilationLink, $options['sendingMethodDesc']);
		if (!$isSent)
		{
			$this->addError(
				new Error(Loc::getMessage('SALESCENTER_CONTROLLER_COMPILATION_SEND_SMS_ERROR'))
			);
		}
	}
	elseif ($options['dialogId'])
	{
		$r = new MainResult();
		if ($dealId && (int)$options['ownerId'] <= 0)
		{
			$r = ImOpenLinesManager::getInstance()->sendDealNotify($dealId, $options['dialogId']);
		}

		if (!$r->isSuccess())
		{
			$this->addErrors($r->getErrors());
		}

		if (!isset($options['skipPublicMessage']) || $options['skipPublicMessage'] === 'n')
		{
			if (
				$options['connector'] === 'facebook'
				&& $options['sendCompilationLinkToFacebook'] !== 'true'
			)
			{
				$this->sendCompilationToFacebook($productIds, $chatId, $compilationId);
			}
			elseif ($compilationLink)
			{
				$result = ImOpenLinesManager::getInstance()->sendCompilationMessage($compilationLink, $options['dialogId'], $dealId);
				if ($result->isSuccess())
				{
					$this->onAfterCompilationSent($compilationId, $productIds, $dealId, $options['dialogId']);
				}
				else
				{
					$this->addErrors($result->getErrors());
				}
			}
		}
	}
	else
	{
		$smsTitle = str_replace('#LINK#', $compilationLink['link'], $options['sendingMethodDesc']['text']);
		$data['compilation']['title'] = $smsTitle;
		$data['compilation']['url'] = $compilationLink['link'];
		$data['compilation']['productIds'] = $compilationLink['productIds'];
	}

	return $data;
}