diff --git a/handlers/admin/users/keyboard.py b/handlers/admin/users/keyboard.py index 26d74566..a1846419 100644 --- a/handlers/admin/users/keyboard.py +++ b/handlers/admin/users/keyboard.py @@ -3,13 +3,14 @@ from datetime import datetime, timezone from aiogram.filters.callback_data import CallbackData from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup from aiogram.utils.keyboard import InlineKeyboardBuilder -from sqlalchemy import select +from sqlalchemy import select, or_ from sqlalchemy.ext.asyncio import AsyncSession from config import HWID_RESET_BUTTON from database import get_clusters from database.models import Key, Server, Tariff from handlers.buttons import BACK +from handlers.utils import format_days from ..panel.keyboard import build_admin_back_btn @@ -114,11 +115,16 @@ async def build_users_balance_kb( result = await session.execute(select(Tariff)) tariffs = result.scalars().all() + unique_prices = set() for tariff in tariffs: months = tariff.duration_days // 30 if months < 1: continue price = tariff.price_rub + if price in unique_prices: + continue + unique_prices.add(price) + builder.row( InlineKeyboardButton( text=f"+ {price}₽ ({months} мес.)", @@ -197,25 +203,34 @@ async def build_users_key_expiry_kb( result = await session.execute( select(Tariff) .join(Server, Tariff.group_code == Server.tariff_group) - .where(Server.cluster_name == server_id) + .where( + or_( + Server.server_name == server_id, + Server.cluster_name == server_id, + ) + ) + ) tariffs = result.scalars().all() + unique_durations = set() for tariff in tariffs: - months = tariff.duration_days // 30 - if months < 1: + days = tariff.duration_days + if days < 1 or days in unique_durations: continue + unique_durations.add(days) + label = format_days(days) builder.row( InlineKeyboardButton( - text=f"+ {months} мес.", + text=f"+ {label}", callback_data=AdminUserKeyEditorCallback( - action="add", tg_id=tg_id, data=email, month=months + action="add", tg_id=tg_id, data=email, month=days ).pack(), ), InlineKeyboardButton( - text=f"- {months} мес.", + text=f"- {label}", callback_data=AdminUserKeyEditorCallback( - action="add", tg_id=tg_id, data=email, month=-months + action="add", tg_id=tg_id, data=email, month=-days ).pack(), ), ) diff --git a/handlers/admin/users/users_handler.py b/handlers/admin/users/users_handler.py index b0e99b17..fed21338 100644 --- a/handlers/admin/users/users_handler.py +++ b/handlers/admin/users/users_handler.py @@ -1411,10 +1411,12 @@ async def handle_create_key_country( tariffs = await get_tariffs_for_cluster(session, cluster_name) for tariff in tariffs: - months = tariff["duration_days"] // 30 - if months < 1: + if tariff["duration_days"] < 1: continue - builder.button(text=f"{months} мес.", callback_data=f"tariff_{tariff['id']}") + builder.button( + text=f"{tariff['name']} — {tariff['price_rub']}₽", + callback_data=f"tariff_{tariff['id']}" + ) builder.adjust(1) builder.row(build_admin_back_btn()) @@ -1445,10 +1447,12 @@ async def handle_create_key_cluster( builder = InlineKeyboardBuilder() for tariff in tariffs: - months = tariff["duration_days"] // 30 - if months < 1: + if tariff["duration_days"] < 1: continue - builder.button(text=f"{months} мес.", callback_data=f"tariff_{tariff['id']}") + builder.button( + text=f"{tariff['name']} — {tariff['price_rub']}₽", + callback_data=f"tariff_{tariff['id']}" + ) builder.adjust(1) builder.row(build_admin_back_btn())