Update purchase.py

This commit is contained in:
Egor
2026-01-12 15:27:05 +03:00
committed by GitHub
parent 785eabaa47
commit 22884b5cdd

View File

@@ -3016,7 +3016,12 @@ async def handle_subscription_settings(
await callback.message.edit_text(
settings_text,
reply_markup=get_updated_subscription_settings_keyboard(db_user.language, show_countries, tariff=tariff),
reply_markup=get_updated_subscription_settings_keyboard(
db_user.language,
show_countries,
tariff=tariff,
subscription=subscription
),
parse_mode="HTML"
)
await callback.answer()
@@ -3037,6 +3042,112 @@ async def clear_saved_cart(
await callback.answer("🗑️ Корзина очищена")
# ============== ХЕНДЛЕР ПАУЗЫ СУТОЧНОЙ ПОДПИСКИ ==============
async def handle_toggle_daily_subscription_pause(
callback: types.CallbackQuery,
db_user: User,
db: AsyncSession
):
"""Переключает паузу суточной подписки."""
from app.database.crud.subscription import toggle_daily_subscription_pause
from app.database.crud.tariff import get_tariff_by_id
texts = get_texts(db_user.language)
subscription = db_user.subscription
if not subscription:
await callback.answer(
texts.t("NO_SUBSCRIPTION_ERROR", "У вас нет активной подписки"),
show_alert=True
)
return
# Проверяем что это суточный тариф
tariff = None
if subscription.tariff_id:
tariff = await get_tariff_by_id(db, subscription.tariff_id)
if not tariff or not getattr(tariff, 'is_daily', False):
await callback.answer(
texts.t("NOT_DAILY_TARIFF_ERROR", "❌ Эта функция доступна только для суточных тарифов"),
show_alert=True
)
return
# Переключаем статус паузы
was_paused = subscription.is_daily_paused
subscription = await toggle_daily_subscription_pause(db, subscription)
if was_paused:
# Была пауза, теперь возобновили
message = texts.t(
"DAILY_SUBSCRIPTION_RESUMED",
"▶️ Суточная подписка возобновлена.\n\nСписание будет произведено в ближайший цикл проверки."
)
else:
# Была активна, теперь на паузе
message = texts.t(
"DAILY_SUBSCRIPTION_PAUSED",
"⏸️ Суточная подписка приостановлена.\n\nСписания не будут производиться до возобновления."
)
await callback.answer(message, show_alert=True)
# Обновляем клавиатуру настроек
show_countries = await _should_show_countries_management(db_user)
settings_template = texts.t(
"SUBSCRIPTION_SETTINGS_OVERVIEW",
(
"⚙️ <b>Настройки подписки</b>\n\n"
"📊 <b>Текущие параметры:</b>\n"
"🌐 Стран: {countries_count}\n"
"📈 Трафик: {traffic_used} / {traffic_limit}\n"
"📱 Устройства: {devices_used} / {devices_limit}\n\n"
"Выберите что хотите изменить:"
),
)
show_devices = settings.is_devices_selection_enabled()
if not show_devices:
settings_template = settings_template.replace(
"\n📱 Устройства: {devices_used} / {devices_limit}",
"",
)
if show_devices:
devices_used = await get_current_devices_count(db_user)
else:
devices_used = 0
modem_enabled = getattr(subscription, 'modem_enabled', False) or False
if modem_enabled and settings.is_modem_enabled():
visible_device_limit = (subscription.device_limit or 1) - 1
devices_limit_display = f"{visible_device_limit} + модем"
else:
devices_limit_display = str(subscription.device_limit)
settings_text = settings_template.format(
countries_count=len(subscription.connected_squads),
traffic_used=texts.format_traffic(subscription.traffic_used_gb),
traffic_limit=texts.format_traffic(subscription.traffic_limit_gb),
devices_used=devices_used,
devices_limit=devices_limit_display,
)
await callback.message.edit_text(
settings_text,
reply_markup=get_updated_subscription_settings_keyboard(
db_user.language,
show_countries,
tariff=tariff,
subscription=subscription
),
parse_mode="HTML"
)
# ============== ХЕНДЛЕРЫ ПЛАТНОГО ТРИАЛА ==============
@error_handler
@@ -3993,6 +4104,11 @@ def register_handlers(dp: Dispatcher):
F.data == "subscription_settings"
)
dp.callback_query.register(
handle_toggle_daily_subscription_pause,
F.data == "toggle_daily_subscription_pause"
)
dp.callback_query.register(
handle_no_traffic_packages,
F.data == "no_traffic_packages"