Указание внешнего номера на созданные счета в Битрикс24
Используется несколько источников выставления счетов. Для нумерации счетов сделали независымый сервер к которому обращаются по http и получают номер. Этот сервер выдает только нечетные номера (к примеру: 1073, 1075, 1077 и т.д.). В дальнейшем планируем сделать резервный, который будет выдавать четные номера (к примеру 1076, 1078 и т.д.).
Для данной реализации решил использовать событие onCrmDynamicItemAdd_31 и указывать номер счету через D7, а не через веб-хуки.
пример в файле init.php:
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Service;
// ...
AddEventHandler('crm', 'onCrmDynamicItemAdd_31', ['\DiswebEvent', 'invoiceAdd']);
class DiswebEvent
{
protected static $key = 'КЛЮЧ УДАЛЕННОГО СЕРВЕРА';
// ...
public static function invoiceAdd($data = [])
{
Loader::includeModule("crm");
$ch = curl_init('https://domain.com/api/v1/sys/order_number');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . self::$key,
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$return = curl_exec($ch);
curl_close($ch);
$ar = json_decode($return, true);
// В нашей системе несколько организаций и у каждой отдельный префикс
if ($data->getMycompanyId() == 438) $accountNumber = "СС";
else if ($data->getMycompanyId() == 437) $accountNumber = "ЕВ";
else if ($data->getMycompanyId() == 4233) $accountNumber = "СА";
else if ($data->getMycompanyId() == 4232) $accountNumber = "СН";
else $accountNumber = "00";
$accountNumber .= substr('000000000' . $ar['number'], -9);
$factory = Service\Container::getInstance()->getFactory(\CCrmOwnerType::SmartInvoice);
$item = $factory->getItem($data->getId());
$item->setFromCompatibleData([
// титульное наименование счета
'TITLE' => '№ ' . $accountNumber . ' от ' . explode(' ', $data->getCreatedTime())[0],
// номер счета
'ACCOUNT_NUMBER' => $ar['number'],
]);
$item->save();
}
// ...
}
// ...