// ////
/** * AJAX обработчик для получения вариантов цен * Возвращает только один вариант - соответствующий привязке для текущего сайта */ public static function getPriceOptionsAction() { $productId = (int)$_REQUEST['product_id']; $siteId = $_REQUEST['site_id'] ?? SITE_ID; if (!$productId) { return ['error' => 'Product ID required']; } $options = []; // Получаем ВСЕ типы цен для товара $dbPrices = CPrice::GetList( [], ['PRODUCT_ID' => $productId], false, false, ['ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY'] ); while ($price = $dbPrices->Fetch()) { $priceTypeId = $price['CATALOG_GROUP_ID']; // Получаем склад для этого типа цены на текущем сайте $warehouseId = self::getWarehouseByPriceType($priceTypeId, $siteId); // Если для этого типа цены нет привязки к складу - пропускаем if ($warehouseId <= 0) { continue; } // Проверяем остатки на складе $storeInfo = CCatalogStoreProduct::GetList( [], ['PRODUCT_ID' => $productId, 'STORE_ID' => $warehouseId], false, false, ['AMOUNT'] ); if ($store = $storeInfo->Fetch()) { $amount = (float)$store['AMOUNT']; // Получаем название типа цены $priceTypeInfo = CCatalogGroup::GetByID($priceTypeId); $priceTypeName = $priceTypeInfo['NAME'] ?? 'Тип цены #' . $priceTypeId; // Получаем название склада $storeNameInfo = CCatalogStore::GetByID($warehouseId); $storeName = $storeNameInfo['TITLE'] ?? 'Склад #' . $warehouseId; $options[] = [ 'price_type_id' => $priceTypeId, 'price' => $price['PRICE'], 'currency' => $price['CURRENCY'], 'price_type_name' => $priceTypeName, 'warehouse_id' => $warehouseId, 'warehouse_name' => $storeName, 'amount' => $amount, 'formatted_price' => CCurrencyLang::CurrencyFormat($price['PRICE'], $price['CURRENCY']), 'formatted_amount' => number_format($amount, 0, '', ' ') ]; // Выходим из цикла после первого найденного варианта // Показываем только один вариант - соответствующий привязке break; } } // Если вариантов нет, возвращаем пустой массив return ['success' => true, 'options' => $options]; }