данные об адресах. размерах и ценах подтягиваются с бэка автоматически
Нужно что-то добавить на этой странице?
Описание страницы для бронирования склада
Форма бронирования склада
Функционал страницы:
Выбор локации и размера склада: Пользователь может выбрать локацию из списка (Шушары, Кудрово и тд). Пользователь может выбрать размер склада (M, S, XS). Отображение стоимости аренды: Стоимость аренды рассчитывается на основе выбранной локации и размера склада и отображается на странице на основе данных из таблицы min_weekly_price_view. Ввод контактной информации: Пользователь вводит свое имя, электронную почту и номер телефона. Отправка заявки на бронирование: Пользователь нажимает кнопку "Отправить заявку", чтобы отправить введенные данные на сервер. Техническое взаимодействие фронта и бэка:
Отправка данных формы на сервер: При нажатии кнопки "Отправить заявку" данные формы (имя, почта, телефон, выбранная локация и размер) отправляются на сервер для сохранения новой заявки в таблице requests. Проверка наличия свободных ячеек: Сервер получает запрос на проверку наличия свободных ячеек в выбранной локации и размера. Запрос выполняется к таблице cells, где хранятся данные о всех ячейках. Обработка ответа сервера: Если сервер находит подходящую свободную ячейку, обновляется состояние страницы и отображается сообщение о возможности бронирования Пользователь может перейти к бронированию немедленно, либо отправить запрос на ручное бронирование менеджером
Если подходящих ячеек нет, пользователю показывается сообщение об отправке заявки на ожидание. В дальнейшем заменим на выбор лита ожидания. Пока автоматизация в этом случае не настроена и на почту ничего не летит
Таблица requests содержит триггеры, которые автоматически обновляют статус заявки в зависимости от действий пользователя. Таблица cells содержит триггеры, которые автоматически обновляют статус ячеек в зависимости от их текущего состояния (доступна, зарезервирована, арендована). Описание таблиц на бэке:
Поле created_at: Время создания заявки. Поле processed: Флаг, указывающий, обработана ли заявка. Поле status: Текущий статус заявки (lead, reserved, waiting_list, fell_off). Поле phone: Телефон клиента. Поле client_name: Имя клиента. Поле size: Размер ячейки, на которую подана заявка (связано с таблицей sizes). Поле email: Электронная почта клиента. Поле notes: Заметки по заявке. Поле manager: Email менеджера, который обрабатывает заявку (связано с таблицей users_by_roles). Поле reserved_cell: Идентификатор зарезервированной ячейки, если заявка переведена в статус reserved (связано с таблицей cells). Поле user_id: Идентификатор пользователя, обрабатывающего заявку (связано с таблицей auth.users). Поле request_id: Идентификатор заявки. Поле reserv_expired: Дата истечения резерва ячейки. Поле waitingTimeD: Дата, до которой клиент готов ждать свободной ячейки (для статуса waiting_list). Поле location: Идентификатор локации, к которой относится заявка (связано с таблицей loc_geo). Поле franchise: Идентификатор франшизы, к которой относится заявка. Поле created_at: Время создания записи о ячейке. Поле size: Размер ячейки, выбирается из списка возможных размеров. Поле price_tier: Уровень цены ячейки, связывается с таблицей area_prices, определяет стоимость аренды. Поле status: Статус ячейки: not_working, available, reserved, rented. Поле current_client: Email текущего клиента, связанного с ячейкой. Поле cell_id: Уникальный идентификатор ячейки. Поле container: Номер контейнера, к которому относится ячейка. Поле created_by: ID пользователя, создавшего запись о ячейке. Поле end_date: Дата окончания аренды ячейки. Поле email: Email менеджера, создавшего запись о ячейке. Поле adress: Адрес локации, к которой относится ячейка. Поле reserved_expired: Дата окончания резерва ячейки. Поле is_active: Показатель активности ячейки. Поле location_id: ID локации, к которой относится ячейка. Взаимодействие фронта и бэка
Запрос с фронта на бэк для сохранения данных: При отправке формы данные (имя, почта, телефон, выбранная локация и размер) отправляются в таблицу requests. Запрос на проверку наличия ячеек: Запрос к таблице cells для получения доступных ячеек на основе выбранной локации и размера. Обновление статуса на фронте и бэке: На фронте обновляется состояние страницы, отображаются соответствующие сообщения. На бэке триггеры в таблицах requests и cells автоматически изменяют статус заявок и ячеек.
Самостоятельное бронирование по кнопке «Забронировать сейчас»:
Действия при нажатии на кнопку
Описание:
При нажатии на кнопку "Забронировать сейчас" происходит несколько последовательных действий, как на фронте, так и на бэке. Весь процесс можно разбить на несколько шагов.
Шаги:
Генерация токена приглашения: Генерируется уникальный токен приглашения с помощью функции functions.generateInviteToken(). Состояние компонента обновляется, чтобы сохранить сгенерированный токен. Переход на страницу gotoLK: Выполняется навигация на страницу gotoLK с передачей параметров: cellID: Идентификатор ячейки. clientemail: Электронная почта клиента. token: Сгенерированный токен приглашения. timeReserved: Время резерва в днях (в данном случае, 3 дня). Создание инвайта для резерва:: В таблицу Reserve_tokens добавляется новая запись с данными:
invite_token: сгенерированный токен client_email: email клиента used: false (токен еще не использован) expires_at: дата и время истечения срока действия (через 3 часа) cell_id: идентификатор ячейки В таблице RequestsTable обновляется запись заявки с данными: notes: Примечание о самостоятельной брони. processed: Флаг, указывающий, что заявка обработана. status: Статус заявки, установленный на "reserved". reserv_expired: Дата истечения резерва, сгенерированная функцией functions.createReserveTime(3). reserved_cell: Идентификатор зарезервированной ячейки. Обновление производится для записей, совпадающих по request_id и email. Обновление состояния ячейки: В таблице CellsTable обновляется запись ячейки с данными: status: Статус ячейки, установленный на "reserved". current_client: Электронная почта текущего клиента. reserved_expired: Дата истечения резерва, сгенерированная функцией functions.createReserveTime(3). Обновление производится для записи, совпадающей по cell_id. Выполняется задержка на 1 секунду для завершения всех асинхронных операций. Закрытие модального окна: Закрывается модальное окно (если было открыто). Сбрасывается сгенерированный токен приглашения в состоянии компонента. Обновление состояния компонента: Обновляется состояние компонента для завершения всех действий. Таким образом, при нажатии на кнопку "Забронировать сейчас" происходит генерация токена, создание записи о клиенте и обновление соответствующих данных в таблицах заявок и ячеек, а также навигация на страницу личного кабинета.