- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/order/ordercreator.php
- Класс: Bitrix\Crm\Order\OrderCreator
- Вызов: OrderCreator::build
public function build(?int $orderId = null): ?Order
{
$settings = new SettingsContainer([
'createDefaultPaymentIfNeed' => false,
'createDefaultShipmentIfNeed' => false,
'clearReservesIfEmpty' => false,
'createUserIfNeed' => SettingsContainer::SET_ANONYMOUS_USER,
]);
$builder = new OrderBuilderCrm($settings);
$entityFields = $this->getEntityFields();
$userId = (int)($entityFields['ASSIGNED_BY_ID'] ?? 0);
$currencyId = (string)($entityFields['CURRENCY_ID'] ?? '');
try
{
$fields = [
'ID' => $orderId,
'SITE_ID' => Context::getCurrent()->getSite(),
'USER_ID' => $userId,
'RESPONSIBLE_ID' => $userId,
'OWNER_ID' => $this->ownerId,
'OWNER_TYPE_ID' => $this->ownerTypeId,
];
if (!empty($currencyId))
{
$fields['CURRENCY'] = $currencyId;
}
// if order exist - don't changes part of the fields.
if ($orderId)
{
$fields['CLIENT'] = ClientInfo::createFromOwner(CCrmOwnerType::Order, $orderId)->toArray(false);
unset(
$fields['USER_ID'],
$fields['CURRENCY']
);
}
else
{
$fields['TRADING_PLATFORM'] = $this->getDealTradingPlatformId();
$fields['CLIENT'] = ClientInfo::createFromOwner($this->ownerTypeId, $this->ownerId)->toArray(false);
}
$builder->build($fields);
/**
* @var Order $order
*/
$order = $builder->getOrder();
if ($order)
{
$order->getContactCompanyCollection()->disableAutoCreationMode();
}
if (
$orderId > 0
&& !empty($currencyId)
&& $currencyId !== $order->getCurrency()
)
{
$order->changeCurrency($currencyId);
}
return $order;
}
catch (BuildingException $e)
{
// pass
}
return null;
}