diff --git a/app/handlers/subscription/tariff_purchase.py b/app/handlers/subscription/tariff_purchase.py
index 4b51d0e8..551398a8 100644
--- a/app/handlers/subscription/tariff_purchase.py
+++ b/app/handlers/subscription/tariff_purchase.py
@@ -621,13 +621,33 @@ async def select_tariff(
)
else:
missing = daily_price - user_balance
+
+ # Сохраняем данные корзины для автопокупки суточного тарифа
+ cart_data = {
+ 'cart_mode': 'daily_tariff_purchase',
+ 'tariff_id': tariff_id,
+ 'is_daily': True,
+ 'daily_price_kopeks': daily_price,
+ 'total_price': daily_price,
+ 'user_id': db_user.id,
+ 'saved_cart': True,
+ 'missing_amount': missing,
+ 'return_to_cart': True,
+ 'description': f"Покупка суточного тарифа {tariff.name}",
+ 'traffic_limit_gb': tariff.traffic_limit_gb,
+ 'device_limit': tariff.device_limit,
+ 'allowed_squads': tariff.allowed_squads or [],
+ }
+ await user_cart_service.save_user_cart(db_user.id, cart_data)
+
await callback.message.edit_text(
f"❌ Недостаточно средств\n\n"
f"📦 Тариф: {tariff.name}\n"
f"🔄 Тип: Суточный\n"
f"💰 Цена: {_format_price_kopeks(daily_price)}/день\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
- f"⚠️ Не хватает: {_format_price_kopeks(missing)}",
+ f"⚠️ Не хватает: {_format_price_kopeks(missing)}\n\n"
+ f"🛒 Корзина сохранена! После пополнения баланса подписка будет оформлена автоматически.",
reply_markup=get_daily_tariff_insufficient_balance_keyboard(tariff_id, db_user.language),
parse_mode="HTML"
)
@@ -1087,15 +1107,35 @@ async def select_tariff_period(
parse_mode="HTML"
)
else:
- # Недостаточно средств
+ # Недостаточно средств - сохраняем корзину для автопокупки
missing = final_price - user_balance
+
+ # Сохраняем данные корзины для автопокупки после пополнения
+ cart_data = {
+ 'cart_mode': 'tariff_purchase',
+ 'tariff_id': tariff_id,
+ 'period_days': period,
+ 'total_price': final_price,
+ 'user_id': db_user.id,
+ 'saved_cart': True,
+ 'missing_amount': missing,
+ 'return_to_cart': True,
+ 'description': f"Покупка тарифа {tariff.name} на {period} дней",
+ 'traffic_limit_gb': tariff.traffic_limit_gb,
+ 'device_limit': tariff.device_limit,
+ 'allowed_squads': tariff.allowed_squads or [],
+ 'discount_percent': discount_percent,
+ }
+ await user_cart_service.save_user_cart(db_user.id, cart_data)
+
await callback.message.edit_text(
f"❌ Недостаточно средств\n\n"
f"📦 Тариф: {tariff.name}\n"
f"📅 Период: {_format_period(period)}\n"
f"💰 Стоимость: {_format_price_kopeks(final_price)}\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
- f"⚠️ Не хватает: {_format_price_kopeks(missing)}",
+ f"⚠️ Не хватает: {_format_price_kopeks(missing)}\n\n"
+ f"🛒 Корзина сохранена! После пополнения баланса подписка будет оформлена автоматически.",
reply_markup=get_tariff_insufficient_balance_keyboard(tariff_id, period, db_user.language),
parse_mode="HTML"
)
@@ -1584,13 +1624,37 @@ async def select_tariff_extend_period(
)
else:
missing = final_price - user_balance
+
+ # Получаем текущую подписку для сохранения в корзину
+ subscription = await get_subscription_by_user_id(db, db_user.id)
+
+ # Сохраняем данные корзины для автопокупки после пополнения
+ cart_data = {
+ 'cart_mode': 'extend',
+ 'tariff_id': tariff_id,
+ 'subscription_id': subscription.id if subscription else None,
+ 'period_days': period,
+ 'total_price': final_price,
+ 'user_id': db_user.id,
+ 'saved_cart': True,
+ 'missing_amount': missing,
+ 'return_to_cart': True,
+ 'description': f"Продление тарифа {tariff.name} на {period} дней",
+ 'traffic_limit_gb': tariff.traffic_limit_gb,
+ 'device_limit': tariff.device_limit,
+ 'allowed_squads': tariff.allowed_squads or [],
+ 'discount_percent': discount_percent,
+ }
+ await user_cart_service.save_user_cart(db_user.id, cart_data)
+
await callback.message.edit_text(
f"❌ Недостаточно средств\n\n"
f"📦 Тариф: {tariff.name}\n"
f"📅 Период: {_format_period(period)}\n"
f"💰 К оплате: {_format_price_kopeks(final_price)}\n\n"
f"💳 Ваш баланс: {_format_price_kopeks(user_balance)}\n"
- f"⚠️ Не хватает: {_format_price_kopeks(missing)}",
+ f"⚠️ Не хватает: {_format_price_kopeks(missing)}\n\n"
+ f"🛒 Корзина сохранена! После пополнения баланса подписка будет продлена автоматически.",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="balance_topup")],
[InlineKeyboardButton(text=texts.BACK, callback_data="subscription_extend")]