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