changing the logic of the fare selection button

This commit is contained in:
Vladless
2025-12-01 22:06:55 +03:00
parent 313bdfdc62
commit 4e3520ee22
4 changed files with 63 additions and 33 deletions
+16 -13
View File
@@ -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"))
+15 -20
View File
@@ -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}"))
+32
View File
@@ -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']}",
)
)