diff --git a/handlers/admin/clusters/cluster_tariffs.py b/handlers/admin/clusters/cluster_tariffs.py
index 020441e4..6982c344 100644
--- a/handlers/admin/clusters/cluster_tariffs.py
+++ b/handlers/admin/clusters/cluster_tariffs.py
@@ -187,11 +187,23 @@ async def choose_tariffs(
await callback.message.edit_text("❌ Для этой группы нет доступных тарифов.")
return
- selected_tariffs = set(data.get(f"tariff_sel:{cluster_name}", []))
+ servers_q = await session.execute(
+ select(Server.id).where(Server.server_name.in_(selected_servers))
+ )
+ server_ids = [row[0] for row in servers_q.fetchall()]
+
+ current_bindings_q = await session.execute(
+ select(ServerSubgroup.subgroup_title)
+ .where(ServerSubgroup.server_id.in_(server_ids))
+ .where(ServerSubgroup.subgroup_title.regexp_match(r"^\d+$"))
+ )
+ current_tariff_ids = {int(row[0]) for row in current_bindings_q.fetchall()}
+
+ await state.update_data({f"tariff_sel:{cluster_name}": list(current_tariff_ids)})
await callback.message.edit_text(
f"📋 Выберите тарифы для {len(selected_servers)} сервер(а/ов)\nКластер: {cluster_name}",
- reply_markup=build_tariff_selection_kb(cluster_name, tariffs, selected_tariffs),
+ reply_markup=build_tariff_selection_kb(cluster_name, tariffs, current_tariff_ids),
)
@@ -248,10 +260,6 @@ async def apply_tariffs(
await callback.answer("Не выбраны серверы", show_alert=True)
return
- if not selected_tariffs:
- await callback.answer("Не выбраны тарифы", show_alert=True)
- return
-
servers_q = await session.execute(
select(Server.id, Server.server_name, Server.tariff_group).where(Server.server_name.in_(selected_servers))
)