• Модуль: 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);
	}
}