Основная идея проекта: заменить power apps microsoft. Структура проекта заключется в следующем: есть два основных приложения, которые устанавливают настройки всего проекта. Остальные приложения являются по сути самостоятельными сущностями, которые выполняют какую либо отдельную функцию, будь то заполнение формы для отправки в БД, получение каких-либо данных, построение визуализаций и т.д.
Для запуска проекта необходимо:
- Клонировать проект на компьютер или сервер;
- Установить виртуальное окружение
python -m venv venv
; - Включить вирутальное окружение:
- Windows
venv\Scripts\activate
- Linux
souce venv/bin/actibate
- Windows
- Из корня проекта (там где файл requirements.txt) установить зависимости
pip install -r requirements.txt
- Найти дирректорию, в которой лежит файл manage.py и запустить его командой
python manage.py runserver
или любым другим способом)
Готово. Проект запущен!
В проекте использовано много логинов, паролей и прочей особо ценной информации, которую нельзя хранить в коде, поэтому важно правильно создать и заполнить файл с этими переменными. Итак:
- SECRET_KEY=some_secret_key - секретный ключ Django
- DEBUG=True - запускам проект в режиме разработки или продакшена
- GOOGLE_CID=oauth_cid - client id из личного кабинета сервиса авторизации
- GOOGLE_CSECRET=oauth_secret - secret из личного кабинета сервиса авторизации
- SEND_EMAIL=True - если False, то ни одна из перечисленных ниже переменных не будут загружены в проект
- EMAIL_HOST=smtp.yandex.abs
- EMAIL_PORT=465
- EMAIL_USE_SSL=True
- DEFAULT_FROM_EMAIL=someone@email.abs - тот, кто будет отображаться в поле "От"
- EMAIL_HOST_USER=someone@email.abs - чей ящик используется, обычно копия предыдущего поля
- EMAIL_HOST_PASSWORD=ijeflskjflks - пароль доступа к серверу (!= пароль от почты)
- EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend - подходящий бекенд Django
web-form
Основное приложений. Все что делает - это содержит:
- настройки;
- базовый шаблон и инклюдсы, которые могут быть использованы во всех приложениях;
- исходные пути к каждому приложению. При создании нового приложения, путь к нему добавлятся сюда в urls.py
Описание эндпоинтов
- '' - перенаправляет в приложение users.
- 'saving_tracker/' - перенаправляет в приложениее saving_tracker.
- 'admin/' - перенаправляет в админку. Доступна только заранее определенным пользователям.
users
Основное приложений пользователей для всех приложений. По сути сюда надо добавлять любого пользователя, а также любого человека, информацию о котором надо хранить.
Так же в этом приложении надо регистрировать любое новое создаанное приложение, так как через таблицу User_App создается список доступных пользователю приложений.
Описание эндпоинтов
- 'login/' - стандартная форма входа. Логин - email.
- 'logout/' - эндпоинт выхода, перенаправляет на страницу входа.
- '' - отображает список доступных пользователю приложений.
saving-tracker
Первое полноценное приложение проекта. Занимается ведением списка проектов и его увеличением, рассчитывает их экономию и уведомляет ключевых пользователей каждого из проектов о каких-либо изменениях в них.
Модели
-
SupportFunction - модель-список бизнес функций.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
SavingType - модель-список статусов высокого уровня.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
LowLevelStatus - модель-список статусов низкого уровня.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
Group - модель-список групп.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
RiskAdjustment - модель-список уровней риска.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
LossesForAttack - модель-список типов потерь.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
BusinessArea - модель-список бизнес сегментов.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
Stream - модель-список направлений.
- title - человекочитаемое название
- Максимальная длина 200 символов
- pk - индекс
- title - человекочитаемое название
-
Project - основная модель приложения. Хранит информацию о каждом проекте.
- title - человекочитаемое название
- Тип поля CharField
- Максимальная длина 200 символов
- pk - индекс
- owner - владелец проекта
- Тип поля ForeignKey
- Ссылка на модель User
- Не даст удалить объект User, если у него есть проекты
- support_function - функция.
- Тип поля ForeignKey
- Ссылка на модель SupportFunction
- Не даст удалить объект SupportFunction, если у него есть проекты
- initial_start_date - дата старта проекта.
- Тип поля DateField
- planned_start_date - плановая дата старта проекта.
- Тип поля DateField
- project_end_date - дата окончания проекта.
- Тип поля DateField
- saving_potential - функция.
- Тип поля FloatField
- saving_type - функция.
- Тип поля ForeignKey
- Ссылка на модель SavingType
- Не даст удалить объект SavingType, если у него есть проекты
- high_level_status - статус высокого уровня.
- Тип поля ForeignKey
- Ссылка на модель HighLevelStatus
- Не даст удалить объект HighLevelStatus, если у него есть проекты
- low_level_status - статус низкого уровня.
- Тип поля ForeignKey
- Ссылка на модель LowLevelStatus
- Не даст удалить объект LowLevelStatus, если у него есть проекты
- comment - комментарий.
- Тип поля TextField
- Необязательное поле
- coordinator - координатор проекта.
- Тип поля ForeignKey
- Ссылка на модель User
- Не даст удалить объект User, если у него есть проекты
- group - группа.
- Тип поля ForeignKey
- Ссылка на модель Group
- Не даст удалить объект Group, если у него есть проекты
- risk_adjustment - уровень риска.
- Тип поля ForeignKey
- Ссылка на модель RiskAdjustment
- Не даст удалить объект RiskAdjustment, если у него есть проекты
- budget_use - используется ли бюджет.
- Тип поля BooleanField
- approved - согласован ли проект.
- Тип поля BooleanField
- losses_for_attack - тип потерь.
- Тип поля ForeignKey
- Ссылка на модель LossesForAttack
- Не даст удалить объект LossesForAttack, если у него есть проекты
- business_area - бизнес сегмент.
- Тип поля ForeignKey
- Ссылка на модель BusinessArea
- Не даст удалить объект BusinessArea, если у него есть проекты
- stream - направление.
- Тип поля ForeignKey
- Ссылка на модель Stream
- Не даст удалить объект Stream, если у него есть проекты
- local_focus - является ли проект фокусным.
- Тип поля BooleanField
- srs_number - номер SRS (больше не используется, в формах не отображается).
- Тип поля CharField
- Максимальная длина 20 символов
- Необязательное поле
- folder_url - ссылка на папку с проектом.
- Тип поля URLField
- Необязательное поле
- Все поля share - доли в чем либо.
- Значение в каждом поле может быть от 0 до 1
- Суммы по полям (primary_share, secondary_share, wharehose_share), (personal_care_share, home_care_share, tea_share, food_share, ic_share) и (share_2020, share_2021...share_2027) должны быть равны 1. Важно проверять это в формах
- title - человекочитаемое название
Обязательные проверки
- Суммы по полям (primary_share, secondary_share, wharehose_share), (personal_care_share, home_care_share, tea_share, food_share, ic_share) и (share_2020, share_2021...share_2027) должны быть равны 1.
- Каждое поле primary_share, secondary_share, wharehose_share, personal_care_share, home_care_share, tea_share, food_share, ic_share, share_2020, share_2021...share_2027 должны быть между 0 и 1.
- Все даты находятся в пределах с 01.01.2020 по 31.12.2020
- Нельзя сохранить проект с полем high_level_status == 'Done', если у него potential_saving >= 40 kE, а поле approved == False.
Описание эндпоинтов
- 'index/' - страница с основной таблицей. С нее можно зайти в любой проект, ее можно фильтровать, на ней отображается обобщенная инфомрция о проектах в рахных статусах и о суммарных сейвингах по типам. С нее можно скачать таблицу по кнопке.
- 'update_project/' - отображает форму проекта с уже заполненными значениями, соответствующими тем, что записаны в проекте. Поля можно корректировать, а затем сохранять. После обновления координатору приходит письмо со списком изменений.
- 'create_project/' - отображает форму проекта без заполненных полей. После сохрания создает новый проект.
- 'download_table/' - позволяет скачать таблицу со всеми характеристиками всех проектов. Все доли ('_share_') конвертирует в абсолютные значения исходя из saving_poential.