Files
Solo_bot/handlers/admin/tariffs/tariff_utils.py
T
2025-11-30 18:37:18 +03:00

61 lines
2.5 KiB
Python

from aiogram.types import InlineKeyboardMarkup
from database.models import Tariff
from .keyboard import build_single_tariff_kb
MAX_TARIFF_NAME_LENGTH = 40
MAX_SUBGROUP_TITLE_LENGTH = 40
def validate_tariff_name(name: str) -> tuple[bool, str]:
if len(name) > MAX_TARIFF_NAME_LENGTH:
return False, f"Название тарифа слишком длинное. Максимум {MAX_TARIFF_NAME_LENGTH} символов."
return True, ""
def validate_subgroup_title(title: str) -> tuple[bool, str]:
if len(title) > MAX_SUBGROUP_TITLE_LENGTH:
return False, f"Название подгруппы слишком длинное. Максимум {MAX_SUBGROUP_TITLE_LENGTH} символов."
return True, ""
def tariff_to_dict(tariff) -> dict:
if isinstance(tariff, dict):
return tariff
return {
"id": tariff.id,
"name": tariff.name,
"price_rub": tariff.price_rub,
"group_code": tariff.group_code,
"subgroup_title": tariff.subgroup_title,
"sort_order": tariff.sort_order,
}
def render_tariff_card(tariff: Tariff) -> tuple[str, InlineKeyboardMarkup]:
traffic_text = f"{tariff.traffic_limit} ГБ" if tariff.traffic_limit else "Безлимит"
device_text = f"{tariff.device_limit}" if tariff.device_limit is not None else "Безлимит"
sort_order = getattr(tariff, "sort_order", 1)
vless_text = "Да" if getattr(tariff, "vless", False) else "Нет"
configurable = bool(getattr(tariff, "configurable", False))
configurable_text = "Включен" if configurable else "Выключен"
external_squad_text = getattr(tariff, "external_squad", None) or "Не задан"
text = (
f"<b>📄 Тариф: {tariff.name}</b>\n\n"
f"📁 Группа: <code>{tariff.group_code}</code>\n"
f"📅 Длительность: <b>{tariff.duration_days} дней</b>\n"
f"💰 Стоимость: <b>{tariff.price_rub}₽</b>\n"
f"📦 Трафик: <b>{traffic_text}</b>\n"
f"📱 Устройств: <b>{device_text}</b>\n"
f"🔗 VLESS: <b>{vless_text}</b>\n"
f"⚙️ Конфигуратор: <b>{configurable_text}</b>\n"
f"Внешний сквад: <b>{external_squad_text}</b>\n"
f"🔢 Позиция: <b>{sort_order}</b>\n"
f"{'✅ Активен' if tariff.is_active else '⛔ Отключен'}"
)
return text, build_single_tariff_kb(tariff.id, tariff.group_code, configurable=configurable)