diff --git a/handlers/keys/key_create.py b/handlers/keys/key_create.py index 165cfc8e..63fed615 100644 --- a/handlers/keys/key_create.py +++ b/handlers/keys/key_create.py @@ -29,7 +29,6 @@ from database.notifications import check_hot_lead_discount from database.tariffs import create_subgroup_hash, find_subgroup_by_hash, get_tariffs from handlers.admin.panel.keyboard import AdminPanelCallback from handlers.buttons import MAIN_MENU -from handlers.payments.currency_rates import format_for_user from handlers.texts import ( CREATING_CONNECTION_MSG, DISCOUNT_OFFER_MESSAGE, @@ -43,6 +42,7 @@ from hooks.processors import ( process_purchase_tariff_group_override, process_tariff_menu, ) +from .utils import add_tariff_button_generic from logger import logger from .key_mode.key_cluster_mode import key_cluster_mode @@ -235,12 +235,13 @@ async def handle_key_creation( builder = InlineKeyboardBuilder() for tariff in grouped_tariffs.get(None, []): - price_text = await format_for_user(session, tg_id, tariff.get("price_rub", 0), language_code) - builder.row( - InlineKeyboardButton( - text=f"{tariff['name']} — {price_text}", - callback_data=f"select_tariff_plan|{tariff['id']}", - ) + await add_tariff_button_generic( + builder=builder, + tariff=tariff, + session=session, + tg_id=tg_id, + language_code=language_code, + callback_prefix="select_tariff_plan", ) sorted_subgroups = sorted( @@ -335,13 +336,15 @@ async def show_tariffs_in_subgroup_user(callback: CallbackQuery, state: FSMConte builder = InlineKeyboardBuilder() for tariff in filtered: - price_text = await format_for_user(session, tg_id, tariff.get("price_rub", 0), language_code) - builder.row( - InlineKeyboardButton( - text=f"{tariff['name']} — {price_text}", - callback_data=f"select_tariff_plan|{tariff['id']}", - ) + await add_tariff_button_generic( + builder=builder, + tariff=tariff, + session=session, + tg_id=tg_id, + language_code=language_code, + callback_prefix="select_tariff_plan", ) + builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data="back_to_tariff_group_list")) builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) diff --git a/handlers/keys/key_renew.py b/handlers/keys/key_renew.py index f707565d..f1992784 100644 --- a/handlers/keys/key_renew.py +++ b/handlers/keys/key_renew.py @@ -53,6 +53,7 @@ from hooks.processors import ( process_renewal_complete, process_renewal_forbidden_groups, ) +from .utils import add_tariff_button_generic from logger import logger @@ -166,16 +167,13 @@ async def process_callback_renew_key(callback_query: CallbackQuery, state: FSMCo language_code = getattr(callback_query.from_user, "language_code", None) for t in grouped_tariffs.get(None, []): - price_text = await format_for_user(session, tg_id, t["price_rub"], language_code) - if t.get("configurable"): - button_text = f"{t['name']} — от {price_text}" - else: - button_text = f"{t['name']} — {price_text}" - builder.row( - InlineKeyboardButton( - text=button_text, - callback_data=f"renew_plan|{t['id']}", - ) + await add_tariff_button_generic( + builder=builder, + tariff=t, + session=session, + tg_id=tg_id, + language_code=language_code, + callback_prefix="renew_plan", ) sorted_subgroups = sorted( @@ -324,16 +322,13 @@ async def show_tariffs_in_renew_subgroup(callback: CallbackQuery, state: FSMCont builder = InlineKeyboardBuilder() for t in filtered: - price_txt = await format_for_user(session, tg_id, t.get("price_rub", 0), language_code) - if t.get("configurable"): - button_text = f"{t['name']} — от {price_txt}" - else: - button_text = f"{t['name']} — {price_txt}" - builder.row( - InlineKeyboardButton( - text=button_text, - callback_data=f"renew_plan|{t['id']}", - ) + await add_tariff_button_generic( + builder=builder, + tariff=t, + session=session, + tg_id=tg_id, + language_code=language_code, + callback_prefix="renew_plan", ) builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data=f"renew_key|{key_name}")) diff --git a/handlers/keys/utils.py b/handlers/keys/utils.py new file mode 100644 index 00000000..041ee1b8 --- /dev/null +++ b/handlers/keys/utils.py @@ -0,0 +1,32 @@ +from typing import Any + +from aiogram.types import InlineKeyboardButton +from aiogram.utils.keyboard import InlineKeyboardBuilder +from sqlalchemy.ext.asyncio import AsyncSession + +from handlers.payments.currency_rates import format_for_user + + +async def add_tariff_button_generic( + builder: InlineKeyboardBuilder, + tariff: dict[str, Any], + session: AsyncSession, + tg_id: int, + language_code: str | None, + callback_prefix: str, +): + """Добавляет кнопку тарифа с учётом конфигуратора.""" + is_configurable = bool(tariff.get("configurable")) + if is_configurable: + button_text = tariff["name"] + else: + price_rub = float(tariff.get("price_rub") or 0) + price_text = await format_for_user(session, tg_id, price_rub, language_code) + button_text = f"{tariff['name']} — {price_text}" + + builder.row( + InlineKeyboardButton( + text=button_text, + callback_data=f"{callback_prefix}|{tariff['id']}", + ) + ) diff --git a/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so index 99d71035..2e98c8a4 100644 Binary files a/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so and b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so differ