diff --git a/app/cabinet/routes/subscription.py b/app/cabinet/routes/subscription.py index cc9fe65b..8f879b10 100644 --- a/app/cabinet/routes/subscription.py +++ b/app/cabinet/routes/subscription.py @@ -598,6 +598,8 @@ async def get_traffic_packages( result = [] for gb, price in packages.items(): + if price <= 0: + continue result.append( TrafficPackageResponse( gb=gb, @@ -625,6 +627,8 @@ async def get_traffic_packages( for pkg in packages: if not pkg.get('enabled', True): continue + if pkg['price'] <= 0: + continue result.append( TrafficPackageResponse( @@ -705,6 +709,11 @@ async def purchase_traffic( detail=f'Traffic package {request.gb}GB is not available', ) base_price_kopeks = packages[request.gb] + if base_price_kopeks <= 0: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f'Traffic package {request.gb}GB has no price configured', + ) else: # Classic режим @@ -732,6 +741,11 @@ async def purchase_traffic( detail='Invalid traffic package', ) base_price_kopeks = matching_pkg['price'] + if base_price_kopeks <= 0: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail='Traffic package has no price configured', + ) # На тарифах пакеты трафика покупаются на 1 месяц (30 дней), # цена в тарифе уже месячная — не умножаем на оставшиеся месяцы подписки. diff --git a/app/keyboards/inline.py b/app/keyboards/inline.py index 8c66e317..806aec18 100644 --- a/app/keyboards/inline.py +++ b/app/keyboards/inline.py @@ -1898,7 +1898,7 @@ def get_add_traffic_keyboard( period_text = f' (за {months_multiplier} мес)' packages = settings.get_traffic_topup_packages() - enabled_packages = [pkg for pkg in packages if pkg['enabled']] + enabled_packages = [pkg for pkg in packages if pkg['enabled'] and pkg['price'] > 0] if not enabled_packages: return InlineKeyboardMarkup( @@ -1982,8 +1982,8 @@ def get_add_traffic_keyboard_from_tariff( buttons = [] - # Сортируем пакеты по размеру - sorted_packages = sorted(packages.items(), key=lambda x: x[0]) + # Сортируем пакеты по размеру, исключаем пакеты с нулевой ценой + sorted_packages = sorted(((gb, p) for gb, p in packages.items() if p > 0), key=lambda x: x[0]) # Пакеты трафика на тарифах покупаются на 1 месяц (30 дней), # цена в тарифе уже месячная — не умножаем на оставшиеся месяцы подписки