- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/crm/activity.php
- Класс: BitrixImOpenLinesCrmActivity
- Вызов: Activity::add
static function add(array $params = []): Result
{
$result = new Result;
if (Loader::includeModule('crm'))
{
if(!empty($params))
{
$addFields = [
'TYPE_ID' => CCrmActivityType::Provider,
'PROVIDER_ID' => BitrixCrmActivityProviderOpenLine::getId(),
'NOTIFY_TYPE' => CCrmActivityNotifyType::None,
'RESULT_MARK' => BitrixCrmActivityStatisticsMark::None,
];
if (!empty($params['LINE_ID']))
{
$addFields['PROVIDER_TYPE_ID'] = $params['LINE_ID'];
}
if (!empty($params['NAME']))
{
$addFields['SUBJECT'] = $params['NAME'];
}
if (!empty($params['SESSION_ID']))
{
$addFields['ASSOCIATED_ENTITY_ID'] = $params['SESSION_ID'];
$addFields['ORIGIN_ID'] = 'IMOL_' . $params['SESSION_ID'];
}
if (empty($params['START_TIME']))
{
$addFields['START_TIME'] = new BitrixMainTypeDateTime();
}
else
{
$addFields['START_TIME'] = $params['START_TIME'];
}
if (empty($params['COMPLETED']))
{
$addFields['COMPLETED'] = 'N';
}
else
{
$addFields['COMPLETED'] = $params['COMPLETED'] === 'Y' ? 'Y' : 'N';
}
if (empty($params['MODE']))
{
$addFields['DIRECTION'] = CCrmActivityDirection::Incoming;
$addFields['RESULT_STATUS'] = BitrixCrmActivityStatisticsStatus::Unanswered;
}
else
{
$addFields['DIRECTION'] = $params['MODE'] === Session::MODE_INPUT ? CCrmActivityDirection::Incoming : CCrmActivityDirection::Outgoing;
$addFields['RESULT_STATUS'] = $params['MODE'] === Session::MODE_OUTPUT ? BitrixCrmActivityStatisticsStatus::Answered : BitrixCrmActivityStatisticsStatus::Unanswered;
}
if (!empty($params['BINDINGS']))
{
$addFields['BINDINGS'] = $params['BINDINGS'];
}
if (!empty($params['SETTINGS']))
{
$addFields['SETTINGS'] = $params['SETTINGS'];
}
if (!empty($params['OPERATOR_ID']))
{
$addFields['AUTHOR_ID'] = $params['OPERATOR_ID'];
$addFields['RESPONSIBLE_ID'] = $params['OPERATOR_ID'];
}
if (!empty($params['USER_CODE']))
{
$addFields['PROVIDER_PARAMS'] = ['USER_CODE' => $params['USER_CODE']];
}
if (!empty($params['CONNECTOR_ID']))
{
$addFields['RESULT_SOURCE_ID'] = $params['CONNECTOR_ID'];
}
if (
!empty($params['ENTITES'])
&& is_array($params['ENTITES'])
&& !empty($params['USER_CODE'])
)
{
foreach ($params['ENTITES'] as $entity)
{
$addFields['COMMUNICATIONS'][] = [
'ID' => 0,
'TYPE' => 'IM',
'VALUE' => 'imol|' . $params['USER_CODE'],
'ENTITY_ID' => $entity['ENTITY_ID'],
'ENTITY_TYPE_ID' => $entity['ENTITY_TYPE_ID']
];
}
}
if ($addFields['DIRECTION'] === CCrmActivityDirection::Incoming)
{
$addFields['IS_INCOMING_CHANNEL'] = 'Y';
(new Event('imopenlines', 'OnImOpenLineRegisteredInCrm', $addFields))->send();
}
$id = CCrmActivity::Add($addFields, false, true, ['REGISTER_SONET_EVENT' => true]);
if ($id)
{
$result->setResult($id);
IMOpenLineTracker::getInstance()->registerActivity($id, ['ORIGIN_ID' => $params['LINE_ID'], 'COMPONENT_ID' => $params['CONNECTOR_ID']]);
Log::write($id, 'CRM ACTIVITY CREATED');
}
else
{
if(CAllCrmActivity::GetErrorCount() > 0)
{
$errorMessage = CAllCrmActivity::GetLastErrorMessage();
$result->addError(new Error($errorMessage, Crm::ERROR_IMOL_CRM_ACTIVITY, __METHOD__));
Log::write($errorMessage, 'CRM ACTIVITY ERROR');
}
}
}
else
{
$result->addError(new Error(Loc::getMessage('IMOL_CRM_ERROR_ACTIVITY_NO_REQUIRED_PARAMETERS'), self::ERROR_IMOL_ACTIVITY_NO_REQUIRED_PARAMETERS, __METHOD__));
}
}
else
{
$result->addError(new Error(Loc::getMessage('IMOL_CRM_ERROR_NOT_LOAD_CRM'), Crm::ERROR_IMOL_NOT_LOAD_CRM, __METHOD__));
}
return $result;
}