fix tariff overrides and renewal limits
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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"):
|
||||
|
||||
Reference in New Issue
Block a user