diff --git a/database/statistics.py b/database/statistics.py
index 434f34e5..dfa1f561 100644
--- a/database/statistics.py
+++ b/database/statistics.py
@@ -122,7 +122,7 @@ async def sum_payments_since(session: AsyncSession, since: date) -> float:
select(func.coalesce(func.sum(Payment.amount), 0)).where(
and_(
Payment.created_at >= since,
- Payment.payment_system.notin_(["referral", "coupon"])
+ Payment.payment_system.notin_(["referral", "coupon", "cashback"])
)
)
)
@@ -135,7 +135,7 @@ async def sum_payments_between(session: AsyncSession, start: date, end: date) ->
and_(
Payment.created_at >= start,
Payment.created_at < end,
- Payment.payment_system.notin_(["referral", "coupon"])
+ Payment.payment_system.notin_(["referral", "coupon", "cashback"])
)
)
)
@@ -145,7 +145,7 @@ async def sum_payments_between(session: AsyncSession, start: date, end: date) ->
async def sum_total_payments(session: AsyncSession) -> float:
result = await session.scalar(
select(func.coalesce(func.sum(Payment.amount), 0)).where(
- Payment.payment_system.notin_(["referral", "coupon"])
+ Payment.payment_system.notin_(["referral", "coupon", "cashback"])
)
)
return round(float(result), 2)
diff --git a/handlers/admin/stats/stats_handler.py b/handlers/admin/stats/stats_handler.py
index a96d5fdc..9c449bfd 100644
--- a/handlers/admin/stats/stats_handler.py
+++ b/handlers/admin/stats/stats_handler.py
@@ -47,8 +47,8 @@ router = Router()
async def handle_stats(callback_query: CallbackQuery, session: AsyncSession):
try:
now = datetime.utcnow()
- today = now.date()
moscow_tz = pytz.timezone("Europe/Moscow")
+ today = now.astimezone(moscow_tz).date()
total_users = await count_total_users(session)
users_updated_today = await count_users_updated_today(session, today)
@@ -267,26 +267,28 @@ async def handle_export_keys_csv(callback_query: CallbackQuery, session: AsyncSe
async def send_daily_stats_report(session: AsyncSession):
try:
- now_moscow = datetime.now(pytz.timezone("Europe/Moscow"))
+ moscow_tz = pytz.timezone("Europe/Moscow")
+ now_moscow = datetime.now(moscow_tz)
update_time = now_moscow.strftime("%d.%m.%y %H:%M")
- today = (
- pytz.timezone("Europe/Moscow")
- .localize(datetime.combine((now_moscow - timedelta(days=1)).date(), datetime.min.time()))
- .astimezone(pytz.UTC)
- .replace(tzinfo=None)
- )
+ report_date = now_moscow.date() - timedelta(days=1)
- registrations_today = await count_users_registered_since(session, today)
- payments_today = await sum_payments_since(session, today)
+ start = moscow_tz.localize(datetime.combine(report_date, datetime.min.time()))
+ end = moscow_tz.localize(datetime.combine(report_date + timedelta(days=1), datetime.min.time()))
+
+ start_utc = start.astimezone(pytz.UTC).replace(tzinfo=None)
+ end_utc = end.astimezone(pytz.UTC).replace(tzinfo=None)
+
+ registrations_today = await count_users_registered_between(session, start_utc, end_utc)
+ payments_today = await sum_payments_between(session, start_utc, end_utc)
active_keys = await count_active_keys(session)
text = (
- "🗓️ Сводка за день\n\n"
+ f"🗓️ Сводка за {report_date.strftime('%d.%m.%Y')} с 00:00 до 23:59 МСК\n\n"
f"👤 Новых пользователей: {registrations_today}\n"
f"💰 Оплачено: {payments_today} ₽\n"
f"🔐 Активных ключей: {active_keys}\n\n"
- f"⏱️ {update_time} МСК"
+ f"⏱️ Отчёт сгенерирован: {update_time} МСК"
)
for admin_id in ADMIN_ID:
diff --git a/handlers/keys/key_renew.py b/handlers/keys/key_renew.py
index 8c54cdbf..18c2a9ed 100644
--- a/handlers/keys/key_renew.py
+++ b/handlers/keys/key_renew.py
@@ -103,6 +103,7 @@ async def process_callback_renew_key(
return
selected_tariffs = [t for t in tariffs if t["is_active"]]
+ selected_tariffs = sorted(selected_tariffs, key=lambda t: t["id"])
if not selected_tariffs:
await callback_query.message.answer("❌ Нет доступных тарифов для продления.")