Добавлена кнопка Назад на всех этапах записи (услуга→мастер→дата→время→подтверждение)
This commit is contained in:
@@ -290,3 +290,73 @@ async def edit_booking_callback(
|
|||||||
"Выберите услугу:",
|
"Выберите услугу:",
|
||||||
reply_markup=get_services_keyboard()
|
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.config import MASTERS
|
||||||
|
|
||||||
|
|
||||||
|
from app.keyboards.back import get_back_button
|
||||||
|
|
||||||
|
|
||||||
def get_masters_keyboard():
|
def get_masters_keyboard():
|
||||||
buttons = [
|
buttons = [
|
||||||
[InlineKeyboardButton(text=name, callback_data=key)]
|
[InlineKeyboardButton(text=name, callback_data=key)]
|
||||||
for key, name in MASTERS.items()
|
for key, name in MASTERS.items()
|
||||||
]
|
]
|
||||||
|
buttons.append(get_back_button())
|
||||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||||
|
|||||||
@@ -2,9 +2,13 @@ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
|||||||
from app.config import SERVICES
|
from app.config import SERVICES
|
||||||
|
|
||||||
|
|
||||||
|
from app.keyboards.back import get_back_button
|
||||||
|
|
||||||
|
|
||||||
def get_services_keyboard():
|
def get_services_keyboard():
|
||||||
buttons = [
|
buttons = [
|
||||||
[InlineKeyboardButton(text=name, callback_data=key)]
|
[InlineKeyboardButton(text=name, callback_data=key)]
|
||||||
for key, name in SERVICES.items()
|
for key, name in SERVICES.items()
|
||||||
]
|
]
|
||||||
|
buttons.append(get_back_button())
|
||||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||||
|
|||||||
Reference in New Issue
Block a user