diff --git a/handlers/admin/coupons/coupons_handler.py b/handlers/admin/coupons/coupons_handler.py
index fa1a877c..02bba4c5 100644
--- a/handlers/admin/coupons/coupons_handler.py
+++ b/handlers/admin/coupons/coupons_handler.py
@@ -34,7 +34,7 @@ from handlers.profile import process_callback_view_profile
from logger import logger
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb
-from .keyboard import AdminCouponDeleteCallback, build_coupons_kb, build_coupons_list_kb
+from .keyboard import AdminCouponDeleteCallback, build_coupons_kb, build_coupons_list_kb, format_coupons_list
router = Router()
@@ -213,47 +213,55 @@ async def handle_coupons_list(callback_query: CallbackQuery, session: Any):
try:
data = AdminPanelCallback.unpack(callback_query.data)
page = data.page if data.page is not None else 1
- per_page = 10
- result = await get_all_coupons(session, page, per_page)
- coupons = result["coupons"]
+ await update_coupons_list(callback_query.message, session, page)
+ except Exception as e:
+ logger.error(f"Ошибка при получении списка купонов: {e}")
+ await callback_query.message.edit_text("Произошла ошибка при получении списка купонов.")
- if not coupons:
+
+@router.callback_query(AdminCouponDeleteCallback.filter(F.confirm.is_(None)), IsAdminFilter())
+async def handle_coupon_delete(callback_query: CallbackQuery, callback_data: AdminCouponDeleteCallback, session: Any):
+ coupon_code = callback_data.coupon_code
+ kb = InlineKeyboardBuilder()
+ kb.button(
+ text="✅ Да, удалить",
+ callback_data=AdminCouponDeleteCallback(coupon_code=coupon_code, confirm=True).pack()
+ )
+ kb.button(
+ text="❌ Нет, отменить",
+ callback_data=AdminCouponDeleteCallback(coupon_code=coupon_code, confirm=False).pack()
+ )
+ kb.adjust(1)
+
+ await callback_query.message.edit_text(
+ f"Вы уверены, что хотите удалить купон {coupon_code}?",
+ reply_markup=kb.as_markup()
+ )
+
+
+@router.callback_query(AdminCouponDeleteCallback.filter(F.confirm.is_not(None)), IsAdminFilter())
+async def confirm_coupon_delete(callback_query: CallbackQuery, callback_data: AdminCouponDeleteCallback, session: Any):
+ coupon_code = callback_data.coupon_code
+ confirm = callback_data.confirm
+
+ if confirm:
+ try:
+ result = await delete_coupon(coupon_code, session)
+ if not result:
+ await callback_query.message.edit_text(
+ f"❌ Купон с кодом {coupon_code} не найден.",
+ reply_markup=build_admin_back_kb("coupons")
+ )
+ return
+ except Exception as e:
+ logger.error(f"Ошибка при удалении купона: {e}")
await callback_query.message.edit_text(
- text="❌ На данный момент нет доступных купонов!",
- reply_markup=build_admin_back_kb("coupons"),
+ "Произошла ошибка при удалении купона.",
+ reply_markup=build_admin_back_kb("coupons")
)
return
- kb = build_coupons_list_kb(coupons, result["current_page"], result["pages"])
- coupon_list = "📜 Список всех купонов:\n\n"
- for coupon in coupons:
- value_text = f"💰 Сумма: {coupon['amount']} рублей" if coupon["amount"] > 0 else f"⏳ Дней: {coupon['days']}"
- coupon_list += (
- f"🏷️ Код: {coupon['code']}\n"
- f"{value_text}\n"
- f"🔢 Лимит использования: {coupon['usage_limit']} раз\n"
- f"✅ Использовано: {coupon['usage_count']} раз\n"
- f"🔗 Ссылка: https://t.me/{USERNAME_BOT}?start=coupons_{coupon['code']}\n\n"
- )
- await callback_query.message.edit_text(text=coupon_list, reply_markup=kb)
- except Exception as e:
- logger.error(f"Ошибка при получении списка купонов: {e}")
- await callback_query.message.answer("Произошла ошибка при получении списка купонов.")
-
-
-@router.callback_query(AdminCouponDeleteCallback.filter(), IsAdminFilter())
-async def handle_coupon_delete(callback_query: CallbackQuery, callback_data: AdminCouponDeleteCallback, session: Any):
- coupon_code = callback_data.coupon_code
- try:
- result = await delete_coupon(coupon_code, session)
- if result:
- await callback_query.message.edit_text(f"Купон {coupon_code} удалён!")
- else:
- await callback_query.message.edit_text(f"❌ Купон с кодом {coupon_code} не найден.", show_alert=True)
- await update_coupons_list(callback_query.message, session)
- except Exception as e:
- logger.error(f"Ошибка при удалении купона: {e}")
- await callback_query.message.edit_text("Произошла ошибка при удалении купона.", show_alert=True)
+ await update_coupons_list(callback_query.message, session)
async def update_coupons_list(message, session: Any, page: int = 1):
@@ -269,17 +277,8 @@ async def update_coupons_list(message, session: Any, page: int = 1):
return
kb = build_coupons_list_kb(coupons, result["current_page"], result["pages"])
- coupon_list = "📜 Список всех купонов:\n\n"
- for coupon in coupons:
- value_text = f"💰 Сумма: {coupon['amount']} рублей" if coupon["amount"] > 0 else f"⏳ Дней: {coupon['days']}"
- coupon_list += (
- f"🏷️ Код: {coupon['code']}\n"
- f"{value_text}\n"
- f"🔢 Лимит использования: {coupon['usage_limit']} раз\n"
- f"✅ Использовано: {coupon['usage_count']} раз\n"
- f"🔗 Ссылка: https://t.me/{USERNAME_BOT}?start=coupons_{coupon['code']}\n\n"
- )
- await message.edit_text(text=coupon_list, reply_markup=kb)
+ text = format_coupons_list(coupons, USERNAME_BOT)
+ await message.edit_text(text=text, reply_markup=kb)
@router.inline_query(F.query.startswith("coupon_"))