diff --git a/app/handlers/admin/promocodes.py b/app/handlers/admin/promocodes.py
index 9e7b5647..a5caabc5 100644
--- a/app/handlers/admin/promocodes.py
+++ b/app/handlers/admin/promocodes.py
@@ -189,6 +189,8 @@ async def show_promocode_management(
await callback.answer()
+# Замените эти функции в вашем файле
+
@admin_required
@error_handler
async def show_promocode_edit_menu(
@@ -196,7 +198,12 @@ async def show_promocode_edit_menu(
db_user: User,
db: AsyncSession
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 3:
+ promo_id = int(callback_parts[2])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
promo = await db.get(PromoCode, promo_id)
if not promo:
@@ -206,9 +213,23 @@ async def show_promocode_edit_menu(
text = f"""
✏️ Редактирование промокода {promo.code}
-Выберите параметр для изменения:
+💰 Текущие параметры:
"""
+ if promo.type == PromoCodeType.BALANCE.value:
+ text += f"• Бонус: {settings.format_price(promo.balance_bonus_kopeks)}\n"
+ elif promo.type in [PromoCodeType.SUBSCRIPTION_DAYS.value, PromoCodeType.TRIAL_SUBSCRIPTION.value]:
+ text += f"• Дней: {promo.subscription_days}\n"
+
+ text += f"• Использований: {promo.current_uses}/{promo.max_uses}\n"
+
+ if promo.valid_until:
+ text += f"• До: {format_datetime(promo.valid_until)}\n"
+ else:
+ text += f"• Срок: бессрочно\n"
+
+ text += f"\nВыберите параметр для изменения:"
+
keyboard = [
[
types.InlineKeyboardButton(
@@ -262,14 +283,19 @@ async def start_edit_promocode_date(
db_user: User,
state: FSMContext
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 4:
+ promo_id = int(callback_parts[3])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
await state.update_data(
editing_promo_id=promo_id,
edit_action="date"
)
- text = """
+ text = f"""
📅 Изменение даты окончания промокода
Введите количество дней до окончания (от текущего момента):
@@ -277,6 +303,8 @@ async def start_edit_promocode_date(
• Введите положительное число для установки срока
Например: 30 (промокод будет действовать 30 дней)
+
+ID промокода: {promo_id}
"""
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[
@@ -295,18 +323,25 @@ async def start_edit_promocode_amount(
db_user: User,
state: FSMContext
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 4:
+ promo_id = int(callback_parts[3])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
await state.update_data(
editing_promo_id=promo_id,
edit_action="amount"
)
- text = """
+ text = f"""
💰 Изменение суммы бонуса промокода
Введите новую сумму в рублях:
Например: 500
+
+ID промокода: {promo_id}
"""
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[
@@ -317,7 +352,6 @@ async def start_edit_promocode_amount(
await state.set_state(AdminStates.setting_promocode_value)
await callback.answer()
-
@admin_required
@error_handler
async def start_edit_promocode_days(
@@ -325,18 +359,25 @@ async def start_edit_promocode_days(
db_user: User,
state: FSMContext
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 4:
+ promo_id = int(callback_parts[3])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
await state.update_data(
editing_promo_id=promo_id,
edit_action="days"
)
- text = """
+ text = f"""
📅 Изменение количества дней подписки
Введите новое количество дней:
Например: 30
+
+ID промокода: {promo_id}
"""
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[
@@ -355,14 +396,19 @@ async def start_edit_promocode_uses(
db_user: User,
state: FSMContext
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 4:
+ promo_id = int(callback_parts[3])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
await state.update_data(
editing_promo_id=promo_id,
edit_action="uses"
)
- text = """
+ text = f"""
📊 Изменение максимального количества использований
Введите новое количество использований:
@@ -370,6 +416,8 @@ async def start_edit_promocode_uses(
• Введите положительное число для ограничения
Например: 100
+
+ID промокода: {promo_id}
"""
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[
@@ -803,7 +851,12 @@ async def confirm_delete_promocode(
db_user: User,
db: AsyncSession
):
- promo_id = int(callback.data.split('_')[-1])
+ callback_parts = callback.data.split('_')
+ if len(callback_parts) >= 3:
+ promo_id = int(callback_parts[2])
+ else:
+ await callback.answer("❌ Ошибка получения ID промокода", show_alert=True)
+ return
promo = await db.get(PromoCode, promo_id)
if not promo:
@@ -815,7 +868,13 @@ async def confirm_delete_promocode(
Вы действительно хотите удалить промокод {promo.code}?
-Внимание: Это действие нельзя отменить!
+📊 Информация о промокоде:
+• Использований: {promo.current_uses}/{promo.max_uses}
+• Статус: {'Активен' if promo.is_active else 'Неактивен'}
+
+⚠️ Внимание: Это действие нельзя отменить!
+
+ID: {promo_id}
"""
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[