aboutsummaryrefslogtreecommitdiff
path: root/handlers/admin/payment_status.py
diff options
context:
space:
mode:
Diffstat (limited to 'handlers/admin/payment_status.py')
-rw-r--r--handlers/admin/payment_status.py64
1 files changed, 64 insertions, 0 deletions
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 @@
1from aiogram import Bot, Router
2from aiogram.enums import ButtonStyle
3from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
4from aiogram.types.callback_query import CallbackQuery
5from sqlalchemy.ext.asyncio import AsyncSession
6
7from models import Payment, PaymentStatus
8from models.callback_data import PayInvoiceClb, PaymentStatusClb
9
10router = Router(name="payment_status")
11
12
13async def accept(clb: CallbackQuery, bot: Bot, payment: Payment) -> None:
14 payment.status = PaymentStatus.ACCEPTED
15 await bot.send_message(clb.from_user.id, "Оплата пользователя подтверждена.")
16 await bot.send_message(payment.user_id, "Файл подтверждения оплаты принят.")
17
18
19async def reject(clb: CallbackQuery, bot: Bot, payment: Payment) -> None:
20 payment.status = PaymentStatus.REJECTED
21 await bot.send_message(clb.from_user.id, "Оплата пользователя отклонена.")
22
23 callback_data = PayInvoiceClb(invoice_id=payment.invoice_id).pack()
24 await bot.send_message(
25 payment.user_id,
26 "Файл подтверждения оплаты отклонён. Требуется прислать новый.",
27 reply_markup=InlineKeyboardMarkup(
28 inline_keyboard=[
29 [
30 InlineKeyboardButton(
31 text="Оплатить",
32 style=ButtonStyle.PRIMARY,
33 callback_data=callback_data,
34 )
35 ]
36 ]
37 ),
38 )
39
40
41@router.callback_query(PaymentStatusClb.filter())
42async def button(
43 clb: CallbackQuery,
44 bot: Bot,
45 session: AsyncSession,
46 callback_data: PaymentStatusClb,
47) -> None:
48 if isinstance(clb.message, Message):
49 await clb.message.delete_reply_markup()
50
51 payment = await session.get(Payment, callback_data.payment_id)
52 if payment is None:
53 await clb.answer("Платёж был удален.", show_alert=True)
54 return
55
56 match callback_data.payment_status:
57 case PaymentStatus.ACCEPTED:
58 await accept(clb, bot, payment)
59 case PaymentStatus.REJECTED:
60 await reject(clb, bot, payment)
61 case PaymentStatus.PENDING:
62 raise ValueError("Unable to set payment status to PENDING")
63
64 await clb.answer()