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_"))