87 lines
3.7 KiB
Python
87 lines
3.7 KiB
Python
from aiogram.filters.callback_data import CallbackData
|
||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||
|
||
from ..panel.keyboard import AdminPanelCallback
|
||
|
||
|
||
class AdminTariffCallback(CallbackData, prefix="tariff"):
|
||
action: str
|
||
|
||
|
||
def build_tariff_menu_kb() -> InlineKeyboardMarkup:
|
||
builder = InlineKeyboardBuilder()
|
||
builder.row(InlineKeyboardButton(text="🆕 Новый тариф", callback_data=AdminTariffCallback(action="create").pack()))
|
||
builder.row(InlineKeyboardButton(text="📋 Мои тарифы", callback_data=AdminTariffCallback(action="list").pack()))
|
||
builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data=AdminPanelCallback(action="admin").pack()))
|
||
return builder.as_markup()
|
||
|
||
|
||
def build_cancel_kb() -> InlineKeyboardMarkup:
|
||
return InlineKeyboardMarkup(
|
||
inline_keyboard=[[InlineKeyboardButton(text="❌ Отменить", callback_data="cancel_tariff_creation")]]
|
||
)
|
||
|
||
|
||
def build_tariff_groups_kb(groups: list[str]) -> InlineKeyboardMarkup:
|
||
builder = InlineKeyboardBuilder()
|
||
for group in groups:
|
||
builder.button(text=group, callback_data=AdminTariffCallback(action=f"group|{group}").pack())
|
||
builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data=AdminPanelCallback(action="tariffs").pack()))
|
||
return builder.as_markup()
|
||
|
||
|
||
def build_tariff_list_kb(tariffs: list[dict]) -> InlineKeyboardMarkup:
|
||
builder = InlineKeyboardBuilder()
|
||
|
||
if tariffs:
|
||
group_code = tariffs[0]["group_code"]
|
||
else:
|
||
group_code = "unknown"
|
||
|
||
for t in tariffs:
|
||
title = f"{t['name']} — {t['price_rub']}₽"
|
||
builder.row(
|
||
InlineKeyboardButton(text=title, callback_data=AdminTariffCallback(action=f"view|{t['id']}").pack())
|
||
)
|
||
|
||
builder.row(
|
||
InlineKeyboardButton(
|
||
text="➕ Добавить тариф", callback_data=AdminTariffCallback(action=f"create|{group_code}").pack()
|
||
)
|
||
)
|
||
|
||
builder.row(InlineKeyboardButton(text="⬅️ Назад", callback_data=AdminTariffCallback(action="list").pack()))
|
||
|
||
return builder.as_markup()
|
||
|
||
|
||
def build_single_tariff_kb(tariff_id: int) -> InlineKeyboardMarkup:
|
||
return InlineKeyboardMarkup(
|
||
inline_keyboard=[
|
||
[
|
||
InlineKeyboardButton(
|
||
text="✏️ Редактировать", callback_data=AdminTariffCallback(action=f"edit|{tariff_id}").pack()
|
||
),
|
||
InlineKeyboardButton(
|
||
text="🗑 Удалить", callback_data=AdminTariffCallback(action=f"delete|{tariff_id}").pack()
|
||
),
|
||
],
|
||
[InlineKeyboardButton(text="⬅️ Назад", callback_data=AdminTariffCallback(action="list").pack())],
|
||
]
|
||
)
|
||
|
||
|
||
def build_edit_tariff_fields_kb(tariff_id: int) -> InlineKeyboardMarkup:
|
||
return InlineKeyboardMarkup(
|
||
inline_keyboard=[
|
||
[InlineKeyboardButton(text="📝 Название", callback_data=f"edit_field|{tariff_id}|name")],
|
||
[InlineKeyboardButton(text="📅 Длительность", callback_data=f"edit_field|{tariff_id}|duration_days")],
|
||
[InlineKeyboardButton(text="💰 Цена", callback_data=f"edit_field|{tariff_id}|price_rub")],
|
||
[InlineKeyboardButton(text="📦 Трафик (ГБ или 0)", callback_data=f"edit_field|{tariff_id}|traffic_limit")],
|
||
[InlineKeyboardButton(text="📱 Лимит устройств", callback_data=f"edit_field|{tariff_id}|device_limit")],
|
||
[InlineKeyboardButton(text="🔘 Активность", callback_data=f"toggle_active|{tariff_id}")],
|
||
[InlineKeyboardButton(text="⬅️ Назад", callback_data=f"view|{tariff_id}")],
|
||
]
|
||
)
|