• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/providerbuilderbase.php
  • Класс: BitrixSaleInternalsProviderBuilderBase
  • Вызов: ProviderBuilderBase::addItem
protected function addItem($productId, array $productData)
{
	$fields = array();
	if (isset($this->items[$productId]))
	{
		$fields = $this->items[$productId];
	}

	$fields = $productData + $fields;

	if (isset($fields['QUANTITY_LIST'][$productData['BASKET_CODE']]))
	{
		$fields['QUANTITY_LIST'][$productData['BASKET_CODE']] += (float)$productData['QUANTITY'];
	}
	else
	{
		$fields['QUANTITY_LIST'][$productData['BASKET_CODE']] = (float)$productData['QUANTITY'];
	}

	unset($fields['QUANTITY']);

	if (isset($fields['QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']]))
	{
		foreach ($productData['QUANTITY_BY_STORE'] as $storeId => $quantity)
		{
			if (!isset($fields['QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId]))
			{
				$fields['QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId] = 0;
			}

			$fields['QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId] += $quantity;
		}
	}
	else
	{
		$fields['QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']] = $productData['QUANTITY_BY_STORE'] ?? [];
	}

	unset($fields['QUANTITY_BY_STORE']);

	if (isset($fields['RESERVED_QUANTITY_LIST'][$productData['BASKET_CODE']]))
	{
		$fields['RESERVED_QUANTITY_LIST'][$productData['BASKET_CODE']] += (float)$productData['RESERVED_QUANTITY'];
	}
	else
	{
		$fields['RESERVED_QUANTITY_LIST'][$productData['BASKET_CODE']] = (float)($productData['RESERVED_QUANTITY'] ?? 0.0);
	}

	unset($fields['RESERVED_QUANTITY']);

	if (isset($fields['RESERVED_QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']]))
	{
		foreach ($productData['RESERVED_QUANTITY_BY_STORE'] as $storeId => $quantity)
		{
			if (!isset($fields['RESERVED_QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId]))
			{
				$fields['RESERVED_QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId] = 0;
			}

			$fields['RESERVED_QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']][$storeId] += $quantity;
		}
	}
	else
	{
		$fields['RESERVED_QUANTITY_LIST_BY_STORE'][$productData['BASKET_CODE']] = $productData['RESERVED_QUANTITY_BY_STORE'] ?? [];
	}

	unset($fields['RESERVED_QUANTITY_BY_STORE']);

	if (isset($productData['SHIPMENT_ITEM']))
	{
		/** @var SaleShipmentItem $shipmentItem */
		$shipmentItem = $productData['SHIPMENT_ITEM'];
		unset($fields['SHIPMENT_ITEM']);

		$fields['SHIPMENT_ITEM_LIST'][$shipmentItem->getInternalIndex()] = $shipmentItem;
		$fields['SHIPMENT_ITEM_QUANTITY_LIST'][$shipmentItem->getInternalIndex()] = (float)$productData['QUANTITY'];
	}

	if (isset($productData['STORE_DATA']))
	{
		if (!isset($fields['STORE_DATA_LIST']))
		{
			$fields['STORE_DATA_LIST'] = array();
		}

		$fields['STORE_DATA_LIST'] = $productData['STORE_DATA'] + $fields['STORE_DATA_LIST'];
		unset($fields['STORE_DATA']);
	}

	if (isset($productData['IS_BARCODE_MULTI']) && !isset($fields['IS_BARCODE_MULTI']))
	{
		$fields['IS_BARCODE_MULTI'] = $productData['IS_BARCODE_MULTI'];
	}

	if (isset($productData['SHIPMENT_ITEM_DATA']))
	{
		if (!isset($fields['SHIPMENT_ITEM_DATA_LIST']))
		{
			$fields['SHIPMENT_ITEM_DATA_LIST'] = array();
		}

		$fields['SHIPMENT_ITEM_DATA_LIST'] = $productData['SHIPMENT_ITEM_DATA'] + $fields['SHIPMENT_ITEM_DATA_LIST'];
		unset($fields['SHIPMENT_ITEM_DATA']);
	}

	if (isset($productData['NEED_RESERVE']))
	{
		if (!isset($fields['NEED_RESERVE_LIST']))
		{
			$fields['NEED_RESERVE_LIST'] = [];
		}

		$fields['NEED_RESERVE_LIST'] = $productData['NEED_RESERVE'] + $fields['NEED_RESERVE_LIST'];

		unset($fields['NEED_RESERVE']);
	}

	if (isset($productData['NEED_RESERVE_BY_STORE']))
	{
		if (!isset($fields['NEED_RESERVE_BY_STORE_LIST']))
		{
			$fields['NEED_RESERVE_BY_STORE_LIST'] = [];
		}

		$fields['NEED_RESERVE_BY_STORE_LIST'] = $productData['NEED_RESERVE_BY_STORE'] + $fields['NEED_RESERVE_BY_STORE_LIST'];

		unset($fields['NEED_RESERVE_BY_STORE']);
	}

	$this->items[$productId] = $fields;
}