diff --git a/app/.DS_Store b/app/.DS_Store index 7de69c5a..40af279d 100644 Binary files a/app/.DS_Store and b/app/.DS_Store differ diff --git a/app/handlers/admin/users.py b/app/handlers/admin/users.py index d25499e6..07a604fe 100644 --- a/app/handlers/admin/users.py +++ b/app/handlers/admin/users.py @@ -4559,10 +4559,13 @@ async def admin_buy_subscription_execute( target_user.telegram_id, ) - if subscription.end_date <= current_time: + extension_base_date = current_time + if subscription.end_date and subscription.end_date > current_time: + extension_base_date = subscription.end_date + else: subscription.start_date = current_time - subscription.end_date = current_time + timedelta(days=period_days) + bonus_period + subscription.end_date = extension_base_date + timedelta(days=period_days) + bonus_period subscription.status = SubscriptionStatus.ACTIVE.value subscription.updated_at = current_time diff --git a/app/handlers/subscription/purchase.py b/app/handlers/subscription/purchase.py index dbf6b0d7..f143b141 100644 --- a/app/handlers/subscription/purchase.py +++ b/app/handlers/subscription/purchase.py @@ -2271,8 +2271,15 @@ async def confirm_purchase( existing_subscription.connected_squads = selected_countries - existing_subscription.start_date = current_time - existing_subscription.end_date = current_time + timedelta(days=period_days) + bonus_period + # Если подписка еще активна, продлеваем от текущей даты окончания, + # иначе начинаем новый период с текущего момента + extension_base_date = current_time + if existing_subscription.end_date and existing_subscription.end_date > current_time: + extension_base_date = existing_subscription.end_date + else: + existing_subscription.start_date = current_time + + existing_subscription.end_date = extension_base_date + timedelta(days=period_days) + bonus_period existing_subscription.updated_at = current_time existing_subscription.traffic_used_gb = 0.0 diff --git a/app/services/subscription_purchase_service.py b/app/services/subscription_purchase_service.py index 712bc90d..272a0d83 100644 --- a/app/services/subscription_purchase_service.py +++ b/app/services/subscription_purchase_service.py @@ -1110,8 +1110,14 @@ class MiniAppSubscriptionPurchaseService: subscription.traffic_limit_gb = pricing.selection.traffic_value subscription.device_limit = pricing.selection.devices subscription.connected_squads = pricing.selection.servers - subscription.start_date = now - subscription.end_date = now + timedelta(days=pricing.selection.period.days) + bonus_period + + extension_base_date = now + if subscription.end_date and subscription.end_date > now: + extension_base_date = subscription.end_date + else: + subscription.start_date = now + + subscription.end_date = extension_base_date + timedelta(days=pricing.selection.period.days) + bonus_period subscription.updated_at = now subscription.traffic_used_gb = 0.0 @@ -1229,4 +1235,3 @@ class SubscriptionPurchaseService: purchase_service = MiniAppSubscriptionPurchaseService() - diff --git a/app/states.py b/app/states.py index 897297d3..178748e7 100644 --- a/app/states.py +++ b/app/states.py @@ -38,6 +38,7 @@ class PromoCodeStates(StatesGroup): class AdminStates(StatesGroup): waiting_for_user_search = State() + waiting_for_bulk_ban_list = State() sending_user_message = State() editing_user_balance = State() extending_subscription = State() diff --git a/vpn_logo.png b/vpn_logo.png deleted file mode 100644 index ff499bf7..00000000 Binary files a/vpn_logo.png and /dev/null differ