- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/helpers/order/builder/basketbuilder.php
- Класс: BitrixSaleHelpersOrderBuilderBasketBuilder
- Вызов: BasketBuilder::setItemsFieldsByFormData
protected function setItemsFieldsByFormData()
{
/** @var BitrixSaleBasketItem $item */
$basketItems = $this->getBasket()->getBasketItems();
foreach($basketItems as $item)
{
$basketCode = $item->getBasketCode();
if(empty($this->formData['PRODUCT'][$basketCode]))
continue;
$productData = $this->formData['PRODUCT'][$basketCode];
$isProductDataNeedUpdate = in_array($basketCode, $this->needDataUpdate);
if(isset($productData["PRODUCT_PROVIDER_CLASS"]) && $productData["PRODUCT_PROVIDER_CLASS"] <> '')
{
$item->setField("PRODUCT_PROVIDER_CLASS", trim($productData["PRODUCT_PROVIDER_CLASS"]));
}
/*
* Let's extract cached provider product data from field
* in case activity is through ajax.
*/
if($this->cacheProductProviderData && !$isProductDataNeedUpdate)
{
self::sendProductCachedDataToProvider($item, $this->getOrder(), $productData);
}
if (isset($productData['NAME']))
{
$item->setField('NAME', $productData['NAME']);
}
$item->setField('TYPE', $productData['TYPE'] ?? null);
if (isset($productData['CUSTOM_PRICE']) && $productData['CUSTOM_PRICE'] === 'Y')
{
$item->markFieldCustom('PRICE');
}
$res = $item->setField("QUANTITY", $productData["QUANTITY"]);
if(!$res->isSuccess())
{
$this->getErrorsContainer()->addErrors($res->getErrors());
throw new BuildingException();
}
if (isset($productData['VAT_RATE']))
{
$item->markFieldCustom('VAT_RATE');
$item->setField('VAT_RATE', $productData['VAT_RATE']);
}
if (isset($productData['VAT_INCLUDED']))
{
$item->markFieldCustom('VAT_INCLUDED');
$item->setField('VAT_INCLUDED', $productData['VAT_INCLUDED']);
}
if(isset($productData["MODULE"]) && $productData["MODULE"] == "catalog")
{
$this->catalogProductsIds[] = $item->getField('PRODUCT_ID');
}
elseif(empty($productData["PRODUCT_PROVIDER_CLASS"]))
{
$availableFields = BasketItemBase::getAvailableFields();
$availableFields = array_fill_keys($availableFields, true);
$fillFields = array_intersect_key($productData, $availableFields);
$orderCurrency = $this->getOrder()->getCurrency();
if (
isset($fillFields['CURRENCY'])
&& $fillFields['CURRENCY'] !== $orderCurrency
)
{
$fillFields['PRICE'] = CCurrencyRates::ConvertCurrency(
(float)$fillFields['PRICE'],
$fillFields['CURRENCY'],
$orderCurrency
);
$fillFields['BASE_PRICE'] = CCurrencyRates::ConvertCurrency(
(float)$fillFields['BASE_PRICE'],
$fillFields['CURRENCY'],
$orderCurrency
);
$fillFields['CURRENCY'] = $orderCurrency;
}
if (!empty($fillFields))
{
$r = $item->setFields($fillFields);
if(!$r->isSuccess())
{
$this->getErrorsContainer()->getErrors($r->addErrors());
}
}
}
}
}