From f73db3718f0f5f3f74928fac8d5e6769937896d7 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Mon, 23 Mar 2026 22:43:01 +0300 Subject: Add payment_status button --- handlers/admin/payment_status.py | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 handlers/admin/payment_status.py (limited to 'handlers/admin/payment_status.py') diff --git a/handlers/admin/payment_status.py b/handlers/admin/payment_status.py new file mode 100644 index 0000000..23bde15 --- /dev/null +++ b/handlers/admin/payment_status.py @@ -0,0 +1,64 @@ +from aiogram import Bot, Router +from aiogram.enums import ButtonStyle +from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message +from aiogram.types.callback_query import CallbackQuery +from sqlalchemy.ext.asyncio import AsyncSession + +from models import Payment, PaymentStatus +from models.callback_data import PayInvoiceClb, PaymentStatusClb + +router = Router(name="payment_status") + + +async def accept(clb: CallbackQuery, bot: Bot, payment: Payment) -> None: + payment.status = PaymentStatus.ACCEPTED + await bot.send_message(clb.from_user.id, "Оплата пользователя подтверждена.") + await bot.send_message(payment.user_id, "Файл подтверждения оплаты принят.") + + +async def reject(clb: CallbackQuery, bot: Bot, payment: Payment) -> None: + payment.status = PaymentStatus.REJECTED + await bot.send_message(clb.from_user.id, "Оплата пользователя отклонена.") + + callback_data = PayInvoiceClb(invoice_id=payment.invoice_id).pack() + await bot.send_message( + payment.user_id, + "Файл подтверждения оплаты отклонён. Требуется прислать новый.", + reply_markup=InlineKeyboardMarkup( + inline_keyboard=[ + [ + InlineKeyboardButton( + text="Оплатить", + style=ButtonStyle.PRIMARY, + callback_data=callback_data, + ) + ] + ] + ), + ) + + +@router.callback_query(PaymentStatusClb.filter()) +async def button( + clb: CallbackQuery, + bot: Bot, + session: AsyncSession, + callback_data: PaymentStatusClb, +) -> None: + if isinstance(clb.message, Message): + await clb.message.delete_reply_markup() + + payment = await session.get(Payment, callback_data.payment_id) + if payment is None: + await clb.answer("Платёж был удален.", show_alert=True) + return + + match callback_data.payment_status: + case PaymentStatus.ACCEPTED: + await accept(clb, bot, payment) + case PaymentStatus.REJECTED: + await reject(clb, bot, payment) + case PaymentStatus.PENDING: + raise ValueError("Unable to set payment status to PENDING") + + await clb.answer() -- cgit v1.3