- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/helpers/admin/iblockpricechanger.php
- Класс: BitrixCatalogHelpersAdminIblockPriceChanger
- Вызов: IblockPriceChanger::updatePriceBlock
private function updatePriceBlock($productId, array $prices, $basePriceId)
{
$result = new MainResult();
$initialType = 0;
if (isset($this->userDialogParams['INITIAL_PRICE_TYPE']))
{
$id = (int)$this->userDialogParams['INITIAL_PRICE_TYPE'];
if ($id > 0)
$initialType = $id;
unset($id);
}
$targetType = 0;
if (isset($this->userDialogParams['PRICE_TYPE']))
{
$id = (int)$this->userDialogParams['PRICE_TYPE'];
if ($id > 0)
$targetType = $id;
unset($id);
}
if (!empty($prices))
{
$destinationPrice = null;
if ($initialType > 0)
{
if (isset($prices[$initialType]))
{
$sourcePrice = $prices[$initialType];
$destinationPrice = $prices[$initialType];
unset($destinationPrice['ID']);
$destinationPrice['EXTRA_ID'] = false;
$destinationPrice['CATALOG_GROUP_ID'] = $targetType;
if (isset($prices[$targetType]))
$destinationPrice = $prices[$targetType];
if (
$this->userDialogParams['UNITS'] != 'currency'
|| (
$sourcePrice['CURRENCY'] == $this->userDialogParams['CURRENCY']
&& $destinationPrice['CURRENCY'] == $this->userDialogParams['CURRENCY']
)
)
$destinationPrice['PRICE'] = $this->calculateResultPrice($sourcePrice['PRICE']);
else
$destinationPrice = null;
unset($sourcePrice);
}
}
else
{
if (isset($prices[$targetType]))
{
$destinationPrice = $prices[$targetType];
if (
$this->userDialogParams['UNITS'] != 'currency'
|| $destinationPrice['CURRENCY'] == $this->userDialogParams['CURRENCY']
)
$destinationPrice['PRICE'] = $this->calculateResultPrice($destinationPrice['PRICE']);
else
$destinationPrice = null;
}
}
if (!empty($destinationPrice))
{
if ($destinationPrice['PRICE'] < 0)
{
$result->addError(
new MainError("IBLIST_CHPRICE_ERROR_WRONG_VALUE_".$destinationPrice['PRODUCT_TYPE_CODE'],
array(
'#ID#' => $destinationPrice['PRODUCT_ID'],
'#NAME#' => $destinationPrice['ELEMENT_NAME'],
)
)
);
}
elseif ($destinationPrice['EXTRA_ID'] > 0)
{
$result->addError(
new MainError("IBLIST_CHPRICE_ERROR_PRICE_WITH_EXTRA_".$destinationPrice['PRODUCT_TYPE_CODE'],
array(
'#ID#' => $destinationPrice['PRODUCT_ID'],
'#NAME#' => $destinationPrice['ELEMENT_NAME'],
)
)
);
}
else
{
if (!empty($destinationPrice['ID']))
{
$data = [
'fields' => [
'PRICE' => $destinationPrice['PRICE'],
'CURRENCY' => $destinationPrice['CURRENCY']
],
'external_fields' => [
'IBLOCK_ID' => $destinationPrice['ELEMENT_IBLOCK_ID']
]
];
if ($basePriceId == $targetType)
{
$data['actions']['RECOUNT_PRICES'] = true;
}
$priceResult = CatalogModelPrice::update($destinationPrice['ID'], $data);
unset($data);
}
else
{
$priceResult = CatalogModelPrice::add([
'PRODUCT_ID' => $productId,
'CATALOG_GROUP_ID' => $targetType,
'PRICE' => $destinationPrice['PRICE'],
'CURRENCY' => $destinationPrice['CURRENCY'],
'EXTRA_ID' => $destinationPrice['EXTRA_ID'],
'QUANTITY_FROM' => $destinationPrice['QUANTITY_FROM'],
'QUANTITY_TO' => $destinationPrice['QUANTITY_TO']
]);
}
if ($priceResult->isSuccess())
{
IblockPropertyIndexManager::updateElementIndex($destinationPrice['ELEMENT_IBLOCK_ID'], $destinationPrice['PRODUCT_ID']);
$ipropValues = new IblockInheritedPropertyElementValues($destinationPrice['ELEMENT_IBLOCK_ID'], $destinationPrice['PRODUCT_ID']);
$ipropValues->clearValues();
unset($ipropValues);
}
unset($priceResult);
}
}
unset($destinationPrice);
}
}