ProductRow::prepareForSave

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. ProductRow
  4. prepareForSave
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/item/productrow.php
  • Класс: Bitrix\Crm\Controller\Item\ProductRow
  • Вызов: ProductRow::prepareForSave
protected function prepareForSave($productRows): array
{
	$result = [];
	$fieldsInfo = $this->getFieldsInfo();

	foreach ($productRows as $index => $productRow)
	{
		$internalizedFields = $this->internalizeFields($productRow, $fieldsInfo);
		if ($internalizedFields)
		{
			$result[$index] = $internalizedFields;
		}

		if (isset($productRow['TAX_RATE']))
		{
			if (
				(float)$productRow['TAX_RATE'] > 0
				|| $productRow['TAX_RATE'] === 0
				|| (
					is_string($productRow['TAX_RATE'])
					&& isset($productRow['TAX_RATE'][0])
					&& $productRow['TAX_RATE'][0] === '0'
				)
			)
			{
				$result[$index]['TAX_RATE'] = (float)$productRow['TAX_RATE'];
			}
			else
			{
				$result[$index]['TAX_RATE'] = null;
			}
		}
	}

	$productIds = array_filter(array_column($result, 'PRODUCT_ID'));
	if ($productIds && Loader::includeModule('catalog'))
	{
		$productData = [];

		$productTableIterator = Catalog\ProductTable::getList([
			'select' => [
				'ID',
				'PRODUCT_NAME' => 'IBLOCK_ELEMENT.NAME',
				'TYPE',
			],
			'filter' => [
				'@ID' => $productIds,
			],
		]);
		while ($productItem = $productTableIterator->fetch())
		{
			$productData[$productItem['ID']] = $productItem;
		}

		foreach ($result as $index => $productRow)
		{
			$productId = $productRow['PRODUCT_ID'] ?? null;

			if ($productId && isset($productData[$productId]))
			{
				$result[$index]['TYPE'] = (int)$productData[$productId]['TYPE'];
				$result[$index]['PRODUCT_NAME'] ??= $productData[$productId]['PRODUCT_NAME'];
			}
		}
	}

	return $result;
}

Добавить комментарий