- Модуль: 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;
}