GithubHelp home page GithubHelp logo

ltlrn / meeting_room Goto Github PK

View Code? Open in Web Editor NEW

This project forked from alright0/meeting_room

0.0 0.0 0.0 315 KB

Тестовое задание Django

JavaScript 16.25% Python 60.46% CSS 6.42% HTML 16.82% Batchfile 0.05%

meeting_room's Introduction

Ссылка: 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

  • При первой миграции создаются все группы и присваиваются разрешения, требуемые техническим заданием. При каждой последующей миграции базы данных проверяется наличие групп "coworker" и "manager" и наличие разрешений, присвоенных группам, если таковых нет, они создаются.
  • При каждом создании пользователя он автоматически помещается в группу "coworkers".
  • Все сотрудники могут назначать встречи офис-менеджерам. Офис-менеджеры могут подтвердить или отклонить встречу, добавить, изменить или удалить комнату, изменить роль сотрудника.
  • Все пользователи получают уведомления о подтверждении/отклонении встречи.
  • Для всех экранов доступна верстка под мобильную версию(портретная ориентация).

  • Экраны сотрудника:
    • Логин
    • Список комнат
    • Подробная информация о комнате и бронирование

    Экраны офис-менеджера:

    • Логин
    • Список комнат
    • Подробная информаци о комнате и бронирование
    • Создание/изменение/удаление комнат
    • Изменение ролей сотрудников



    Логин

    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 я не нашел решения этой проблемы

    meeting_room's People

    Contributors

    alright0 avatar laright0 avatar

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.