- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
- Класс: BitrixSaleProviderBase
- Вызов: ProviderBase::shipProductData
static function shipProductData($provider, array $fields, array $storeDataList = array())
{
$result = new Result();
$quantity = $fields['QUANTITY'];
$basketCode = $fields['BASKET_CODE'];
/** @var BasketItem $basketItem */
$basketItem = $fields['BASKET_ITEM'];
/** @var BasketBase $basket */
$basket = $basketItem->getCollection();
/** @var OrderBase $order */
$order = $basket->getOrder();
$data = array(
"BASKET_ITEM" => $basketItem,
"PRODUCT_ID" => $fields['PRODUCT_ID'],
"QUANTITY" => $quantity,
"PRODUCT_RESERVED" => "N",
'UNDO_DEDUCTION' => $fields['DEDUCTED']? 'N' : 'Y',
'EMULATE' => 'N',
);
if ($data['UNDO_DEDUCTION'] == 'N')
{
$data['PRODUCT_RESERVED'] = "Y";
}
if (!empty($fields['RESERVED']))
{
$data['PRODUCT_RESERVED'] = $fields['RESERVED'] ? 'Y' : 'N';
}
$resultProductData = array();
if (Configuration::useStoreControl())
{
if (!empty($storeDataList) && is_array($storeDataList) && isset($storeDataList[$basketCode]))
{
$data['STORE_DATA'] = $storeDataList[$basketCode];
}
if (!empty($data['STORE_DATA']))
{
$allBarcodeQuantity = 0;
foreach($data['STORE_DATA'] as $basketShipmentItemStore)
{
$allBarcodeQuantity += $basketShipmentItemStore['QUANTITY'];
}
if ($quantity > $allBarcodeQuantity)
{
$result->addWarning(new ResultWarning(Loc::getMessage('SALE_PROVIDER_SHIPMENT_SHIPPED_LESS_QUANTITY', array(
'#PRODUCT_NAME#' => $basketItem->getField('NAME')
)), 'SALE_PROVIDER_SHIPMENT_SHIPPED_LESS_QUANTITY'));
$resultProductData['RESULT'] = false;
}
elseif ($quantity < $allBarcodeQuantity)
{
$result->addWarning(new ResultWarning(Loc::getMessage('SALE_PROVIDER_SHIPMENT_SHIPPED_MORE_QUANTITY', array(
'#PRODUCT_NAME#' => $basketItem->getField('NAME')
)), 'SALE_PROVIDER_SHIPMENT_SHIPPED_MORE_QUANTITY'));
$resultProductData['RESULT'] = false;
}
}
}
if (!isset($resultProductData['RESULT'])
|| $resultProductData['RESULT'] !== false)
{
global $APPLICATION;
$APPLICATION->ResetException();
$resultProductData = $provider::DeductProduct($data);
$result->setData($resultProductData);
$needShip = $fields['DEDUCTED'];
$oldException = $APPLICATION->GetException();
if (!empty($oldException))
{
if ($needShip === true)
{
$result->addWarning( new ResultWarning($oldException->GetString(), $oldException->GetID()) );
}
}
if (($oldException && $needShip === false) || !$oldException)
{
static::addQuantityPoolItem($order->getInternalId(), $basketItem, ($needShip? 1 : -1) * $quantity);
}
}
return $result;
}