- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
- Класс: BitrixCatalogProductCatalogProvider
- Вызов: CatalogProvider::tryShip
public function tryShip(array $products)
{
$result = new SaleResult();
$resultList = array();
$filteredProducts = $this->createQuantityFilteredProducts($products);
if (empty($filteredProducts))
{
$result->setData(
array(
'TRY_SHIP_PRODUCTS_LIST' => array_fill_keys(array_keys($products), true)
)
);
return $result;
}
$availableItems = $this->createProductsListWithCatalogData($filteredProducts);
if (empty($availableItems))
{
$productIdList = array_keys($products);
foreach($productIdList as $productId)
{
$result->addError(
new SaleResultError(
MainLocalizationLoc::getMessage(
"SALE_PROVIDER_PRODUCT_NOT_AVAILABLE",
array_merge(
self::getProductCatalogInfo($productId),
array("#PRODUCT_ID#" => $productId)
)
), "SALE_PROVIDER_PRODUCT_NOT_AVAILABLE"
)
);
}
$result->setData(
array(
'TRY_SHIP_PRODUCTS_LIST' => array_fill_keys($productIdList, false)
)
);
return $result;
}
else
{
foreach ($availableItems as $productId => $productData)
{
$messageId = null;
if (
isset($productData['PRODUCT']['TYPE'])
&& $productData['PRODUCT']['TYPE'] === CatalogProductTable::TYPE_SERVICE
)
{
if (
(!isset($productData['CATALOG']['ACTIVE']) || $productData['CATALOG']['ACTIVE'] !== 'Y')
|| (!isset($productData['PRODUCT']['AVAILABLE']) || $productData['PRODUCT']['AVAILABLE'] !== 'Y')
)
{
$messageId = 'SALE_PROVIDER_PRODUCT_SERVICE_NOT_AVAILABLE';
}
}
else
{
if (!isset($productData['CATALOG']['ACTIVE']) || $productData['CATALOG']['ACTIVE'] !== 'Y')
{
$messageId = 'SALE_PROVIDER_PRODUCT_NOT_AVAILABLE';
}
}
if ($messageId !== null)
{
$result->addError(
new SaleResultError(
MainLocalizationLoc::getMessage(
$messageId,
array_merge(
self::getProductCatalogInfo($productId),
array("#PRODUCT_ID#" => $productId)
)
), "SALE_PROVIDER_PRODUCT_NOT_AVAILABLE"
)
);
$resultList[$productId] = false;
unset($availableItems[$productId]);
}
}
}
if (!empty($availableItems))
{
if (CatalogConfigState::isUsedInventoryManagement())
{
$r = $this->checkProductsInStore($availableItems);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['PRODUCTS_LIST_IN_STORE']))
{
$resultList = $resultList + $data['PRODUCTS_LIST_IN_STORE'];
}
}
else
{
$result->addErrors($r->getErrors());
}
}
else
{
$r = $this->checkProductsQuantity($availableItems);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['PRODUCTS_LIST_REQUIRED_QUANTITY']))
{
$resultList = $resultList + $data['PRODUCTS_LIST_REQUIRED_QUANTITY'];
}
}
else
{
$result->addErrors($r->getErrors());
}
}
}
if (!empty($resultList))
{
$result->setData(
array(
'TRY_SHIP_PRODUCTS_LIST' => $resultList
)
);
}
return $result;
}