Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
8e6fd58107 | |||
bfe9a95038 | |||
33687791ec | |||
57bc972b0f | |||
f437eeccb8 | |||
4e11ad67d0 | |||
40ba645a35 | |||
27e73e21d1 | |||
a6c0785de0 | |||
83328be22e | |||
c6ed5c8279 | |||
a4dc7f479a | |||
71726035dc | |||
c624a3617c | |||
cf00ab6234 | |||
e8684c5206 | |||
bb388a1969 | |||
d99f2d3c6f | |||
81a72773cb | |||
5fa88a5209 | |||
366579c12b | |||
fed0c5c3e5 | |||
c496d10c1a | |||
3993cc96a5 | |||
a4b37b34a9 | |||
2f55024f0b | |||
213644a51a | |||
281d839801 | |||
4fd157a785 | |||
968b3a0f92 | |||
f5ba608ed1 | |||
289668bb7f | |||
9e28722dba | |||
9b673f4a07 | |||
3a9e4b29b3 | |||
8d59462561 | |||
098e41e6a1 | |||
fc3f0b39e2 | |||
de53948cea | |||
823ebc0eb5 | |||
41414438d1 | |||
5704560beb | |||
8a48902b64 | |||
61fe059513 | |||
94576cc733 | |||
3a32c62119 | |||
9ea4fe1adc | |||
0798a672c2 | |||
f4e68529ba | |||
92a411baec | |||
034857d088 | |||
e5ce86a9bb | |||
5188b3d52e |
2
.cz.yaml
2
.cz.yaml
@ -4,5 +4,5 @@ commitizen:
|
|||||||
prerelease_offset: 1
|
prerelease_offset: 1
|
||||||
tag_format: $version
|
tag_format: $version
|
||||||
update_changelog_on_bump: false
|
update_changelog_on_bump: false
|
||||||
version: 1.0.0-a4
|
version: 1.0.0-b10
|
||||||
version_scheme: semver
|
version_scheme: semver
|
||||||
|
31
.github/workflows/bump.yaml
vendored
Normal file
31
.github/workflows/bump.yaml
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
name: 'Bump'
|
||||||
|
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
CZ_PRE_RELEASE:
|
||||||
|
default: none
|
||||||
|
required: false
|
||||||
|
description: Create Pre-Release {alpha,beta,rc,none}
|
||||||
|
CZ_INCREMENT:
|
||||||
|
default: none
|
||||||
|
required: false
|
||||||
|
description: Type of bump to conduct {MAJOR,MINOR,PATCH,none}
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
bump:
|
||||||
|
name: 'Bump'
|
||||||
|
uses: nofusscomputing/action_bump/.github/workflows/bump.yaml@development
|
||||||
|
with:
|
||||||
|
CZ_PRE_RELEASE: ${{ inputs.CZ_PRE_RELEASE }}
|
||||||
|
CZ_INCREMENT: ${{ inputs.CZ_INCREMENT }}
|
||||||
|
secrets:
|
||||||
|
WORKFLOW_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
|
33
.github/workflows/ci.yaml
vendored
Normal file
33
.github/workflows/ci.yaml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
name: 'CI'
|
||||||
|
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
|
||||||
|
docker:
|
||||||
|
name: 'Docker'
|
||||||
|
uses: nofusscomputing/action_docker/.github/workflows/docker.yaml@development
|
||||||
|
with:
|
||||||
|
DOCKER_BUILD_IMAGE_NAME: "nofusscomputing/centurion-erp"
|
||||||
|
DOCKER_PUBLISH_REGISTRY: "docker.io"
|
||||||
|
DOCKER_PUBLISH_IMAGE_NAME: "nofusscomputing/centurion-erp"
|
||||||
|
secrets:
|
||||||
|
DOCKER_PUBLISH_USERNAME: ${{ secrets.NFC_DOCKERHUB_USERNAME }}
|
||||||
|
DOCKER_PUBLISH_PASSWORD: ${{ secrets.NFC_DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
|
||||||
|
python:
|
||||||
|
name: 'Python'
|
||||||
|
uses: nofusscomputing/action_python/.github/workflows/python.yaml@development
|
||||||
|
secrets:
|
||||||
|
WORKFLOW_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
|
14
.github/workflows/pull-requests.yaml
vendored
Normal file
14
.github/workflows/pull-requests.yaml
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
name: Pull Requests
|
||||||
|
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request: {}
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
pull-request:
|
||||||
|
name: pull-request
|
||||||
|
uses: nofusscomputing/action_pull_requests/.github/workflows/pull-requests.yaml@development
|
433
.gitlab-ci.yml
433
.gitlab-ci.yml
@ -2,18 +2,21 @@
|
|||||||
|
|
||||||
variables:
|
variables:
|
||||||
MY_PROJECT_ID: "57560288"
|
MY_PROJECT_ID: "57560288"
|
||||||
GIT_SYNC_URL: "https://$GITHUB_USERNAME_ROBOT:$GITHUB_TOKEN_ROBOT@github.com/NoFussComputing/centurion_erp.git"
|
# GIT_SYNC_URL: "https://$GITHUB_USERNAME_ROBOT:$GITHUB_TOKEN_ROBOT@github.com/NoFussComputing/centurion_erp.git"
|
||||||
|
|
||||||
# Docker Build / Publish
|
# # Docker Build / Publish
|
||||||
DOCKER_IMAGE_BUILD_TARGET_PLATFORMS: "linux/amd64,linux/arm64"
|
# DOCKER_IMAGE_BUILD_TARGET_PLATFORMS: "linux/amd64,linux/arm64"
|
||||||
DOCKER_IMAGE_BUILD_NAME: centurion-erp
|
# DOCKER_IMAGE_BUILD_NAME: centurion-erp
|
||||||
DOCKER_IMAGE_BUILD_REGISTRY: $CI_REGISTRY_IMAGE
|
# DOCKER_IMAGE_BUILD_REGISTRY: $CI_REGISTRY_IMAGE
|
||||||
DOCKER_IMAGE_BUILD_TAG: $CI_COMMIT_SHA
|
# DOCKER_IMAGE_BUILD_TAG: $CI_COMMIT_SHA
|
||||||
|
|
||||||
# Docker Publish
|
# # Docker Publish
|
||||||
DOCKER_IMAGE_PUBLISH_NAME: centurion-erp
|
# DOCKER_IMAGE_PUBLISH_NAME: centurion-erp
|
||||||
DOCKER_IMAGE_PUBLISH_REGISTRY: docker.io/nofusscomputing
|
# DOCKER_IMAGE_PUBLISH_REGISTRY: docker.io/nofusscomputing
|
||||||
DOCKER_IMAGE_PUBLISH_URL: https://hub.docker.com/r/nofusscomputing/$DOCKER_IMAGE_PUBLISH_NAME
|
# DOCKER_IMAGE_PUBLISH_URL: https://hub.docker.com/r/nofusscomputing/$DOCKER_IMAGE_PUBLISH_NAME
|
||||||
|
|
||||||
|
# # Extra release commands
|
||||||
|
# MY_COMMAND: ./.gitlab/additional_actions_bump.sh
|
||||||
|
|
||||||
# Docs NFC
|
# Docs NFC
|
||||||
PAGES_ENVIRONMENT_PATH: projects/centurion_erp/
|
PAGES_ENVIRONMENT_PATH: projects/centurion_erp/
|
||||||
@ -22,97 +25,101 @@ variables:
|
|||||||
|
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- local: .gitlab/pytest.gitlab-ci.yml
|
# - local: .gitlab/pytest.gitlab-ci.yml
|
||||||
# - local: .gitlab/unit-test.gitlab-ci.yml
|
# - local: .gitlab/unit-test.gitlab-ci.yml
|
||||||
- project: nofusscomputing/projects/gitlab-ci
|
- project: nofusscomputing/projects/gitlab-ci
|
||||||
ref: development
|
ref: development
|
||||||
file:
|
file:
|
||||||
- .gitlab-ci_common.yaml
|
- .gitlab-ci_common.yaml
|
||||||
- template/automagic.gitlab-ci.yaml
|
# - template/automagic.gitlab-ci.yaml
|
||||||
|
- local: gitlab-ci/automation/.gitlab-ci-ansible.yaml
|
||||||
|
- local: gitlab-ci/template/mkdocs-documentation.gitlab-ci.yaml
|
||||||
Update Git Submodules:
|
- local: gitlab-ci/lint/ansible.gitlab-ci.yaml
|
||||||
extends: .ansible_playbook_git_submodule
|
|
||||||
|
|
||||||
|
|
||||||
Docker Container:
|
|
||||||
extends: .build_docker_container
|
|
||||||
resource_group: build
|
|
||||||
needs: []
|
|
||||||
script:
|
|
||||||
- update-binfmts --display
|
|
||||||
- |
|
|
||||||
|
|
||||||
echo "[DEBUG] building multiarch/specified arch image";
|
|
||||||
|
|
||||||
docker buildx build --platform=$DOCKER_IMAGE_BUILD_TARGET_PLATFORMS . \
|
|
||||||
--label org.opencontainers.image.created="$(date '+%Y-%m-%d %H:%M:%S%:z')" \
|
|
||||||
--label org.opencontainers.image.documentation="$CI_PROJECT_URL" \
|
|
||||||
--label org.opencontainers.image.source="$CI_PROJECT_URL" \
|
|
||||||
--label org.opencontainers.image.revision="$CI_COMMIT_SHA" \
|
|
||||||
--push \
|
|
||||||
--build-arg CI_PROJECT_URL=$CI_PROJECT_URL \
|
|
||||||
--build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA \
|
|
||||||
--build-arg CI_COMMIT_TAG=$CI_COMMIT_TAG \
|
|
||||||
--file $DOCKER_DOCKERFILE \
|
|
||||||
--tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
|
||||||
|
|
||||||
docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
|
||||||
|
|
||||||
# during docker multi platform build there are >=3 additional unknown images added to gitlab container registry. cleanup
|
|
||||||
|
|
||||||
DOCKER_MULTI_ARCH_IMAGES=$(docker buildx imagetools inspect "$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG" --format "{{ range .Manifest.Manifests }}{{ if ne (print .Platform) \"&{unknown unknown [] }\" }}$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG@{{ println .Digest }}{{end}} {{end}}");
|
|
||||||
|
|
||||||
docker buildx imagetools create $DOCKER_MULTI_ARCH_IMAGES --tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
|
||||||
|
|
||||||
docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
# Update Git Submodules:
|
||||||
|
# extends: .ansible_playbook_git_submodule
|
||||||
|
|
||||||
rules: # rules manually synced from docker/publish.gitlab-ci.yaml removing git tag
|
|
||||||
|
|
||||||
# - if: # condition_master_branch_push
|
# Docker Container:
|
||||||
# $CI_COMMIT_BRANCH == "master" &&
|
# extends: .build_docker_container
|
||||||
# $CI_PIPELINE_SOURCE == "push"
|
# resource_group: build
|
||||||
# exists:
|
# needs: []
|
||||||
# - '{dockerfile,dockerfile.j2}'
|
# script:
|
||||||
# when: always
|
# - update-binfmts --display
|
||||||
|
# - |
|
||||||
|
|
||||||
- if:
|
# echo "[DEBUG] building multiarch/specified arch image";
|
||||||
$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'
|
|
||||||
&&
|
|
||||||
$CI_COMMIT_BRANCH == "development"
|
|
||||||
when: never
|
|
||||||
|
|
||||||
- if: # condition_not_master_or_dev_push
|
# docker buildx build --platform=$DOCKER_IMAGE_BUILD_TARGET_PLATFORMS . \
|
||||||
$CI_COMMIT_BRANCH != "master" &&
|
# --label org.opencontainers.image.created="$(date '+%Y-%m-%d %H:%M:%S%:z')" \
|
||||||
$CI_COMMIT_BRANCH != "development" &&
|
# --label org.opencontainers.image.documentation="$CI_PROJECT_URL" \
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
# --label org.opencontainers.image.source="$CI_PROJECT_URL" \
|
||||||
exists:
|
# --label org.opencontainers.image.revision="$CI_COMMIT_SHA" \
|
||||||
- '{dockerfile,dockerfile.j2}'
|
# --push \
|
||||||
changes:
|
# --build-arg CI_PROJECT_URL=$CI_PROJECT_URL \
|
||||||
paths:
|
# --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA \
|
||||||
- '{dockerfile,dockerfile.j2,includes/**/*}'
|
# --build-arg CI_COMMIT_TAG=$CI_COMMIT_TAG \
|
||||||
compare_to: 'development'
|
# --file $DOCKER_DOCKERFILE \
|
||||||
when: always
|
# --tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
||||||
|
|
||||||
- if: $CI_COMMIT_TAG
|
# docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
||||||
exists:
|
|
||||||
- '{dockerfile,dockerfile.j2}'
|
|
||||||
when: always
|
|
||||||
|
|
||||||
- if: # condition_dev_branch_push
|
# # during docker multi platform build there are >=3 additional unknown images added to gitlab container registry. cleanup
|
||||||
(
|
|
||||||
$CI_COMMIT_BRANCH == "development"
|
# DOCKER_MULTI_ARCH_IMAGES=$(docker buildx imagetools inspect "$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG" --format "{{ range .Manifest.Manifests }}{{ if ne (print .Platform) \"&{unknown unknown [] }\" }}$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG@{{ println .Digest }}{{end}} {{end}}");
|
||||||
||
|
|
||||||
$CI_COMMIT_BRANCH == "master"
|
|
||||||
)
|
|
||||||
&&
|
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
|
||||||
exists:
|
|
||||||
- '{dockerfile,dockerfile.j2}'
|
|
||||||
allow_failure: true
|
|
||||||
when: on_success
|
|
||||||
|
|
||||||
- when: never
|
# docker buildx imagetools create $DOCKER_MULTI_ARCH_IMAGES --tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
||||||
|
|
||||||
|
# docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
||||||
|
|
||||||
|
# rules: # rules manually synced from docker/publish.gitlab-ci.yaml removing git tag
|
||||||
|
|
||||||
|
# # - if: # condition_master_branch_push
|
||||||
|
# # $CI_COMMIT_BRANCH == "master" &&
|
||||||
|
# # $CI_PIPELINE_SOURCE == "push"
|
||||||
|
# # exists:
|
||||||
|
# # - '{dockerfile,dockerfile.j2}'
|
||||||
|
# # when: always
|
||||||
|
|
||||||
|
# - if:
|
||||||
|
# $CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'
|
||||||
|
# &&
|
||||||
|
# $CI_COMMIT_BRANCH == "development"
|
||||||
|
# when: never
|
||||||
|
|
||||||
|
# - if: # condition_not_master_or_dev_push
|
||||||
|
# $CI_COMMIT_BRANCH != "master" &&
|
||||||
|
# $CI_COMMIT_BRANCH != "development" &&
|
||||||
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
|
# exists:
|
||||||
|
# - '{dockerfile,dockerfile.j2}'
|
||||||
|
# changes:
|
||||||
|
# paths:
|
||||||
|
# - '{dockerfile,dockerfile.j2,includes/**/*}'
|
||||||
|
# compare_to: 'development'
|
||||||
|
# when: always
|
||||||
|
|
||||||
|
# - if: $CI_COMMIT_TAG
|
||||||
|
# exists:
|
||||||
|
# - '{dockerfile,dockerfile.j2}'
|
||||||
|
# when: always
|
||||||
|
|
||||||
|
# - if: # condition_dev_branch_push
|
||||||
|
# (
|
||||||
|
# $CI_COMMIT_BRANCH == "development"
|
||||||
|
# ||
|
||||||
|
# $CI_COMMIT_BRANCH == "master"
|
||||||
|
# )
|
||||||
|
# &&
|
||||||
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
|
# exists:
|
||||||
|
# - '{dockerfile,dockerfile.j2}'
|
||||||
|
# allow_failure: true
|
||||||
|
# when: on_success
|
||||||
|
|
||||||
|
# - when: never
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -120,83 +127,107 @@ Docker Container:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
.gitlab_release:
|
# .gitlab_release:
|
||||||
stage: release
|
# stage: release
|
||||||
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
# image: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||||
before_script:
|
# before_script:
|
||||||
- if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
|
# - if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
|
||||||
- echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
|
# - echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
|
||||||
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
|
# - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
|
||||||
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
|
# - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
|
||||||
- apk update
|
# - apk update
|
||||||
- apk add git
|
# - apk add git curl
|
||||||
- apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
|
# - apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
|
||||||
- python -m ensurepip && ln -sf pip3 /usr/bin/pip
|
# - python -m ensurepip && ln -sf pip3 /usr/bin/pip
|
||||||
- pip install --upgrade pip
|
# - pip install --upgrade pip
|
||||||
- pip install -r $ROOT_DIR/gitlab_release/requirements.txt
|
# - pip install -r $ROOT_DIR/gitlab_release/requirements.txt
|
||||||
# - pip install $ROOT_DIR/gitlab_release/python-module/cz_nfc/.
|
# # - pip install $ROOT_DIR/gitlab_release/python-module/cz_nfc/.
|
||||||
- pip install commitizen --force
|
# - pip install commitizen --force
|
||||||
- 'CLONE_URL="https://gitlab-ci-token:$GIT_COMMIT_TOKEN@gitlab.com/$CI_PROJECT_PATH.git"'
|
# - 'CLONE_URL="https://gitlab-ci-token:$GIT_COMMIT_TOKEN@gitlab.com/$CI_PROJECT_PATH.git"'
|
||||||
- echo "[DEBUG] CLONE_URL[$CLONE_URL]"
|
# - echo "[DEBUG] CLONE_URL[$CLONE_URL]"
|
||||||
- git clone -b development $CLONE_URL repo
|
# - git clone -b development $CLONE_URL repo
|
||||||
- cd repo
|
# - cd repo
|
||||||
- git branch
|
# - git branch
|
||||||
- git config --global user.email "helpdesk@nofusscomputing.com"
|
# - git config --global user.email "helpdesk@nofusscomputing.com"
|
||||||
- git config --global user.name "nfc_bot"
|
# - git config --global user.name "nfc_bot"
|
||||||
- git push --set-upstream origin development
|
# - git push --set-upstream origin development
|
||||||
- RELEASE_VERSION_CURRENT=$(cz version --project)
|
# - RELEASE_VERSION_CURRENT=$(cz version --project)
|
||||||
script:
|
# script:
|
||||||
- "$MY_COMMAND"
|
# - if [ "$CI_COMMIT_BRANCH" == "development" ] ; then RELEASE_CHANGELOG=$(cz bump --changelog --changelog-to-stdout --prerelease beta); else RELEASE_CHANGELOG=$(cz bump --changelog --changelog-to-stdout); fi
|
||||||
- if [ "$CI_COMMIT_BRANCH" == "development" ] ; then RELEASE_CHANGELOG=$(cz bump --changelog --changelog-to-stdout --prerelease alpha); else RELEASE_CHANGELOG=$(cz bump --changelog --changelog-to-stdout); fi
|
# - RELEASE_VERSION_NEW=$(cz version --project)
|
||||||
- RELEASE_VERSION_NEW=$(cz version --project)
|
# - RELEASE_TAG=$RELEASE_VERSION_NEW
|
||||||
- RELEASE_TAG=$RELEASE_VERSION_NEW
|
# - echo "[DEBUG] RELEASE_VERSION_CURRENT[$RELEASE_VERSION_CURRENT]"
|
||||||
- echo "[DEBUG] RELEASE_VERSION_CURRENT[$RELEASE_VERSION_CURRENT]"
|
# - echo "[DEBUG] RELEASE_CHANGELOG[$RELEASE_CHANGELOG]"
|
||||||
- echo "[DEBUG] RELEASE_CHANGELOG[$RELEASE_CHANGELOG]"
|
# - echo "[DEBUG] RELEASE_VERSION_NEW[$RELEASE_VERSION_NEW]"
|
||||||
- echo "[DEBUG] RELEASE_VERSION_NEW[$RELEASE_VERSION_NEW]"
|
# - echo "[DEBUG] RELEASE_TAG[$RELEASE_TAG]"
|
||||||
- echo "[DEBUG] RELEASE_TAG[$RELEASE_TAG]"
|
# - RELEASE_TAG_SHA1=$(git log -n1 --format=format:"%H")
|
||||||
- RELEASE_TAG_SHA1=$(git log -n1 --format=format:"%H")
|
# - echo "[DEBUG] RELEASE_TAG_SHA1[$RELEASE_TAG_SHA1]"
|
||||||
- echo "[DEBUG] RELEASE_TAG_SHA1[$RELEASE_TAG_SHA1]"
|
|
||||||
- if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No tag to delete, version was not bumped"; else git tag -d $RELEASE_TAG; fi
|
|
||||||
|
|
||||||
- if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No push will be conducted, version was not bumped"; else git push; fi
|
|
||||||
- if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No release will be created, version was not bumped"; else release-cli create --name "Release $RELEASE_TAG" --tag-name "$RELEASE_TAG" --tag-message "$RELEASE_CHANGELOG" --ref "$RELEASE_TAG_SHA1" --description "$RELEASE_CHANGELOG"; fi
|
|
||||||
- if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git checkout master; fi
|
|
||||||
- if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git push --set-upstream origin master; fi
|
|
||||||
- if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git merge --no-ff development; fi
|
|
||||||
- if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git push origin master; fi
|
|
||||||
after_script:
|
|
||||||
- rm -Rf repo
|
|
||||||
rules:
|
|
||||||
- if: '$JOB_STOP_GITLAB_RELEASE'
|
|
||||||
when: never
|
|
||||||
|
|
||||||
- if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'"
|
# - |
|
||||||
when: never
|
# if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then
|
||||||
|
|
||||||
- if: # condition_master_branch_push
|
# echo "[DEBUG] not running extra actions, no new version";
|
||||||
$CI_COMMIT_BRANCH == "master" &&
|
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
|
||||||
allow_failure: false
|
|
||||||
when: on_success
|
|
||||||
|
|
||||||
- if: # condition_dev_branch_push
|
# else
|
||||||
$CI_COMMIT_BRANCH == "development" &&
|
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
|
||||||
when: manual
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
# for testing
|
# echo "[DEBUG] Creating new Version Label";
|
||||||
# - if: '$CI_COMMIT_BRANCH != "master"'
|
|
||||||
# when: always
|
|
||||||
# allow_failure: true
|
|
||||||
- when: never
|
|
||||||
|
|
||||||
#
|
# echo "----------------------------";
|
||||||
# Release
|
|
||||||
#
|
# echo ${MY_COMMAND};
|
||||||
Gitlab Release:
|
|
||||||
extends:
|
# echo "----------------------------";
|
||||||
- .gitlab_release
|
|
||||||
|
# cat ${MY_COMMAND};
|
||||||
|
|
||||||
|
# echo "----------------------------";
|
||||||
|
|
||||||
|
# ${MY_COMMAND};
|
||||||
|
|
||||||
|
# echo "----------------------------";
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# - if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No tag to delete, version was not bumped"; else git tag -d $RELEASE_TAG; fi
|
||||||
|
|
||||||
|
# - if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No push will be conducted, version was not bumped"; else git push; fi
|
||||||
|
# - if [ "0$RELEASE_VERSION_CURRENT" == "0$RELEASE_VERSION_NEW" ]; then echo "[DEBUG] No release will be created, version was not bumped"; else release-cli create --name "Release $RELEASE_TAG" --tag-name "$RELEASE_TAG" --tag-message "$RELEASE_CHANGELOG" --ref "$RELEASE_TAG_SHA1" --description "$RELEASE_CHANGELOG"; fi
|
||||||
|
# - if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git checkout master; fi
|
||||||
|
# - if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git push --set-upstream origin master; fi
|
||||||
|
# - if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git merge --no-ff development; fi
|
||||||
|
# - if [ "$CI_COMMIT_BRANCH" == "master" ] ; then git push origin master; fi
|
||||||
|
# after_script:
|
||||||
|
# - rm -Rf repo
|
||||||
|
# rules:
|
||||||
|
# - if: '$JOB_STOP_GITLAB_RELEASE'
|
||||||
|
# when: never
|
||||||
|
|
||||||
|
# - if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'"
|
||||||
|
# when: never
|
||||||
|
|
||||||
|
# - if: # condition_master_branch_push
|
||||||
|
# $CI_COMMIT_BRANCH == "master" &&
|
||||||
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
|
# allow_failure: false
|
||||||
|
# when: on_success
|
||||||
|
|
||||||
|
# - if: # condition_dev_branch_push
|
||||||
|
# $CI_COMMIT_BRANCH == "development" &&
|
||||||
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
|
# when: manual
|
||||||
|
# allow_failure: true
|
||||||
|
|
||||||
|
# # for testing
|
||||||
|
# # - if: '$CI_COMMIT_BRANCH != "master"'
|
||||||
|
# # when: always
|
||||||
|
# # allow_failure: true
|
||||||
|
# - when: never
|
||||||
|
|
||||||
|
# #
|
||||||
|
# # Release
|
||||||
|
# #
|
||||||
|
# Gitlab Release:
|
||||||
|
# extends:
|
||||||
|
# - .gitlab_release
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -205,59 +236,59 @@ Gitlab Release:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Docker.Hub.Branch.Publish:
|
# Docker.Hub.Branch.Publish:
|
||||||
extends: .publish-docker-hub
|
# extends: .publish-docker-hub
|
||||||
needs: [ "Docker Container" ]
|
# needs: [ "Docker Container" ]
|
||||||
resource_group: build
|
# resource_group: build
|
||||||
rules: # rules manually synced from docker/publish.gitlab-ci.yaml removing git tag
|
# rules: # rules manually synced from docker/publish.gitlab-ci.yaml removing git tag
|
||||||
|
|
||||||
# - if: # condition_master_branch_push
|
# # - if: # condition_master_branch_push
|
||||||
# $CI_COMMIT_BRANCH == "master" &&
|
# # $CI_COMMIT_BRANCH == "master" &&
|
||||||
# $CI_PIPELINE_SOURCE == "push"
|
# # $CI_PIPELINE_SOURCE == "push"
|
||||||
# exists:
|
# # exists:
|
||||||
# - '{dockerfile,dockerfile.j2}'
|
# # - '{dockerfile,dockerfile.j2}'
|
||||||
# when: always
|
# # when: always
|
||||||
|
|
||||||
- if:
|
# - if:
|
||||||
$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'
|
# $CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'
|
||||||
&&
|
# &&
|
||||||
$CI_COMMIT_BRANCH == "development"
|
# $CI_COMMIT_BRANCH == "development"
|
||||||
when: never
|
# when: never
|
||||||
|
|
||||||
- if: $CI_COMMIT_TAG
|
# - if: $CI_COMMIT_TAG
|
||||||
exists:
|
# exists:
|
||||||
- '{dockerfile,dockerfile.j2}'
|
# - '{dockerfile,dockerfile.j2}'
|
||||||
when: always
|
# when: always
|
||||||
|
|
||||||
- if: # condition_dev_branch_push
|
# - if: # condition_dev_branch_push
|
||||||
$CI_COMMIT_BRANCH == "development" &&
|
# $CI_COMMIT_BRANCH == "development" &&
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
exists:
|
# exists:
|
||||||
- '{dockerfile,dockerfile.j2}'
|
# - '{dockerfile,dockerfile.j2}'
|
||||||
allow_failure: true
|
# allow_failure: true
|
||||||
when: on_success
|
# when: on_success
|
||||||
|
|
||||||
- when: never
|
# - when: never
|
||||||
|
|
||||||
|
|
||||||
Github (Push --mirror):
|
# Github (Push --mirror):
|
||||||
extends:
|
# extends:
|
||||||
- .git_push_mirror
|
# - .git_push_mirror
|
||||||
needs: []
|
# needs: []
|
||||||
rules:
|
# rules:
|
||||||
- if: '$JOB_STOP_GIT_PUSH_MIRROR'
|
# - if: '$JOB_STOP_GIT_PUSH_MIRROR'
|
||||||
when: never
|
# when: never
|
||||||
|
|
||||||
- if: $GIT_SYNC_URL == null
|
# - if: $GIT_SYNC_URL == null
|
||||||
when: never
|
# when: never
|
||||||
|
|
||||||
- if: # condition_master_or_dev_push
|
# - if: # condition_master_or_dev_push
|
||||||
$CI_COMMIT_BRANCH
|
# $CI_COMMIT_BRANCH
|
||||||
&&
|
# &&
|
||||||
$CI_PIPELINE_SOURCE == "push"
|
# $CI_PIPELINE_SOURCE == "push"
|
||||||
when: always
|
# when: always
|
||||||
|
|
||||||
- when: never
|
# - when: never
|
||||||
|
|
||||||
|
|
||||||
Website.Submodule.Deploy:
|
Website.Submodule.Deploy:
|
||||||
|
7
.gitlab/additional_actions_bump.sh
Executable file
7
.gitlab/additional_actions_bump.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Create Version label wtihn repo
|
||||||
|
curl \
|
||||||
|
--data "name=v${RELEASE_TAG}&color=#eee600&description=Version%20that%20is%20affected" \
|
||||||
|
--header "PRIVATE-TOKEN: $GIT_COMMIT_TOKEN" \
|
||||||
|
"https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/labels"
|
@ -24,6 +24,8 @@
|
|||||||
|
|
||||||
_Breaking Change must also be notated in the commit that introduces it and in [Conventional Commit Format](https://www.conventionalcommits.org/en/v1.0.0/)._
|
_Breaking Change must also be notated in the commit that introduces it and in [Conventional Commit Format](https://www.conventionalcommits.org/en/v1.0.0/)._
|
||||||
|
|
||||||
|
- [ ] Release notes updated
|
||||||
|
|
||||||
- [ ] ~Documentation Documentation written
|
- [ ] ~Documentation Documentation written
|
||||||
|
|
||||||
_All features to be documented within the correct section(s). Administration, Development and/or User_
|
_All features to be documented within the correct section(s). Administration, Development and/or User_
|
||||||
|
849
CHANGELOG.md
849
CHANGELOG.md
@ -1,3 +1,56 @@
|
|||||||
|
## 1.0.0-b10 (2024-08-09)
|
||||||
|
|
||||||
|
## 1.0.0-b9 (2024-08-09)
|
||||||
|
|
||||||
|
## 1.0.0-b8 (2024-08-09)
|
||||||
|
|
||||||
|
## 1.0.0-b7 (2024-08-09)
|
||||||
|
|
||||||
|
## 1.0.0-b6 (2024-08-09)
|
||||||
|
|
||||||
|
## 1.0.0-b5 (2024-07-31)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **api**: Add device config groups to devices
|
||||||
|
- **api**: Ability to fetch configgroups from api along with config
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **api**: Ensure device groups is read only
|
||||||
|
|
||||||
|
## 1.0.0-b4 (2024-07-29)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **swagger**: remove `{format}` suffixed doc entries
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **api**: cleanup team post/get
|
||||||
|
- **api**: confirm HTTP method is allowed before permission check
|
||||||
|
- **api**: Ensure that organizations can't be created via the API
|
||||||
|
- **access**: Team model class inheritance order corrected
|
||||||
|
|
||||||
|
## 1.0.0-b3 (2024-07-21)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **itam**: Limit os version count to devices user has access to
|
||||||
|
|
||||||
|
## 1.0.0-b2 (2024-07-19)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **itam**: only show os version once
|
||||||
|
|
||||||
|
## 1.0.0-b1 (2024-07-19)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **itam**: ensure installed operating system count is limited to users organizations
|
||||||
|
- **itam**: ensure installed software count is limited to users organizations
|
||||||
|
|
||||||
## 1.0.0-a4 (2024-07-18)
|
## 1.0.0-a4 (2024-07-18)
|
||||||
|
|
||||||
### Feat
|
### Feat
|
||||||
@ -60,503 +113,405 @@
|
|||||||
|
|
||||||
## 0.7.0 (2024-07-14)
|
## 0.7.0 (2024-07-14)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **config_management**: [5ae487cd](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/5ae487cd3eac2f5273d3b2a9e7642e714bdbde68) - Don't allow a config group to assign itself as its parent [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#122](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/122) ]
|
- **core**: Filter every form field if associated with an organization to users organizations only
|
||||||
- **config_management**: [3aab7b57](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/3aab7b57e80b48e1f4671413034c1c71dfad4c66) - correct permission for deleting a host from config group [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **core**: add var `template_name` to common view template for all views that require it
|
||||||
- **config_management**: [931c9864](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/931c9864db8e14072a0a7e331d525aeedd19eb2a) - use parent group details to work out permissions when adding a host [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#120](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/120) ]
|
- **core**: add Display view to common forms abstract class
|
||||||
- **config_management**: [65bf9946](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/65bf994619949c4d42bfa92e06e8c63f67acabca) - use parent group details to work out permissions [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#121](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/121) ]
|
- **navigation**: always show every menu for super admin
|
||||||
- **itam**: [77ff580f](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/77ff580f19e41a430cfa7d3bf1ba3870d7993cf9) - Add missing permissions to software categories index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **core**: only display navigation menu item if use can view model
|
||||||
- **itam**: [423ff11d](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/423ff11d4c30670cb8c7832b452af78cf54a5fd3) - Add missing permissions to device types index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **django**: update 5.0.6 -> 5.0.7
|
||||||
- **itam**: [9e4b5185](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/9e4b5185b144ade67b98aeb6e909e1af39b62545) - Add missing permissions to device model index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **core**: add common forms abstract class
|
||||||
- **settings**: [020441c4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/020441c41aae4ccc3453becdf451918bc3a432f7) - Add missing permissions to app settings view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **core**: add common views abstract class
|
||||||
- **itam**: [d0a3b7b4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/d0a3b7b49dfa8c0468106652af723b824c7ecf89) - Add missing permissions to software index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- add postgreSQL database support
|
||||||
- **itam**: [960fa548](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/960fa5485d3198c1e4868957e6d57f3c8bd65cf8) - Add missing permissions to operating system index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **ui**: add config groups navigation icon
|
||||||
- **itam**: [26db4630](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/26db4630445ceff412a6d12f97f661e95c165a3b) - Add missing permissions to device index view [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **ui**: add some navigation icons
|
||||||
- **config_management**: [1193f1d8](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/1193f1d86d247e5df77dc44bae36a5534c0f0c88) - Add missing permissions to group views [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
- **itam**: update inventory status icon
|
||||||
- **navigation**: [ee8920a4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/ee8920a464017e2ec7ef714530a105197eaae75b) - always show settings menu entry [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: ensure device software pagination links keep interface on software tab
|
||||||
- **itam**: [a62a36ba](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/a62a36ba82252257646325679180c68632971c52) - cater for fields that are prefixed [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#112](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/112) ]
|
- **access**: enable non-organization django permission checks
|
||||||
- **itam**: [c00cf16b](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/c00cf16bc8ac85f5c5bf19d30cf78ae9a838d00f) - Ability to view software category [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **settings**: Add celery task results index and view page
|
||||||
- **itam**: [7784dfed](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7784dfede98f94bd1a5e4df5155130e91876fe67) - correct view permission [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **base**: Add background worker
|
||||||
- **access**: [03d350e3](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/03d350e302c443ff53fc71e32bc32f489af1409a) - When adding a new team to org ensure parent model is fetched [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: Update Serial Number from inventory if present and Serial Number not set
|
||||||
- **access**: [1d5c86f1](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/1d5c86f13b2df36e0562e1fe3b6aca7dfa04a7ec) - enable org manager to view orgs [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#105](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/105) ]
|
- **itam**: Update UUID from inventory if present and UUID not set
|
||||||
- **settings**: [9e336d36](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/9e336d368d51381701b358287853f9ceab61b49f) - restrict user visible organizations to ones they are part of [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#99](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/99) ]
|
|
||||||
- **access**: [937e9359](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/937e9359498da9388fd730c69e591679458c331e) - enable org manager to view orgs [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#105](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/105) ]
|
|
||||||
- **access**: [860eaa67](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/860eaa674937dc9ff1690615bafcddaab38d890d) - fetch object if method exists [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#105](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/105) ]
|
|
||||||
- **docs**: [aab94431](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/aab94431a9d3864ace91af70e29b5dc59b61fd6f) - update docs link to new path [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#103](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/103) ]
|
|
||||||
- **access**: [524a70ba](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/524a70ba184c0af1125636f5923492ba65765f1e) - correctly set team user parent model to team [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#109](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/109) ]
|
|
||||||
- **access**: [29c4b4a0](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/29c4b4a0caaa37866774235d56312f2b9ede8148) - fallback to django permissions if org permissions check is false [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#109](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/109) [#101](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/101) ]
|
|
||||||
- **access**: [f5ae01b0](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f5ae01b08d0ce91e4af86a042effff79db489d6a) - Correct logic so that org managers can see orgs they manage [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#100](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/100) ]
|
|
||||||
- **base**: [ee3dd68c](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/ee3dd68cfe78c71a4431e88f6d1f6429dd2af8c0) - add missing content_title to context [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) ]
|
|
||||||
- **access**: [25efa314](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/25efa31493f71eca5d553d46136d3a261a9d3612) - Enable Organization Manager to view organisations they are assigned to [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#100](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/100) ]
|
|
||||||
- **api**: [4a6ce353](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/4a6ce353325148f66e3216e61feee7ad96b45cbc) - correct logic for adding inventory UUID and serial number to device [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **ui**: [2d80f026](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/2d80f026341910eecd23560ef970323ac275b112) - navigation alignment and software icon [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **ui**: [abe1ce69](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/abe1ce69480de5c831d5183845987bc9a3264fc3) - display organization manager name instead of ID [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **access**: [86ed7318](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/86ed7318ecd43c15cfccdb344af4ea2ac05c8a87) - ensure name param exists before attempting to access [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **itam**: [90a01911](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/90a01911dacd698d0b7832a05e24eec6fe8310eb) - dont show none/nil for device fields containing no value [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **itam**: [de3ed3a8](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/de3ed3a881bd53e533b9b35f37ce17419c6d75f2) - show device model name instead of ID [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **api**: [f64be2ea](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f64be2ea33ebf0ae1ba735a7259caf880bcddad5) - Ensure if serial number from inventory is `null` that it's not used [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#78](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/78) ]
|
|
||||||
- **api**: [ef9c596e](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/ef9c596ec79decec268ffb700e62d5bc35e49019) - ensure checked uuid and serial number is used for updating [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **itam**: [67f20ecb](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/67f20ecb661b039092ad34b491c3a8a7296534db) - only remove device software when not found during inventory upload [ [!38](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/38) [#75](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/75) ]
|
|
||||||
- **itam**: [3bceb666](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/3bceb66600404919ac32498ffa5cbb4f24fcced4) - only update software version if different [ [!38](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/38) [#75](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/75) ]
|
|
||||||
- **itam**: [241ba47c](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/241ba47c80805dbd648392ef0b6b26793d3f55ff) - correct device software pagination [ [!36](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/36) [#67](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/67) ]
|
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- [367c4beb](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/367c4bebb67c24ffcc2ade19abfeac6089a1e702) - adjust views missing add/change form to now use forms [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#15](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/15) [#46](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/46) [#74](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/74) [#120](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/120) [#121](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/121) [#118](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/118) ]
|
- **config_management**: Don't allow a config group to assign itself as its parent
|
||||||
- [0276f945](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/0276f9454b3999ec147314327b25945a69213250) - add navigation menu expand arrows [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#21](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/21) ]
|
- **config_management**: correct permission for deleting a host from config group
|
||||||
- [7d172fb4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7d172fb4afa284e67231d3d24c7f1bdc533f922a) - migrate views to use new abstract model view classes [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#111](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/111) ]
|
- **config_management**: use parent group details to work out permissions when adding a host
|
||||||
- [f848d01b](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f848d01b347af5615613e8bfdb0d9d7324e1daec) - migrate forms to use new abstract model form class [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **config_management**: use parent group details to work out permissions
|
||||||
- **access**: [7cfede45](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7cfede45b89dd5d5ce5b2d2fa8e4ef0c64d31ab3) - Rename Team Button "new user" -> "Assign User" [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#110](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/110) ]
|
- **itam**: Add missing permissions to software categories index view
|
||||||
- **access**: [65de9371](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/65de93715d505d5c71b150175e31471b5a07bb8f) - model pk and name not required context for adding a device [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: Add missing permissions to device types index view
|
||||||
- [fea7ea31](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/fea7ea31198190bf115dc89595b00d7e034aa991) - rename field "model notes" -> "Notes" [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#102](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/102) [#104](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/104) ]
|
- **itam**: Add missing permissions to device model index view
|
||||||
- [f0bbd22c](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f0bbd22cf441cb3c3f5b01c8108a7a0fd8357938) - remove settings model [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **settings**: Add missing permissions to app settings view
|
||||||
- **ui**: [fb907283](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/fb907283b036454aa2afd41bbc658c8feb1a44d8) - increase indentation to sub-menu items [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: Add missing permissions to software index view
|
||||||
- **itam**: [c1a8ee65](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/c1a8ee65f2bc892c2ca8bfacc5f95094a0130b24) - rename old inventory status icon for use with security [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: Add missing permissions to operating system index view
|
||||||
- **api**: [7aeba347](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7aeba347875cbefb6d5eae112804ae6f0097d264) - migrate inventory processing to background worker [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
- **itam**: Add missing permissions to device index view
|
||||||
- **itam**: [f47b97e2](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f47b97e2a084e1acbfba733c910f3b8f4f764a36) - only perform actions on device inventory if DB matches inventory item [ [!38](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/38) [#75](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/75) ]
|
- **config_management**: Add missing permissions to group views
|
||||||
|
- **navigation**: always show settings menu entry
|
||||||
|
- **itam**: cater for fields that are prefixed
|
||||||
|
- **itam**: Ability to view software category
|
||||||
|
- **itam**: correct view permission
|
||||||
|
- **access**: When adding a new team to org ensure parent model is fetched
|
||||||
|
- **access**: enable org manager to view orgs
|
||||||
|
- **settings**: restrict user visible organizations to ones they are part of
|
||||||
|
- **access**: enable org manager to view orgs
|
||||||
|
- **access**: fetch object if method exists
|
||||||
|
- **docs**: update docs link to new path
|
||||||
|
- **access**: correctly set team user parent model to team
|
||||||
|
- **access**: fallback to django permissions if org permissions check is false
|
||||||
|
- **access**: Correct logic so that org managers can see orgs they manage
|
||||||
|
- **base**: add missing content_title to context
|
||||||
|
- **access**: Enable Organization Manager to view organisations they are assigned to
|
||||||
|
- **api**: correct logic for adding inventory UUID and serial number to device
|
||||||
|
- **ui**: navigation alignment and software icon
|
||||||
|
- **ui**: display organization manager name instead of ID
|
||||||
|
- **access**: ensure name param exists before attempting to access
|
||||||
|
- **itam**: dont show none/nil for device fields containing no value
|
||||||
|
- **itam**: show device model name instead of ID
|
||||||
|
- **api**: Ensure if serial number from inventory is `null` that it's not used
|
||||||
|
- **api**: ensure checked uuid and serial number is used for updating
|
||||||
|
- **itam**: only remove device software when not found during inventory upload
|
||||||
|
- **itam**: only update software version if different
|
||||||
|
- **itam**: correct device software pagination
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- [e25ec12c](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/e25ec12cb02f8f48853806d9cc97959d3e757115) - correct test report path [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- adjust views missing add/change form to now use forms
|
||||||
- [a235aa7e](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/a235aa7ec37a6dda69bc96ab854df41eacba255b) - add submodule update job [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- add navigation menu expand arrows
|
||||||
|
- migrate views to use new abstract model view classes
|
||||||
### Documentaton / Guides
|
- migrate forms to use new abstract model form class
|
||||||
|
- **access**: Rename Team Button "new user" -> "Assign User"
|
||||||
- **development**: [935e10dc](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/935e10dc24d10c2d99b52a185730d676b4978908) - add initial forms [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **access**: model pk and name not required context for adding a device
|
||||||
- **development**: [d4aaea4d](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/d4aaea4dbb250f23850d02d8c5cb9ecbc147a9da) - update views, models and index [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- rename field "model notes" -> "Notes"
|
||||||
- [329049e8](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/329049e81dd50ca01512f75323669c7953be2199) - roadmap update [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- remove settings model
|
||||||
- [c41c7ed1](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/c41c7ed1f09a7a13ac93043bee4e3f3ce0613245) - update mkdocs [ [!41](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/41) ]
|
- **ui**: increase indentation to sub-menu items
|
||||||
- [c9190e9a](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/c9190e9a7dd12725df323811816ea603315331e9) - Update index [ [!41](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/41) ]
|
- **itam**: rename old inventory status icon for use with security
|
||||||
- **centurion**: [0294f5ed](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/0294f5ed65868fadd9f27a8a9c22ca861418061b) - replace Django ITSM -> Centurion ERP [ [!41](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/41) ]
|
- **api**: migrate inventory processing to background worker
|
||||||
- [7329a65a](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7329a65ae7f30b6e89d0c284609aac2063c76ea6) - update roadmap [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
- **itam**: only perform actions on device inventory if DB matches inventory item
|
||||||
- [9a529a64](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/9a529a64e2e5deaeebec872e3cbe91a6eccebcbe) - add bug count badge [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- [9b79c9d7](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/9b79c9d7ffaacc6ecd9a8d379bc26a303d2951c4) - update readme [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- [9dd2f6a3](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/9dd2f6a341c4e4c78de4e80769552914a4b23bc9) - fix mkdocs navigation [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- [23c640a4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/23c640a4602948d1b6ec0d3a88473aa26d359997) - add roadmap [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **api**: [27eb54cc](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/27eb54cc3729bcf3ac4b74c84b2def8086685b34) - update swagger docs with inventory changes [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
|
||||||
- **administration**: [a8e2c687](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/a8e2c687b11186f922abd57bb46e98de9f9bf985) - notate rabbitMQ setup [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **core**: [4c42f776](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/4c42f776924dc2f8c52c237b9facd35f10e85e28) - Filter every form field if associated with an organization to users organizations only [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#119](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/119) ]
|
|
||||||
- **core**: [1cf15f73](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/1cf15f7339a50d9aa1a7940feb84a3128a573ea6) - add var `template_name` to common view template for all views that require it [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **core**: [c057ffdc](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/c057ffdc9c57b399206579f13c51bf4d28120e88) - add Display view to common forms abstract class [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **navigation**: [6837c383](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/6837c383034b962973248cbdd6ae6a5a8a758a41) - always show every menu for super admin [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **core**: [45cc3428](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/45cc34284a7b89aa3d61e61cfa3a12c73165127b) - only display navigation menu item if use can view model [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#114](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/114) ]
|
|
||||||
- **django**: [f2640df0](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/f2640df0d3737a5fc7a416cd692c37690786e7d1) - update 5.0.6 -> 5.0.7 [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **core**: [44f20b28](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/44f20b28be8c54978b53f00fac9664a5c403ed50) - add common forms abstract class [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **core**: [2e22a484](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/2e22a484a0f4416f41dffb49c68db703c177fe0d) - add common views abstract class [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- [332810ff](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/332810ffd6cf6024a0a917024eafed21ec8d2139) - add postgreSQL database support [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **ui**: [cb66b930](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/cb66b9303aa752ee131e3fd6edb9d670e37c3b0e) - add config groups navigation icon [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **ui**: [a2a8e120](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/a2a8e1204649a27481862e85f8292a229e85fa97) - add some navigation icons [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#21](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/21) [#22](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/22) [#23](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/23) ]
|
|
||||||
- **itam**: [6a14f78b](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/6a14f78bf7fcda8509d1b0c6b477711b4da59180) - update inventory status icon [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) ]
|
|
||||||
- **itam**: [656807e4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/656807e410c4dcc0d049cc61ce67c07114313925) - ensure device software pagination links keep interface on software tab [ [!35](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/35) [#81](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/81) ]
|
|
||||||
- **access**: [b42bb3a3](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/b42bb3a30e613ed9701c95c6ad10fa1890d17dac) - enable non-organization django permission checks [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
|
||||||
- **settings**: [090c4a54](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/090c4a542544cb61356bc00ce2258463d5647f67) - Add celery task results index and view page [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
|
||||||
- **base**: [87a1f2aa](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/87a1f2aa20fdcbbff1863a751a0c5e7d91b269bb) - Add background worker [ [!39](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/39) [#76](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/76) ]
|
|
||||||
- **itam**: [7b4ed7b1](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/7b4ed7b13537de064680f3c19a703b37c9d2bb83) - Update Serial Number from inventory if present and Serial Number not set [ [!37](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/37) ]
|
|
||||||
- **itam**: [b801c9a4](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/commit/b801c9a49e70ca5640c65bafdd05c29daed40798) - Update UUID from inventory if present and UUID not set [ [!37](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests/37) [#66](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/66) ]
|
|
||||||
|
|
||||||
## 0.6.0 (2024-06-30)
|
## 0.6.0 (2024-06-30)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **user_token**: [6cfcf158](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6cfcf1580c669c046e4dd6d547b99c8b9814a078) - conduct user check on token view access [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
- **api**: API token authentication
|
||||||
- **itam**: [f6866912](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f6866912329fd2ea5f1bce6014db53605e1fee55) - use same form for edit and add [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#65](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/65) ]
|
- **api**: abilty for user to create/delete api token
|
||||||
- **itam**: [802f2c41](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/802f2c410da1d4810005991f6da27963621adc25) - dont add field inventorydate if adding new item [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) ]
|
- **api**: create token model
|
||||||
- **api**: [4e428560](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4e428560274fc2a82d927338c66b4641a1c93986) - inventory upload requires sanitization [ [!33](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/33) ]
|
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- **settings**: [66b8d936](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/66b8d9362d815e7f54ae402e4689c0a38f65c14d) - use seperate change/view views [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) ]
|
- **user_token**: conduct user check on token view access
|
||||||
- **settings**: [37d277e1](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/37d277e1493ab708b8861fa8d0de3191da24d2f2) - use form for user settings [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) ]
|
- **itam**: use same form for edit and add
|
||||||
- **tests**: [58b134ae](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/58b134ae30866b2ca207cef2cf17158d54517044) - move unit tests to unit test sub-directory [ [!33](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/33) [#15](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/15) ]
|
- **itam**: dont add field inventorydate if adding new item
|
||||||
|
- **api**: inventory upload requires sanitization
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- **git_sync**: [a0874356](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a0874356fd59978864664d4c25217dca527ee667) - sync on push ro feature branch 14-feat-project-management [ [!29](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/29) [!31](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/31) ]
|
- **settings**: use seperate change/view views
|
||||||
- [5d8f5e3a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5d8f5e3a518bea520a4b6159623c60a3eaade051) - remove dockerhub publish on bot push [ [!29](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/29) ]
|
- **settings**: use form for user settings
|
||||||
|
- **tests**: move unit tests to unit test sub-directory
|
||||||
### Documentaton / Guides
|
|
||||||
|
|
||||||
- [4d3a2385](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4d3a2385831c4db99bb9f3e70411b3d2d4d624f0) - Add user settings documentation [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
|
||||||
- **api**: [47d6a3be](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/47d6a3beffa7bb3d5b822c54440fe8b31ad18e02) - API Token authentication [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **api**: [11179143](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/111791438a45a8eb0cf4c175e4a1439cd56c84da) - API token authentication [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
|
||||||
- **api**: [ce2c6f3b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ce2c6f3b135ec9110682db3b77c80d6dde26a3c2) - abilty for user to create/delete api token [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
|
||||||
- **api**: [e655f22f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e655f22fac4d7de2ef42f16f33c8427528b63481) - create token model [ [!34](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/34) [#63](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/63) ]
|
|
||||||
|
|
||||||
## 0.5.0 (2024-06-17)
|
## 0.5.0 (2024-06-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **itam**: [78216116](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/78216116dfdfca8542daa95e530bcb8855ec8cb6) - remove requirement that user needs change device to add notes [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) [#52](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/52) ]
|
- **access**: add notes field to organization
|
||||||
- **core**: [54c34a95](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/54c34a95f59e32ca393c71ca2e579d9ee69f5eff) - dont attempt to access parent_object if 'None' during history save [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
- **access**: add organization manger
|
||||||
- **config_management**: [3b3ee9fc](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3b3ee9fc3ddf1327207309cd860dc4ee9e2bf013) - Add missing parent item getter to model [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
- **config_management**: Use breadcrumbs for child group name display
|
||||||
- **core**: [0a1aba7c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0a1aba7ca8e5c639fa56bede846c980ea0a5fb4e) - overridden save within SaveHistory to use default attributes [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
- **config_management**: ability to add host to global group
|
||||||
- **access**: [eb8dca98](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/eb8dca980684cf6b7a1851a86c3eec71e71d07a3) - overridden save to use default attributes [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
- **itam**: add a status of "bad" for devices
|
||||||
- **core**: [7239f572](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7239f572a35f576735b0a77832caebbe7a9df227) - on object delete remove history entries [ [!25](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/25) [#54](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/54) ]
|
- **itam**: paginate device software tab
|
||||||
- **api**: [505f4cfd](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/505f4cfdd9d6738d0f634508983412a1b736d3e3) - ensure proper permission checking [ [!24](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/24) [#55](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/55) ]
|
- **itam**: status of device visible on device index page
|
||||||
- [dc4968ee](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dc4968ee7bc691b1537a7cc04a1da8b896f1c231) - dont throw an exception during settings load for an item django already checks [ [!23](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/23) ]
|
- **core**: add skeleton http browser
|
||||||
- **core**: [8d6826f7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8d6826f7c0dd12e0f179d76dfac4e45215e7a4a6) - Add overrides for delete so delete history saved for items with parent model [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#53](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/53) ]
|
- **core**: Add a notes field to manufacturer/ publisher
|
||||||
- **config_management**: [23c43ed8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/23c43ed8dc67d75301a9f27cbb901d596b0074d7) - correct delete success url [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#43](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/43) ]
|
- **itam**: Add a notes field to software category
|
||||||
- **base**: [07e93243](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/07e93243a02602b4e3881e1aa4e13b8e6815720f) - remove social auth from nav menu [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
- **itam**: Add a notes field to device types
|
||||||
- **access**: [579e44f8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/579e44f8344120b76f8c1f7580428da1e20a9419) - add a team user permissions to use team organization [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#51](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/51) ]
|
- **itam**: Add a notes field to device models
|
||||||
|
- **itam**: Add a notes field to software
|
||||||
|
- **itam**: Add a notes field to operating system
|
||||||
|
- **itam**: Add a notes field to devices
|
||||||
|
- **access**: Add a notes field to teams
|
||||||
|
- **base**: Add a notes field to `TenancyObjetcs` class
|
||||||
|
- **settings**: add docs icon to application settings page
|
||||||
|
- **itam**: add docs icon to software page
|
||||||
|
- **itam**: add docs icon to operating system page
|
||||||
|
- **itam**: add docs icon to devices page
|
||||||
|
- **config_management**: add docs icon to config groups page
|
||||||
|
- **base**: add dynamic docs icon
|
||||||
|
- **models**: add property parent_object to models that have a parent
|
||||||
|
- **config_management**: add config group software to group history
|
||||||
|
- **itam**: render group software config within device rendered config
|
||||||
|
- **config_management**: assign software action to config group
|
||||||
|
- add configuration value 'SESSION_COOKIE_AGE'
|
||||||
|
- remove development SECRET_KEY and enforce checking for user configured one
|
||||||
|
- **base**: build CSRF trusted origins from configuration
|
||||||
|
- **base**: Enforceable SSO ONLY
|
||||||
|
- **base**: configurable SSO
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- **access**: [991ddc3d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/991ddc3d7f67f40e3d210025b6c38726e80ba460) - relocate permission check to own function [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) [#39](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/39) ]
|
- **itam**: remove requirement that user needs change device to add notes
|
||||||
- **itam**: [e517c5fd](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e517c5fd761e9f84dc589468da96b26979f6b33f) - move device os tab to details tab [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) [#22](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/22) ]
|
- **core**: dont attempt to access parent_object if 'None' during history save
|
||||||
- **itam**: [4a104095](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4a10409551e459d6a29a1c844d848759e05a25ad) - add device change form and adjust view to be non-form [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
- **config_management**: Add missing parent item getter to model
|
||||||
- **itam**: [904234c5](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/904234c5818d893d63fc152e5f7b86d37226e122) - migrate device vie to use manual entered fields in two columns [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) [#22](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/22) ]
|
- **core**: overridden save within SaveHistory to use default attributes
|
||||||
- **access**: [4016d4c2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4016d4c20044053da7a9165723d0706fe8dabb7c) - migrate team users view to use forms [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
- **access**: overridden save to use default attributes
|
||||||
- **access**: [f36662ca](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f36662ca82b697ff2e6db286214ae1cac296d55b) - migrate teams view to use forms [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
- **core**: on object delete remove history entries
|
||||||
- **access**: [3e340a47](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3e340a47b844e955d9ba9d51bcb2fabbcfac6287) - migrate organization view to use form [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
- **api**: ensure proper permission checking
|
||||||
- **base**: [3fb27063](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3fb270632141d1b70a38e1edafec1e43dca9c18b) - cleanup form and prettyfy [ [!23](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/23) [#24](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/24) ]
|
- dont throw an exception during settings load for an item django already checks
|
||||||
- **config_management**: [ae81ee88](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ae81ee886334795d29298bbfdeb561f689b1409e) - relocate groups views to own directory [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) ]
|
- **core**: Add overrides for delete so delete history saved for items with parent model
|
||||||
- [3b743a84](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3b743a847c0b610de348718e392d417dd008e7b5) - login to use base template [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) ]
|
- **config_management**: correct delete success url
|
||||||
- [95a08b2d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/95a08b2d2ca5915eb62abbcfe2acf45e85b578d3) - adjust template block names [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) ]
|
- **base**: remove social auth from nav menu
|
||||||
|
- **access**: add a team user permissions to use team organization
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- [fa28fd43](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fa28fd436ef03b66c270ad460cadfd877434fd0d) - dont rebuild on dev on git tag [ [!19](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/19) ]
|
- **access**: relocate permission check to own function
|
||||||
|
- **itam**: move device os tab to details tab
|
||||||
### Documentaton / Guides
|
- **itam**: add device change form and adjust view to be non-form
|
||||||
|
- **itam**: migrate device vie to use manual entered fields in two columns
|
||||||
- [a9485687](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a94856879e740a261354f2fce8b1f213c5afcf86) - correct testing link [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) ]
|
- **access**: migrate team users view to use forms
|
||||||
- [108398da](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/108398da4b2cd9280b65c6fef3bdc6cc0e9758e3) - rejig [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) ]
|
- **access**: migrate teams view to use forms
|
||||||
- **access**: [8abbf2ff](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8abbf2ff9e33e1607be11be2c4757038334c0d11) - correct doc warnings [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) ]
|
- **access**: migrate organization view to use form
|
||||||
- **access**: [27b62d10](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/27b62d10180e0a299554fc72d2bd0faacf2e3b75) - add link to docs on team page [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) [#39](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/39) ]
|
- **base**: cleanup form and prettyfy
|
||||||
- **access**: [aef276b7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/aef276b76c4636290d76735e7a390178e3bef12b) - add link to docs on organization page [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) [#39](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/39) ]
|
- **config_management**: relocate groups views to own directory
|
||||||
- [afb5a709](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/afb5a709d7f19a042dcf451d227e29c26f3e04dc) - add badges to index [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
- login to use base template
|
||||||
- [ddead8eb](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ddead8eb56a06570926bc9aeeef877162a7d06fd) - restructure to sections administration, user and devlopment [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) [!62](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/62) ]
|
- adjust template block names
|
||||||
- **development**: [f861295b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f861295b1c48ea843cdaeef107e3652468328814) - add device model to api docs [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
|
||||||
- [dbcb2825](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dbcb2825487cd425fac6e60a3aeb9f02d18de96c) - docstrings show category headings [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) ]
|
|
||||||
- **development**: [5eec41fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5eec41fe57f5cd26943cddae53623a74ad1ddc58) - Add test case documentation [ [!27](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/27) [#15](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/15) [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) [#57](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/57) [!83](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/83) ]
|
|
||||||
- **api**: [2eb50311](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2eb50311b485094304f99cdd7d5fc1513896fabd) - document the inventory endpoint [ [!24](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/24) [#55](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/55) ]
|
|
||||||
- **api**: [36fa364d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/36fa364d04473c7a9de71890fed4eebf843954ed) - notate inventory permission [ [!24](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/24) [#55](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/55) ]
|
|
||||||
- [05bb6f8a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/05bb6f8a516edf9b61f6a3d3bdbb902b675b77b9) - update contributing with further test info [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) ]
|
|
||||||
- **config_management**: [e62a570b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e62a570be3ca429e946b0d15b4865c9e71e9d4d1) - notate software group actions [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#43](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/43) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **access**: [84866185](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/848661856a44de31ee2116c1b5c4445fe6daf654) - add notes field to organization [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) [#39](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/39) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **access**: [14acea31](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/14acea31f286541ef75358ee37062ee042ea8ca8) - add organization manger [ [!28](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/28) [#39](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/39) ]
|
|
||||||
- **config_management**: [8af59754](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8af5975428bb9d3aa18fe2126be702d894d7682e) - Use breadcrumbs for child group name display [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **config_management**: [ac707157](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ac70715752eeeeb9f01526989e145a79b3b3a92f) - ability to add host to global group [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [8ccdf9a8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8ccdf9a8f3815ae51a5005024021709b56601627) - add a status of "bad" for devices [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [1200a879](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/1200a879136c52bcf63b8629a1ab8ca1d7edc0e5) - paginate device software tab [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [e8cb685d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e8cb685da1bcfdec98da06fba77d076b0f9c096b) - status of device visible on device index page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **core**: [8b47d956](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8b47d95614d81685edd277c300890e58fa7153ff) - add skeleton http browser [ [!26](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/26) [#58](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/58) ]
|
|
||||||
- **core**: [c570fb11](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c570fb114f70a2a1785fffe3ba627eee86c0c8d5) - Add a notes field to manufacturer/ publisher [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [ea1727f2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ea1727f2c796bd305b0e01c87f1db16c217b1b1e) - Add a notes field to software category [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [36d7e545](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/36d7e54547bd5afc1270c02f6160b95eda5cc557) - Add a notes field to device types [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [a02fda84](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a02fda84137810d840168d214af471dac451887f) - Add a notes field to device models [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [b5bc76b0](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b5bc76b0ab79dcec38d5c91a95c1a737b89c9f8b) - Add a notes field to software [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [36c13e18](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/36c13e18c7f8f6e3354a2fb79c6a2240fdec431f) - Add a notes field to operating system [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **itam**: [6969b611](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6969b611644f025426cdb1f77c92f7a79d361859) - Add a notes field to devices [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **access**: [85bf1b99](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/85bf1b9907788f1e190c00827c096b00e25a8048) - Add a notes field to teams [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **base**: [ca8e0c07](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ca8e0c07ea6aff681e03ed966412403ba94c2d7c) - Add a notes field to `TenancyObjetcs` class [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) [#13](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/13) ]
|
|
||||||
- **settings**: [da93425c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/da93425c0b9eacb9d46233173c1cb99b79487103) - add docs icon to application settings page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [8a9899cf](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8a9899cf66bee3ac1f752ca38e4360aafa92be51) - add docs icon to software page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [38db558b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/38db558be2e330c7f9ebf6a1c70c70dc59ee1bd0) - add docs icon to operating system page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **itam**: [67b204e4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/67b204e40cfbb1e078dac6aecc9835b08132c13c) - add docs icon to devices page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **config_management**: [456fed80](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/456fed80a9fd6adc09cf8cb7e1be6ea0a4492c5e) - add docs icon to config groups page [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **base**: [87282ce4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/87282ce41cca9a750c7bc99ec8c1a78aa2b03dd7) - add dynamic docs icon [ [!21](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/21) ]
|
|
||||||
- **models**: [fe0696fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fe0696fee6211236ac7f69e77dd0ec9c1516b25c) - add property parent_object to models that have a parent [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) ]
|
|
||||||
- **config_management**: [1069211d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/1069211d1bde9362fdb6fd2f2f5d080bffd81a6e) - add config group software to group history [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#43](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/43) ]
|
|
||||||
- **itam**: [460eff1f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/460eff1f71af6d75958c0eeb3dacb9b0169c6ca9) - render group software config within device rendered config [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#43](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/43) ]
|
|
||||||
- **config_management**: [0c382a73](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0c382a73e5e0462b4bd598734159626f14f3a96e) - assign software action to config group [ [!22](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/22) [#43](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/43) ]
|
|
||||||
- [8b887575](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8b887575c921cdd6f5656e7e37ca8dab747081bf) - add configuration value 'SESSION_COOKIE_AGE' [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) ]
|
|
||||||
- [d0e8e9a6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d0e8e9a674c24aff675ac73ba34dd20acca26b0c) - remove development SECRET_KEY and enforce checking for user configured one [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) ]
|
|
||||||
- **base**: [d8d75c7d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d8d75c7db09f7532665408299c9bf878e079f99a) - build CSRF trusted origins from configuration [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) ]
|
|
||||||
- **base**: [b38984fc](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b38984fcb95ab121a610710b9df049ee7caa17cd) - Enforceable SSO ONLY [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) [#1](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/1) ]
|
|
||||||
- **base**: [3040d4af](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3040d4afe74c65ebf656329ea3cfe13e59409a61) - configurable SSO [ [!20](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/20) [#1](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/1) ]
|
|
||||||
|
|
||||||
## 0.4.0 (2024-06-05)
|
## 0.4.0 (2024-06-05)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **itam**: [dd0c13a6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dd0c13a65f4cc55e2047f1b654dd228147eac183) - ensure device type saves history [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
- **database**: add mysql support
|
||||||
- **core**: [4cafa34d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4cafa34d69332995307faf29eff42efd81e569d6) - correct history view permissions [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) [#48](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/48) [#15](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/15) ]
|
- **api**: move invneotry api endpoint to '/api/device/inventory'
|
||||||
- **config_management**: [2c1bbbfc](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2c1bbbfc15babdc22d67285dae1c18a4b6f3cc96) - set config dict keys to be valid ansible variables [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) [#47](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/47) ]
|
- **core**: support more history types
|
||||||
- **itam**: [dd30a57a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dd30a57a9db7f5d6aa318651d9e252dae7f73b58) - correct logic for device add dynamic success url [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
- **core**: function to fetch history entry item
|
||||||
- **itam**: [18e84db6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/18e84db63c992c142f31f44fcc650561a16045fe) - correct config group link for device [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
- **config_management**: Add button to groups ui for adding child group
|
||||||
- **config_management**: [c9098f5d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c9098f5d2fe1817d7d33b7ffd30aeffa4077cdd2) - correct model permissions [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
- **access**: throw error if no organization added
|
||||||
- **config_management**: [d422f2fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d422f2feee4a5013ced153c43e0858098890d90b) - add config management to navigation [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
- **itam**: add delete button to config group within ui
|
||||||
- **ui**: [8061b7c8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8061b7c8e29b0f1ad12969a3d4e6a3e27cd85b2d) - remove api entries from navigation [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) ]
|
- **itam**: Config groups rendered configuration now part of devices rendered configuration
|
||||||
- **api**: [f41282d0](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f41282d08b6a417a12d22268a67b27425bed2361) - check for org must by by type None [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: Ability to delete a host from a config group
|
||||||
- **api**: [8dfb996b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8dfb996b24c26f3697a8d3c787faab4f190953eb) - correct software permissions [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: Ability to add a host to a config group
|
||||||
- **api**: [95dc9794](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/95dc979419c7cb0f6bfeff71169201149c9341fb) - corrct device permissions [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: ensure config doesn't use reserved config keys
|
||||||
- **api**: [09cc1db6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/09cc1db665af30c32d043644806f65e56f80c510) - permissions for teams [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: Config groups rendered config
|
||||||
- **api**: [e7c535c4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e7c535c48d73f7f3dbde6a0c191afb134ba2dd72) - correct reverse url lookup to use NS API [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: add configuration groups
|
||||||
- **api**: [e9cd111a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e9cd111af6299dee24b7c917726c54f7e7be8fe2) - permissions for organization [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **api**: add swagger ui for documentation
|
||||||
|
- **api**: filter software to users organizations
|
||||||
|
- **api**: filter devices to users organizations
|
||||||
|
- **api**: add org team view page
|
||||||
|
- **api**: configure team permissions
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- **access**: [6650434c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6650434c63a7fc620f98ed79b32fe4bbd52b1ada) - cache object so it doesnt have to be called multiple times [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
- **itam**: ensure device type saves history
|
||||||
- **config_management**: [58738971](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5873897184e906ae1fd3419a018441de78c5741d) - move groups to nav menu [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
- **core**: correct history view permissions
|
||||||
- **api**: [e257c114](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e257c1148808d6159bd6c8396a22168aa88c3b2f) - migrate devices and software to viewsets [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **config_management**: set config dict keys to be valid ansible variables
|
||||||
- **api**: [33b1a6c9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/33b1a6c91dc6d7f47738b96f7ce08b616e0749bb) - move permission check to mixin [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **itam**: correct logic for device add dynamic success url
|
||||||
- **access**: [5f3b48ea](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5f3b48ea982588e39137a3e695a2bbe65fd4c0a2) - add team option to org permission check [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) ]
|
- **itam**: correct config group link for device
|
||||||
|
- **config_management**: correct model permissions
|
||||||
|
- **config_management**: add config management to navigation
|
||||||
|
- **ui**: remove api entries from navigation
|
||||||
|
- **api**: check for org must by by type None
|
||||||
|
- **api**: correct software permissions
|
||||||
|
- **api**: corrct device permissions
|
||||||
|
- **api**: permissions for teams
|
||||||
|
- **api**: correct reverse url lookup to use NS API
|
||||||
|
- **api**: permissions for organization
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- [8e338c7c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8e338c7ca02057728089a8dabceae4348d3cb04a) - add pytest coverage report as environment [ [!15](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/15) [#37](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/37) ]
|
- **access**: cache object so it doesnt have to be called multiple times
|
||||||
- [9b811ede](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9b811ede266631a297bf84851b68f8b11a5d9f39) - run container build/publish on git tag [ [!15](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/15) ]
|
- **config_management**: move groups to nav menu
|
||||||
|
- **api**: migrate devices and software to viewsets
|
||||||
### Documentaton / Guides
|
- **api**: move permission check to mixin
|
||||||
|
- **access**: add team option to org permission check
|
||||||
- **config_management**: [0a17329a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0a17329a710e7f94ea3054857975467236130d1c) - notate future feature [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- [0d18e974](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0d18e974dda10490f0b2b95f416fd8af8351a58a) - correct liniting errors [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) ]
|
|
||||||
- **config_management**: [62e605d4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/62e605d4172c114d9d14a6aebf2bc122cee21866) - document module [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **api**: [fbdbede4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fbdbede4295005ab861b1ef3c0fe552c516b8738) - add team/org paths [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) [#41](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/41) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **database**: [adeffff4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/adeffff42c666243ce7e3b84ca2de3140bb350ca) - add mysql support [ [!19](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/19) [#16](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/16) ]
|
|
||||||
- **api**: [c0173d6f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c0173d6feb22e1dae42d596c8e916d3083e63c4d) - move invneotry api endpoint to '/api/device/inventory' [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
|
||||||
- **core**: [eb6ae13c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/eb6ae13c58d45240c0ad99fcde2bc1c3fbaef035) - support more history types [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) ]
|
|
||||||
- **core**: [46bdd488](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/46bdd488ecedde9aeac97947caf96a5efb8c437f) - function to fetch history entry item [ [!18](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/18) [#48](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/48) [#15](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/15) ]
|
|
||||||
- **config_management**: [55f0db22](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/55f0db2217e247d7f76edd1c2e81bfd9b7570698) - Add button to groups ui for adding child group [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **access**: [7fe12603](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7fe12603080d649bedb5d29f7084083271c9c982) - throw error if no organization added [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) ]
|
|
||||||
- **itam**: [df27a7df](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/df27a7dfd365faed6ee1194433e0d8da9499600b) - add delete button to config group within ui [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **itam**: [5cb155e0](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5cb155e01f72680c8249690be885f386679d458a) - Config groups rendered configuration now part of devices rendered configuration [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **config_management**: [39bfbd25](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/39bfbd25cbc2f936f54600d508cfd8c67a4e023b) - Ability to delete a host from a config group [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **config_management**: [fff51e38](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fff51e38d2503bf4741b3734bfffad6d537fd862) - Ability to add a host to a config group [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **config_management**: [746b7ac7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/746b7ac747fbb39657912225135dc1d4d4178c8c) - ensure config doesn't use reserved config keys [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **config_management**: [a7d195df](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a7d195dfcbd38d14e04b1f45faeba09baca21696) - Config groups rendered config [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **config_management**: [fdeae217](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fdeae217fa8883031b67df12c1f0f8b06ff92bbd) - add configuration groups [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#42](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/42) ]
|
|
||||||
- **api**: [3f68d67b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3f68d67ba581e11cfe8ec88d2a1cdb7c6ba63e46) - add swagger ui for documentation [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) ]
|
|
||||||
- **api**: [4151e0af](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4151e0afdc6cbc9a253f41441ab0074fe947db01) - filter software to users organizations [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#45](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/45) ]
|
|
||||||
- **api**: [89a5e0f4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/89a5e0f4cc1336e042f242dfeef9a88c37b1d9f4) - filter devices to users organizations [ [!17](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/17) [#45](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/45) ]
|
|
||||||
- **api**: [3fef74e7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3fef74e7000bcd7e90a15d40e68f667c4a882114) - add org team view page [ [!16](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/16) [#41](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/41) ]
|
|
||||||
- **api**: [c0a09d5d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c0a09d5d505dedc5562be08844ccd3e7fc5b589a) - configure team permissions [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) [#36](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/36) ]
|
|
||||||
|
|
||||||
## 0.3.0 (2024-05-29)
|
## 0.3.0 (2024-05-29)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **settings**: [d379205b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d379205bffcc808031e8227d08220ef5d6c4e130) - Add correct permissions for team user delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **access**: during organization permission check, check to ensure user is logged on
|
||||||
- **settings**: [ebf4cb7a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ebf4cb7a5daf6fcf2f39f912203ac9ed31d7fca6) - Add correct permissions for team user view/change [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **history**: always create an entry even if user=none
|
||||||
- **settings**: [b5669c83](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b5669c83869b38463f7c99008eb9e2b29b59faf2) - Add correct permissions for team view/change [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: device uuid must be unique
|
||||||
- **settings**: [58e688e0](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/58e688e0a5f44a63d1526b1a73f6ce63d67d3e07) - Add correct permissions for team add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: device serial number must be unique
|
||||||
- **settings**: [e3c2f712](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e3c2f712c19bd1040c311891bd766311e302be6f) - Add correct permissions for team delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **setting**: Enable super admin to set ALL manufacturer/publishers as global
|
||||||
- **access**: [0abcb462](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0abcb4628e5c5fac3d7997b457df7589772b929f) - correct back link within team view [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **setting**: Enable super admin to set ALL device types as global
|
||||||
- **access**: [b9a2d2ac](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b9a2d2ac59d8e31c99a268375b51d866186dc8bf) - correct url name to be within naming conventions [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **setting**: Enable super admin to set ALL device models as global
|
||||||
- **settings**: [8bfc952f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8bfc952f2eaac67bb1c40a40fdfd8046b8580eed) - Add correct permissions for manufacturer / publisher delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **setting**: Enable super admin to set ALL software categories as global
|
||||||
- **settings**: [6e6bd107](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6e6bd1070e5c0b63f8b97c6617098b21823f609c) - Add correct permissions for manufacturer / publisher add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **UI**: show build details with page footer
|
||||||
- **settings**: [42fd648e](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/42fd648e4c6817af88248343312a1232bbfa22d3) - Add correct permissions for manufacturer / publisher view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **software**: Add output to stdout to show what is and has occurred
|
||||||
- **settings**: [9893e5f9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9893e5f95270ebc3476a5c7c070080399304afab) - Add correct permissions for software category delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **base**: Add delete icon to content header
|
||||||
- **settings**: [e35a2300](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e35a2300e261586be5aa209e5cc70ad190d8d00c) - Add correct permissions for software category add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Populate initial organization value from user default organization for software category creation
|
||||||
- **settings**: [0aa78a4c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0aa78a4c514faaddeb7501c1824ccdedc896c39c) - Add correct permissions for software category view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Populate initial organization value from user default organization for device type creation
|
||||||
- **settings**: [84d895c2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/84d895c214c8109b70b3bb764c26bcc488e0a85d) - Add correct permissions for device type delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Populate initial organization value from user default organization for device model creation
|
||||||
- **settings**: [cba28108](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/cba28108e04f3e9007f904c8038fa07edbf5d0ea) - Add correct permissions for device type add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **api**: Populate initial organization value from user default organization inventory
|
||||||
- **settings**: [18339547](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/18339547ba8450d7ba25872085a7efda39049a87) - Add correct permissions for device type view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Populate initial organization value from user default organization for Software creation
|
||||||
- **settings**: [d2e9e107](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d2e9e1070e72e0aaf9dacb2cfff5d4d5c0bfb679) - Add correct permissions for device model delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Populate initial organization value from user default organization for operating system creation
|
||||||
- **settings**: [6880c5e9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6880c5e90b8dbd8969b00b6571bb38f004f2db13) - Add correct permissions for device model add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **device**: Populate initial organization value from user default organization
|
||||||
- **settings**: [608a3838](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/608a38384db6415162d155b951abad743e03a10d) - Add correct permissions for device model view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- Add management command software
|
||||||
- **access**: [cb7987f8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/cb7987f841626687c8ec5b1ad17df3fcf2698257) - Add correct permissions for organization view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **setting**: Enable super admin to set ALL software as global
|
||||||
- **access**: [98885a32](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/98885a32e71463403f1bb9c535cb6cab39d09733) - use established view naming [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **user**: Add user settings panel
|
||||||
- **itam**: [6b37c952](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6b37c952f82367e5178ed926757e47c07436ebd5) - Add correct permissions for operating system delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Add publisher to software
|
||||||
- **itam**: [d81d1ba3](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d81d1ba32a51a592193f013b0a2eb45178e9fa49) - Add correct permissions for operating system add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Add publisher to operating system
|
||||||
- **itam**: [01c6cd4b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/01c6cd4bdf3a167179be4a7e07ed59751ccf44ed) - Add correct permissions for operating system view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Add device model
|
||||||
- **itam**: [88058234](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/880582340561060a8466c619b191d01cff261f65) - Add correct permissions for software delete [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **core**: Add manufacturers
|
||||||
- **itam**: [7dd2634f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7dd2634facf6708b5aef5c22413b2fb7f5b5da44) - Add correct permissions for software add [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **settings**: add dummy model for permissions
|
||||||
- **itam**: [b1cfb9fa](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b1cfb9fa59d009a0dfba6a64184264166ace5a11) - for non-admin user use correct order by fields for software view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **settings**: new module for whole of application settings/globals
|
||||||
- **itam**: [550e6f40](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/550e6f40801071b8c5222e809d9e922de0cb0c74) - Add correct permissions for software view/update [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **access**: Save changes to history for organization and teams
|
||||||
- **itam**: [94116fa1](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/94116fa173c8ed05d84d84aa09467d10fe02cd4c) - ensure permission_required parameter for view is a list [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **software**: Save changes to history
|
||||||
- **core**: [0e726684](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0e7266845402d07d0cd289f268ae22e4a977362a) - dont save history when no user information available [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **operating_system**: Save changes to history
|
||||||
- **access**: [37ceffcb](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/37ceffcb3bd196557d3fe0cc90b7c6722113e092) - during organization permission check, check the entire list of permissions [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **device**: Save changes to history
|
||||||
- **core**: [c656f5bc](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c656f5bce597fc333a6549a2159b847a7338de29) - dont save history for anonymous user [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **core**: history model for saving model history
|
||||||
- **access**: [6cb69c62](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6cb69c627ff54eb1b5bfa11da2b60d4bb0b45b19) - during permission check use post request params for an add action [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Ability to add notes to software
|
||||||
- **user**: [80c3af32](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/80c3af32d533995679854d7a20984c8dd4904fd0) - on new-user signal create settings row if not exist [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Ability to add notes to operating systems
|
||||||
- **itam**: [9d6bd6db](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9d6bd6db83c56b8904d86829ef1134d689c5fb3e) - ensure only user with change permission can change a device [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **itam**: Ability to add notes on devices
|
||||||
- **user**: [2750750a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2750750a0c3f384ab384d409d90f00afc44cc619) - if user settings row doesn't exist on access create [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **core**: notes model added to core
|
||||||
- **access**: [664ad0ec](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/664ad0ec7d220fd20aea1ad405b27546ac62b57f) - adding/deleting team group actions moved to model save/delete method override [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **device**: Record inventory date and show as part of details
|
||||||
- **api**: [1c9d8b1c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/1c9d8b1c7e72a15e6186aa6d95a30e4ba3fbfac4) - add teams and permissions to org and teams respectively [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **ui**: Show inventory details if they exist
|
||||||
- **ui**: [a3716b01](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a3716b01584cb7842b782b0e9dd986c5542d8b6c) - correct repo url used [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **api**: API accept computer inventory
|
||||||
- **api**: [752770ec](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/752770ec32b6330ddd6060dc71dcbf3e60aacd83) - device inventory date set to read only [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
|
||||||
- **software**: [46af675f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/46af675f3c87d975a8dab3da70090fa3ab3f7033) - ensure management command query correct for migration [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#32](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/32) ]
|
|
||||||
- **device**: [7f4a036a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7f4a036a32630599ef95bbe801d24e6204c61fcf) - OS form trying to add last inventory date when empty [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) ]
|
|
||||||
- [249b9cba](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/249b9cbab9e8f917e0e1ecd97fbcc5300c1c832f) - add static files path to urls [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) ]
|
|
||||||
- **inventory**: [f5d5529c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f5d5529c173d64ef839e9db638600e963ec6a0aa) - Dont select device_type, use 'null' [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#17](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/17) ]
|
|
||||||
- **base**: [d2dba2f7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d2dba2f7b8b38370da0dae18cab752789ac2e5e8) - show "content_title - SITE_TITLE" as site title [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#18](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/18) ]
|
|
||||||
- **device**: [2689c35d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2689c35db36455982e57b08fd418ab2244280af0) - Read Only field set as required=false [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) ]
|
|
||||||
- [7ae7ffae](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7ae7ffaef46cc27a2bae9acdcfa70dff80a05f7a) - correct typo in notes templates [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
|
||||||
- **ui**: [5273b58a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5273b58afb383843de6da3faca552fe143fff8eb) - Ensure navigation menu entry highlighted for sub items [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) ]
|
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- **access**: [dd0eaae6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dd0eaae6b3c112bf9746b7ab37b996ba693650fc) - add to models a get_organization function [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **settings**: Add correct permissions for team user delete
|
||||||
- **access**: [e34d2998](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e34d29987e128190cefd1af9cd1c504123c59170) - remove change view [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
- **settings**: Add correct permissions for team user view/change
|
||||||
- **itam**: [668e871e](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/668e871e4fd52abb20426b8dafa988c423d3d3a7) - relocation item delete from list to inside device [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#23](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/23) ]
|
- **settings**: Add correct permissions for team view/change
|
||||||
- **context_processor**: [900412b3](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/900412b31706fbba0040139dd5a04b76aeb32af2) - relocate as base [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) ]
|
- **settings**: Add correct permissions for team add
|
||||||
- **itam**: [23e661ce](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/23e661cef04627912363492955b004920748edb6) - software index does not require created and modified date [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
- **settings**: Add correct permissions for team delete
|
||||||
- **organizations**: [a6a0da72](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a6a0da72b223ca64b6e7361db6e250ebbceedddb) - set org field to null if not set [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
- **access**: correct back link within team view
|
||||||
- **itam**: [66e8b290](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/66e8b290146cb241455792cb70d5de184b59819a) - move software categories to settings app [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
- **access**: correct url name to be within naming conventions
|
||||||
- **itam**: [c83b8836](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c83b8836730babd497b185c3ccf28176cd298ba7) - move device types to settings app [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
- **settings**: Add correct permissions for manufacturer / publisher delete
|
||||||
- **template**: [191244ed](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/191244ed40f8feacf8885f0eb9fff5b32ef91252) - content_title can be rendered in base [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) ]
|
- **settings**: Add correct permissions for manufacturer / publisher add
|
||||||
|
- **settings**: Add correct permissions for manufacturer / publisher view/update
|
||||||
|
- **settings**: Add correct permissions for software category delete
|
||||||
|
- **settings**: Add correct permissions for software category add
|
||||||
|
- **settings**: Add correct permissions for software category view/update
|
||||||
|
- **settings**: Add correct permissions for device type delete
|
||||||
|
- **settings**: Add correct permissions for device type add
|
||||||
|
- **settings**: Add correct permissions for device type view/update
|
||||||
|
- **settings**: Add correct permissions for device model delete
|
||||||
|
- **settings**: Add correct permissions for device model add
|
||||||
|
- **settings**: Add correct permissions for device model view/update
|
||||||
|
- **access**: Add correct permissions for organization view/update
|
||||||
|
- **access**: use established view naming
|
||||||
|
- **itam**: Add correct permissions for operating system delete
|
||||||
|
- **itam**: Add correct permissions for operating system add
|
||||||
|
- **itam**: Add correct permissions for operating system view/update
|
||||||
|
- **itam**: Add correct permissions for software delete
|
||||||
|
- **itam**: Add correct permissions for software add
|
||||||
|
- **itam**: for non-admin user use correct order by fields for software view/update
|
||||||
|
- **itam**: Add correct permissions for software view/update
|
||||||
|
- **itam**: ensure permission_required parameter for view is a list
|
||||||
|
- **core**: dont save history when no user information available
|
||||||
|
- **access**: during organization permission check, check the entire list of permissions
|
||||||
|
- **core**: dont save history for anonymous user
|
||||||
|
- **access**: during permission check use post request params for an add action
|
||||||
|
- **user**: on new-user signal create settings row if not exist
|
||||||
|
- **itam**: ensure only user with change permission can change a device
|
||||||
|
- **user**: if user settings row doesn't exist on access create
|
||||||
|
- **access**: adding/deleting team group actions moved to model save/delete method override
|
||||||
|
- **api**: add teams and permissions to org and teams respectively
|
||||||
|
- **ui**: correct repo url used
|
||||||
|
- **api**: device inventory date set to read only
|
||||||
|
- **software**: ensure management command query correct for migration
|
||||||
|
- **device**: OS form trying to add last inventory date when empty
|
||||||
|
- add static files path to urls
|
||||||
|
- **inventory**: Dont select device_type, use 'null'
|
||||||
|
- **base**: show "content_title - SITE_TITLE" as site title
|
||||||
|
- **device**: Read Only field set as required=false
|
||||||
|
- correct typo in notes templates
|
||||||
|
- **ui**: Ensure navigation menu entry highlighted for sub items
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- **docker**: [19d24b54](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/19d24b54a2cb9f4f81692b863260089caed12772) - build on any change [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) ]
|
- **access**: add to models a get_organization function
|
||||||
- **docker**: [2c81007c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2c81007c0ae73586fdaabe9387cc625486dee8f4) - always build on dev branch [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) ]
|
- **access**: remove change view
|
||||||
|
- **itam**: relocation item delete from list to inside device
|
||||||
### Documentaton / Guides
|
- **context_processor**: relocate as base
|
||||||
|
- **itam**: software index does not require created and modified date
|
||||||
- [3af254d9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/3af254d9e83093b91200a2b6ef9b6f92975a6ad8) - update software and os [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#12](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/12) ]
|
- **organizations**: set org field to null if not set
|
||||||
- **core**: [f7444892](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f7444892d06bb25c6a7de92ecf0410a2109ae0f5) - Add history docs [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
- **itam**: move software categories to settings app
|
||||||
- **core**: [5dadc3fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5dadc3fe98e3317c83305b73c1f9763617f486a8) - Add details about model notes [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
- **itam**: move device types to settings app
|
||||||
- [6b5acc0d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6b5acc0d575706d30a41d26f51dfe7d6f7bdf945) - add inventory details [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#2](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/2) ]
|
- **template**: content_title can be rendered in base
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **access**: [7f7f7197](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7f7f719731ce1214582f69f55544a1059b874a80) - during organization permission check, check to ensure user is logged on [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
|
||||||
- **history**: [8d786d4d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8d786d4dea2ed3b290a83f90c863bbe46e53cefd) - always create an entry even if user=none [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
|
||||||
- **itam**: [353117aa](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/353117aa74f0e0aac3ad687628cc7a21af690f0e) - device uuid must be unique [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
|
||||||
- **itam**: [c4fe2185](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c4fe218592fe25ebad842e8bb24ce1f2062debaa) - device serial number must be unique [ [!13](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/13) ]
|
|
||||||
- **setting**: [bf69a301](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/bf69a30163e6bafd0f951dde5fd058a31c327c09) - Enable super admin to set ALL manufacturer/publishers as global [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) ]
|
|
||||||
- **setting**: [ece6b9e3](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ece6b9e354a149ff1aa73d147bedcb3c406603c0) - Enable super admin to set ALL device types as global [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#31](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/31) ]
|
|
||||||
- **setting**: [abbda7b4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/abbda7b400d7c06fee5165157d2bf545c00d4bbe) - Enable super admin to set ALL device models as global [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#29](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/29) ]
|
|
||||||
- **setting**: [935e119e](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/935e119e6418d561739fff4e8b1fdbb399588a18) - Enable super admin to set ALL software categories as global [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#30](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/30) ]
|
|
||||||
- **UI**: [da0d3a81](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/da0d3a816d398d45d729ad9bcd5c0f2c625a3469) - show build details with page footer [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#25](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/25) ]
|
|
||||||
- **software**: [51e52e69](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/51e52e69a48fefc792b8556aa20d84652a53afe7) - Add output to stdout to show what is and has occurred [ [!12](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/12) [#32](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/32) ]
|
|
||||||
- **base**: [b2f7c831](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b2f7c831551469445d091cd176ab6f210ec862e1) - Add delete icon to content header [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#23](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/23) ]
|
|
||||||
- **itam**: [e66e9b8d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e66e9b8dca740ffe411b74c8f50c53c732acef2f) - Populate initial organization value from user default organization for software category creation [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **itam**: [4c002bc2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4c002bc259062fc4926deda8a943d165496c8a25) - Populate initial organization value from user default organization for device type creation [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **itam**: [90f95672](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/90f95672aa71c0a5358238f491949fb356503ff3) - Populate initial organization value from user default organization for device model creation [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **api**: [7f3bf95b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7f3bf95b4627be434732b1045120e59fcae21cf3) - Populate initial organization value from user default organization inventory [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **itam**: [9f5e5d25](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9f5e5d25ec574caa0aeec91c5763f7f64c8b11c2) - Populate initial organization value from user default organization for Software creation [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **itam**: [62c0bb77](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/62c0bb77fe5134669e77b198acc02c28ea073696) - Populate initial organization value from user default organization for operating system creation [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **device**: [abbd6a49](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/abbd6a49d64fc24eb2c27191b594e8cefdb9042b) - Populate initial organization value from user default organization [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- [395f24f2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/395f24f22c5418eed99d59659b7c60726c2ade53) - Add management command software [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#27](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/27) ]
|
|
||||||
- **setting**: [f36400db](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f36400dbb98d305e1ec54f62493f7f2cff0359b1) - Enable super admin to set ALL software as global [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#27](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/27) ]
|
|
||||||
- **user**: [ee7977fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ee7977fe4a5e78844e8652c313af49eda901bdad) - Add user settings panel [ [!11](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/11) [#28](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/28) ]
|
|
||||||
- **itam**: [2fcbb1ea](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2fcbb1ead72cfa294ad26f63688b4344df56b0db) - Add publisher to software [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#12](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/12) ]
|
|
||||||
- **itam**: [53baeb59](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/53baeb59c9e0d0eff681ba36996e47c22bd7afe7) - Add publisher to operating system [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#12](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/12) ]
|
|
||||||
- **itam**: [99a559fe](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/99a559fe6dd8b234cf860c7a44fd65dc178c1bc7) - Add device model [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#12](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/12) ]
|
|
||||||
- **core**: [ef463b84](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ef463b845d1738a6067c786bf410f5109d832a5c) - Add manufacturers [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) [#12](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/12) ]
|
|
||||||
- **settings**: [bf0fa3f4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/bf0fa3f41dda11a02d6ae2c9b58a9e21900d2a9f) - add dummy model for permissions [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
|
||||||
- **settings**: [ac233e43](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ac233e432f7222c59a0bb62a1cd85a6a7770c13c) - new module for whole of application settings/globals [ [!10](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/10) ]
|
|
||||||
- **access**: [724c52b7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/724c52b777896600fc8ed5a71bb3e3f6429f9e56) - Save changes to history for organization and teams [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
|
||||||
- **software**: [b5470f2c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b5470f2cefeddac2dd154ef37975902fe511e9f6) - Save changes to history [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
|
||||||
- **operating_system**: [e16a4212](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e16a4212ccd8c7ed04d34a87bbef78a4f5565166) - Save changes to history [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
|
||||||
- **device**: [6cbcd4aa](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6cbcd4aa56441efce29c8dfe2489794716a72e8b) - Save changes to history [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
|
||||||
- **core**: [9b2abeca](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9b2abecac37f9b2ea12a56ad2023afedc6dd78fc) - history model for saving model history [ [!9](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/9) [#5](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/5) ]
|
|
||||||
- **itam**: [dec29429](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dec2942996073746f78463b69156e67c8d879b72) - Ability to add notes to software [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
|
||||||
- **itam**: [4d5f229f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4d5f229fc737606bf272b0ccea6390ad2737dae1) - Ability to add notes to operating systems [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
|
||||||
- **itam**: [725e6b8c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/725e6b8c922e0c1a6fd9d96a0f2581a8aad4a737) - Ability to add notes on devices [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
|
||||||
- **core**: [8e0df948](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8e0df948d5006976981eb2ac3918c38fe74aff14) - notes model added to core [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#7](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/7) ]
|
|
||||||
- **device**: [fb041f77](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fb041f77ebb9b9b44b0ebbed955252e22d3ee4dc) - Record inventory date and show as part of details [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#2](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/2) ]
|
|
||||||
- **ui**: [e93ce07d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/e93ce07d887b3d3151cb6714df27fd5cf9fdcd67) - Show inventory details if they exist [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#2](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/2) ]
|
|
||||||
- **api**: [c52fd080](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c52fd0802ed2395fa3a62ec41ec0297b0bca373e) - API accept computer inventory [ [!8](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/8) [#2](https://gitlab.com/nofusscomputing/projects/django_template/-/issues/2) ]
|
|
||||||
|
|
||||||
## 0.2.0 (2024-05-18)
|
## 0.2.0 (2024-05-18)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **device**: [9e801fa9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9e801fa9eb0244d413d1555bff8e206b2ff6acd7) - correct software link [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
- **itam**: Add Operating System to ITAM models
|
||||||
|
- **api**: force content type to be JSON for req/resp
|
||||||
|
- **software**: view software
|
||||||
|
- **device**: Prevent devices from being set global
|
||||||
|
- **software**: if no installations found, denote
|
||||||
|
- **device**: configurable software version
|
||||||
|
- **software_version**: name does not need to be unique
|
||||||
|
- **software_version**: set is_global to match software
|
||||||
|
- **software**: prettify device software action
|
||||||
|
- **software**: ability to add software versions
|
||||||
|
- **base**: add stylised action button/text
|
||||||
|
- **software**: add pagination for index
|
||||||
|
- **device**: add pagination for index
|
||||||
|
|
||||||
### Continious Integration
|
### Fix
|
||||||
|
|
||||||
- [ce18edaa](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ce18edaa398bfca5f38ae9320a6a98d6a6338318) - correct junit collection to use wildcard name [ [!6](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/6) ]
|
- **device**: correct software link
|
||||||
- [8b746bb9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8b746bb9ff607950a73850d3cb0432f3d5538c63) - correct junit report name [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
|
|
||||||
### Documentaton / Guides
|
|
||||||
|
|
||||||
- [fa97286d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fa97286dc885dacbf2e56bab02cb42c67c70f9ab) - start to document features [ [!6](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/6) ]
|
|
||||||
- [7d007f72](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7d007f721af5e3a192c9a713069bec8c7a602d12) - update [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **itam**: [a0b5a08f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a0b5a08f0d27f8676998eaf818c449961ccc42dd) - Add Operating System to ITAM models [ [!6](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/6) ]
|
|
||||||
- **api**: [377c78d6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/377c78d6b84398e2bbae01a91478a8ab8f94a0a2) - force content type to be JSON for req/resp [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **software**: [95405283](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/95405283b98ec6b39faedd509619dcdc39b82fc0) - view software [ [!6](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/6) ]
|
|
||||||
- **device**: [aade1e80](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/aade1e80d7d0b5bf5d45c7fe202a360d325bc396) - Prevent devices from being set global [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software**: [0e69a0ac](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0e69a0accc32ea1513394da38e78066b0e09a5ed) - if no installations found, denote [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **device**: [b811eedb](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b811eedb338712e1e8ddfba3b032dbdd3513dda5) - configurable software version [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software_version**: [b0e69ee6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b0e69ee64b929466a41d69b523641e17928188e7) - name does not need to be unique [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software_version**: [b1c4e570](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b1c4e570cfb92ce6c72bd6df28f4c9d6d9eb30e6) - set is_global to match software [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software**: [b2e1a460](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b2e1a460c853f57397c615707575f9b87b174e9c) - prettify device software action [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software**: [7f35292f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7f35292f64656830208b097388516b13e8b91613) - ability to add software versions [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **base**: [7302f997](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7302f997530c9caba8e534877eba65dfa3659f9c) - add stylised action button/text [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **software**: [6f6031fb](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/6f6031fb1eb789e86afb7c9cbb8c12e7f1563f56) - add pagination for index [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
- **device**: [789b4a55](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/789b4a55d657c6c7a23af4c5d499b2be0a20481b) - add pagination for index [ [!5](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/5) ]
|
|
||||||
|
|
||||||
## 0.1.0 (2024-05-17)
|
## 0.1.0 (2024-05-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Feat
|
||||||
|
|
||||||
- **itam**: [d3cafe08](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d3cafe08aa7e817d5511d8f455cbd8efe5294be2) - device software to come from device org or global not users orgs [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **api**: initial token authentication implementation
|
||||||
- **access**: [5a3450f3](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/5a3450f3c0f84fc32781338ef0c644356072366e) - correct team required permissions [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **docker**: add settings to store data in separate volume
|
||||||
- **fields**: [2fe15778](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2fe15778cb638eb420e5f3312ca24e33bfc601c5) - correct autoslug field so it works [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **django**: add split settings for specifying additional settings paths
|
||||||
- **docker**: [69aec7ba](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/69aec7ba6a5ea43fb3ec7f359744e30ac4a945ed) - build wheels then install [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **api**: Add device config to device
|
||||||
|
- **itam**: add organization to device installs
|
||||||
|
- **itam**: migrate app from own repo
|
||||||
|
- Enable API by default
|
||||||
|
- **admin**: remove team management
|
||||||
|
- **admin**: remove group management
|
||||||
|
- **access**: adjustable team permissions
|
||||||
|
- **api**: initial work on API
|
||||||
|
- **template**: add header content icon block
|
||||||
|
- **tenancy**: Add is_ global field
|
||||||
|
- **access**: when modifying a team ad/remove user from linked group
|
||||||
|
- **auth**: include python social auth django application
|
||||||
|
- Build docker container for release
|
||||||
|
- **access**: add permissions to team and user
|
||||||
|
- **style**: format check boxes
|
||||||
|
- **access**: delete team user form
|
||||||
|
- **view**: new user
|
||||||
|
- user who is 'is_superuser' to view everything and not be denied access
|
||||||
|
- **access**: add org mixin to current views
|
||||||
|
- **access**: add views for each action for teams
|
||||||
|
- **access**: add mixin to check organization permissions against user and object
|
||||||
|
- **account**: show admin site link if user is staff
|
||||||
|
- **development**: added the debug django app
|
||||||
|
- **access**: rename structure to access and remove organization app in favour of own implementation
|
||||||
|
- **account**: Add user password change form
|
||||||
|
- **urls**: provide option to exclude navigation items
|
||||||
|
- **structure**: unregister admin pages from organization app not required
|
||||||
|
- **auth**: Custom Login Page
|
||||||
|
- **auth**: Add User Account Menu
|
||||||
|
- **auth**: Setup Login required
|
||||||
|
- Dyno-magic build navigation from application urls.py
|
||||||
|
- **structure**: Select and View an individual Organization
|
||||||
|
- **structure**: View Organizations
|
||||||
|
- **app**: Add new app structure for organizations and teams
|
||||||
|
- **template**: add base template
|
||||||
|
- **django**: add organizations app
|
||||||
|
|
||||||
### Code Refactor
|
### Fix
|
||||||
|
|
||||||
- [761afb6f](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/761afb6f2bc592f29870a8eaac86c70a32086af3) - button to use same selection colour [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **itam**: device software to come from device org or global not users orgs
|
||||||
- **access**: [30e7c8de](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/30e7c8de42eafeacba02c221ad855ca0fb68f50d) - remove inline form for org teams [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **access**: correct team required permissions
|
||||||
- [0edfba60](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0edfba604aba7f7810dbb038b836770b888f9d15) - rename app from itsm -> app [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **fields**: correct autoslug field so it works
|
||||||
- **access**: [86046d6e](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/86046d6e923a32145869c1cb6cc0661eec9bd1d6) - dont use inline formset [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **docker**: build wheels then install
|
||||||
- **views**: [c7986328](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c7986328f7c36ae6a817c4e7321d41daaa9423bd) - move views to own directory [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [c9f147d8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c9f147d805d7d2e94cb9177b61fcb608efd5deb8) - addjust org and teams to use different view per action [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
|
|
||||||
### Continious Integration
|
### Refactor
|
||||||
|
|
||||||
- [de83d749](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/de83d7490b9e6118beaf2eec303d38ac49332d16) - sync project to github [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- button to use same selection colour
|
||||||
- [8e2542f9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8e2542f9a50e64a2bc966d85a96d561cc1de8e67) - correct test path [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- **access**: remove inline form for org teams
|
||||||
- **coverage**: [eb9eeff4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/eb9eeff4ed63e09a4670c3b3ac07f98f2575694b) - add test coverage to ci [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
- rename app from itsm -> app
|
||||||
|
- **access**: dont use inline formset
|
||||||
### Documentaton / Guides
|
- **views**: move views to own directory
|
||||||
|
- **access**: addjust org and teams to use different view per action
|
||||||
- [f59ffa58](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f59ffa581c5711fcb414aa4aa3ae9a3695ce4786) - add base itam pages [ [!2](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/2) ]
|
|
||||||
- [c43f41d9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c43f41d9587e060ea7f3c4e51a72f5c928c9384b) - notate global object [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- [db5d7e18](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/db5d7e18ad77c7402a8d73495ddaa9bbe626754b) - update and include permissions [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **api**: [962ae2b8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/962ae2b8dfaf7cccdfd449e2a7db087f9b3542c9) - initial token authentication implementation [ [!3](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/3) ]
|
|
||||||
- **docker**: [4b77e2e6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4b77e2e63dcc57534e821386584c3b6896d44173) - add settings to store data in separate volume [ [!2](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/2) ]
|
|
||||||
- **django**: [a96fc062](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a96fc062f209e86bf4a8f40dd4a738ad8d889cf2) - add split settings for specifying additional settings paths [ [!2](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/2) ]
|
|
||||||
- **api**: [0c38155c](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0c38155c4453d89c552eaf16aaf7d7e2092b2431) - Add device config to device [ [!2](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/2) ]
|
|
||||||
- **itam**: [2d67f93d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2d67f93d882d1ebe7782d9425c915e31f3a16453) - add organization to device installs [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **itam**: [195bb5e4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/195bb5e4ab29540647cf30d22fcbb6e6c06e6db6) - migrate app from own repo [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- [f98e3bc9](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f98e3bc9c2ff5f3627dc2f49df6eb7e6afdc974c) - Enable API by default [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **admin**: [4b214d0b](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/4b214d0b8cc10f43c708ef45ce5e20225f9b6c21) - remove team management [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **admin**: [736d3930](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/736d3930dff9705c3d27f853ed9a5f0000108164) - remove group management [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [50371267](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/50371267c1fb02e066d9a4ac066f54128ce957ea) - adjustable team permissions [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **api**: [102aa981](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/102aa981ce0a72fa263016139076e87778255226) - initial work on API [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **template**: [50cc050a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/50cc050adf4cfcf43303350850caa56bf649874b) - add header content icon block [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **tenancy**: [857aa7af](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/857aa7af72f9e92be04d9cc258fc5875e4223ffd) - Add is_ global field [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [070ba47d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/070ba47de284d912fc86aabb323a1639e4328d4a) - when modifying a team ad/remove user from linked group [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **auth**: [a0f4940a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/a0f4940a09fb00486ed8280eb17ec35811839947) - include python social auth django application [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- [b3b12638](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/b3b12638ad85fe1b3744561a2220d255cf9e105c) - Build docker container for release [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [ca68c258](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/ca68c2589a8cabdc11fbe7e95b0a5d58f5fd8a0e) - add permissions to team and user [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **style**: [9d507d82](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9d507d82df745a057f7903d76bf439b142e71494) - format check boxes [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [7445d880](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7445d8807ce7e995fdb2f7443e59b407e1cf92dd) - delete team user form [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **view**: [fa5703cb](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/fa5703cb794b010d46dfdce1bd03243ca260cde1) - new user [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- [8a62c3f6](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/8a62c3f6ee061add16ae165857735a44cb0bb085) - user who is 'is_superuser' to view everything and not be denied access [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [af858dcc](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/af858dcc43c414f6c523a757345537149eb4178e) - add org mixin to current views [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [2b5047db](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/2b5047db2db18bfb10ccaadbf9adce12802b9c11) - add views for each action for teams [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [d715038a](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/d715038a884cad87fba0a55f0d30ea66fda322b0) - add mixin to check organization permissions against user and object [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **account**: [0446d391](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/0446d39190406fb54baf85bc031708a03473e020) - show admin site link if user is staff [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **development**: [c0212178](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/c0212178111f000c20b0b60426d3542dd704e8ce) - added the debug django app [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **access**: [af5175c4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/af5175c4e198f5431d3f7b0d5b94f78818366053) - rename structure to access and remove organization app in favour of own implementation [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **account**: [f7bbb122](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/f7bbb122e6651635a4cb8e74246a8e155be6dcd1) - Add user password change form [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **urls**: [789777a2](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/789777a270bbd46e0a3126026e7236222f38da35) - provide option to exclude navigation items [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **structure**: [dae7f3c4](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dae7f3c47a3c511ac30decb647461902e0dc248f) - unregister admin pages from organization app not required [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **auth**: [96a99c9d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/96a99c9df181367498e3f8d8031a0c1e4304a312) - Custom Login Page [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **auth**: [65bd32df](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/65bd32dfad3d7f8f867aea84dd4ad31133aa8fc1) - Add User Account Menu [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **auth**: [283ef9a7](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/283ef9a7145d424bca2c898935e08cdc83038fff) - Setup Login required [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- [71bcd192](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/71bcd192b3e9d6616ff8dca5d8b5745ad371de92) - Dyno-magic build navigation from application urls.py [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **structure**: [7cdfdab1](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/7cdfdab1fc966f3c92e69baf1162033c7d2e9bc4) - Select and View an individual Organization [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **structure**: [dd54eae8](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/dd54eae8d747ab0a17e71797d675a45eeaaae813) - View Organizations [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **app**: [9092445d](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/9092445d0bcbe3215f675eb5e4794cfefb710913) - Add new app structure for organizations and teams [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **template**: [1a886184](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/1a8861846bb16255c204729438057e42b3c81d7a) - add base template [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
- **django**: [81b170ca](https://gitlab.com/nofusscomputing/projects/django_template/-/commit/81b170cabf2398304861fa5b68fadb962630d4cb) - add organizations app [ [!1](https://gitlab.com/nofusscomputing/projects/django_template/-/merge_requests/1) ]
|
|
||||||
|
|
||||||
## 0.0.1 (2024-05-06)
|
## 0.0.1 (2024-05-06)
|
||||||
|
30
README.md
30
README.md
@ -7,7 +7,7 @@
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
[](https://hub.docker.com/r/nofusscomputing/centurion-erp)
|
[](https://hub.docker.com/r/nofusscomputing/centurion-erp) [](https://artifacthub.io/packages/container/centurion-erp/centurion-erp)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -15,27 +15,35 @@
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
  [](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues) [](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues/?sort=created_date&state=opened&label_name%5B%5D=type%3A%3Abug)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
  
|
  
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
This project is hosted on [gitlab](https://gitlab.com/nofusscomputing/projects/centurion_erp) and has a read-only copy hosted on [Github](https://github.com/NofussComputing/centurion_erp).
|
 
|
||||||
|
|
||||||
|
|
||||||
|
This project is hosted on [Github](https://github.com/NofussComputing/centurion_erp) and has a read-only copy hosted on [gitlab](https://gitlab.com/nofusscomputing/projects/centurion_erp).
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
**Stable Branch**
|
**Stable Branch**
|
||||||
|
|
||||||
  [](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/jobs/artifacts/master/browse/artifacts/coverage/?job=Unit)
|
  
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
**Development Branch**
|
**Development Branch**
|
||||||
|
|
||||||
  [](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/jobs/artifacts/development/browse/artifacts/coverage/?job=Unit)
|
|
||||||
|
|
||||||
|
  
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
@ -45,9 +53,9 @@ This project is hosted on [gitlab](https://gitlab.com/nofusscomputing/projects/c
|
|||||||
|
|
||||||
links:
|
links:
|
||||||
|
|
||||||
- [Issues](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/issues)
|
- [Issues](https://github.com/nofusscomputing/centurion_erp/issues)
|
||||||
|
|
||||||
- [Merge Requests (Pull Requests)](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/merge_requests)
|
- [Merge Requests (Pull Requests)](https://github.com/nofusscomputing/centurion_erp/pulls)
|
||||||
|
|
||||||
|
|
||||||
An ERP with a large emphasis on the IT Service Management (ITSM) and Automation.
|
An ERP with a large emphasis on the IT Service Management (ITSM) and Automation.
|
||||||
@ -55,7 +63,7 @@ An ERP with a large emphasis on the IT Service Management (ITSM) and Automation.
|
|||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
All contributions for this project must conducted from [Gitlab](https://gitlab.com/nofusscomputing/projects/centurion_erp).
|
All contributions for this project must conducted from [GitHub](https://github.com/nofusscomputing/centurion_erp).
|
||||||
|
|
||||||
For further details on contributing please refer to the [contribution guide](CONTRIBUTING.md).
|
For further details on contributing please refer to the [contribution guide](CONTRIBUTING.md).
|
||||||
|
|
||||||
|
7
Release-Notes.md
Normal file
7
Release-Notes.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Version 1.0.0
|
||||||
|
|
||||||
|
Initial Release of Centurion ERP.
|
||||||
|
|
||||||
|
## Breaking changes
|
||||||
|
|
||||||
|
- Nil
|
@ -190,7 +190,7 @@ class TenancyObject(SaveHistory):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Team(Group, TenancyObject, SaveHistory):
|
class Team(Group, TenancyObject):
|
||||||
class Meta:
|
class Meta:
|
||||||
# proxy = True
|
# proxy = True
|
||||||
verbose_name_plural = "Teams"
|
verbose_name_plural = "Teams"
|
||||||
|
@ -5,7 +5,7 @@ from django.contrib.auth import get_user_model
|
|||||||
from django.contrib.auth.models import AnonymousUser, User
|
from django.contrib.auth.models import AnonymousUser, User
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.shortcuts import reverse
|
from django.shortcuts import reverse
|
||||||
from django.test import TestCase
|
from django.test import Client, TestCase
|
||||||
|
|
||||||
from access.models import Organization, Team, TeamUsers, Permission
|
from access.models import Organization, Team, TeamUsers, Permission
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ class OrganizationPermissionsAPI(TestCase, APIPermissionChange, APIPermissionVie
|
|||||||
|
|
||||||
url_name = '_api_organization'
|
url_name = '_api_organization'
|
||||||
|
|
||||||
url_list = 'device-list'
|
url_list = '_api_orgs'
|
||||||
|
|
||||||
change_data = {'name': 'device'}
|
change_data = {'name': 'device'}
|
||||||
|
|
||||||
@ -124,6 +124,8 @@ class OrganizationPermissionsAPI(TestCase, APIPermissionChange, APIPermissionVie
|
|||||||
delete_team.permissions.set([delete_permissions])
|
delete_team.permissions.set([delete_permissions])
|
||||||
|
|
||||||
|
|
||||||
|
self.super_user = User.objects.create_user(username="super_user", password="password", is_superuser=True)
|
||||||
|
|
||||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||||
|
|
||||||
|
|
||||||
@ -171,3 +173,67 @@ class OrganizationPermissionsAPI(TestCase, APIPermissionChange, APIPermissionVie
|
|||||||
team = different_organization_team,
|
team = different_organization_team,
|
||||||
user = self.different_organization_user
|
user = self.different_organization_user
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_is_prohibited_anon_user(self):
|
||||||
|
""" Ensure Organization cant be created
|
||||||
|
|
||||||
|
Attempt to create organization as anon user
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse(self.app_namespace + ':' + self.url_list)
|
||||||
|
|
||||||
|
|
||||||
|
# client.force_login(self.add_user)
|
||||||
|
response = client.post(url, data={'name': 'should not create'}, content_type='application/json')
|
||||||
|
|
||||||
|
assert response.status_code == 401
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_is_prohibited_diff_org_user(self):
|
||||||
|
""" Ensure Organization cant be created
|
||||||
|
|
||||||
|
Attempt to create organization as user with different org permissions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse(self.app_namespace + ':' + self.url_list)
|
||||||
|
|
||||||
|
|
||||||
|
client.force_login(self.different_organization_user)
|
||||||
|
response = client.post(url, data={'name': 'should not create'}, content_type='application/json')
|
||||||
|
|
||||||
|
assert response.status_code == 405
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_is_prohibited_super_user(self):
|
||||||
|
""" Ensure Organization cant be created
|
||||||
|
|
||||||
|
Attempt to create organization as user who is super user
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse(self.app_namespace + ':' + self.url_list)
|
||||||
|
|
||||||
|
|
||||||
|
client.force_login(self.super_user)
|
||||||
|
response = client.post(url, data={'name': 'should not create'}, content_type='application/json')
|
||||||
|
|
||||||
|
assert response.status_code == 405
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_is_prohibited_user_same_org(self):
|
||||||
|
""" Ensure Organization cant be created
|
||||||
|
|
||||||
|
Attempt to create organization as user with permission
|
||||||
|
"""
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse(self.app_namespace + ':' + self.url_list)
|
||||||
|
|
||||||
|
|
||||||
|
client.force_login(self.add_user)
|
||||||
|
response = client.post(url, data={'name': 'should not create'}, content_type='application/json')
|
||||||
|
|
||||||
|
assert response.status_code == 405
|
||||||
|
@ -63,4 +63,8 @@ class TeamModel(
|
|||||||
|
|
||||||
@pytest.mark.skip(reason="uses Django group manager")
|
@pytest.mark.skip(reason="uses Django group manager")
|
||||||
def test_attribute_is_type_objects(self):
|
def test_attribute_is_type_objects(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@pytest.mark.skip(reason="uses Django group manager")
|
||||||
|
def test_model_class_tenancy_manager_function_get_queryset_called(self):
|
||||||
pass
|
pass
|
@ -14,9 +14,8 @@ class TeamSerializerBase(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Team
|
model = Team
|
||||||
fields = (
|
fields = (
|
||||||
"id",
|
'team_name',
|
||||||
"team_name",
|
'permissions',
|
||||||
'organization',
|
|
||||||
'url',
|
'url',
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -29,9 +28,18 @@ class TeamSerializerBase(serializers.ModelSerializer):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TeamPermissionSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Permission
|
||||||
|
depth = 1
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
class TeamSerializer(TeamSerializerBase):
|
class TeamSerializer(TeamSerializerBase):
|
||||||
|
|
||||||
permissions = serializers.SerializerMethodField('get_url')
|
permissions_url = serializers.SerializerMethodField('get_url')
|
||||||
|
|
||||||
def get_url(self, obj):
|
def get_url(self, obj):
|
||||||
|
|
||||||
@ -63,16 +71,18 @@ class TeamSerializer(TeamSerializerBase):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Team
|
model = Team
|
||||||
depth = 1
|
depth = 2
|
||||||
fields = (
|
fields = (
|
||||||
"id",
|
"id",
|
||||||
"team_name",
|
"team_name",
|
||||||
'organization',
|
|
||||||
'permissions',
|
'permissions',
|
||||||
|
'permissions_url',
|
||||||
'url',
|
'url',
|
||||||
)
|
)
|
||||||
read_only_fields = [
|
read_only_fields = [
|
||||||
'permissions',
|
'id',
|
||||||
|
'organization',
|
||||||
|
'permissions_url',
|
||||||
'url'
|
'url'
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -111,7 +121,7 @@ class OrganizationSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
return request.build_absolute_uri(reverse('API:_api_organization_teams', args=[obj.id]))
|
return request.build_absolute_uri(reverse('API:_api_organization_teams', args=[obj.id]))
|
||||||
|
|
||||||
teams = TeamSerializerBase(source='team_set', many=True, read_only=False)
|
teams = TeamSerializer(source='team_set', many=True, read_only=False)
|
||||||
|
|
||||||
view_name="API:_api_organization"
|
view_name="API:_api_organization"
|
||||||
|
|
||||||
|
86
app/api/serializers/config.py
Normal file
86
app/api/serializers/config.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from rest_framework.reverse import reverse
|
||||||
|
|
||||||
|
from config_management.models.groups import ConfigGroups
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ParentGroupSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
url = serializers.SerializerMethodField('get_url')
|
||||||
|
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ConfigGroups
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_url(self, obj):
|
||||||
|
|
||||||
|
request = self.context.get('request')
|
||||||
|
|
||||||
|
return request.build_absolute_uri(reverse("API:_api_config_group", args=[obj.pk]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigGroupsSerializerBase(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
parent = ParentGroupSerializer(read_only=True)
|
||||||
|
url = serializers.SerializerMethodField('get_url')
|
||||||
|
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ConfigGroups
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'parent',
|
||||||
|
'name',
|
||||||
|
'config',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'config',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_url(self, obj):
|
||||||
|
|
||||||
|
request = self.context.get('request')
|
||||||
|
|
||||||
|
return request.build_absolute_uri(reverse("API:_api_config_group", args=[obj.pk]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigGroupsSerializer(ConfigGroupsSerializerBase):
|
||||||
|
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ConfigGroups
|
||||||
|
depth = 1
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'parent',
|
||||||
|
'name',
|
||||||
|
'config',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'parent',
|
||||||
|
'name',
|
||||||
|
'config',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
@ -1,9 +1,38 @@
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from itam.models.device import Device
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from api.serializers.config import ParentGroupSerializer
|
||||||
|
|
||||||
|
from config_management.models.groups import ConfigGroupHosts
|
||||||
|
|
||||||
|
from itam.models.device import Device
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceConfigGroupsSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
name = serializers.CharField(source='group.name', read_only=True)
|
||||||
|
|
||||||
|
url = serializers.HyperlinkedIdentityField(
|
||||||
|
view_name="API:_api_config_group", format="html"
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
model = ConfigGroupHosts
|
||||||
|
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
|
||||||
|
]
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class DeviceSerializer(serializers.ModelSerializer):
|
class DeviceSerializer(serializers.ModelSerializer):
|
||||||
@ -13,7 +42,9 @@ class DeviceSerializer(serializers.ModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
config = serializers.SerializerMethodField('get_device_config')
|
config = serializers.SerializerMethodField('get_device_config')
|
||||||
|
|
||||||
|
groups = DeviceConfigGroupsSerializer(source='configgrouphosts_set', many=True, read_only=True)
|
||||||
|
|
||||||
def get_device_config(self, device):
|
def get_device_config(self, device):
|
||||||
|
|
||||||
request = self.context.get('request')
|
request = self.context.get('request')
|
||||||
@ -22,11 +53,29 @@ class DeviceSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Device
|
model = Device
|
||||||
fields = '__all__'
|
depth = 1
|
||||||
|
fields = [
|
||||||
read_only_fields = [
|
'id',
|
||||||
'inventorydate',
|
|
||||||
'is_global',
|
'is_global',
|
||||||
'slug',
|
'name',
|
||||||
|
'config',
|
||||||
|
'serial_number',
|
||||||
|
'uuid',
|
||||||
|
'inventorydate',
|
||||||
|
'created',
|
||||||
|
'modified',
|
||||||
|
'groups',
|
||||||
|
'organization',
|
||||||
|
'url',
|
||||||
|
]
|
||||||
|
|
||||||
|
read_only_fields = [
|
||||||
|
'id',
|
||||||
|
'config',
|
||||||
|
'inventorydate',
|
||||||
|
'created',
|
||||||
|
'modified',
|
||||||
|
'groups',
|
||||||
|
'url',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from django.urls import path
|
|||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
from .views import access, index
|
from .views import access, config, index
|
||||||
|
|
||||||
from .views.itam import software, config as itam_config
|
from .views.itam import software, config as itam_config
|
||||||
from .views.itam.device import DeviceViewSet
|
from .views.itam.device import DeviceViewSet
|
||||||
@ -24,6 +24,9 @@ router.register('software', software.SoftwareViewSet, basename='software')
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("config/<slug:slug>/", itam_config.View.as_view(), name="_api_device_config"),
|
path("config/<slug:slug>/", itam_config.View.as_view(), name="_api_device_config"),
|
||||||
|
|
||||||
|
path("configuration/", config.ConfigGroupsList.as_view(), name='_api_config_groups'),
|
||||||
|
path("configuration/<int:pk>", config.ConfigGroupsDetail.as_view(), name='_api_config_group'),
|
||||||
|
|
||||||
path("device/inventory", inventory.Collect.as_view(), name="_api_device_inventory"),
|
path("device/inventory", inventory.Collect.as_view(), name="_api_device_inventory"),
|
||||||
|
|
||||||
path("organization/", access.OrganizationList.as_view(), name='_api_orgs'),
|
path("organization/", access.OrganizationList.as_view(), name='_api_orgs'),
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
|
|
||||||
|
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
|
||||||
|
|
||||||
from rest_framework import generics, routers, serializers, views
|
from rest_framework import generics, routers, serializers, views
|
||||||
from rest_framework.permissions import DjangoObjectPermissions
|
from rest_framework.permissions import DjangoObjectPermissions
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
@ -7,12 +9,17 @@ from rest_framework.response import Response
|
|||||||
from access.mixin import OrganizationMixin
|
from access.mixin import OrganizationMixin
|
||||||
from access.models import Organization, Team
|
from access.models import Organization, Team
|
||||||
|
|
||||||
from api.serializers.access import OrganizationSerializer, OrganizationListSerializer, TeamSerializer
|
from api.serializers.access import OrganizationSerializer, OrganizationListSerializer, TeamSerializer, TeamPermissionSerializer
|
||||||
from api.views.mixin import OrganizationPermissionAPI
|
from api.views.mixin import OrganizationPermissionAPI
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
class OrganizationList(generics.ListCreateAPIView):
|
get=extend_schema(
|
||||||
|
summary = "Fetch Organizations",
|
||||||
|
description="Returns a list of organizations."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
class OrganizationList(generics.ListAPIView):
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
OrganizationPermissionAPI
|
OrganizationPermissionAPI
|
||||||
@ -28,7 +35,18 @@ class OrganizationList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OrganizationDetail(generics.RetrieveUpdateDestroyAPIView):
|
@extend_schema_view(
|
||||||
|
get=extend_schema(
|
||||||
|
summary = "Get An Organization",
|
||||||
|
),
|
||||||
|
patch=extend_schema(
|
||||||
|
summary = "Update an organization",
|
||||||
|
),
|
||||||
|
put=extend_schema(
|
||||||
|
summary = "Update an organization",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
class OrganizationDetail(generics.RetrieveUpdateAPIView):
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
OrganizationPermissionAPI
|
OrganizationPermissionAPI
|
||||||
@ -44,6 +62,20 @@ class OrganizationDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
|
post=extend_schema(
|
||||||
|
summary = "Create a Team",
|
||||||
|
description = """Create a team within the defined organization.""",
|
||||||
|
tags = ['team',],
|
||||||
|
request = TeamSerializer,
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='Team has been updated with the supplied permissions'),
|
||||||
|
401: OpenApiResponse(description='User Not logged in'),
|
||||||
|
403: OpenApiResponse(description='User is missing permission or in different organization'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
create=extend_schema(exclude=True),
|
||||||
|
)
|
||||||
class TeamList(generics.ListCreateAPIView):
|
class TeamList(generics.ListCreateAPIView):
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
@ -66,6 +98,45 @@ class TeamList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
|
get=extend_schema(
|
||||||
|
summary = "Fetch a Team",
|
||||||
|
description = """Fetch a team within the defined organization.
|
||||||
|
""",
|
||||||
|
methods=["GET"],
|
||||||
|
tags = ['team',],
|
||||||
|
request = TeamSerializer,
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='Team has been updated with the supplied permissions'),
|
||||||
|
401: OpenApiResponse(description='User Not logged in'),
|
||||||
|
403: OpenApiResponse(description='User is missing permission or in different organization'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
patch=extend_schema(
|
||||||
|
summary = "Update a Team",
|
||||||
|
description = """Update a team within the defined organization.
|
||||||
|
""",
|
||||||
|
methods=["Patch"],
|
||||||
|
tags = ['team',],
|
||||||
|
request = TeamSerializer,
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='Team has been updated with the supplied permissions'),
|
||||||
|
401: OpenApiResponse(description='User Not logged in'),
|
||||||
|
403: OpenApiResponse(description='User is missing permission or in different organization'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
put = extend_schema(
|
||||||
|
summary = "Amend a team",
|
||||||
|
tags = ['team',],
|
||||||
|
),
|
||||||
|
delete=extend_schema(
|
||||||
|
summary = "Delete a Team",
|
||||||
|
tags = ['team',],
|
||||||
|
),
|
||||||
|
post = extend_schema(
|
||||||
|
exclude = True,
|
||||||
|
)
|
||||||
|
)
|
||||||
class TeamDetail(generics.RetrieveUpdateDestroyAPIView):
|
class TeamDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
@ -79,12 +150,66 @@ class TeamDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TeamPermissionDetail(routers.APIRootView):
|
@extend_schema_view(
|
||||||
|
get=extend_schema(
|
||||||
|
summary = "Fetch a teams permissions",
|
||||||
|
tags = ['team',],
|
||||||
|
),
|
||||||
|
post=extend_schema(
|
||||||
|
summary = "Replace team Permissions",
|
||||||
|
description = """Replace the teams permissions with the permissions supplied.
|
||||||
|
|
||||||
# temp disabled until permission checker updated
|
Teams Permissions will be replaced with the permissions supplied. **ALL** existing permissions will be
|
||||||
# permission_classes = [
|
removed.
|
||||||
# OrganizationPermissionAPI
|
|
||||||
# ]
|
permissions are required to be in format `<module name>_<permission>_<table name>`
|
||||||
|
""",
|
||||||
|
|
||||||
|
methods=["POST"],
|
||||||
|
tags = ['team',],
|
||||||
|
request = TeamPermissionSerializer,
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='Team has been updated with the supplied permissions'),
|
||||||
|
401: OpenApiResponse(description='User Not logged in'),
|
||||||
|
403: OpenApiResponse(description='User is missing permission or in different organization'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
delete=extend_schema(
|
||||||
|
summary = "Delete permissions",
|
||||||
|
tags = ['team',],
|
||||||
|
),
|
||||||
|
patch = extend_schema(
|
||||||
|
summary = "Amend team Permissions",
|
||||||
|
description = """Amend the teams permissions with the permissions supplied.
|
||||||
|
|
||||||
|
Teams permissions will include the existing permissions along with the ones supplied.
|
||||||
|
permissions are required to be in format `<module name>_<permission>_<table name>`
|
||||||
|
""",
|
||||||
|
|
||||||
|
methods=["PATCH"],
|
||||||
|
parameters = None,
|
||||||
|
tags = ['team',],
|
||||||
|
request = TeamPermissionSerializer,
|
||||||
|
responses = {
|
||||||
|
200: OpenApiResponse(description='Team has been updated with the supplied permissions'),
|
||||||
|
401: OpenApiResponse(description='User Not logged in'),
|
||||||
|
403: OpenApiResponse(description='User is missing permission or in different organization'),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
put = extend_schema(
|
||||||
|
summary = "Amend team Permissions",
|
||||||
|
tags = ['team',],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
class TeamPermissionDetail(views.APIView):
|
||||||
|
|
||||||
|
permission_classes = [
|
||||||
|
OrganizationPermissionAPI
|
||||||
|
]
|
||||||
|
|
||||||
|
queryset = Team.objects.all()
|
||||||
|
|
||||||
|
serializer_class = TeamPermissionSerializer
|
||||||
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
54
app/api/views/config.py
Normal file
54
app/api/views/config.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
from drf_spectacular.utils import extend_schema, extend_schema_view
|
||||||
|
|
||||||
|
from rest_framework import generics
|
||||||
|
|
||||||
|
from api.serializers.config import ConfigGroupsSerializer
|
||||||
|
from api.views.mixin import OrganizationPermissionAPI
|
||||||
|
|
||||||
|
from config_management.models.groups import ConfigGroups
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
|
get=extend_schema(
|
||||||
|
summary = "Fetch Config groups",
|
||||||
|
description="Returns a list of Config Groups."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
class ConfigGroupsList(generics.ListAPIView):
|
||||||
|
|
||||||
|
permission_classes = [
|
||||||
|
OrganizationPermissionAPI
|
||||||
|
]
|
||||||
|
|
||||||
|
queryset = ConfigGroups.objects.all()
|
||||||
|
lookup_field = 'pk'
|
||||||
|
serializer_class = ConfigGroupsSerializer
|
||||||
|
|
||||||
|
|
||||||
|
def get_view_name(self):
|
||||||
|
return "Config Groups"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema_view(
|
||||||
|
get=extend_schema(
|
||||||
|
summary = "Get A Config Group",
|
||||||
|
# responses = {}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
class ConfigGroupsDetail(generics.RetrieveAPIView):
|
||||||
|
|
||||||
|
permission_classes = [
|
||||||
|
OrganizationPermissionAPI
|
||||||
|
]
|
||||||
|
|
||||||
|
queryset = ConfigGroups.objects.all()
|
||||||
|
lookup_field = 'pk'
|
||||||
|
serializer_class = ConfigGroupsSerializer
|
||||||
|
|
||||||
|
|
||||||
|
def get_view_name(self):
|
||||||
|
return "Config Group"
|
||||||
|
|
||||||
|
|
@ -27,6 +27,7 @@ class Index(viewsets.ViewSet):
|
|||||||
{
|
{
|
||||||
# "teams": reverse("_api_teams", request=request),
|
# "teams": reverse("_api_teams", request=request),
|
||||||
"devices": reverse("API:device-list", request=request),
|
"devices": reverse("API:device-list", request=request),
|
||||||
|
"config_groups": reverse("API:_api_config_groups", request=request),
|
||||||
"organizations": reverse("API:_api_orgs", request=request),
|
"organizations": reverse("API:_api_orgs", request=request),
|
||||||
"software": reverse("API:software-list", request=request),
|
"software": reverse("API:software-list", request=request),
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.forms import ValidationError
|
from django.forms import ValidationError
|
||||||
|
|
||||||
|
from rest_framework import exceptions
|
||||||
from rest_framework.permissions import DjangoObjectPermissions
|
from rest_framework.permissions import DjangoObjectPermissions
|
||||||
|
|
||||||
from access.mixin import OrganizationMixin
|
from access.mixin import OrganizationMixin
|
||||||
@ -28,12 +29,16 @@ class OrganizationPermissionAPI(DjangoObjectPermissions, OrganizationMixin):
|
|||||||
|
|
||||||
self.request = request
|
self.request = request
|
||||||
|
|
||||||
|
method = self.request._request.method.lower()
|
||||||
|
|
||||||
|
if method.upper() not in view.allowed_methods:
|
||||||
|
|
||||||
|
view.http_method_not_allowed(request._request)
|
||||||
|
|
||||||
if hasattr(view, 'queryset'):
|
if hasattr(view, 'queryset'):
|
||||||
if view.queryset.model._meta:
|
if view.queryset.model._meta:
|
||||||
self.obj = view.queryset.model
|
self.obj = view.queryset.model
|
||||||
|
|
||||||
method = self.request._request.method.lower()
|
|
||||||
|
|
||||||
object_organization = None
|
object_organization = None
|
||||||
|
|
||||||
if method == 'get':
|
if method == 'get':
|
||||||
|
@ -307,6 +307,9 @@ curl:
|
|||||||
'SWAGGER_UI_DIST': 'SIDECAR',
|
'SWAGGER_UI_DIST': 'SIDECAR',
|
||||||
'SWAGGER_UI_FAVICON_HREF': 'SIDECAR',
|
'SWAGGER_UI_FAVICON_HREF': 'SIDECAR',
|
||||||
'REDOC_DIST': 'SIDECAR',
|
'REDOC_DIST': 'SIDECAR',
|
||||||
|
'PREPROCESSING_HOOKS': [
|
||||||
|
'drf_spectacular.hooks.preprocess_exclude_path_format'
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
DATETIME_FORMAT = 'j N Y H:i:s'
|
DATETIME_FORMAT = 'j N Y H:i:s'
|
||||||
|
@ -7,6 +7,7 @@ from access.tests.abstract.tenancy_object import TenancyObject as TenancyObjectT
|
|||||||
from app.tests.abstract.views import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
from app.tests.abstract.views import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
||||||
|
|
||||||
from core.mixin.history_save import SaveHistory
|
from core.mixin.history_save import SaveHistory
|
||||||
|
from core.tests.abstract.models import Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -30,7 +31,8 @@ class BaseModel:
|
|||||||
|
|
||||||
class TenancyModel(
|
class TenancyModel(
|
||||||
BaseModel,
|
BaseModel,
|
||||||
TenancyObjectTestCases
|
TenancyObjectTestCases,
|
||||||
|
Models
|
||||||
):
|
):
|
||||||
""" Test cases for tenancy models"""
|
""" Test cases for tenancy models"""
|
||||||
|
|
||||||
|
@ -0,0 +1,224 @@
|
|||||||
|
import pytest
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.shortcuts import reverse
|
||||||
|
from django.test import Client, TestCase
|
||||||
|
|
||||||
|
from access.models import Organization, Team, TeamUsers, Permission
|
||||||
|
|
||||||
|
from app.tests.abstract.models import TenancyModel
|
||||||
|
|
||||||
|
from config_management.models.groups import ConfigGroups
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
class ConfigGroupsAPI(
|
||||||
|
TestCase,
|
||||||
|
):
|
||||||
|
|
||||||
|
model = ConfigGroups
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(self):
|
||||||
|
"""Setup Test
|
||||||
|
|
||||||
|
1. Create an organization for user and item
|
||||||
|
2. Create an item
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.organization = Organization.objects.create(name='test_org')
|
||||||
|
|
||||||
|
|
||||||
|
self.item = self.model.objects.create(
|
||||||
|
organization = self.organization,
|
||||||
|
name = 'one',
|
||||||
|
config = dict({"key": "one", "existing": "dont_over_write"})
|
||||||
|
)
|
||||||
|
|
||||||
|
self.second_item = self.model.objects.create(
|
||||||
|
organization = self.organization,
|
||||||
|
name = 'one_two',
|
||||||
|
config = dict({"key": "two"}),
|
||||||
|
parent = self.item
|
||||||
|
)
|
||||||
|
|
||||||
|
self.url_view_kwargs = {'pk': self.second_item.id}
|
||||||
|
|
||||||
|
view_permissions = Permission.objects.get(
|
||||||
|
codename = 'view_' + self.model._meta.model_name,
|
||||||
|
content_type = ContentType.objects.get(
|
||||||
|
app_label = self.model._meta.app_label,
|
||||||
|
model = self.model._meta.model_name,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
view_team = Team.objects.create(
|
||||||
|
team_name = 'view_team',
|
||||||
|
organization = self.organization,
|
||||||
|
)
|
||||||
|
|
||||||
|
view_team.permissions.set([view_permissions])
|
||||||
|
|
||||||
|
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||||
|
teamuser = TeamUsers.objects.create(
|
||||||
|
team = view_team,
|
||||||
|
user = self.view_user
|
||||||
|
)
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse('API:_api_config_group', kwargs=self.url_view_kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
client.force_login(self.view_user)
|
||||||
|
response = client.get(url)
|
||||||
|
|
||||||
|
self.api_data = response.data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_id(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
id field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'id' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_id(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
id field must be int
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['id']) is int
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_parent(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
parent field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'parent' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_parent(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
parent field must be dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['parent']) is dict
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_name(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
name field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'name' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_name(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
name field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['name']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_config(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
config field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'config' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_config(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
config field must be dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['config']) is dict
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_url(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
url field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'url' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_url(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
url field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['url']) is str
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_parent_id(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
parent.id field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'id' in self.api_data['parent']
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_parent_id(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
parent.id field must be int
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['parent']['id']) is int
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_parent_name(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
parent.name field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'name' in self.api_data['parent']
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_parent_name(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
parent.name field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['parent']['name']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_parent_url(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
parent.url field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'url' in self.api_data['parent']
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_parent_url(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
parent.url field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['parent']['url']) is str
|
@ -3,21 +3,38 @@ import unittest
|
|||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from access.models import TenancyManager
|
||||||
|
|
||||||
|
|
||||||
class Models:
|
class Models:
|
||||||
""" Test cases for Model Abstract Classes """
|
""" Test cases for Model Abstract Classes """
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip(reason="write test")
|
|
||||||
def test_model_class_tenancy_manager_function_get_queryset(self):
|
def test_model_class_tenancy_manager_function_get_queryset(self):
|
||||||
""" Function Check
|
""" Function Check
|
||||||
|
|
||||||
function `get_queryset()` must exist
|
function `get_queryset()` must exist
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pass
|
assert hasattr(self.model.objects, 'get_queryset')
|
||||||
|
|
||||||
|
assert callable(self.model.objects.get_queryset)
|
||||||
|
|
||||||
|
|
||||||
|
@patch.object(TenancyManager, 'get_queryset')
|
||||||
|
def test_model_class_tenancy_manager_function_get_queryset_called(self, get_queryset):
|
||||||
|
""" Function Check
|
||||||
|
|
||||||
|
function `access.models.TenancyManager.get_queryset()` within the Tenancy manager must
|
||||||
|
be called as this function limits queries to the current users organizations.
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.model.objects.filter()
|
||||||
|
|
||||||
|
assert get_queryset.called
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip(reason="write test")
|
@pytest.mark.skip(reason="write test")
|
||||||
|
522
app/itam/tests/unit/device/test_device_api.py
Normal file
522
app/itam/tests/unit/device/test_device_api.py
Normal file
@ -0,0 +1,522 @@
|
|||||||
|
import pytest
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from django.contrib.auth.models import AnonymousUser, User
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.shortcuts import reverse
|
||||||
|
from django.test import Client, TestCase
|
||||||
|
|
||||||
|
from rest_framework.relations import Hyperlink
|
||||||
|
|
||||||
|
from access.models import Organization, Team, TeamUsers, Permission
|
||||||
|
|
||||||
|
from api.tests.abstract.api_permissions import APIPermissions
|
||||||
|
|
||||||
|
from config_management.models.groups import ConfigGroups, ConfigGroupHosts
|
||||||
|
|
||||||
|
from itam.models.device import Device
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceAPI(TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
model = Device
|
||||||
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(self):
|
||||||
|
"""Setup Test
|
||||||
|
|
||||||
|
1. Create an organization for user and item
|
||||||
|
. create an organization that is different to item
|
||||||
|
2. Create a device
|
||||||
|
3. create teams with each permission: view, add, change, delete
|
||||||
|
4. create a user per team
|
||||||
|
"""
|
||||||
|
|
||||||
|
organization = Organization.objects.create(name='test_org')
|
||||||
|
|
||||||
|
self.organization = organization
|
||||||
|
|
||||||
|
different_organization = Organization.objects.create(name='test_different_organization')
|
||||||
|
|
||||||
|
|
||||||
|
self.item = self.model.objects.create(
|
||||||
|
organization=organization,
|
||||||
|
name = 'deviceone',
|
||||||
|
uuid = 'val',
|
||||||
|
serial_number = 'another val'
|
||||||
|
)
|
||||||
|
|
||||||
|
config_group = ConfigGroups.objects.create(
|
||||||
|
organization = self.organization,
|
||||||
|
name = 'one',
|
||||||
|
config = dict({"key": "one", "existing": "dont_over_write"})
|
||||||
|
)
|
||||||
|
|
||||||
|
config_group_second_item = ConfigGroups.objects.create(
|
||||||
|
organization = self.organization,
|
||||||
|
name = 'one_two',
|
||||||
|
config = dict({"key": "two"}),
|
||||||
|
parent = config_group
|
||||||
|
)
|
||||||
|
|
||||||
|
config_group_hosts = ConfigGroupHosts.objects.create(
|
||||||
|
organization = organization,
|
||||||
|
host = self.item,
|
||||||
|
group = config_group,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
config_group_hosts_two = ConfigGroupHosts.objects.create(
|
||||||
|
organization = organization,
|
||||||
|
host = self.item,
|
||||||
|
group = config_group_second_item,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# self.url_kwargs = {'pk': self.item.id}
|
||||||
|
|
||||||
|
self.url_view_kwargs = {'pk': self.item.id}
|
||||||
|
|
||||||
|
# self.add_data = {'name': 'device', 'organization': self.organization.id}
|
||||||
|
|
||||||
|
|
||||||
|
view_permissions = Permission.objects.get(
|
||||||
|
codename = 'view_' + self.model._meta.model_name,
|
||||||
|
content_type = ContentType.objects.get(
|
||||||
|
app_label = self.model._meta.app_label,
|
||||||
|
model = self.model._meta.model_name,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
view_team = Team.objects.create(
|
||||||
|
team_name = 'view_team',
|
||||||
|
organization = organization,
|
||||||
|
)
|
||||||
|
|
||||||
|
view_team.permissions.set([view_permissions])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# add_permissions = Permission.objects.get(
|
||||||
|
# codename = 'add_' + self.model._meta.model_name,
|
||||||
|
# content_type = ContentType.objects.get(
|
||||||
|
# app_label = self.model._meta.app_label,
|
||||||
|
# model = self.model._meta.model_name,
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
|
||||||
|
# add_team = Team.objects.create(
|
||||||
|
# team_name = 'add_team',
|
||||||
|
# organization = organization,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# add_team.permissions.set([add_permissions])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# change_permissions = Permission.objects.get(
|
||||||
|
# codename = 'change_' + self.model._meta.model_name,
|
||||||
|
# content_type = ContentType.objects.get(
|
||||||
|
# app_label = self.model._meta.app_label,
|
||||||
|
# model = self.model._meta.model_name,
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
|
||||||
|
# change_team = Team.objects.create(
|
||||||
|
# team_name = 'change_team',
|
||||||
|
# organization = organization,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# change_team.permissions.set([change_permissions])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# delete_permissions = Permission.objects.get(
|
||||||
|
# codename = 'delete_' + self.model._meta.model_name,
|
||||||
|
# content_type = ContentType.objects.get(
|
||||||
|
# app_label = self.model._meta.app_label,
|
||||||
|
# model = self.model._meta.model_name,
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
|
||||||
|
# delete_team = Team.objects.create(
|
||||||
|
# team_name = 'delete_team',
|
||||||
|
# organization = organization,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# delete_team.permissions.set([delete_permissions])
|
||||||
|
|
||||||
|
|
||||||
|
# self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
||||||
|
|
||||||
|
|
||||||
|
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||||
|
teamuser = TeamUsers.objects.create(
|
||||||
|
team = view_team,
|
||||||
|
user = self.view_user
|
||||||
|
)
|
||||||
|
|
||||||
|
# self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
||||||
|
# teamuser = TeamUsers.objects.create(
|
||||||
|
# team = add_team,
|
||||||
|
# user = self.add_user
|
||||||
|
# )
|
||||||
|
|
||||||
|
# self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
||||||
|
# teamuser = TeamUsers.objects.create(
|
||||||
|
# team = change_team,
|
||||||
|
# user = self.change_user
|
||||||
|
# )
|
||||||
|
|
||||||
|
# self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
||||||
|
# teamuser = TeamUsers.objects.create(
|
||||||
|
# team = delete_team,
|
||||||
|
# user = self.delete_user
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
# self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
||||||
|
|
||||||
|
|
||||||
|
# different_organization_team = Team.objects.create(
|
||||||
|
# team_name = 'different_organization_team',
|
||||||
|
# organization = different_organization,
|
||||||
|
# )
|
||||||
|
|
||||||
|
# different_organization_team.permissions.set([
|
||||||
|
# view_permissions,
|
||||||
|
# add_permissions,
|
||||||
|
# change_permissions,
|
||||||
|
# delete_permissions,
|
||||||
|
# ])
|
||||||
|
|
||||||
|
# TeamUsers.objects.create(
|
||||||
|
# team = different_organization_team,
|
||||||
|
# user = self.different_organization_user
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
url = reverse('API:device-detail', kwargs=self.url_view_kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
client.force_login(self.view_user)
|
||||||
|
response = client.get(url)
|
||||||
|
|
||||||
|
self.api_data = response.data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_id(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
id field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'id' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_id(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
id field must be int
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['id']) is int
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_is_global(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
is_global field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'is_global' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_is_global(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
is_global field must be boolean
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['is_global']) is bool
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_name(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
name field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'name' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_name(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
name field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['name']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_config(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
config field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'config' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_config(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
config field must be dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['config']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_serial_number(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
serial_number field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'serial_number' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_serial_number(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
serial_number field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['serial_number']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_uuid(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
uuid field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'uuid' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_uuid(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
uuid field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['uuid']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_inventorydate(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
inventorydate field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'inventorydate' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_inventorydate(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
inventorydate field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert (
|
||||||
|
type(self.api_data['inventorydate']) is str
|
||||||
|
or
|
||||||
|
self.api_data['inventorydate'] is None
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_created(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
created field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'created' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_created(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
created field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['created']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_modified(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
modified field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'modified' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_modified(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
modified field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['modified']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_groups(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
groups field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'groups' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_groups(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
groups field must be list
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['groups']) is list
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_organization(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
organization field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'organization' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_organization(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
organization field must be dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['organization']) is dict
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_url(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
url field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'url' in self.api_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_url(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
url field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['url']) is Hyperlink
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_organization_id(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
organization.id field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'id' in self.api_data['organization']
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_organization_id(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
organization.id field must be int
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['organization']['id']) is int
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_organization_name(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
organization.name field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'name' in self.api_data['organization']
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_organization_name(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
organization.name field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['organization']['name']) is str
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_groups_id(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
groups.id field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'id' in self.api_data['groups'][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_groups_id(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
groups.id field must be int
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['groups'][0]['id']) is int
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_groups_name(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
groups.name field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'name' in self.api_data['groups'][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_groups_name(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
groups.name field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['groups'][0]['name']) is str
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_exists_groups_url(self):
|
||||||
|
""" Test for existance of API Field
|
||||||
|
|
||||||
|
groups.url field must exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert 'url' in self.api_data['groups'][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_field_type_groups_url(self):
|
||||||
|
""" Test for type for API Field
|
||||||
|
|
||||||
|
groups.url field must be str
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert type(self.api_data['groups'][0]['url']) is Hyperlink
|
@ -1,5 +1,5 @@
|
|||||||
from django.contrib.auth import decorators as auth_decorator
|
from django.contrib.auth import decorators as auth_decorator
|
||||||
from django.db.models import Count
|
from django.db.models import Count, Q
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
|
|
||||||
@ -62,7 +62,21 @@ class View(ChangeView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
operating_system_versions = OperatingSystemVersion.objects.filter(operating_system=self.kwargs['pk']).order_by('name').annotate(installs=Count("deviceoperatingsystem"))
|
operating_system_versions = OperatingSystemVersion.objects.filter(
|
||||||
|
operating_system=self.kwargs['pk']
|
||||||
|
).order_by(
|
||||||
|
'name'
|
||||||
|
).annotate(
|
||||||
|
installs=Count(
|
||||||
|
"deviceoperatingsystem",
|
||||||
|
filter=Q(deviceoperatingsystem__device__organization__in = self.user_organizations())
|
||||||
|
),
|
||||||
|
# filter=Q(deviceoperatingsystem__operating_system_version__organization__in = self.user_organizations())
|
||||||
|
# filter=Q(deviceoperatingsystem__operating_system_version__deviceoperatingsystem__device__organization__in = self.user_organizations()),
|
||||||
|
filter=Q(deviceoperatingsystem__operating_system_version__organization__in = self.user_organizations()),
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
context['operating_system_versions'] = operating_system_versions
|
context['operating_system_versions'] = operating_system_versions
|
||||||
|
|
||||||
installs = DeviceOperatingSystem.objects.filter(operating_system_version__operating_system_id=self.kwargs['pk'])
|
installs = DeviceOperatingSystem.objects.filter(operating_system_version__operating_system_id=self.kwargs['pk'])
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.contrib.auth import decorators as auth_decorator
|
from django.contrib.auth import decorators as auth_decorator
|
||||||
from django.db.models import Count
|
from django.db.models import Count, Q
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
|
|
||||||
@ -71,9 +71,12 @@ class View(ChangeView):
|
|||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
software_versions = SoftwareVersion.objects.filter(
|
software_versions = SoftwareVersion.objects.filter(
|
||||||
software=self.kwargs['pk']
|
software=self.kwargs['pk'],
|
||||||
).annotate(
|
).annotate(
|
||||||
installs=Count("installedversion")
|
installs=Count(
|
||||||
|
"installedversion",
|
||||||
|
filter=Q(installedversion__organization__in = self.user_organizations())
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
context['software_versions'] = software_versions
|
context['software_versions'] = software_versions
|
||||||
|
4
artifacthub-repo.yml
Normal file
4
artifacthub-repo.yml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
repositoryID: 17eaf871-a980-41ba-b841-2a78734535ca
|
||||||
|
owners:
|
||||||
|
- name: no-fuss-computing
|
||||||
|
email: helpdesk@nofusscomputing.com
|
@ -57,6 +57,14 @@ RUN cd /tmp/python_modules \
|
|||||||
|
|
||||||
FROM python:3.11-alpine3.19
|
FROM python:3.11-alpine3.19
|
||||||
|
|
||||||
|
LABEL \
|
||||||
|
org.opencontainers.image.vendor="No Fuss Computing" \
|
||||||
|
org.opencontainers.image.title="Centurion ERP" \
|
||||||
|
org.opencontainers.image.description="An ERP with a focus on ITSM and automation" \
|
||||||
|
org.opencontainers.image.vendor="No Fuss Computing" \
|
||||||
|
io.artifacthub.package.license="MIT"
|
||||||
|
|
||||||
|
|
||||||
ARG CI_PROJECT_URL
|
ARG CI_PROJECT_URL
|
||||||
ARG CI_COMMIT_SHA
|
ARG CI_COMMIT_SHA
|
||||||
ARG CI_COMMIT_TAG
|
ARG CI_COMMIT_TAG
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Authentication
|
||||||
|
description: Authentication administration documentation for Centurion ERP by No Fuss Computing
|
||||||
|
date: 2024-07-19
|
||||||
|
template: project.html
|
||||||
|
about: https://gitlab.com/nofusscomputing/infrastructure/configuration-management/centurion_erp
|
||||||
|
---
|
||||||
|
|
||||||
|
Centurion ERP requires that a user be authenticated to access the ERP features of the application. The built in authentication system as well as Single Sign on (SSO) via an identity broker is available.
|
11
docs/projects/centurion_erp/administration/backup.md
Normal file
11
docs/projects/centurion_erp/administration/backup.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: Backup
|
||||||
|
description: Backup documentation for Centurion ERP by No Fuss Computing
|
||||||
|
date: 2024-07-19
|
||||||
|
template: project.html
|
||||||
|
about: https://gitlab.com/nofusscomputing/infrastructure/configuration-management/centurion_erp
|
||||||
|
---
|
||||||
|
|
||||||
|
Most Data within Centurion ERP resides within the database. This simplifies the backup/restoration process as only the database the application uses needs to be backed up.
|
||||||
|
|
||||||
|
Tasks that have been sent to the RabbitMQ server will remain within the task queue, if Centurion ERP has not processed them. Should you wish not to loose tasks you should also backup the rabbitMQ server.
|
@ -9,24 +9,15 @@ about: https://gitlab.com/nofusscomputing/infrastructure/configuration-managemen
|
|||||||
This documentation is targeted towards those whom administer the applications deployment.
|
This documentation is targeted towards those whom administer the applications deployment.
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Contents
|
||||||
|
|
||||||
To install this application you must have a container engine installed, both docker and kubernetes are supported. The container image is available on [Docker Hub](https://hub.docker.com/r/nofusscomputing/centurion-erp) and can be pulled with `docker pull nofusscomputing/centurion-erp:latest`.
|
- [Authentication](./authentication.md)
|
||||||
|
|
||||||
Settings for the application are stored within a docker volume at path `/etc/itsm/`, with the settings living in `.py` files. A database is also required for the application to store it's settings. SQLLite and MariaDB/MySQL are supported.
|
- [Backup](./backup.md)
|
||||||
|
|
||||||
|
- [Installation](./installation.md)
|
||||||
|
|
||||||
|
|
||||||
### Background workers
|
## Ansible Automation Platform / AWX
|
||||||
|
|
||||||
This application requires that you deploy at least one background worker. The background worker requires access to a RabbitMQ message broker for the queueing and routing of messages (background jobs). If you are using our docker container to deploy this application, launch an additional container with `celery -A app worker -l INFO` as the entrypoint/command. Configuration for the worker resides in directory `/etc/itsm/` within the container. see below for the `CELERY_` configuration.
|
We have built an [Ansible Collection](../../ansible/collections/centurion/index.md) for Centurion ERP that you could consider the bridge between the config within Centurion and the end device. This collection can be directly added to AAP / AWX as a project which enables accessing the features the collection has to offer. Please refer to the [collections documentation](../../ansible/collections/centurion/index.md) for further information.
|
||||||
|
|
||||||
|
|
||||||
### Settings file
|
|
||||||
|
|
||||||
The settings file is a python file `.py` and must remain a valid python file for the application to work.
|
|
||||||
|
|
||||||
``` py title="settings.py"
|
|
||||||
|
|
||||||
--8<-- "includes/etc/itsm/settings.py"
|
|
||||||
|
|
||||||
```
|
|
||||||
|
78
docs/projects/centurion_erp/administration/installation.md
Normal file
78
docs/projects/centurion_erp/administration/installation.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
title: Installation
|
||||||
|
description: Installation documentation for Centurion ERP by No Fuss Computing
|
||||||
|
date: 2024-07-19
|
||||||
|
template: project.html
|
||||||
|
about: https://gitlab.com/nofusscomputing/infrastructure/configuration-management/centurion_erp
|
||||||
|
---
|
||||||
|
|
||||||
|
Centurion ERP is a simple application to deploy with the only additional requirements being that you have already deployed a database server and a RabbitMQ server. Centurion ERP is container based and is deployable via Docker or upon Kubernetes. Our images are available on [Docker Hub](https://hub.docker.com/r/nofusscomputing/centurion-erp).
|
||||||
|
|
||||||
|
!!! note "TL;DR"
|
||||||
|
`docker pull nofusscomputing/centurion-erp:latest`.
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Basic installation steps are as follows:
|
||||||
|
|
||||||
|
1. Deploy a Database Server
|
||||||
|
|
||||||
|
1. Deploy a RabbitMQ Server
|
||||||
|
|
||||||
|
1. Deploy a Web container for Centurion ERP
|
||||||
|
|
||||||
|
1. Deploy a Worker container for Centurion ERP
|
||||||
|
|
||||||
|
1. Add settings file to path `/etc/itsm/settings.py` for both Centurion ERP containers.
|
||||||
|
|
||||||
|
1. Run migrations
|
||||||
|
|
||||||
|
- Docker `docker exec -ti <container name or id> -- python manage.py migrate`
|
||||||
|
|
||||||
|
- Kubernetes `kubectl exec -ti -n <namespace> deploy/<deployment-name> -- python manage.py migrate`
|
||||||
|
|
||||||
|
|
||||||
|
### Database Server
|
||||||
|
|
||||||
|
As Centurion ERP is uses the Django Framework, Theoretically Every Django supported database is available. The reality is however, that we have only used PostgreSQL Server with Centurion ERP. By default if no database is configured a SQLite database will be used. This allows [tests](../development/testing.md) to function and to quickly spin up a deployment for testing.
|
||||||
|
|
||||||
|
|
||||||
|
### RabbitMQ Server
|
||||||
|
|
||||||
|
Centurion ERP uses RabbitMQ as for its worker queue. As tasks are created when using Centurion ERP, they are added to the RabbitMQ server for the background worker to pickup. When the background worker picks up the task, it does it's business, clears the task from the RabbitMQ server and saves the [results](../user/core/index.md#background-worker) within the Database.
|
||||||
|
|
||||||
|
|
||||||
|
### Web Container
|
||||||
|
|
||||||
|
The [web container](https://hub.docker.com/r/nofusscomputing/centurion-erp) is the guts of Centurion ERP. It provides the interface and endpoints for interacting with Centurion ERP. This container is scalable with the only additional requirement being that a load-balancer be placed in front of all web containers for traffic routing. If deploying to Kubernetes the service load-balancer is sufficient and setting the deployment `replicas` to the number of desired containers is the simplest method to scale.
|
||||||
|
|
||||||
|
|
||||||
|
### Background Worker Container
|
||||||
|
|
||||||
|
The [Background Worker container](https://hub.docker.com/r/nofusscomputing/centurion-erp) is a worker that waits for tasks sent to the RabbitMQ server. The worker is based upon [Celery](https://docs.celeryq.dev/en/stable/index.html). On the worker not being busy, it'll pickup and run the task. This container is scalable with nil additional requirements for launching additional workers. If deploying to Kubernetes the setting the deployment `replicas` to the number of desired containers is the simplest method to scale. The container start command will need to be set to `celery -A app worker -l INFO` so that the worker is started on container startup.
|
||||||
|
|
||||||
|
Configuration for the worker resides in directory `/etc/itsm/` within the container. see below for the `CELERY_` configuration.
|
||||||
|
|
||||||
|
|
||||||
|
### Settings file
|
||||||
|
|
||||||
|
The settings file is a python file `.py` and must remain a valid python file for the application to work. Settings for the application are stored within a docker volume at path `/etc/itsm/`, with the settings living in `.py` files. A database is also required for the application to store it's settings. SQLLite and MariaDB/MySQL are supported.
|
||||||
|
|
||||||
|
``` py title="settings.py"
|
||||||
|
|
||||||
|
--8<-- "includes/etc/itsm/settings.py"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Migrations
|
||||||
|
|
||||||
|
Migrations serve the purpose of setting up the database. On initial deployment of Centurion ERP migrations must be run as must they be on any upgrade.
|
||||||
|
|
||||||
|
|
||||||
|
## Updating
|
||||||
|
|
||||||
|
We use [semver](https://semver.org/) versioning for Centurion ERP. Using this method of versioning enables us to clearly show what versions will have breaking changes. You can rest assured that every version whose `Major` version number remains the same will not break your deployment. [Release notes](https://gitlab.com/nofusscomputing/projects/centurion_erp/-/blob/master/Release-Notes.md) are available within the repository root and are a running document for the current `Major` release. To locate the release notes for your particular version please select the release tag from the branches drop-down. We will use the release notes to denote **Any** Breaking changes.
|
||||||
|
|
||||||
|
Updating to a newer version of Centurion ERP is as simple as [backing up your database](./backup.md) and RabbitMQ server, then updating the deployed image to the desired version and running the database migrations.
|
@ -27,6 +27,8 @@ Whilst there are many Enterprise Rescource Planning (ERP) applications, Centurio
|
|||||||
|
|
||||||
Centurion ERP contains the following modules:
|
Centurion ERP contains the following modules:
|
||||||
|
|
||||||
|
- [Companion Ansible Collection](../ansible/collections/centurion/index.md)
|
||||||
|
|
||||||
- [Configuration Management](./user/config_management/index.md)
|
- [Configuration Management](./user/config_management/index.md)
|
||||||
|
|
||||||
- [IT Asset Management (ITAM)](./user/itam/index.md)
|
- [IT Asset Management (ITAM)](./user/itam/index.md)
|
||||||
|
Submodule gitlab-ci updated: 673441f83a...58ffcabbfb
@ -56,6 +56,12 @@ nav:
|
|||||||
|
|
||||||
- projects/centurion_erp/administration/index.md
|
- projects/centurion_erp/administration/index.md
|
||||||
|
|
||||||
|
- projects/centurion_erp/administration/authentication.md
|
||||||
|
|
||||||
|
- projects/centurion_erp/administration/backup.md
|
||||||
|
|
||||||
|
- projects/centurion_erp/administration/installation.md
|
||||||
|
|
||||||
- Development:
|
- Development:
|
||||||
|
|
||||||
- projects/centurion_erp/development/index.md
|
- projects/centurion_erp/development/index.md
|
||||||
|
Reference in New Issue
Block a user