From 85d26f2be7439874e7b6a7b2cf6fb033a188f1ef Mon Sep 17 00:00:00 2001 From: Vladless Date: Fri, 13 Jun 2025 08:58:18 +0300 Subject: [PATCH] id sorted for renew plans and rm cashback in statistic --- database/statistics.py | 6 +++--- handlers/admin/stats/stats_handler.py | 26 ++++++++++++++------------ handlers/keys/key_renew.py | 1 + 3 files changed, 18 insertions(+), 15 deletions(-) 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("❌ Нет доступных тарифов для продления.")