From b651867aacd36339600d73faceabd646d0eafcf0 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 14 Jan 2026 03:05:04 +0300 Subject: [PATCH] Add files via upload --- app/handlers/balance/cryptobot.py | 2 +- app/handlers/balance/heleket.py | 2 +- app/handlers/balance/main.py | 49 +++++++++++++++++++++++++++---- app/handlers/balance/mulenpay.py | 2 +- app/handlers/balance/pal24.py | 2 +- app/handlers/balance/platega.py | 2 +- app/handlers/balance/stars.py | 2 +- app/handlers/balance/wata.py | 2 +- app/handlers/balance/yookassa.py | 8 ++--- 9 files changed, 54 insertions(+), 17 deletions(-) diff --git a/app/handlers/balance/cryptobot.py b/app/handlers/balance/cryptobot.py index 6ae9158b..aa149425 100644 --- a/app/handlers/balance/cryptobot.py +++ b/app/handlers/balance/cryptobot.py @@ -85,7 +85,7 @@ async def start_cryptobot_payment( # Если включен быстрый выбор суммы и не отключены кнопки, добавляем кнопки if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: # Вставляем кнопки быстрого выбора перед кнопкой "Назад" keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/heleket.py b/app/handlers/balance/heleket.py index 7a1a0d7c..2fa48814 100644 --- a/app/handlers/balance/heleket.py +++ b/app/handlers/balance/heleket.py @@ -74,7 +74,7 @@ async def start_heleket_payment( if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_buttons: keyboard.inline_keyboard = quick_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/main.py b/app/handlers/balance/main.py index 10e68d1f..d94e1e32 100644 --- a/app/handlers/balance/main.py +++ b/app/handlers/balance/main.py @@ -120,7 +120,7 @@ async def route_payment_by_method( return False -def get_quick_amount_buttons(language: str, user: User) -> list: +async def get_quick_amount_buttons(language: str, user: User) -> list: """ Generate quick amount buttons with user-specific pricing and discounts. @@ -135,15 +135,40 @@ def get_quick_amount_buttons(language: str, user: User) -> list: return [] from app.localization.texts import get_texts + from app.config import PERIOD_PRICES texts = get_texts(language) + # В режиме тарифов получаем цены из тарифа пользователя + tariff_prices = None + tariff_periods = None + if settings.is_tariffs_mode(): + from app.database.database import AsyncSessionLocal + from app.database.crud.subscription import get_subscription_by_user_id + from app.database.crud.tariff import get_tariff_by_id + + async with AsyncSessionLocal() as db: + subscription = await get_subscription_by_user_id(db, user.id) + if subscription and subscription.tariff_id: + tariff = await get_tariff_by_id(db, subscription.tariff_id) + if tariff and tariff.period_prices: + tariff_prices = {int(k): v for k, v in tariff.period_prices.items()} + tariff_periods = sorted(tariff_prices.keys()) + buttons = [] - periods = settings.get_available_subscription_periods() - periods = periods[:6] # Limit to 6 periods + + # Используем периоды тарифа в режиме тарифов, иначе стандартные + if tariff_periods: + periods = tariff_periods[:6] + else: + periods = settings.get_available_subscription_periods()[:6] for period in periods: - from app.config import PERIOD_PRICES - base_price_kopeks = PERIOD_PRICES.get(period, 0) + # Получаем цену из тарифа или из PERIOD_PRICES + if tariff_prices and period in tariff_prices: + base_price_kopeks = tariff_prices[period] + else: + base_price_kopeks = PERIOD_PRICES.get(period, 0) + if base_price_kopeks > 0: # Calculate price with user's promo group discount using unified system price_info = calculate_user_price(user, base_price_kopeks, period, "period") @@ -365,7 +390,19 @@ async def show_payment_methods( try: # Получаем цены для текущих параметров from app.config import PERIOD_PRICES - base_price_original = PERIOD_PRICES.get(duration_days, 0) + from app.database.crud.tariff import get_tariff_by_id + + # В режиме тарифов берём цену из тарифа пользователя + base_price_original = 0 + if settings.is_tariffs_mode() and subscription.tariff_id: + tariff = await get_tariff_by_id(db, subscription.tariff_id) + if tariff and tariff.period_prices: + base_price_original = tariff.period_prices.get(str(duration_days), 0) + + # Если не нашли в тарифе - используем PERIOD_PRICES + if base_price_original <= 0: + base_price_original = PERIOD_PRICES.get(duration_days, 0) + period_discount_percent = db_user.get_promo_discount("period", duration_days) base_price, base_discount_total = apply_percentage_discount( base_price_original, diff --git a/app/handlers/balance/mulenpay.py b/app/handlers/balance/mulenpay.py index 8f0e44f8..f1ded7e5 100644 --- a/app/handlers/balance/mulenpay.py +++ b/app/handlers/balance/mulenpay.py @@ -66,7 +66,7 @@ async def start_mulenpay_payment( if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/pal24.py b/app/handlers/balance/pal24.py index 460ebc7a..b3de04f8 100644 --- a/app/handlers/balance/pal24.py +++ b/app/handlers/balance/pal24.py @@ -309,7 +309,7 @@ async def start_pal24_payment( if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/platega.py b/app/handlers/balance/platega.py index 59943136..40336525 100644 --- a/app/handlers/balance/platega.py +++ b/app/handlers/balance/platega.py @@ -83,7 +83,7 @@ async def _prompt_amount( if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/stars.py b/app/handlers/balance/stars.py index a5899366..93d67739 100644 --- a/app/handlers/balance/stars.py +++ b/app/handlers/balance/stars.py @@ -59,7 +59,7 @@ async def start_stars_payment( # Если включен быстрый выбор суммы и не отключены кнопки, добавляем кнопки if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: # Вставляем кнопки быстрого выбора перед кнопкой "Назад" keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/wata.py b/app/handlers/balance/wata.py index 1ddc905e..16c76b21 100644 --- a/app/handlers/balance/wata.py +++ b/app/handlers/balance/wata.py @@ -64,7 +64,7 @@ async def start_wata_payment( if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard diff --git a/app/handlers/balance/yookassa.py b/app/handlers/balance/yookassa.py index c80c57ef..bc71a9ad 100644 --- a/app/handlers/balance/yookassa.py +++ b/app/handlers/balance/yookassa.py @@ -69,11 +69,11 @@ async def start_yookassa_payment( # Если включен быстрый выбор суммы и не отключены кнопки, добавляем кнопки if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: # Вставляем кнопки быстрого выбора перед кнопкой "Назад" keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard - + await callback.message.edit_text( message_text, reply_markup=keyboard, @@ -140,11 +140,11 @@ async def start_yookassa_sbp_payment( # Если включен быстрый выбор суммы и не отключены кнопки, добавляем кнопки if settings.is_quick_amount_buttons_enabled(): from .main import get_quick_amount_buttons - quick_amount_buttons = get_quick_amount_buttons(db_user.language, db_user) + quick_amount_buttons = await get_quick_amount_buttons(db_user.language, db_user) if quick_amount_buttons: # Вставляем кнопки быстрого выбора перед кнопкой "Назад" keyboard.inline_keyboard = quick_amount_buttons + keyboard.inline_keyboard - + await callback.message.edit_text( message_text, reply_markup=keyboard,