@DmitriyMarinin

Как в коробочной версии bitrix24 получить связанную задачу к сделке?

Всем доброго времени суток, стоит задача получить в таймлайне оставленную задачу к сделке, как можно это реализовать? Просто ничего не нашел в поиске, в документации так же ничего не сказано, спасибо заранее!!
  • Вопрос задан
  • 689 просмотров
Решения вопроса 1
@den730
Можно так:
$listActivity = CCrmActivity::GetList(
    $arOrder = [],
    $arFilter = [
        'OWNER_ID' => $dealId, // ID сделки
        'OWNER_TYPE_ID' => 2, // 1-Лид, 2-Сделка, 3-Контакт, 4-Компания
        'TYPE_ID' => 3, // 1-Встреча, 2-Звонок, 3-Задача, 4-Email
        'COMPLETED' => 'N'
    ],
    $arGroupBy = false,
    $arNavStartParams = false,
    $arSelectFields = [],
    $arOptions = [
        'CURRENT_USER' => 1
    ]
);

while ($activity = $listActivity->Fetch()) {
    $arActivity[] = $activity;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Craftmoorg
Вот рабочий код.
Для примера на событие OnBeforeCrmDealUpdate делаем проверку на наличие дел или задач у сделки. Если таковых не имеется, то делаем отмену изменения сделки с последующим уведомлением пользователя,
public static function OnBeforeCrmDealUpdate(&$arFields)
    {
        // Если у сделки нет активности в виде дел или задач, то запрещаем ее изменять
        global $APPLICATION, $USER;
        $arActivities = [];
        $rsActivities = \CCrmActivity::GetList(
            ['ID' => 'DESC'],
            [
                'BINDINGS' => [[
                    'OWNER_ID' => $arFields['ID'],
                    'OWNER_TYPE_ID' => 2 // \CCrmOwnerType::Deal не работает, потому что Битрикс
                ]]
            ],
            false,
            false,
            ['PROVIDER_TYPE_ID', 'ASSOCIATED_ENTITY_ID'] // 'ASSOCIATED_ENTITY_ID'
        );
        while ($activity = $rsActivities->Fetch()) {
            if ($activity['PROVIDER_TYPE_ID'] == 'TODO' || $activity['PROVIDER_TYPE_ID'] == 'TASKS_TASK') {
                $arActivities[] = $activity['ASSOCIATED_ENTITY_ID'];
            }
        }
        if (empty($arActivities)) {
            $message = 'Изменять или завершать сделку без дела или задачи нельзя!';
            if (\CModule::IncludeModule('im')) {
                $arMessageFields = array(
                    "TO_USER_ID" => $USER->GetID(),
                    "FROM_USER_ID" => 0,
                    "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
                    "NOTIFY_MODULE" => "im",
                    "NOTIFY_TAG" => "",
                    "NOTIFY_EVENT" => "default",
                    "NOTIFY_MESSAGE" => $message,
                );
                \CIMNotify::Add($arMessageFields);
            }
            $arFields['RESULT_MESSAGE'] = $message;
            $APPLICATION->ThrowException($message);
            return false;
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы