• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::checkProductBarcode
static function checkProductBarcode(BasketItem $basketItem, array $params = array())
{

	$provider = $basketItem->getProvider();
	$productId = $basketItem->getProductId();
	$data = array(
		'BARCODE' => $params['BARCODE'],
		'STORE_ID' => $params['STORE_ID'],
		'PRODUCT_ID' => $productId
	);
	$result = false;

	if ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider)))
	{
		$r = static::checkBarcode($provider, $data);
		if ($r->isSuccess())
		{
			$resultData = $r->getData();
			if (!empty($resultData) && array_key_exists($productId, $resultData))
			{
				$result = $resultData[$productId];
			}
		}
	}
	elseif (class_exists($provider))
	{
		/** @var Basket $basket */
		$basket = $basketItem->getCollection();
		if (!$basket)
		{
			throw new ObjectNotFoundException('Entity "Basket" not found');
		}

		$order = $basket->getOrder();

		if ($order)
		{
			$context = array(
				'USER_ID' => $order->getUserId(),
				'SITE_ID' => $order->getSiteId(),
				'CURRENCY' => $order->getCurrency(),
			);
		}
		else
		{
			global $USER;
			$context = array(
				'USER_ID' => $USER->getId(),
				'SITE_ID' => SITE_ID,
				'CURRENCY' => CurrencyCurrencyManager::getBaseCurrency(),
			);
		}

		$creator = InternalsProviderCreator::create($context);

		$providerClass = $basketItem->getProviderEntity();
		if ($providerClass instanceof SaleProviderBase)
		{
			$creator->addBasketItemBarcodeData($basketItem, $data);
		}

		$r = $creator->checkBarcode();
		if ($r->isSuccess())
		{
			if (!empty($providerClass))
			{
				$reflect = new ReflectionClass($provider);
				$providerName = $reflect->getName();
			}
			else
			{
				$providerName = $basketItem->getCallbackFunction();
			}

			$resultData = $r->getData();
			if (!empty($resultData) && array_key_exists('BARCODE_CHECK_LIST', $resultData))
			{
				$resultList = $resultData['BARCODE_CHECK_LIST'];
				if (isset($resultList[$providerName]) && isset($resultList[$providerName][$data['BARCODE']]))
				{
					$result = $resultList[$providerName][$data['BARCODE']];
				}
			}
		}
	}
	return $result;
}