Добавлена кнопка Назад на всех этапах записи (услуга→мастер→дата→время→подтверждение)
This commit is contained in:
@@ -290,3 +290,73 @@ async def edit_booking_callback(
|
||||
"Выберите услугу:",
|
||||
reply_markup=get_services_keyboard()
|
||||
)
|
||||
|
||||
|
||||
@router.callback_query(
|
||||
F.data == "go_back"
|
||||
)
|
||||
async def go_back_handler(
|
||||
callback: CallbackQuery,
|
||||
state: FSMContext
|
||||
):
|
||||
current_state = await state.get_state()
|
||||
|
||||
if current_state == BookingState.master:
|
||||
# Back to service selection
|
||||
await state.set_state(BookingState.service)
|
||||
from app.keyboards.services import get_services_keyboard
|
||||
await callback.message.edit_text(
|
||||
"Выберите услугу:",
|
||||
reply_markup=get_services_keyboard()
|
||||
)
|
||||
|
||||
elif current_state == BookingState.date:
|
||||
# Back to master selection
|
||||
await state.set_state(BookingState.master)
|
||||
from app.keyboards.masters import get_masters_keyboard
|
||||
# Remove saved date from state, keep service
|
||||
data = await state.get_data()
|
||||
data.pop("date", None)
|
||||
data.pop("time", None)
|
||||
await state.set_data(data)
|
||||
await callback.message.edit_text(
|
||||
"👤 Выберите специалиста:",
|
||||
reply_markup=get_masters_keyboard()
|
||||
)
|
||||
|
||||
elif current_state == BookingState.time:
|
||||
# Back to date selection
|
||||
await state.set_state(BookingState.date)
|
||||
from app.keyboards.calendar import get_dates_keyboard
|
||||
# Remove saved time, keep master/date
|
||||
data = await state.get_data()
|
||||
data.pop("time", None)
|
||||
await state.set_data(data)
|
||||
await callback.message.edit_text(
|
||||
"📅 Выберите дату:",
|
||||
reply_markup=get_dates_keyboard()
|
||||
)
|
||||
|
||||
elif current_state == BookingState.confirm:
|
||||
# Back to time selection
|
||||
await state.set_state(BookingState.time)
|
||||
data = await state.get_data()
|
||||
from app.keyboards.time_slots import get_time_keyboard
|
||||
from app.services.booking_service import get_busy_times
|
||||
busy_times = await get_busy_times(
|
||||
master=data.get("master", "?"),
|
||||
date=data.get("date", "?")
|
||||
)
|
||||
await callback.message.edit_text(
|
||||
"🕒 Выберите время:",
|
||||
reply_markup=get_time_keyboard(busy_times)
|
||||
)
|
||||
|
||||
else:
|
||||
# Fallback — back to start
|
||||
await state.clear()
|
||||
await callback.message.edit_text(
|
||||
"Отмена записи"
|
||||
)
|
||||
|
||||
await callback.answer()
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
from aiogram.types import InlineKeyboardButton
|
||||
|
||||
|
||||
def get_back_button():
|
||||
return [InlineKeyboardButton(text="◀ Назад", callback_data="go_back")]
|
||||
@@ -2,9 +2,13 @@ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from app.config import MASTERS
|
||||
|
||||
|
||||
from app.keyboards.back import get_back_button
|
||||
|
||||
|
||||
def get_masters_keyboard():
|
||||
buttons = [
|
||||
[InlineKeyboardButton(text=name, callback_data=key)]
|
||||
for key, name in MASTERS.items()
|
||||
]
|
||||
buttons.append(get_back_button())
|
||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||
|
||||
@@ -2,9 +2,13 @@ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from app.config import SERVICES
|
||||
|
||||
|
||||
from app.keyboards.back import get_back_button
|
||||
|
||||
|
||||
def get_services_keyboard():
|
||||
buttons = [
|
||||
[InlineKeyboardButton(text=name, callback_data=key)]
|
||||
for key, name in SERVICES.items()
|
||||
]
|
||||
buttons.append(get_back_button())
|
||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||
|
||||
Reference in New Issue
Block a user