fix tariff overrides and renewal limits

This commit is contained in:
Capybara-z
2025-12-21 23:31:57 +03:00
parent 73a1ea8e1b
commit 8527ddc268
3 changed files with 47 additions and 11 deletions
@@ -5,6 +5,7 @@ from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, Message
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import attributes
from database.models import Tariff
from filters.admin import IsAdminFilter
@@ -184,7 +185,8 @@ async def save_device_override_price(message: Message, state: FSMContext, sessio
await state.clear()
return
overrides = getattr(tariff, "device_overrides", None) or {}
existing_overrides = tariff.device_overrides
overrides = dict(existing_overrides) if existing_overrides else {}
key = str(int(devices))
if extra_price == 0:
@@ -192,7 +194,8 @@ async def save_device_override_price(message: Message, state: FSMContext, sessio
else:
overrides[key] = extra_price
tariff.device_overrides = overrides or None
tariff.device_overrides = overrides if overrides else None
attributes.flag_modified(tariff, "device_overrides")
tariff.updated_at = datetime.utcnow()
await session.commit()
@@ -5,6 +5,7 @@ from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, Message
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import attributes
from database.models import Tariff
from filters.admin import IsAdminFilter
@@ -176,7 +177,8 @@ async def save_traffic_override_price(message: Message, state: FSMContext, sessi
await state.clear()
return
overrides = getattr(tariff, "traffic_overrides", None) or {}
existing_overrides = tariff.traffic_overrides
overrides = dict(existing_overrides) if existing_overrides else {}
key = str(int(gb_value))
if extra_price == 0:
@@ -184,7 +186,8 @@ async def save_traffic_override_price(message: Message, state: FSMContext, sessi
else:
overrides[key] = extra_price
tariff.traffic_overrides = overrides or None
tariff.traffic_overrides = overrides if overrides else None
attributes.flag_modified(tariff, "traffic_overrides")
tariff.updated_at = datetime.utcnow()
await session.commit()
+37 -7
View File
@@ -698,15 +698,27 @@ async def complete_key_renewal(
logger.error(f"[Error] Ключ с client_id={client_id} не найден в БД.")
return
new_tariff_device_limit = tariff.get("device_limit")
new_tariff_traffic_limit_bytes = tariff.get("traffic_limit")
new_tariff_traffic_limit_gb = int(new_tariff_traffic_limit_bytes / GB) if new_tariff_traffic_limit_bytes else None
selected_device_limit_db = key_info.get("selected_device_limit")
selected_traffic_limit_db = key_info.get("selected_traffic_limit")
current_traffic_limit_db = key_info.get("current_traffic_limit")
final_device_limit = (
int(selected_device_limit) if selected_device_limit is not None else selected_device_limit_db
)
final_traffic_limit = (
int(selected_traffic_limit) if selected_traffic_limit is not None else selected_traffic_limit_db
)
if new_tariff_device_limit is None:
final_device_limit = None
elif selected_device_limit is not None:
final_device_limit = int(selected_device_limit)
else:
final_device_limit = new_tariff_device_limit
if new_tariff_traffic_limit_gb is None:
final_traffic_limit = None
elif selected_traffic_limit is not None:
final_traffic_limit = int(selected_traffic_limit)
else:
final_traffic_limit = int(new_tariff_traffic_limit_gb)
selected_traffic_gb_effective = int(final_traffic_limit) if final_traffic_limit is not None else None
selected_device_limit_effective = int(final_device_limit) if final_device_limit is not None else None
@@ -801,7 +813,25 @@ async def complete_key_renewal(
effective_client_id = key_row["client_id"] if key_row else client_id
await update_key_expiry(session, effective_client_id, new_expiry_time)
await session.execute(update(Key).where(Key.email == email).values(tariff_id=tariff_id))
update_values = {"tariff_id": tariff_id}
if not tariff.get("configurable"):
if new_tariff_device_limit is None:
update_values["selected_device_limit"] = None
update_values["current_device_limit"] = None
else:
update_values["selected_device_limit"] = new_tariff_device_limit
update_values["current_device_limit"] = final_device_limit
if new_tariff_traffic_limit_gb is None:
update_values["selected_traffic_limit"] = None
update_values["current_traffic_limit"] = None
else:
update_values["selected_traffic_limit"] = new_tariff_traffic_limit_gb
update_values["current_traffic_limit"] = final_traffic_limit
await session.execute(update(Key).where(Key.email == email).values(**update_values))
await update_balance(session, tg_id, -cost)
if tariff.get("configurable"):