public static function checkAvailableProductQuantity(BasketItem $basketItem, $deltaQuantity) { global $APPLICATION; $result = new Result(); $resultProductData = array(); $orderId = null; $userId = null; $siteId = null; /** @var Basket $basket */ $basket = $basketItem->getCollection(); if (($order = $basket->getOrder()) !== null) { $userId = $order->getUserId(); $siteId = $order->getSiteId(); } if ($userId === null || $siteId === null) { static $usersIds = array(); if (empty($usersIds[$basket->getFUserId()])) { $usersIds[$basket->getFUserId()] = \CSaleUser::GetUserID($basket->getFUserId()); } $userId = $usersIds[$basket->getFUserId()]; $siteId = $basket->getSiteId(); } if ($provider = $basketItem->getProvider()) { if ($provider instanceof Provider) { throw new NotSupportedException('provider not supported'); // $result = $provider::getProductData($siteId, $userId, $currency, $providerBasketItemList, $select); } elseif ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider))) { $needQuantity = $basketItem->getQuantity(); if ($order && $order->getId() > 0) { $needQuantity = $deltaQuantity; } $data = array("PRODUCT_ID" => $basketItem->getProductId(), "QUANTITY" => $needQuantity, "USER_ID" => $userId, "SITE_ID" => $siteId, "BASKET_ID" => $basketItem->getId(), "CHECK_QUANTITY" => "Y", 'CHECK_PRICE' => 'N', 'CHECK_COUPONS' => 'N', "SELECT_QUANTITY_TRACE" => "Y"); // TODO: ! if ($deltaQuantity <= 0) { $result->setData(array('AVAILABLE_QUANTITY' => $deltaQuantity)); return $result; } $APPLICATION->ResetException(); $resultProductData = $provider::GetProductData($data); if ($ex = $APPLICATION->GetException()) { $result->addError(new ResultError($ex->GetString(), $ex->GetID())); } } else { $APPLICATION->ResetException(); $resultProductData = \CSaleBasket::ExecuteCallbackFunction($basketItem->getField('CALLBACK_FUNC'), $basketItem->getField('MODULE'), $basketItem->getProductId(), $basketItem->getQuantity()); if ($ex = $APPLICATION->GetException()) { $result->addError(new ResultError($ex->GetString(), $ex->GetID())); } } } else { $availableQuantity = $basketItem->getQuantity(); if ($deltaQuantity <= 0) { $availableQuantity = $deltaQuantity; } $result->setData(array('AVAILABLE_QUANTITY' => $availableQuantity)); return $result; } $fields = array(); if (array_key_exists('QUANTITY', $resultProductData)) { $fields['AVAILABLE_QUANTITY'] = $resultProductData['QUANTITY']; } if (array_key_exists('QUANTITY_TRACE', $resultProductData)) { $fields['QUANTITY_TRACE'] = $resultProductData['QUANTITY_TRACE'] == "Y"; } if (!empty($fields)) { $result->setData($fields); } return $result; }