From fd3e26dd47cf8c72a4a9475790ff995ec0f7633f Mon Sep 17 00:00:00 2001 From: Vladless Date: Mon, 19 May 2025 06:03:03 +0300 Subject: [PATCH] tariff id in callback --- handlers/admin/clusters/clusters_handler.py | 35 ++++++++++++++------- handlers/admin/clusters/keyboard.py | 11 ++++--- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/handlers/admin/clusters/clusters_handler.py b/handlers/admin/clusters/clusters_handler.py index 1a007976..2d011da7 100644 --- a/handlers/admin/clusters/clusters_handler.py +++ b/handlers/admin/clusters/clusters_handler.py @@ -905,9 +905,9 @@ async def handle_cluster_transfer(callback_query: CallbackQuery, state: FSMConte async def show_tariff_group_selection(callback: CallbackQuery, callback_data: AdminClusterCallback, session): cluster_name = callback_data.data rows = await session.fetch( - "SELECT DISTINCT group_code FROM tariffs WHERE group_code IS NOT NULL ORDER BY group_code" + "SELECT DISTINCT ON (group_code) id, group_code FROM tariffs WHERE group_code IS NOT NULL ORDER BY group_code" ) - groups = [r["group_code"] for r in rows] + groups = [(r["id"], r["group_code"]) for r in rows] if not groups: await callback.message.edit_text("❌ Нет доступных тарифных групп.") @@ -922,14 +922,27 @@ async def show_tariff_group_selection(callback: CallbackQuery, callback_data: Ad @router.callback_query(AdminClusterCallback.filter(F.action == "apply_tariff_group"), IsAdminFilter()) async def apply_tariff_group(callback: CallbackQuery, callback_data: AdminClusterCallback, session): try: - cluster_name, group_code = callback_data.data.split("|", 1) - except ValueError: - await callback.message.edit_text("❌ Неверные данные.") - return + cluster_name, group_id = callback_data.data.split("|", 1) + group_id = int(group_id) - await session.execute("UPDATE servers SET tariff_group = $1 WHERE cluster_name = $2", group_code, cluster_name) + row = await session.fetchrow("SELECT group_code FROM tariffs WHERE id = $1", group_id) + if not row: + await callback.message.edit_text("❌ Тарифная группа не найдена.") + return - await callback.message.edit_text( - f"✅ Для кластера {cluster_name} установлена тарифная группа: {group_code}", - reply_markup=build_cluster_management_kb(cluster_name), - ) + group_code = row["group_code"] + + await session.execute( + "UPDATE servers SET tariff_group = $1 WHERE cluster_name = $2", + group_code, + cluster_name, + ) + + await callback.message.edit_text( + f"✅ Для кластера {cluster_name} установлена тарифная группа: {group_code}", + reply_markup=build_cluster_management_kb(cluster_name), + ) + + except Exception as e: + logger.error(f"Ошибка при применении тарифной группы: {e}") + await callback.message.edit_text("❌ Произошла ошибка при установке тарифной группы.") \ No newline at end of file diff --git a/handlers/admin/clusters/keyboard.py b/handlers/admin/clusters/keyboard.py index e1810feb..ccf82846 100644 --- a/handlers/admin/clusters/keyboard.py +++ b/handlers/admin/clusters/keyboard.py @@ -136,12 +136,15 @@ def build_panel_type_kb() -> InlineKeyboardMarkup: return builder.as_markup() -def build_tariff_group_selection_kb(cluster_name: str, groups: list[str]) -> InlineKeyboardMarkup: +def build_tariff_group_selection_kb(cluster_name: str, groups: list[tuple[int, str]]) -> InlineKeyboardMarkup: builder = InlineKeyboardBuilder() - for group in groups: + for group_id, group_code in groups: builder.button( - text=group, - callback_data=AdminClusterCallback(action="apply_tariff_group", data=f"{cluster_name}|{group}").pack(), + text=group_code, + callback_data=AdminClusterCallback( + action="apply_tariff_group", + data=f"{cluster_name}|{group_id}" + ).pack(), ) builder.row( InlineKeyboardButton(