Ссылка: https://git-rooms.herokuapp.com/
Техническое задание
Python, Django, PostgreSQL, Rest-API, MVC
Разработать приложение для бронирования переговорных комнат в офисе компании "Альфа".
Приложение должно поддерживать две роли сотрудников:
Офис менеджер может подтвердить или отклонить бронирование переговорных пользователем, а также отредактировать информацию о переговорной или добавить новую комнату, или удалить уже имеющуюся.
Для роли «Сотрудник» в приложении доступно несколько экранов:
- 1) Вход в приложение по логину и паролю
- 2) После входа в приложение видимым становится экран со списком из всех имеющихся переговорных комнат, каждый элемент списка содержит в себе следующую информацию:
- а) Название комнаты
- б) Количество кресел
- в) Самое ранее забронированное время (если на данный момент такого времени нет то надпись о том что аудитория свободна)
- г) Наличие проектора (возможно в виде изображения)
- д) Наличие маркерной доски (возможно в виде изображения)
Ниже схематично показан пример:
- 3) При нажатии на элемент списка открывается экран с описанием комнаты:
- а) Информация о комнате: Название комнаты, Количество кресел, Наличие проектора, Наличие маркерной доски, описание комнаты.
- б) Список с датами и временем уже зарезервированных по времени мероприятий
- в) Кнопка "забронировать"
- 4) При нажатии на кнопку "забронировать" открывается экран с выбором даты и времени (начало, конец), и названием мероприятия
- Технические требования:
- Верстка под разные разрешения экранов
- Технические требования:
Для роли «Офис менеджер» в приложении доступно несколько экранов:
- 1. Вход по логину и паролю.
- 2. На главной форме список из всех переговорных, каждый элемент списка содержит в себе следующую информацию:
- Название комнаты
- Количество кресел
- Наличие проектора
- Наличие маркерной доски
на этой же странице в отдельной области экрана список из заявок которые нужно подтвердить или отклонить, список обновляется каждые 10 сек без перезагрузки страницы, у каждого элемента списка есть кнопка подтвердить или отклонить (нажатие на кнопку подтвердить/отклонить не должно приводить к перезагрузке страницы).
- 3. Форма редактирования информации о переговорной.
- 4. Форма управления ролями (роль «Сотрудник» глобальная и по умолчанию в нее входят все пользователи, роль «Офис менеджер» может назначить любой «Офис менеджер»).
Приложение
Python 3.9.5, Django 3.2.4, Postgres 13
Экраны сотрудника:
- Логин
- Список комнат
- Подробная информация о комнате и бронирование
Экраны офис-менеджера:
- Логин
- Список комнат
- Подробная информаци о комнате и бронирование
- Создание/изменение/удаление комнат
- Изменение ролей сотрудников
Логин
https://git-rooms.herokuapp.com/login/Авторизоваться можно, используя следующих пользователей:
Логины: test1, test2, test3, test4.
Пароль ко всем пользователям: UserUser1
Главный экран
https://git-rooms.herokuapp.com/На главном экране находится список всех комнат, кнопка "Добавить комнату" и список встреч или уведомление об их отсутствии.
Так видит главный экран офис-менеджер((1)есть встречи, (2)при нажатии на кнопку подтверждения встречи, (3)новых встреч нет):
Инициатор собрания, в свою очередь, получает уведомление о подтверждении/отклонении встречи:
Так видит главный экран обычный сотрудник:
Назначение встреч сотрудниками
https://git-rooms.herokuapp.com/rooms/1При переходе в любую из комнат можно увидеть кнопку бронирования и список назначенных встреч:
При нажатии на кнопку бронирования открывается экран с параметрами бронирования: Списком офис-менеджеров, темой собрания, началом и концом собрания
Редактирование информации о комнатах
https://git-rooms.herokuapp.com/addroom/Страница доступна только офис-менеждерам. Пользователи, не являющиеся офис-менеджерами, будут переадресованы на страницу входа.
Эта страница объединяет в одной форме возможность создания/удаления/редакирование комнаты.
Создать комнату можно выбрав поле "+ создать комнату".
Отредактировать или удалить уже имеющуюся комнату можно, выбрав существующую комнату и отредактировать информацию о ней.
Информация о комнате подгружается без перезагруки страницы.
Управление ролями сотрудников
https://git-rooms.herokuapp.com/addroom/Страница доступна только офис-менеждерам. Пользователи, не являющиеся офис-менеджерами, будут переадресованы на страницу входа.
Здесь можно выбрать любого сотрудника и назначить или убрать роль офис-менеджера.
Чекбокс отображает реальную информацию о роли сотрудника без перезагрузки страницы. чтобы сохранить информацию о сотруднике, необходимо нажать кнопку сохранить
Все экраны поддерживают мобильную версию(только портретная ориентация)
Что не получилось сделать на данный момент:
- Проблема: Если создать 2+ встречи на одно и то же свободное время и одобрить их, то все встречи можно будет одобрить и в расписании появятся встречи на одно и то же время.
Причина: Не определено поведение в такой ситуации: поскольку возможности отредактировать назначенную встречу не предусмотрено, а предупреждение при создании встречи о том, что неподтвержденные встречи могут наложиться друг на друга не решит эту проблему.
Предложение по решению: Запрет бронирования на время, на которое назначены неподтвержденные встречи может быть решением проблемы, но приводить к неэффективному планированию. Считаю, что итоговое решение по подобному вопрсу необходимо обсуждать с клиентом. - Проблема: Уведомления о подтверждении/отклонении не приходят на мобильный телефон или если приложение закрыто, нет отложенной доставки.
Предложение по решению: Возможно, если каждое уведомление будет храниться в базе и иметь отметки о доставке, то отложенная доставка при подлкючении клинта будет работать. По доставке сообщений в мобильной версии у меня предположений сейчас нет. - Проблема: Подтверждение/отклонение встречи на главном экране: логика работает корректно, но визуально появляются баги подобного вида:
Ожидаемое поведение:
Баг:
Причина: Список встреч обновляется каждые 10 сек и при нажатии на кнопку подтверждения/отклонения на странице появляется html-плашка на месте встречи и тайм-аут на 1 сек перед обновлением списка встреч. В этом промежутке времени иногда приходит ответ автообновления с устаревшими данными, затем приходит ответ после нажатия на кнопку с актуальными данными.
Из-за недостаточного знания javascript я не нашел решения этой проблемы