- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
- Класс: BitrixSaleCompatibleOrderCompatibility
- Вызов: OrderCompatibility::create
static function create(array $fields)
{
$adminSection = (defined('ADMIN_SECTION') && ADMIN_SECTION === true);
$orderCompatibility = new static();
$lid = $fields['LID'];
$userId = $fields['USER_ID'];
$currency = $fields['CURRENCY'];
$registry = SaleRegistry::getInstance(static::getRegistryType());
/** @var SaleOrder $orderClassName */
$orderClassName = $registry->getOrderClassName();
if (isset($fields['ID']) && intval($fields['ID']) > 0)
{
if (!$order = $orderClassName::load($fields['ID']))
{
throw new SaleUserMessageException('Order not found');
}
}
else
{
if (!$order = $orderClassName::create($lid, $userId, $currency))
{
throw new SaleUserMessageException('Order not create');
}
}
if (isset($fields['PERSON_TYPE_ID']) && intval($fields['PERSON_TYPE_ID']) > 0)
{
$order->setPersonTypeId($fields['PERSON_TYPE_ID']);
}
$orderFields = static::replaceFields($fields, static::getOrderReplaceFields());
$orderFields = $orderCompatibility->parseRawFields(static::ENTITY_ORDER, $orderFields);
$orderFields = static::clearFields($orderFields);
foreach (static::getFieldsFromOtherEntities() as $wrongField)
{
if (array_key_exists($wrongField, $fields))
unset($orderFields[$wrongField]);
}
$orderFields = static::convertDateFields($orderFields, static::getOrderDateFields());
unset($orderFields['MARKED']);
unset($orderFields['CANCELED']);
if (array_key_exists('PRICE', $orderFields))
{
$orderCompatibility->externalPrice = $orderFields['PRICE'];
}
if ($order->getId() > 0)
{
if ($adminSection)
{
unset($orderFields['PRICE']);
}
unset($orderFields['PRICE_DELIVERY']);
unset($orderFields['DISCOUNT_VALUE']);
unset($orderFields['TAX_VALUE']);
$order->setField('DATE_UPDATE', new MainTypeDateTime());
}
else
{
if (!$adminSection)
unset($orderFields['SUM_PAID']);
$order->setField('DATE_INSERT', new MainTypeDateTime());
$order->setField('DATE_UPDATE', new MainTypeDateTime());
}
unset($orderFields['TAX_PRICE']);
if (array_key_exists('STATUS_ID', $orderFields) && $order->getId() > 0)
{
$order->setField('STATUS_ID', $orderFields['STATUS_ID']);
unset($orderFields['STATUS_ID']);
}
if (isset($orderFields['USE_VAT']) && $orderFields['USE_VAT'] === true)
{
$orderFields['USE_VAT'] = 'Y';
}
$order->setFieldsNoDemand($orderFields);
$orderCompatibility->order = $order;
$orderCompatibility->requestFields = $fields;
$order->getDiscount();
return $orderCompatibility;
}