mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-23 21:01:17 +00:00
Окончалтельный фикс простой покупки!
This commit is contained in:
@@ -76,12 +76,18 @@ async def start_simple_subscription_purchase(
|
||||
# Используем максимум из текущего и дефолтного
|
||||
device_limit = max(device_limit, current_device_limit)
|
||||
|
||||
# Проверяем, включён ли модем у текущей подписки
|
||||
modem_enabled = False
|
||||
if current_subscription:
|
||||
modem_enabled = getattr(current_subscription, 'modem_enabled', False)
|
||||
|
||||
# Подготовим параметры простой подписки
|
||||
subscription_params = {
|
||||
'period_days': settings.SIMPLE_SUBSCRIPTION_PERIOD_DAYS,
|
||||
'device_limit': device_limit,
|
||||
'traffic_limit_gb': settings.SIMPLE_SUBSCRIPTION_TRAFFIC_GB,
|
||||
'squad_uuid': settings.SIMPLE_SUBSCRIPTION_SQUAD_UUID,
|
||||
'modem_enabled': modem_enabled,
|
||||
}
|
||||
|
||||
# Сохраняем параметры в состояние
|
||||
@@ -107,12 +113,13 @@ async def start_simple_subscription_purchase(
|
||||
user_balance_kopeks = getattr(db_user, 'balance_kopeks', 0)
|
||||
|
||||
logger.warning(
|
||||
'SIMPLE_SUBSCRIPTION_DEBUG_START | user=%s | period=%s | base=%s | traffic=%s | devices=%s | servers=%s | discount=%s | total=%s | squads=%s',
|
||||
'SIMPLE_SUBSCRIPTION_DEBUG_START | user=%s | period=%s | base=%s | traffic=%s | devices=%s | modem=%s | servers=%s | discount=%s | total=%s | squads=%s',
|
||||
db_user.id,
|
||||
period_days,
|
||||
price_breakdown.get('base_price', 0),
|
||||
price_breakdown.get('traffic_price', 0),
|
||||
price_breakdown.get('devices_price', 0),
|
||||
price_breakdown.get('modem_price', 0),
|
||||
price_breakdown.get('servers_price', 0),
|
||||
price_breakdown.get('total_discount', 0),
|
||||
price_kopeks,
|
||||
|
||||
@@ -4168,6 +4168,15 @@ async def handle_simple_subscription_purchase(
|
||||
|
||||
# Если у пользователя уже есть активная подписка, продлеваем её
|
||||
if current_subscription and current_subscription.is_active:
|
||||
# При продлении используем текущие устройства подписки, а не дефолтные
|
||||
extend_device_limit = current_subscription.device_limit or simple_device_limit
|
||||
# Модем добавляет +1 к device_limit, но оплачивается отдельно
|
||||
modem_enabled = getattr(current_subscription, 'modem_enabled', False)
|
||||
if modem_enabled:
|
||||
extend_device_limit = max(1, extend_device_limit - 1)
|
||||
# Используем максимум из текущего и дефолтного
|
||||
extend_device_limit = max(simple_device_limit, extend_device_limit)
|
||||
|
||||
# Продлеваем существующую подписку
|
||||
await _extend_existing_subscription(
|
||||
callback=callback,
|
||||
@@ -4175,9 +4184,10 @@ async def handle_simple_subscription_purchase(
|
||||
db=db,
|
||||
current_subscription=current_subscription,
|
||||
period_days=settings.SIMPLE_SUBSCRIPTION_PERIOD_DAYS,
|
||||
device_limit=simple_device_limit,
|
||||
device_limit=extend_device_limit,
|
||||
traffic_limit_gb=settings.SIMPLE_SUBSCRIPTION_TRAFFIC_GB,
|
||||
squad_uuid=settings.SIMPLE_SUBSCRIPTION_SQUAD_UUID,
|
||||
modem_enabled=modem_enabled,
|
||||
)
|
||||
return
|
||||
|
||||
@@ -4297,6 +4307,7 @@ async def _extend_existing_subscription(
|
||||
device_limit: int,
|
||||
traffic_limit_gb: int,
|
||||
squad_uuid: str,
|
||||
modem_enabled: bool = False,
|
||||
):
|
||||
"""Продлевает существующую подписку."""
|
||||
from datetime import datetime, timedelta
|
||||
@@ -4314,6 +4325,7 @@ async def _extend_existing_subscription(
|
||||
'device_limit': device_limit,
|
||||
'traffic_limit_gb': traffic_limit_gb,
|
||||
'squad_uuid': squad_uuid,
|
||||
'modem_enabled': modem_enabled,
|
||||
}
|
||||
price_kopeks, price_breakdown = await _calculate_simple_subscription_price(
|
||||
db,
|
||||
@@ -4321,15 +4333,18 @@ async def _extend_existing_subscription(
|
||||
user=db_user,
|
||||
resolved_squad_uuid=squad_uuid,
|
||||
)
|
||||
logger.debug(
|
||||
'SIMPLE_SUBSCRIPTION_EXTEND_PRICE | user=%s | total=%s | base=%s | traffic=%s | devices=%s | servers=%s | discount=%s',
|
||||
logger.warning(
|
||||
'SIMPLE_SUBSCRIPTION_EXTEND_PRICE | user=%s | total=%s | base=%s | traffic=%s | devices=%s | modem=%s | servers=%s | discount=%s | device_limit=%s | modem_enabled=%s',
|
||||
db_user.id,
|
||||
price_kopeks,
|
||||
price_breakdown.get('base_price', 0),
|
||||
price_breakdown.get('traffic_price', 0),
|
||||
price_breakdown.get('devices_price', 0),
|
||||
price_breakdown.get('modem_price', 0),
|
||||
price_breakdown.get('servers_price', 0),
|
||||
price_breakdown.get('total_discount', 0),
|
||||
device_limit,
|
||||
modem_enabled,
|
||||
)
|
||||
|
||||
# Проверяем баланс пользователя
|
||||
|
||||
@@ -129,6 +129,14 @@ async def compute_simple_subscription_price(
|
||||
additional_devices = max(0, device_limit - settings.DEFAULT_DEVICE_LIMIT)
|
||||
devices_price_original = additional_devices * settings.PRICE_PER_DEVICE
|
||||
|
||||
# Расчёт цены модема (если включён)
|
||||
modem_enabled = params.get('modem_enabled', False)
|
||||
modem_price_original = 0
|
||||
if modem_enabled and settings.is_modem_enabled():
|
||||
modem_price_per_month = settings.get_modem_price_per_month()
|
||||
months = calculate_months_from_days(period_days)
|
||||
modem_price_original = modem_price_per_month * months
|
||||
|
||||
promo_group: PromoGroup | None = params.get('promo_group')
|
||||
|
||||
if promo_group is None:
|
||||
@@ -248,7 +256,7 @@ async def compute_simple_subscription_price(
|
||||
)
|
||||
|
||||
total_before_discount = (
|
||||
base_price_original + traffic_price_original + devices_price_original + servers_price_original
|
||||
base_price_original + traffic_price_original + devices_price_original + servers_price_original + modem_price_original
|
||||
)
|
||||
|
||||
total_discount = base_discount + traffic_discount + devices_discount + servers_discount_total
|
||||
@@ -262,6 +270,8 @@ async def compute_simple_subscription_price(
|
||||
'traffic_discount': traffic_discount,
|
||||
'devices_price': devices_price_original,
|
||||
'devices_discount': devices_discount,
|
||||
'modem_price': modem_price_original,
|
||||
'modem_enabled': modem_enabled,
|
||||
'servers_price': servers_price_original,
|
||||
'servers_discount': servers_discount_total,
|
||||
'servers_final': sum(item['final_price'] for item in server_breakdown),
|
||||
|
||||
Reference in New Issue
Block a user