В начале подключение модуля СРМ :
\Bitrix\Main\Loader::includeModule('crm');
Добавление сделок
$arFields=[
"TITLE"=>"Название сделки",
'ASSIGNED_BY_ID'=>ответственный,
'CATEGORY_ID'=> направление сделок,
'STAGE_ID'=>'IS_NEW',/*стадия*/
'OPENED'=> 'Y',
'CURRENCY_ID'=>'RUB',
'SUM'=> сумма,
'BEGINDATE'=>"дата начала"
'CLOSEDATE'=> "предполагаемая дата завершения"
'CONTACT_IDS'=>массив Id контактов
'COMPANY_ID'=>компания клиент
'OBSERVER_IDS'=>массив Id наблюдателей,
'UF_FIELD'=>значение пользовательского поля,
];
//старый метод
$entity = new CCrmDeal(false); //false - не учитывать права
$entity->Add($arFields, $bUpdateSearch = true, $options = array('CURRENT_USER'=>1));
//новый метод
$entity = new Bitrix\Crm\DealTable();
$res = $entity->add($arFields);
if($res->isSucces()){
}
Изменение сделки
//старый метод
$entity= new CCrmDeal(false); //false - не учитывать права
$entity->Update($dealID, array $arFields, $bCompare = true, $bUpdateSearch = true, $options = array('CURRENT_USER'=>1));
//новый метод$entity = new Bitrix\Crm\DealTable();
$res = $entity->update($dealID,$arFields);
if($res->isSucces()){
}
Добавление наблюдателей в сделке:
Кажется, что можно использовать стандартную функцию
\Bitrix\Crm\Observer\Entity\ObserverTable::add($arAdd);
так как наблюдатели хранятся в отдельной таблице.
Но при таком добавлении наблюдателей в сделку, они не получают права на просмотр сделки и не видят ее в списке сделок.
Правильно добавлять наблюдателей в сделку нужно через функцию:
\CCrmDeal::AddObserverIDs($dealId,$arFields['USERS_IDS']);
Соответственно удаление массива наблюдателей из сделки:
\CCrmDeal::RemoveObserverIDs($dealId,$arFields['USERS_IDS']);
Изменение товаров в сделке:
создаем массив нужных товаров
$arRows[] = array(
'PRODUCT_ID' => $arProduct['ID'],
'QUANTITY' =>$arProduct['QUANTITY'],
'PRICE' =>$arProduct['PRICE']
);
и добавляем в сделку.
CCrmDeal::SaveProductRows($dealID, $arRows, $checkPerms = true, $regEvent = true, $syncOwner = true);
Поиск и получение сделок по фильтру:
$dbDeal=CCrmDeal::GetListEx($arOrder = array("ID"=>"ASC"), $arFilter = array('CHECK_PERMISSIONS'] => 'N'), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array("*","UF_*"), $arOptions = array());
while($arDeal=$dbDeal->fetch()){
var_dump($arDeal);
}
Поиск и получение сделок по фильтру D7:
use Bitrix\Crm\DealTable;
$arDeals=DealTable::getList([
'order'=>['ID' => 'DESC'],
'filter'=>$arFilter,
'select'=>$arSelect,
'cache' => ['ttl' => 3600]
])->fetchAll();
$deals=[];
foreach($arDeals as $deal){
$deals[$deal['ID']]=$deal;
}
Запуск бизнес-процесса или робота для сделки:
Если изменяете стадию сделки, то надо вручную запустить робота для этой стадии:
\Bitrix\Main\Loader::includeModule('bizproc');
$arErrors = Array();
CBPDocument::StartWorkflow(
$bpId, //ID робота, смотреть через таблицы
array("crm","CCrmDocumentDeal","DEAL_".$dealId),
array("TargetUser" => "user_1"),
$arErrors
);
Добавление комментария в таймлайн сделки
if (!empty($attachments))
$settings = array('HAS_FILES' => 'Y');
else
$settings = array('HAS_FILES' => 'N');
$entryID = \Bitrix\Crm\Timeline\CommentEntry::create(
array(
'TEXT' => $text,
'FILES' => $attachments,
'SETTINGS' => $settings,
'AUTHOR_ID' => $authorID,
'BINDINGS' => array(array('ENTITY_TYPE_ID' => $ownerTypeID, 'ENTITY_ID' => $ownerID))
)
);