Add files via upload

This commit is contained in:
Egor
2026-01-21 05:54:54 +03:00
committed by GitHub
parent 1117a1dd34
commit c0cada8fb5
2 changed files with 149 additions and 0 deletions
+7
View File
@@ -1430,6 +1430,13 @@ async def return_to_saved_cart(
texts = get_texts(db_user.language)
# Проверяем режим корзины - если это тарифная корзина, перенаправляем на соответствующий обработчик
cart_mode = cart_data.get('cart_mode')
if cart_mode in ('tariff_purchase', 'daily_tariff_purchase', 'extend') and cart_data.get('tariff_id'):
from .tariff_purchase import return_to_saved_tariff_cart
await return_to_saved_tariff_cart(callback, state, db_user, db, cart_data)
return
preserved_metadata_keys = {
'saved_cart',
'missing_amount',
@@ -3140,6 +3140,148 @@ async def confirm_instant_switch(
await callback.answer("Произошла ошибка при переключении тарифа", show_alert=True)
async def return_to_saved_tariff_cart(
callback: types.CallbackQuery,
state: FSMContext,
db_user: User,
db: AsyncSession,
cart_data: dict,
):
"""Восстанавливает сохраненную корзину тарифа после пополнения баланса."""
texts = get_texts(db_user.language)
cart_mode = cart_data.get('cart_mode')
tariff_id = cart_data.get('tariff_id')
if not tariff_id:
await callback.answer("❌ Данные корзины повреждены", show_alert=True)
return
tariff = await get_tariff_by_id(db, tariff_id)
if not tariff or not tariff.is_active:
await callback.answer("❌ Тариф больше недоступен", show_alert=True)
# Очищаем корзину
await user_cart_service.delete_user_cart(db_user.id)
return
total_price = cart_data.get('total_price', 0)
user_balance = db_user.balance_kopeks or 0
traffic = _format_traffic(tariff.traffic_limit_gb)
# Проверяем баланс
if user_balance < total_price:
missing = total_price - user_balance
if cart_mode == 'daily_tariff_purchase':
await callback.message.edit_text(
f"❌ <b>Все еще недостаточно средств</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"🔄 Тип: Суточный\n"
f"💰 Стоимость: {_format_price_kopeks(total_price)}\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"⚠️ Не хватает: <b>{_format_price_kopeks(missing)}</b>",
reply_markup=get_daily_tariff_insufficient_balance_keyboard(tariff_id, db_user.language),
parse_mode="HTML"
)
elif cart_mode == 'extend':
period = cart_data.get('period_days', 30)
await callback.message.edit_text(
f"❌ <b>Все еще недостаточно средств</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"📅 Период: {_format_period(period)}\n"
f"💰 Стоимость: {_format_price_kopeks(total_price)}\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"⚠️ Не хватает: <b>{_format_price_kopeks(missing)}</b>",
reply_markup=get_tariff_insufficient_balance_keyboard(tariff_id, period, db_user.language),
parse_mode="HTML"
)
else: # tariff_purchase
period = cart_data.get('period_days', 30)
await callback.message.edit_text(
f"❌ <b>Все еще недостаточно средств</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"📅 Период: {_format_period(period)}\n"
f"💰 Стоимость: {_format_price_kopeks(total_price)}\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"⚠️ Не хватает: <b>{_format_price_kopeks(missing)}</b>",
reply_markup=get_tariff_insufficient_balance_keyboard(tariff_id, period, db_user.language),
parse_mode="HTML"
)
await callback.answer()
return
# Баланс достаточен - показываем подтверждение
discount_percent = cart_data.get('discount_percent', 0)
if cart_mode == 'daily_tariff_purchase':
daily_price = cart_data.get('daily_price_kopeks', total_price)
await callback.message.edit_text(
f"✅ <b>Подтверждение покупки</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"📊 Трафик: {traffic}\n"
f"📱 Устройств: {tariff.device_limit}\n"
f"🔄 Тип: Суточный\n"
f"💰 <b>Стоимость в день: {_format_price_kopeks(daily_price)}</b>\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"После оплаты: {_format_price_kopeks(user_balance - daily_price)}",
reply_markup=get_daily_tariff_confirm_keyboard(tariff_id, db_user.language),
parse_mode="HTML"
)
elif cart_mode == 'extend':
period = cart_data.get('period_days', 30)
discount_text = ""
if discount_percent > 0:
original_price = int(total_price / (1 - discount_percent / 100))
discount_text = f"\n🎁 Скидка: {discount_percent}% (-{_format_price_kopeks(original_price - total_price)})"
await callback.message.edit_text(
f"✅ <b>Подтверждение продления</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"📊 Трафик: {traffic}\n"
f"📱 Устройств: {tariff.device_limit}\n"
f"📅 Период: {_format_period(period)}\n"
f"{discount_text}\n"
f"💰 <b>Итого: {_format_price_kopeks(total_price)}</b>\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"После оплаты: {_format_price_kopeks(user_balance - total_price)}",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(
text="✅ Подтвердить продление",
callback_data=f"tariff_ext_confirm:{tariff_id}:{period}"
)],
[InlineKeyboardButton(
text=texts.BACK,
callback_data=f"tariff_extend:{tariff_id}"
)]
]),
parse_mode="HTML"
)
else: # tariff_purchase
period = cart_data.get('period_days', 30)
discount_text = ""
if discount_percent > 0:
original_price = int(total_price / (1 - discount_percent / 100))
discount_text = f"\n🎁 Скидка: {discount_percent}% (-{_format_price_kopeks(original_price - total_price)})"
await callback.message.edit_text(
f"✅ <b>Подтверждение покупки</b>\n\n"
f"📦 Тариф: <b>{tariff.name}</b>\n"
f"📊 Трафик: {traffic}\n"
f"📱 Устройств: {tariff.device_limit}\n"
f"📅 Период: {_format_period(period)}\n"
f"{discount_text}\n"
f"💰 <b>Итого: {_format_price_kopeks(total_price)}</b>\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
f"После оплаты: {_format_price_kopeks(user_balance - total_price)}",
reply_markup=get_tariff_confirm_keyboard(tariff_id, period, db_user.language),
parse_mode="HTML"
)
await callback.answer("✅ Корзина восстановлена!")
def register_tariff_purchase_handlers(dp: Dispatcher):
"""Регистрирует обработчики покупки по тарифам."""
# Список тарифов (для режима tariffs)