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