aboutsummaryrefslogtreecommitdiff
path: root/handlers/admin
diff options
context:
space:
mode:
Diffstat (limited to 'handlers/admin')
-rw-r--r--handlers/admin/__init__.py2
-rw-r--r--handlers/admin/payment_status.py64
2 files changed, 66 insertions, 0 deletions
diff --git a/handlers/admin/__init__.py b/handlers/admin/__init__.py
index 02f9e6e..4593ad7 100644
--- a/handlers/admin/__init__.py
+++ b/handlers/admin/__init__.py
@@ -5,6 +5,7 @@ from aiogram.filters import MagicData
5from . import new_announcement 5from . import new_announcement
6from . import new_invoice 6from . import new_invoice
7from . import add_user 7from . import add_user
8from . import payment_status
8# isort: on 9# isort: on
9 10
10router = Router(name="admin") 11router = Router(name="admin")
@@ -15,4 +16,5 @@ router.include_routers(
15 new_announcement.router, 16 new_announcement.router,
16 new_invoice.router, 17 new_invoice.router,
17 add_user.router, 18 add_user.router,
19 payment_status.router,
18) 20)
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()