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