From dfa41c9a4ef4353b00151ecc28ea1d0a5d407bf1 Mon Sep 17 00:00:00 2001 From: devproject Date: Sun, 14 Jun 2026 21:03:51 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20=D0=9D?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0=D0=B4=20=D0=BD=D0=B0=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D1=85=20=D1=8D=D1=82=D0=B0=D0=BF=D0=B0=D1=85=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B8=20(=D1=83=D1=81=D0=BB=D1=83=D0=B3?= =?UTF-8?q?=D0=B0=E2=86=92=D0=BC=D0=B0=D1=81=D1=82=D0=B5=D1=80=E2=86=92?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B0=E2=86=92=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= =?UTF-8?q?=E2=86=92=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5=D1=80=D0=B6=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/handlers/booking.py | 70 +++++++++++++++++++++++++++++++++++++++ app/keyboards/back.py | 5 +++ app/keyboards/masters.py | 4 +++ app/keyboards/services.py | 4 +++ 4 files changed, 83 insertions(+) create mode 100644 app/keyboards/back.py diff --git a/app/handlers/booking.py b/app/handlers/booking.py index de95cc5..e28fa37 100644 --- a/app/handlers/booking.py +++ b/app/handlers/booking.py @@ -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() diff --git a/app/keyboards/back.py b/app/keyboards/back.py new file mode 100644 index 0000000..66eeb56 --- /dev/null +++ b/app/keyboards/back.py @@ -0,0 +1,5 @@ +from aiogram.types import InlineKeyboardButton + + +def get_back_button(): + return [InlineKeyboardButton(text="◀ Назад", callback_data="go_back")] diff --git a/app/keyboards/masters.py b/app/keyboards/masters.py index 0b9208d..76ff2d8 100644 --- a/app/keyboards/masters.py +++ b/app/keyboards/masters.py @@ -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) diff --git a/app/keyboards/services.py b/app/keyboards/services.py index 81f2b67..468f9ca 100644 --- a/app/keyboards/services.py +++ b/app/keyboards/services.py @@ -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)