## 1.16.0 (2025-05-04)

### feat

- **core**: Add ViewSet for Ticket Comments
- **project_management**: Depreciate Project Task Ticket Endpoint
- **itim**: Depreciate Problem Ticket Endpoint
- **itim**: Depreciate Incident Ticket Endpoint
- **itim**: Depreciate Change Ticket Endpoint
- **assistance**: Depreciate Ticket Comment
- **assistance**: Depreciate Request Ticket Endpoint
- **core**: Add routes for Ticket Comments
- **core**: update ticket serializer to use new comment base url
- **core**: Add permissions `import`, `purge` and `triage` to model TicketCommentSolution
- **core**: Add permissions `import`, `purge` and `triage` to model TicketCommentBase
- **core**: Filter ticket_comment_model routes to those defined in `Meta.sub_model_type`
- **core**: Filter ticket_model routes to those defined in `Meta.sub_model_type`
- **access**: Filter entity_model routes to thos defined in `Meta.sub_model_type`
- **core**: Serializer for TicketCommentBase
- **core**: Serializer for TicketCommentSolution
- **core**: Ticket Comment Get URL functions
- **core**: Ticket Comment Validation for comment_type
- **core**: Update choices fields for TicketCommentBase model
- **core**: init for model TicketCommentSolution
- **core**: Migrations for choice fields for TicketBase model
- **core**: Migrations for model TicketCommentSolution
- **core**: Update choice fields for TicketBase model
- **core**: New model TicketCommentSolution
- **api**: when fetching related_object, default to base_model for SubModelViewSet
- Add field `Meta.sub_model_type` to sub-models
- **core**: New interim model TicketCommentSolution
- **core**: add ticket routes
- **itim**: serializer for SLMTicketBase
- **itim**: Serializer for RequestTicket
- **itim**: migrations for RequestTicket
- **itim**: New Model RequestTicket
- **itim**: migration for SLMTicketBase
- **itim**: New Model SLMTicketBase
- **core**: migrations for TicketCommentBase
- **core**: New Model TicketCommentBase
- **core**: viewset for TicketBase
- **core**: serializer for TicketBase
- **core**: migrations for TicketBase
- **core**: New Model TicketBase
- **project_management**: add estimation field to project api fields
- **human_resources**: nav menu entries for Employee
- **human_resources**: Serializer for Employee
- **human_resources**: Migration for Employee
- **human_resources**: New model Employee
- **devops**: add missing api index menu entry for devops
- **access**: add missing nav menu entries for entities
- **human_resources**: add module to perms selector

### Fixes

- **test**: correct typo in attribute parameterized_
- **core**: Ticktet comment can have empty body
- **core**: If model does not save history, dont attempt to cache before
- **itam**: provide return_url as part of software version meta
- **itim**: correct ticket_slm serializer
- **itim**: correct ticket_request serializer
- **api**: SubModelViewSet.related_objects must be the same class as the base model
- **access**: Ensure related model is a sub-model
- **human_resources**: Correct history link generation and add docs
- **human_resources**: Correct history link generation
- **access**: add missing attribute to Tenancy object

### Refactoring

- **test**: rewrite model unit tests to use PyTest
- **test**: Update test parameterization
- **api**: SubModelViewSet must inherit from ModelViewSet as it's an extension
- **core**: rename ticket model filename in preparation for base ticket model
- **access**: migrate sub-model viewset logic to common
- **project_management**: add duration field to project api fields
- **human_resources**: Move employee details to its own section

### Tests

- **core**: Serializer Validation for ticket status change for TicketBase model
- **core**: Prevent Closing / Solving of TicketBase Model if not ready
- **itim**: Incomplete Model Unit Tests for RequestTicket
- **itim**: Incomplete Model Unit Tests for SLMTicketBase
- **core**: Incomplete Model Unit Tests for TicketBase
- **itim**: RequestTicket Updated, yet incomplete Test Suite for Serializer
- **itim**: SLMTicketBase Updated, yet incomplete Test Suite for Serializer
- **core**: TicketBase Updated, yet incomplete Test Suite for Serializer
- Correct Test Suite for Serializer for models TicketBase, TicketRequest and TicketSLM
- **itim**: RequestTicket Initial Test Suite for Serializer
- **itim**: SLMTicket Initial Test Suite for Serializer
- **core**: TicketBase Initial Test Suite for Serializer
- **core**: SLMTicket Test Suite for ViewSet
- **core**: SLMTicket Test Suite for Metadata
- **core**: Request Test Suite for ViewSet
- **core**: Request Test Suite for Metadata
- **core**: TicketBase Test Suite for ViewSet
- **core**: TicketBase Test Suite for Metadata
- **api**: update test cases for SubModelViewSet Base Test Class
- **itim**: RequestTicket ViewSet Test Suite
- **core**: TicketBase ViewSet Test Suite
- **api**: Incomplete SubModelViewSet Test Cases
- **api**: SubModelViewSet Test Suite Setup
- correct tests from Meta.sub_model_type changes
- correct serializer imports from recent file renames
- Fixture for creating model with random data
- **itim**: API Field checks for TicketSLMBase
- **itim**: API Field checks for TicketRequest
- **core**: API fields Tests for TicketBase
- **core**: API fields Unit Test Suite
- **core**: Correct model notes test suite
- **core**: API Permission Test Cases for ticket_base model
- **api**: add API Permission Test Cases
- **access**: Correct history link test cases
- **project_management**: Add test cases for api field render for model fields `estimation_project` and `duration_project`
- **human_resources**: History Serializer and ViewSet Functional test suites for employee
- **human_resources**: APIv2, History, Model and ViewSet Unit test suites for employee
- Migrate models to use refactored model tests
- Consolidate All model tests to remove duplicates and to simplify

## 1.15.1 (2025-04-10)

### Fixes

- **python**: Downgrade django 5.2 -> 5.1.8

## 1.15.0 (2025-04-10)

### feat

- **settings**: Move Ticket Comment Category from settings to ITOps menu
- **settings**: Move Ticket Category from settings to ITOps menu
- **access**: place roles nav behind feature flag 2025-00003
- **access**: place directory nav behind feature flag 2025-00002
- **accounting**: add new module
- **access**: Ensure that the same person cant be created more than once
- **access**: Place Roles Model behind feature flag `2025-00003`
- **access**: When querying permissions, select related field `content_type`
- **core**: Model tag for Access/Role
- **access**: Model Role notes endpoint
- **access**: Add navigation entry for roles
- **access**: Model Role History migrations
- **access**: Add model Role History
- **access**: Role Notes model viewset
- **access**: Role Notes model serializer
- **access**: Model Role Notes migrations
- **access**: Add model Role Notes
- **access**: Role model viewset
- **access**: Role model serializer
- **access**: Model Role migrations
- **access**: Add model Role
- **python**: Upgrade Django 5.1.7 -> 5.2
- **access**: Place Entity URLs behind feature flag `2025-00002`
- **access**: Add detail page layout for contact model
- **access**: Add Menu entry for corporate directory
- **access**: Add back_url to Entity metadata
- **core**: Add Entity model tag
- **access**: Update Entity field `entity_type` if it does not match the entity type
- **access**: All Entity models to use the entity history endpoint
- **access**: Enable specifying the history model to use for audit history for a model
- **access**: Enable specifying the kb model to use for linking kb article to a model
- **access**: All Entity models to use the entity notes endpoint
- **access**: Enable specifying the notes `basename` for a model
- **access**: ViewSet for Entity Notes model
- **access**: Serializer for Entity Notes model
- **access**: new model Entity Notes
- **access**: New model Entity History
- **access**: Add Entity URL routes
- **access**: new serializer Contact
- **access**: new model Contact
- **access**: new serializer Person
- **access**: new model Person
- **access**: new ViewSet for for Entity and sub-entities
- **access**: new serializer Entity
- **access**: new model Entity
- **human_resources**: Add navigation menu entry for Human Resources (HR)
- **human_resources**: Add module Human Resources (HR) to API Urls
- **base**: Add module Human Resources (HR) to installed apps
- Add module Human Resources (HR)

### Fixes

- **api**: Correct documentation link to use models verbose name
- **feature_flag**: cater for settings flag overrides
- **access**: Add missing field directory to contact model
- **settings**: Add Application Settings to Admin page
- **access**: Remove app_namespace from Entity
- **access**: add missing tenancy object fields to non-tenancy object models
- **core**: Dont attempt to fetch history related objects if no history exists
- **api**: Dont attempt to access kwargs if not exists within common serializer

### Refactoring

- **core**: When saving history, ensure field `_prefetched_objects_cache` is not included

### Tests

- **settings**: Correct nav menu entry for Ticket Category and Ticket Comment Category
- **access**: Ensure Model Contacts inherits from Person Model
- **access**: Functional Test Suite for Contact API Metadata, API Permissions and ViewSet
- **access**: Functional Test Suite for Contact serializer
- **access**: Functional Test Suite for Contact history
- **access**: Correct Entity and person functional Test Suite so sub-model testing works
- **access**: Correct table_fields test case to cater for dynamic field
- **access**: Unit Test for Contact ViewSet
- **access**: Unit Test for Contact model
- **access**: Unit Test for Contact history API field checks
- **access**: Unit Test for Contact API field checks
- **access**: Unit Test for Person Tenancy Object
- **access**: Correct Entity and person unit Test Suite so sub-model testing works
- **access**: Entity Function Serializer test cases
- **access**: Person Model field test cases
- **access**: Functional Test for Person ViewSet, Permissions and Metadata
- **access**: Functional Test for Person History
- **access**: Correct Entity Function Test Suite so sub-model testing works
- **access**: Unit Test for Person ViewSet
- **access**: Unit Test for Person Model
- **access**: Unit Test for Person History API fields
- **access**: Unit Test for Person API fields
- **access**: Unit Test for Person Tenancy Object
- **access**: Correct Entity Test Suite so sub-model testing works
- **app**: exclude any field check that ends in `_ptr_id`
- **access**: Remove teardown from Function Test cases for Role serializer
- **access**: Test cases for Role serializer
- **access**: Function Test cases for Role SPI Permissions, ViewSet and Metadata
- **access**: Function Test cases for Role History
- **access**: Unit Test case to ensure Role is by organization
- **access**: Unit Test case to ensure Role cant be set as global object
- **access**: Unit Test cases for Role ViewSet
- **access**: Unit Test cases for Role model
- **access**: Unit Test cases for Role History API v2
- **access**: Unit Test cases for Role API v2
- **access**: Unit Test cases for Role Tenancy Object
- During testing add debug_feature_flags so object behind can be tested
- **access**: Notes ViewSet Functional Tests for Entity Model
- **access**: Notes API Field Functional Tests for Entity Model
- **access**: Correct functional ViewSet test suite for Entity model
- **access**: History functional Tests for Entity model
- **access**: PermissionsAPI, ViewSet and Metadata Tests for Entity model
- **access**: Model test cases for Entity
- **access**: API Rendering test cases for Entity model
- **api**: Ensure that when mocking the request the viewset is instantiated
- **access**: History tests for Entity model
- **access**: ViewSet tests for Entity model
- **access**: Tenancy object test for Entity model

## 1.14.0 (2025-03-29)

### feat

- **itops**: Add navigation menu
- New Module ITOps
- **devops**: Ensure GitHub Groups can't be nested
- **devops**: Models  Git Repository must use organization from `git_group` as must group if parent set
- **devops**: Add git provider badge to git_group table fields
- **devops**: Add git provider badge to git_repository table fields
- **devops**: Add Git GRoup to navigation
- **itam**: Add `back_url` to Software Version ViewSet
- **itam**: Add `back_url` to Operating System ViewSet
- **devops**: Add `page_layout` to Git Group model
- **devops**: Add `page_layout` to GitLab repository model
- **devops**: Add `page_layout` to GitHub repository model
- **devops**: git_repository ViewSet updated to fetch queryset based off of repository provider
- **devops**: Add ti git_repository ViewSet return and back urls
- **devops**: Make fields `provider` and `provider_id` unique_together for git_repository model
- **devops**: Add fields to ALL git_repository serializers
- **devops**: Add fetching of URL to base git_repository model
- **api**: Enable fetching of app_namespace from model
- **access**: Add function get_page_layout
- **feature_flag**: Provide user with ability to override feature flags
- **base**: Add middleware feature_flag
- **devops**: Disable notes for GIT Repository Base Model
- **devops**: Add git_repository model tag migration
- **devops**: Add git_repository as a model that can be linked to a ticket
- **devops**: Git Group Notes Migration
- **devops**: Git Group Notes ViewSet
- **devops**: Git Group Notes Serializer
- **devops**: Git Group Notes Model
- **devops**: GitHub and GitLab Repository Notes Migrations
- **devops**: GitLab Repository Notes Viewset
- **devops**: GitHub Repository Notes Viewset
- **devops**: GitLab Repository Notes Serializer
- **devops**: GitHub Repository Notes Serializer
- **devops**: GitLab Repository Notes Model
- **devops**: GitHub Repository Notes Model
- **devops**: Git Group History Migrations
- **devops**: Git Group History
- **devops**: GitLab and GitHub Repository History Migrations
- **devops**: GitLab Repository History
- **devops**: GitHub Repository History
- **devops**: [2025-00001] Git Group and Repositories URLs
- **devops**: Git Group and Repositories Migrations
- **devops**: GIT Group ViewSet
- **devops**: GIT Group Serializer
- **devops**: GIT Group Model
- **devops**: GIT Repositories Viewset
- **devops**: GitLab Serializer for git repositories
- **devops**: GitHub Serializer for git repositories
- **devops**: Base Serializer for git repositories
- **devops**: GitLab Repository Model
- **devops**: GitHub Repository Model
- **devops**: Base model for git repositories
- **core**: Enable slash command related ticket to have multiple ticket references
- **core**: Enable slash command linked model to have multiple models
- **core**: process ticket slash commands by line
- **core**: Migrations for new slash commands
- **project_management**: Add project_state slash command
- **core**: Add ticket_comment_category slash command
- **core**: Add ticket_category slash command
- **itam**: when displaying software version, add prefix with software name
- **itam**: Add markdown tag $software_version
- **itam**: Enable ticket tab on software version page

### Fixes

- **devops**: Correct git_group serializer parameter name
- **devops**: Correct field path to no be unique for git_repository
- **feature_flag**: if over_rides not set ensure val set to empty dict
- **devops**: git_group serializers must define fields
- **devops**: git_group serializers must return urls
- **devops**: Correct git_repository notes urls
- **devops**: Correct git_repository url regex
- **devops**: Correct ViewSerializer for GitLab Repository
- **devops**: Correct ViewSerializer for GitHib Repository
- **devops**: Correct model git_group modified field name part 2
- **devops**: Correct model git_group modified field name
- **api**: Fetching of serializer_class must be dynamic
- **core**: Don't create an empty ticket comment if the body is empty when slash commands removed
- **core**: when processing slash commands trim each line prior to processing
- **core**: slash command NL char is `\r\n` not `\n`, however support both
- **core**: When processing slash commands trim whitespace on return
- **core**: Ensure linked ticket models are unique
- **itam**: Add back url to software_version model

### Refactoring

- **devops**: remove model unique_together constraint for git group and repository
- **devops**: Field `provider_id` must not be user editable for git group or repository
- **api**: mv _nav property to function get_nav_items

### Tests

- **api**: Correct test cases for view_name and view_description
- Refactor all ViewSet Unit Test cases to use new test cases class
- **api**: Common ViewSet classes Tests and Test cases for classes that inherit them
- **api**: correct nav menu setup to use mock request
- **core**: un-mark tests as skipped so that multiple linked items per ticket can be tested
- **core**: correct ticket linked item to prevent duplicate creation

## 1.13.1 (2025-03-17)

### Fixes

- **devops**: After fetching feature flags dont attempt to access results unless status=200
- **docker**: only download feature flags when not a worker
- **devops**: Use correct stderr function when using feature_flag management command
- **devops**: Cater for connection timeout when fetching feature flags
- when building feature flag version, use first 8 chars of build hash

### Refactoring

- **docker**: Use crontabs not cron.d

## 1.13.0 (2025-03-16)

### feat

- **devops**: Add ability for user to turn off feature flagging check-in
- **devops**: When displaying the feature_flag deployments, limit to last 24-hours
- **devops**: During feature flag `Checkin` derive the version from the last field of the user-agent
- **devops**: Add missing column to model `Checkin`
- **devops**: Remove model `Checkin` permissions from permissions selector
- **devops**: Display the days total unique check-ins for feature flags within software feature flagging tab
- **devops**: Record to check-in table every time feature flags are obtained
- **devops**: Migrations for model `CheckIns`
- **devops**: New model `CheckIns`
- Generate a deployment unique ID
- **devops**: Provide user with option to disable downloading feature flags
- **devops**: Feature Flagging url.path wrapper
- **docker**: Configure cron to download feature flags every four hours
- **docker**: Start and run crond within container
- **docker**: Download feature flags on container start
- **devops**: Feature Flagging DRF Router wrapper
- **devops**: Feature Flagging middleware
- **devops**: Feature Flagging management command
- **devops**: Add Feature Flagging lib
- **devops**: add temp application for feature flag client
- **devops**: public feature flag endpoint pagination limited to 20 results
- **devops**: Add support for `if-modified-since` header for Feature Flags public endpoint
- **api**: Add public API feature flag index endpoint
- **api**: Add public API endpoint
- **devops**: Add feature flag public ViewSet
- **devops**: Add feature flag public serializer
- **api**: Add common viewset for public RO list
- Remove serializer caching from ALL viewsets
- **devops**: Add delete col to software enabled feature flags
- **devops**: Prevent deletion  of software when it has feature flagging enabled and/or feature flags
- **devops**: limit feature_flag to organizations that's had feature flags enabled
- **devops**: limit feature_flag to software that's had feature flags enabled
- **python**: Update Django 5.1.5 -> 5.1.7
- **devops**: Serializer limiting of software and os disabled for time being
- **devops**: Serializer validate software and org
- **devops**: Serializer software filter to enabled feature_flag software
- **devops**: Serializer org filter to enabled feature_flag organizations
- **devops**: Add endpoint for enabling software for feature flagging
- **devops**: Add serializer for enabling software for feature flagging
- **devops**: Add model for enabling software for feature flagging
- **devops**: Add model tag feature_flag to ticket linked item
- **devops**: Add KB tab to feature flag model
- **devops**: Add Notes to feature flag model
- **core**: Migration for feature_flag model reference
- **core**: url endpoints added for ticket comment category and ticket category notes
- **itam**: disable model notes for model device os
- **api**: disable model notes for model auth token
- **core**: disable model notes for model teamuser
- **core**: disable model notes for model notes
- **core**: Migrations for adding notes to ticket category and ticket comment category
- **core**: Add Feature Flag model reference
- **devops**: Add devops module to installed applications
- **devops**: Add Feature Flag viewset
- **devops**: Add Feature Flag serializer
- **devops**: Add devops Navigation menu
- **devops**: Add devops module URL includes
- **devops**: Add devops to permissions
- **devops**: DB Migrations for Feature Flag and History model
- **devops**: Add Feature Flag History model
- **devops**: Add Feature Flag model
- **access**: add support for nested application namespaces
- **devops**: Add devops module

### Fixes

- **devops**: Only track checkin if no other error occured
- **devops**: during feature flag checkin, if no `client-id` provided, use value `not-provided`
- **devops**: When init the feature flag clients, look for all args within settings
- **devops**: Only add `Last-Modified` header to response if exists
- **devops**: Correct logic for data changed check for public endpoint for feature flagging
- **devops**: feature flag public ViewSet serializer name correction and qs cache correction
- **devops**: feature flag public endpoint field modified name typo
- **devops**: Filter public feature flag endpoint to org and software where software is enabled
- **devops**: Move software field filter for feature flag to the serializer
- **devops**: Dont attempt to validate feature flag software or organization if it is absent
- **devops**: Correct feature flagging validation for enabled software and enabled orgs
- **devops**: dont cache serializer for featureflag
- **devops**: Correct Feature Flag serializer validation to cater for edit
- **devops**: Feature Flag field is mandatory
- **api**: make history url dynamic. only display if history should save
- **devops**: if software is deleted delete feature flags
- **core**: disable of notes for models not requiring it
- **api**: when generating notes url, use correct object
- **api**: Add missing import for featurenotused
- **core**: Add ability to add notes for ticket comment category
- **core**: Add ability to add notes for ticket category
- **core**: Serializer `_urls.notes` URL generation now dynamic
- **api**: Dont attempt to access model.get_app_namespace if it doesnt exist

### Tests

- **devops**: Feature Flag History API render checks
- **devops**: Feature Flag Serializer checks
- **devops**: CheckIn Entry created of fetching feature flags
- **devops**: CheckIn model test cases
- **devops**: public feature flag fields corrections
- **devops**: public feature flag functional ViewSet checks
- **devops**: feature flag ViewSet checks
- **api**: Update vieset test cases to cater for mockrequest to contain headers attribute
- **devops**: feature flag public endpoint API field, header checks
- **devops**: Ensure that only enabled org and enabled software is possible
- **devops**: software_feature_flag_enable ViewSet checks
- **devops**: software_feature_flag_enable Serializer checks
- **devops**: Update feature flag test case setup to enable feature flag for testing software
- **devops**: Update feature flag test case setup to enable feature flag for testing software
- **api**: Remove serializer cache test cases
- **devops**: software_feature_flag_enable api field checks
- **devops**: software_feature_flag_enable viewset checks
- **devops**: software_feature_flag_enable model checks
- **devops**: software_feature_flag_enable tenancy object checks
- **devops**: correct dir name for tests
- **devops**: Notes feature flag model checks
- **core**: Ticket Comment Category Notes checks
- **core**: Ticket Category Notes checks
- **app**: Model test cases for api field rendering `_urls.notes`
- **app**: Model test cases for get_url_kwargs_notes function
- **access**: Correct Team notes url route name
- **devops**: Feature Flag viewset unit Checks
- **devops**: Feature Flag model Checks
- **devops**: Feature Flag api Checks
- **devops**: Feature Flag tenancy object Checks
- **devops**: Feature Flag viewset functional Checks
- **devops**: Feature Flag serializer Checks
- **devops**: Feature Flag History Checks

## 1.12.0 (2025-03-01)

### feat

- **api**: Add delete column to AuthToken Table
- **docker**: Upgrade system packages on build
- **api**: AuthToken requires viewset get_back_url
- **api**: Add auth token api endpoint
- **settings**: Add section title to auth tokens
- **settings**: Add tokens url to user settings `_urls`
- **api**: Update Auth Token model for use with serializer
- **api**: Add user Auth Token viewset
- **api**: Add user Auth Token serializer
- **settings**: Add `page_layout` attribute to User Settings

### Fixes

- **api**: correct usage of `AuthToken.generate` to a property

### Tests

- **api**: AuthToken ViewSet checks (unit)
- **api**: AuthToken API Field checks
- **api**: AuthToken Serializer checks
- **api**: AuthToken ViewSet checks

## 1.11.0 (2025-02-21)

### feat

- **core**: Enable App settings History to save without specifying an organization
- **settings**: save_history method added to App Settings
- **settings**: History Model for App Settings Version added
- **core**: Migration for history data to new history tables
- **access**: save_history method added to Team
- **access**: History Model for Team added
- **access**: save_history method added to Organization
- **access**: History Model for Organization added
- **core**: add org field History Model api rendering
- **core**: Show the model name within history
- **project_management**: Project Milestone added to modelhistory.child_history_models
- **settings**: History Model migrations for External Link
- **settings**: save_history method added to External Link
- **settings**: History Model for External Link added
- **project_management**: History Model migrations for Project Type
- **project_management**: save_history method added to Project Type
- **project_management**: History Model for Project TYpe added
- **project_management**: History Model migrations for Project State
- **project_management**: save_history method added to Project State
- **project_management**: History Model for Project State added
- **project_management**: History Model migrations for Project Milestone
- **project_management**: save_history method added to Project Milestonr
- **project_management**: History Model for Project Milestone added
- **project_management**: History Model migrations for Project
- **project_management**: save_history method added to Project
- **project_management**: History Model for Project added
- **itim**: History Model migrations for Service
- **itim**: save_history method added to Service
- **itim**: History Model for Service added
- **itim**: History Model migrations for Port
- **itim**: save_history method added to Port
- **itim**: History Model for Port added
- **itim**: History Model migrations for Cluster Type
- **itim**: save_history method added to Cluster TYpe
- **itim**: History Model for Cluster Type added
- **itim**: History Model migrations for Cluster
- **itim**: save_history method added to Cluster
- **itim**: History Model for Cluster added
- **itam**: History Model migrations for Software Version
- **itam**: save_history method added to Software Version
- **itam**: History Model for Software Version added
- **itam**: History Model migrations for Software Category
- **itam**: save_history method added to Software Category
- **itam**: History Model for Software Category added
- **itam**: History Model migrations for Software
- **itam**: save_history method added to Software
- **itam**: History Model for Software added
- **itam**: History Model migrations for Operating System Version
- **itam**: save_history method added to Operating System Version
- **itam**: History Model for Operating System Version added
- **itam**: History Model migrations for Device Type
- **itam**: save_history method added to Device Type
- **itam**: History Model for Device Type added
- **itam**: History Model migrations for Device Operating System
- **itam**: save_history method added to Device Operating System
- **itam**: History Model for Device Operating System added
- **itam**: History Model migrations for Operating System
- **itam**: save_history method added to Operating System
- **itam**: History Model migrations for Operating System
- **itam**: History Model migrations for Device Software
- **itam**: History Model for Device Software added
- **itam**: save_history method added to Device
- **itam**: History Model migrations for Device Model
- **itam**: save_history method added to Device Model
- **itam**: History Model for Device Model added
- **core**: History Model migrations for Ticket Comment Category
- **core**: save_history method added to Ticket Comment Category
- **core**: History Model for Ticket Comment Category added
- **config_management**: Child History Models added to child model lists for config group hosts and software
- **core**: History Model migrations for Ticket Category
- **core**: save_history method added to Ticket Category
- **core**: History Model for Ticket Category added
- **core**: History Model migrations for Manufacturer
- **core**: save_history method added to Manufacturer
- **core**: History Model for Manufacturer added
- **config_management**: save_history method added to Config Group Software
- **config_management**: save_history method added to Config Group Hosts
- **config_management**: save_history method added to Config Groups
- **assistance**: save_history method added to Knowledge base
- **assistance**: save_history method added to Knowledge base category
- **config_management**: History Model migrations for Config Groupse + children
- **config_management**: History Model for Config Group Software added
- **config_management**: History Model for Config Group Hosts added
- **config_management**: History Model for Config Groups added
- **assistance**: History Model migrations for Knowledge base + children
- **assistance**: History Model for Knowledge base category added
- **assistance**: History Model for Knowledge base added
- **itam**: Add device history model
- **core**: History view to only display objects from the model being requested
- **core**: Add new history model to History Serializer
- **core**: Add new history model
- **development**: lint for un-used imports
- **development**: add pylit settings
- **core**: added new history model
- **api**: Device Software Viewset requires its own function to obtain the model view serializer
- **api**: Ticket Comment Viewset requires its own function to obtain the model view serializer
- **api**: Ticket Viewset requires its own function to obtain the model view serializer
- **api**: Always use a models `View` serializer for the response
- **core**: Add logic to ensure when organization changes, an action comment is created
- **core**: Add logic to ensure when parnet ticket changes, an action comment is created

### Fixes

- **settings**: App settings serializer fielad name does not exist
- **access**: dont use organization property within organization model
- **project_management**: Project milestone is not a child model
- **core**: Child models on delete must make model field null
- **project_management**: Project Milestone History is a primaryu model
- **core**: When a child model is deleted ensure entry is still created on parent model history
- **core**: when fetching url_kwargs for model history, make it dynamic for related field name
- **core**: Xorrect logic for determining view_action
- **core**: dynamically search for history object name
- **config_management**: Remove parent property from config groups
- **tests**: Correct Permission Import due to removing from access.models
- **project_management**: project Model serializer must inherit common serializer
- **core**: History audit objects must be a valid dict
- **api**: history app names can contain an underscore
- **core**: when saving history, use audit_model for content type
- **core**: add missing functions for fetching item url
- **project_management**: Opened by field set to read only for project task ticket
- **itim**: Opened by field set to read only for problem ticket
- **itim**: Opened by field set to read only for incident ticket
- **itim**: Opened by field set to read only for change ticket
- **assistance**: Opened by field set to read only for request ticket
- **core**: Ensure that if the parent ticket changes, that the logic caters for none
- **assistance**: Category can be empty for Project Task Ticket
- **assistance**: Category can be empty for Problem Ticket
- **assistance**: Category can be empty for Incident Ticket
- **assistance**: Category can be empty for Change Ticket
- **assistance**: Category can be empty for Request Ticket
- **core**: Ticket Action comment for category change must use category field

### Refactoring

- **core**: Update access imports to new path
- **core**: Update access imports to new path
- Update migrations imports to new path
- **config_management**: Update access imports to new path
- **api**: Update access imports to neew path
- **settings**: Update access imports to new path
- **project_management**: Update access imports to new path
- **itim**: Update access imports to new path
- **itam**: Update access imports to new path
- **core**: Update access imports to new path
- **config_management**: Update access imports to new path
- **assistance**: Update access imports to new path
- **base**: Update access imports to new path
- **api**: Update access imports to neew path
- **access**: Update access imports to neew path
- **access**: Move models to their own file
- **core**: move get_url to common serializer
- **api**: Update history url kwargs to use vals from model._meta
- **core**: superuser changed from import to triage access
- **core**: Ticket action comment logic only requires a single check

### Tests

- **settings**: History Entry checks for App Settings History
- **settings**: API Field Checks for App Settings History
- Model History not to save history on self
- **core**: Correct lookup for model history test setup
- **access**: remove test cases for Team prarent_object
- **access**: History Entry checks for Team model
- **access**: API Field Checks for Team History
- **access**: History Entry checks for Organization model
- **access**: API Field Checks for Organization History
- Fix History API checks for kb
- Fix History API checks for project milestone
- Fix History Entry checks for models
- **config_management**: History Entry checks for Config_group_hosts model
- **settings**: History Entry checks for External Link model
- **project_management**: History Entry checks for Project Type model
- **project_management**: History Entry checks for Project State model
- **project_management**: History Entry checks for Project Milestone model
- **project_management**: History Entry checks for Project model
- **itim**: History Entry checks for Service model
- **itim**: History Entry checks for Cluster Type model
- **itim**: History Entry checks for Port model
- **itim**: History Entry checks for Cluster model
- **itam**: History Entry checks for Software Version model
- **itam**: History Entry checks for Software Category model
- **itam**: History Entry checks for Software model
- **itam**: History Entry checks for Operating System Version model
- **itam**: History Entry checks for Operating System model
- **itam**: History Entry checks for Device Type model
- **itam**: History Entry checks for Device OS model
- **itam**: History Entry checks for Device Model model
- **itam**: History Entry checks for Device model
- **core**: History Entry checks for Ticket Comment Category model
- **core**: History Entry checks forTicket Category model
- **config_management**: History Entry checks for Config Groups Software model
- **config_management**: History Entry checks for Config Groups model
- **assistance**: History Entry checks for Knowledge base category model
- **assistance**: History Entry checks for Knowledge base model
- **itam**: Device Software History Entry checks
- **core**: Manufacturer History Entry checks
- **core**: Model History Entries Test Suite
- **core**: History Model Unit test cases for model and tenancy checks
- **settings**: API Field Checks for External Links History
- **project_management**: API Field Checks for Project Type History
- **project_management**: API Field Checks for Project State History
- **project_management**: API Field Checks for Project Milestone History
- **project_management**: API Field Checks for Project History
- **itim**: API Field Checks for Service History
- **itim**: API Field Checks for Port History
- **itim**: API Field Checks for Cluster Type History
- **itim**: API Field Checks for Cluster History
- **core**: API Field Checks for Ticket Comment Category History
- **core**: API Field Checks for Ticket Category History
- **config_management**: API Field Checks for Config Group Software History
- **config_management**: API Field Checks for Config Group Hosts History
- **config_management**: API Field Checks for Config Group History
- **assistance**: API Field Checks for Knowledge base category History
- **assistance**: API Field Checks for Knowledge base History
- **itam**: API Field Checks for Software Version History
- **itam**: API Field Checks for Software Category History
- **itam**: API Field Checks for Software History
- **itam**: API Field Checks for Operating System Version History
- **itam**: API Field Checks for Operating System History
- **itam**: API Field Checks for Device Type History
- **itam**: API Field Checks for Device OS History
- **itam**: API Field Checks for Device Model History
- **itam**: API Field Checks for Device History
- **core**: Unit Test Suite for History Model API field checks urls can either be str or hyperlink
- **itam**: API Field Checks for Device Software History
- **core**: API Field Checks for Manufacturer History
- **core**: API Field Checks for Model History
- **core**: Unit Test Suite for History Model API field checks
- **core**: Functional Test for History Model APIPermission updated to cater for tenancy obj
- **core**: Functional Test for History Model API Permissions and Metadata
- **core**: Unit Test for History Model Viewset
- **itam**: remove test cases for os version model.parent_object as it's not required
- **core**: disable hisotry viewset function test
- **core**: correct kwargs for history tests
- **core**: Remove old history model viewset tests
- Disable Old History Model test suites
- **core**: Ensure that when parent_ticket changes on a ticket an action comment is created
- **core**: Confirm on category change to ticket that an action comment is created

## 1.10.1 (2025-02-14)

### Fixes

- **python**: Dont use system TimeZone data, use python zoneinfo module zone data

## 1.10.0 (2025-02-10)

### feat

- **settings**: Provide user with the ability to set browser mode
- **core**: Parent Ticket validation added to ticket serializer
- **core**: Add to ticket endpoint the ability to filter using `parent_ticket`
- **core**: Add to ticket model  a function for circular dependecy check of parent ticket
- **core**: Migrate Notes data to new table
- **project_management**: Add notes tab to Project Milestone details page
- **itam**: Add notes tab to Software Version details page
- **itam**: Add notes tab to Operating System details page
- **core**: Ensure when editing a model note, the modified user is updated.
- **assistance**: Knowledge Base Category Notes viewset
- **assistance**: Knowledge Base Category Notes Serializer
- **assistance**: Knowledge Base Category Notes Model
- **project_management**: Project Type Notes ViewSet
- **project_management**: Project Type Notes Serializer
- **project_management**: Project Type Notes Model
- **project_management**: Project State Notes ViewSet
- **project_management**: Project State Notes Serializer
- **project_management**: Project State Notes Model
- **project_management**: Project Milestone Notes ViewSet
- **project_management**: Project Milestone Notes Serializer
- **project_management**: Project Milestone Notes Model
- **itam**: Software Version Notes ViewSet
- **itam**: Software Version Notes Serializer
- **itam**: Software Version Notes Model
- **itam**: Software Category Notes ViewSet
- **itam**: Software Category Notes Serializer
- **itam**: Software Category Notes Model
- **itam**: Operating System Version Notes ViewSet
- **itam**: Operating System Version Notes Serializer
- **itam**: Operating System Version Notes Model
- **settings**: External Link Notes ViewSet
- **settings**: External Link Notes Serializer
- **settings**: External Link Notes Model
- **itam**: Device Model Notes ViewSet
- **itam**: Device Model Notes Serializer
- **itam**: Device Model Notes Model
- **itam**: Device Type Notes ViewSet
- **itam**: Device Type Notes Serializer
- **itam**: Device Type Notes Model
- **core**: Create an action comment on a ticket when the category changes
- **itim**: Porte Notes ViewSet
- **itim**: Porte Notes Serializer
- **itim**: Porte Notes Model
- **itim**: Cluster Type Notes ViewSet
- **itim**: Cluster Type Notes Serializer
- **itim**: Cluster Type Notes Model
- **project_management**: Project Notes ViewSet
- **project_management**: Project Notes Serializer
- **project_management**: Project Notes Model
- **itim**: Service Notes ViewSet
- **itim**: Service Notes Serializer
- **itim**: Service Notes Model
- **itim**: Cluster Notes ViewSet
- **itim**: Cluster Notes Serializer
- **itim**: Cluster Notes Model
- **itam**: Software Notes ViewSet
- **itam**: Software Notes Serilaizer
- **itam**: Software Notes Model
- **itam**: Operating System Notes ViewSet
- **itam**: Operating System Notes Serializer
- **itam**: Operating System Notes Model
- **core**: Manufacturer Notes viewset
- **core**: Manufacturer Notes serializer
- **core**: Manufacturer Notes Model
- **config_management**: Config Group Notes ViewSet
- **config_management**: Config Group Notes Serializer
- **config_management**: Config Group Notes Model
- **assistance**: Knowledge Base Notes ViewSet
- **assistance**: Knowledge Base Notes Serializer
- **assistance**: Knowledge Base Notes Model
- **access**: Team Notes ViewSet
- **access**: Team Notes Serializer
- **access**: Team Notes Model
- **access**: Organization Notes ViewSet
- **access**: Organization Notes Serializer
- **access**: Organization Notes Model
- **itam**: Device Notes ViewSet
- **itam**: Device Notes Serializer
- **itam**: Device Notes Model
- **core**: Base viewset for model notes
- **core**: Base serializer for model notes
- **core**: Base model for model notes
- **core**: Add failsafe to throw an exception if no action comment will be created
- **core**: Add field parent_ticket to base ticket view serializer
- **project_management**: Add field parent_ticket to project task ticket view serializer
- **itim**: Add field parent_ticket to problem ticket view serializer
- **itim**: Add field parent_ticket to incident ticket view serializer
- **itim**: Add field parent_ticket to change ticket view serializer
- **assistance**: Add field parent_ticket to request ticket view serializer
- **core**: Add field parent to ticket model

### Fixes

- **core**: Dont attempt to access parent_ticket field during ticket validation if it does not exist
- **core**: Permissions require the parent model for model notes
- **access**: field organization requires team related_model for org
- **core**: Use generic APIError for ticket save when no action comment will be created

### Refactoring

- Squash migrations so there is less of them for model notes
- **access**: Dont add releationship from tenancyObject.organization to organization model

### Tests

- **settings**: Test User Settings API render to ensure browser_model exists and is the correct type
- **settings**: Test User Settings model to ensure `browser_mode` field exists
- **access**: Team Note Model Check object requires org
- **settings**: External Links Note Model Checks
- **project_management**: Project Type Note Model Checks
- **project_management**: Project State Note Model Checks
- **project_management**: Project Note Model Checks
- **project_management**: Project Milestone Note Model Checks
- **itim**: Service Note Model Checks
- **itim**: Port Note Model Checks
- **itim**: Cluster Type Note Model Checks
- **itim**: Cluster Note Model Checks
- **itam**: Software Version Note Model Checks
- **itam**: Software Note Model Checks
- **itam**: Software Category Note Model Checks
- **itam**: Operating System Version Note Model Checks
- **itam**: Operating System Note Model Checks
- **itam**: Device Type Note Model Checks
- **itam**: Device Note Model Checks
- **itam**: Device Model Note Model Checks
- **core**: Manufacturer Note Model Checks
- **config_management**: Config Group Note Model Checks
- **assistance**: KB Note Model Checks
- **assistance**: KB Category Note Model Checks
- **access**: Team Note Model Checks
- **access**: Organization Note Model Checks
- **core**: Model Notes Test Suite
- **settings**: Serializer Checks for External Links Notes
- **Project_management**: Serializer Checks for Project Type Notes
- **Project_management**: Serializer Checks for Project State Notes
- **Project_management**: Serializer Checks for Project Notes
- **Project_management**: Serializer Checks for Project Milestone Notes
- **itim**: Serializer Checks for Service Notes
- **itim**: Serializer Checks for Port Notes
- **itim**: Serializer Checks for Cluster Type Notes
- **itim**: Serializer Checks for Cluster Notes
- **itam**: Serializer Checks for Software Version Notes
- **itam**: Serializer Checks for Software Notes
- **itam**: Serializer Checks for Software Category Notes
- **itam**: Serializer Checks for Operating System Version Notes
- **itam**: Serializer Checks for Operating System Notes
- **itam**: Serializer Checks for Device Type Notes
- **itam**: Serializer Checks for Device Notes
- **itam**: Serializer Checks for Device Model Notes
- **core**: Serializer Checks for Manufacturer Notes
- **config_management**: Serializer Checks for Config Groups Notes
- **assistance**: Serializer Checks for KB Notes
- **assistance**: Serializer Checks for KB Category Notes
- **access**: Serializer Checks for Team Notes
- **access**: Serializer Checks for Organization Notes
- **core**: Test Suite for Model Notes checks
- **api**: API Fileds user to be super user for tests to run
- **settings**: External Links Notes Function Viewset Tests
- **project_management**: Project Type Notes Function Viewset Tests
- **project_management**: Project State Notes Function Viewset Tests
- **project_management**: Project Notes Function Viewset Tests
- **project_management**: Project Milestone Notes Function Viewset Tests
- **itim**: Service Notes Function Viewset Tests
- **itim**: Port Notes Function Viewset Tests
- **itim**: Cluster Types Notes Function Viewset Tests
- **itim**: Cluster Notes Function Viewset Tests
- **itam**: Software Version Notes Function Viewset Tests
- **itam**: Software Notes Function Viewset Tests
- **itam**: Software Category Notes Function Viewset Tests
- **itam**: Operating System Version Notes Function Viewset Tests
- **itam**: Operating System Notes Function Viewset Tests
- **itam**: Device Type Notes Function Viewset Tests
- **itam**: Device Notes Function Viewset Tests
- **itam**: Device Model Notes Function Viewset Tests
- **core**: Manufacturer Notes Function Viewset Tests
- **config_management**: Config Groups Notes Function Viewset Tests
- **assistance**: Knowledge Base Notes Function Viewset Tests
- **assistance**: Knowledge Base Category Notes Function Viewset Tests
- **access**: Team Notes Function Viewset Tests
- **access**: Organization Notes Function Viewset Tests
- **core**: Model Notes Test Cases
- Remove old notes model tests
- **settings**: External Notes Test Cases for ViewSet
- **project_management**: Project Type Notes Test Cases for ViewSet
- **project_management**: Project State Notes Test Cases for ViewSet
- **project_management**: Project Notes Test Cases for ViewSet
- **project_management**: Project Milestone Notes Test Cases for ViewSet
- **itim**: Service Notes Test Cases for ViewSet
- **itim**: Port Notes Test Cases for ViewSet
- **itim**: Cluster Type Notes Test Cases for ViewSet
- **itim**: Cluster Notes Test Cases for ViewSet
- **itam**: Software Version Notes Test Cases for ViewSet
- **itam**: Software Notes Test Cases for ViewSet
- **itam**: Software Category Notes Test Cases for ViewSet
- **itam**: Operating System Version Notes Test Cases for ViewSet
- **itam**: Operating_system Notes Test Cases for ViewSet
- **itam**: Device Type Notes Test Cases for ViewSet
- **itam**: Device Notes Test Cases for ViewSet
- **itam**: Device Model Notes Test Cases for ViewSet
- **core**: Manufacturer Notes Test Cases for ViewSet
- **config_management**: Config Groups Notes Test Cases for ViewSet
- **assistance**: Knowledge Base Notes Test Cases for ViewSet
- **assistance**: Knowledge Base Category Notes Test Cases for ViewSet
- **access**: Team Notes Test Cases for ViewSet
- **access**: Organization Notes Test Cases for ViewSet
- **project_management**: Correct kwargs for Project Milestone Notes Test Cases for API Field Checks
- **assistance**: Knowledge Base Category Notes Test Cases for API Field Checks
- **Settings**: External Link Notes Test Cases for API Field Checks
- **project_management**: Project Type Notes Test Cases for API Field Checks
- **project_management**: Project State Notes Test Cases for API Field Checks
- **project_management**: Project Notes Test Cases for API Field Checks
- **project_management**: Project Milestone Notes Test Cases for API Field Checks
- **itim**: Service Notes Test Cases for API Field Checks
- **itim**: Port Notes Test Cases for API Field Checks
- **itim**: Cluster Types Notes Test Cases for API Field Checks
- **itim**: Cluster Notes Test Cases for API Field Checks
- **itam**: Software Version Notes Test Cases for API Field Checks
- **itam**: Software Notes Test Cases for API Field Checks
- **itam**: Software Category Notes Test Cases for API Field Checks
- **itam**: Device Type Notes Test Cases for API Field Checks
- **itam**: Device Notes Test Cases for API Field Checks
- **itam**: Device Model Notes Test Cases for API Field Checks
- **itam**: Operating System Test Cases for API Field Checks
- **itam**: Operating System Version Test Cases for API Field Checks
- **core**: Manufacturer Test Cases for API Field Checks
- **config_management**: Config Group Test Cases for API Field Checks
- **assistance**: KB Test Cases for API Field Checks
- **access**: Team Test Cases for API Field Checks
- **access**: Organization Test Cases for API Field Checks
- **core**: Model Notes Base Test Cases for API Field Checks
- remove old notes model tests
- Update url_name to match new notes endpoint
- **config_Management**: Update url_name to match new notes endpoint
- **core**: Remove notes test cases for previous notes model

## 1.9.0 (2025-02-06)

### feat

- **core**: Validate user field to ensure ticket comments always have user who added comment
- **core**: Cache ticket linked item queryset
- Views to cache discovered serializer
- **core**: When changing ticket description create an action comment with the details
- **core**: When changing a ticket real finish date create an action comment with the details
- **core**: When changing a ticket real start date create an action comment with the details
- **core**: When changing a ticket planned finish date create an action comment with the details
- **core**: When changing a ticket planned start date create an action comment with the details
- **core**: When changing a ticket milestone create an action comment with the changed details
- **core**: Add Priority badge field to ALL ticket types
- **core**: Add Impact badge field to ALL ticket types
- **core**: Add urgency badge field to ALL ticket types

### Fixes

- **project_management**: Add missing attribute `view_description` to project tasks viewset
- **settings**: Add missing attribute `view_description` to user settings viewset
- **settings**: Add missing attribute `view_description` to app settings viewset
- **itim**: Add missing attribuite to problem ticket viewset
- **itim**: Add missing attribuite to incident ticket viewset
- **itim**: Add missing attribuite to change ticket viewset
- **itimm**: correct truthy check for service device ViewSet property when evaluating queryset
- **itam**: correct truthy check for service cluster ViewSet property when evaluating queryset
- **itam**: correct truthy check for service cluster ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for service device ViewSet property when evaluating serializer_class
- **itam**: add missing attribute view_name to celery log viewset
- **api**: correct get_view_name to prioritize view_name over model.verbose_name
- **itam**: correct truthy check for software version ViewSet property when evaluating queryset
- **itam**: correct truthy check for os version ViewSet property when evaluating queryset
- **itam**: correct truthy check for device software ViewSet property when evaluating queryset
- **itam**: correct truthy check for device os ViewSet property when evaluating queryset
- **itam**: correct truthy check for software version ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for software category ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for os version ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for device software ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for device os ViewSet property when evaluating serializer_class
- **core**: correct varname for queryset within notes queryset
- **core**: add missing attribute view_description to ticket linked item viewset
- **core**: add missing attribute view_description to ticket comment viewset
- **core**: add missing attribute view_description to note viewset
- **core**: add missing attribute view_description to related ticket log viewset
- **core**: add missing attribute view_description to celery log viewset
- **core**: add missing attribute view_description to history viewset
- **core**: correct truthy check for notes ViewSet property when evaluating serializer_class
- **core**: correct truthy check for history ViewSet property when evaluating queryset
- **core**: correct truthy check for notes ViewSet property when evaluating queryset
- **core**: correct truthy check for related ticket ViewSet property when evaluating queryset
- **core**: correct truthy check for ticket comment ViewSet property when evaluating queryset
- **core**: correct truthy check for ticket linked items ViewSet property when evaluating queryset
- **core**: correct truthy check for ticket linked items ViewSet property when evaluating queryset
- **core**: correct truthy check for ticket comment ViewSet property when evaluating queryset
- **core**: correct truthy check for related ticket ViewSet property when evaluating queryset
- **core**: correct truthy check for history ViewSet property when evaluating queryset
- **core**: correct truthy check for celery log ViewSet property when evaluating queryset
- **core**: correct truthy check for Ticket Base ViewSet property when evaluating queryset
- **core**: correct truthy check for ticket base ViewSet property when evaluating serializer_class
- **assistance**: Add missing attribute `view_description` to request ticket ViewSet
- **settinggs**: Add missing attribute `view_description` to external links ViewSet
- **core**: Add missing attribute `view_description` to ticket comment category ViewSet
- **core**: Add missing attribute `view_description` to ticekt category ViewSet
- **core**: Add missing attribute `view_description` to Manufacturer ViewSet
- **project_management**: correct truthy check for project milestone ViewSet property when evaluating queryset
- **settings**: correct truthy check for user settings ViewSet property when evaluating serializer_class
- **settings**: correct truthy check for external links ViewSet property when evaluating serializer_class
- **settings**: correct truthy check for app settings ViewSet property when evaluating serializer_class
- **project_management**: correct truthy check for project milestone ViewSet property when evaluating queryset
- **project_management**: correct truthy check for project ViewSet property when evaluating serializer_class
- **project_management**: correct truthy check for project type ViewSet property when evaluating serializer_class
- **project_management**: correct truthy check for project state ViewSet property when evaluating serializer_class
- **project_management**: correct truthy check for project milestone ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for service ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for port ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for cluster ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for cluster type ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for software ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for os ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for device ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for device type ViewSet property when evaluating serializer_class
- **itam**: correct truthy check for device model ViewSet property when evaluating serializer_class
- **core**: correct truthy check for ticket comment category ViewSet property when evaluating serializer_class
- **core**: correct truthy check for ticket category ViewSet property when evaluating serializer_class
- **core**: correct truthy check for manufacturer ViewSet property when evaluating serializer_class
- **config_management**: correct truthy check for config group ViewSet property when evaluating queryset
- **config_management**: correct truthy check for config group ViewSet property when evaluating serializer_class
- **config_management**: correct truthy check for config group software ViewSet property when evaluating serializer_class
- **config_management**: correct truthy check for config group software ViewSet property when evaluating queryset
- **assistance**: correct truthy check for model kb article ViewSet property when evaluating queryset
- **assistance**: correct truthy check for model kb article ViewSet property when evaluating serializer_class
- **assistance**: correct truthy check for kb ViewSet property when evaluating serializer_class
- **assistance**: correct truthy check for kb ViewSet property when evaluating serializer_class
- **access**: correct truthy check for team ViewSet property when evaluating serializer_class
- **access**: correct truthy check for team ViewSet property when evaluating queryset
- **access**: correct truthy check for team user ViewSet property when evaluating queryset
- **access**: correct truthy check for team user ViewSet property when evaluating serializer_class
- **access**: correct truthy check for organization ViewSet property when evaluating serializer_class
- **api**: correct truthy check for set property when evaluating serializer_class
- **api**: correct truthy check for set property when evaluating queryset
- **api**: correct variable name in common viewset for queryset
- **config_management**: config group software viewset must cache queryset
- **config_management**: config group viewset must cache queryset
- **assistance**: Knowledge base category viewset must cache serializer_class
- **access**: Team viewset must cache serializer_class
- **access**: Team viewset must cach queryset
- **access**: Team User viewset must cach queryset
- **api**: Add missing property `bacjk_url` to Common viewset
- **api**: Common viewset to cache and use queryset Object
- **access**: When conduting permission check for user settings, if user not owner of settings, deny access
- **access**: when checking object permissions, dont cast obj to int untill checking it exists
- **access**: org mixin get_obj_org not to call get_object
- **core**: ensure item_type exists before trying to get queryset
- **core**: Ticket Action comment date fields must be checked if empty before use
- **settings**: grant the user access to their own settings object
- **settings**: grant the user access to their own settings

### Refactoring

- **access**: when checking obj permission use view cached obj organization
- **access**: When fetching obj org, if pk exist attempt to fetch object
- **core**: When fetching a ticket, fetch related fields
- **core**: Ticket action comment for changing milestone to use item tasg
- **core**: Ticket action comment for changing project to use item tasg

### Tests

- **core**: Add missing unit tests for notes ticket viewset
- **settings**: Add missing unit tests for user settings ticket viewset
- **settings**: Add missing unit tests for app settings ticket viewset
- **project_management**: Add missing unit tests for project task ticket viewset
- **api**: Add kwargs as arg to test cases
- **itim**: Add missing unit tests for problem ticket viewset
- **itim**: Add missing unit tests for incident ticket viewset
- **itim**: Add missing unit tests for change ticket viewset
- **core**: add permisssion class override test case for celery results
- Add empty kwargs to ViewSet index page test cases
- **itam**: Add missing unit tests for software version viewset
- **itam**: Add missing unit tests for software categories viewset
- **itam**: Add missing unit tests for os versions viewset
- **itam**: Add missing unit tests for software installs viewset
- **itam**: Add missing unit tests for os installs viewset
- **itam**: Add missing unit tests for device software viewset
- **itam**: Add missing unit tests for device operating system viewset
- **api**: Add kwargs as arg to test cases
- **core**: Add missing unit tests for ticket linked items viewset
- **core**: Add missing unit tests for ticket comment viewset
- **core**: Add missing unit tests for celery log viewset
- **core**: Add missing unit tests for history viewset
- **core**: Add missing unit tests for related tickets viewset
- **assistance**: Add missing unit tests for request ticket viewset
- **api**: queryset and serializer_class test cases updated to use Fake request object
- **settings**: Add missing unit tests for external links viewset
- **project_management**: Add missing unit tests for project type viewset
- **project_management**: Add missing unit tests for project state viewset
- **project_management**: Add missing unit tests for project milestone viewset
- **project_management**: Add missing unit tests for project viewset
- **itim**: Add missing unit tests for service viewset
- **itim**: Add missing unit tests for ports viewset
- **itim**: Add missing unit tests for cluster types viewset
- **itim**: Add missing unit tests for cluster viewset
- **itam**: Add missing unit tests for Software viewset
- **itam**: Add missing unit tests for Operating System viewset
- **itam**: Add missing unit tests for Device Type viewset
- **itam**: Add missing unit tests for Device Model viewset
- **itam**: Add missing unit tests for Device viewset
- **api**: dont mock the qs bool
- **core**: Add missing unit tests for Ticket Comment Category viewset
- **core**: Add missing unit tests for Ticket Category viewset
- **core**: Add missing unit tests for manufacturer viewset
- **config_management**: Add missing unit tests for config groups software viewset
- **config_management**: Add missing unit tests for config groups viewset
- **assistance**: Add missing unit tests for Model Knowledge Base Article viewset
- **assistance**: Add missing unit tests for Knowledge Base Category viewset
- **assistance**: Add missing unit tests for Knowledge Base viewset
- **access**: Add missing unit tests for team user viewset
- **access**: Add missing unit tests for team viewset
- **access**: Add missing unit tests for organization viewset
- **base**: Ensure viewsets are caching and using the serializer_class object
- **base**: Ensure viewsets are caching and using the queryset object
- **core**: Test case to ensure ticket comment always has user added
- **settings**: when checking if user can delete own settings, user must be owner of settings
- **settings**: regardless of permissions a user can change their own settings
- **access**: during permission check function has_permission ensure `get_object` not called
- **core**: Ensure that an action comment is created when ticket description is edited
- **core**: Ticket Action comment test cases for real_finish_date actions
- **core**: Ticket Action comment test cases for real_start_date actions
- **core**: Ticket Action comment test cases for planned_finish_date actions
- **core**: Ticket Action comment test cases for planned_start_date actions
- **core**: Ticket Action comment test cases for milestone actions
- **core**: Ticket Action comment test cases for project actions
- **core**: Ticket Action comment tests moved to their own suite
- **core**: Unit test cases for ticket urgency_badge field checks
- **core**: Unit test cases for ticket priority_badge field checks
- **core**: Unit test cases for ticket impact_badge field checks
- **settings**: Remove no-permission failure test as user settings require no permissions

## 1.8.0 (2025-01-23)

### feat

- **python**: update django 5.1.4 -> 5.1.5
- **access**: TenancyManager object to cache the users team lokkup
- **access**: if organization object casted to int, return organization.id
- **base**: Dont enable metrics by default
- **base**: Add exporter to celery
- **base**: Add exporter to gunicorn
- **base**: Add django-prometheus for metrics export
- **api**: fetch doc path for view metadata
- **settings**: Add new field button text
- **itim**: Ability to add external link to a service
- **access**: Add organization to team display_name
- **assistance**: add category and org to model articles tab
- **api**: Enable fetching related ticket metadata for the other side of the related ticket
- **core**: Add ticket comment field metadata to api meta
- **core**: Add ticket linked item field metadata to api meta
- **core**: Add related ticket field metadata to api meta
- **api**: Add option to viewset to render field markdown metadata
- **api**: Add item metadata to markdown field for renderable items
- **api**: Add item metadata to markdown field for renderable items

### Fixes

- **core**: triage user requires access to date fields for change, incident, problem and project task tickets
- **core**: triage user requires access to date fields for tickets
- **core**: User must be a required field for ticket comment
- **access**: use request object passed to has_object_permission
- **core**: ensure when updating, reques.tenancy object perm checking is used
- **project**: when creating a project, fetch the organization object
- **api**: Only attempt to access a app_settings object for org field if request object exists
- **core**: When adding a ticket, query for org
- **access**: use the request user teams within Manager
- **access**: cached orgs is an int list
- **base**: metrics dir env var PROMETHEUS_MULTIPROC_DIR must ALWAYS exist
- **base**: Dynammic settings determined by if metrics are enabled
- **access**: Return API exception, not django
- **api**: correctly return API exceptions for user to rectify
- **core**: Set user whom added comment as comment user
- **core**: display_name is not a mandatory field for related ticket
- **core**: display_name is not a mandatory field for ticket linked item
- **api**: Ensure ALL required classes for viewset are inherited

### Refactoring

- **access**: Dont override django middleware, create own for access tenancy
- **access**: Move user perm logic to request.tenancy object
- Move app_settings object to request object
- **access**: cache app settings during perm check
- **access**: prefetch team related fields

### Tests

- **core**: Correct ticket tests as triage user is supposed to  have access to ticket date fields
- update to cater for tenancy object in request
- Initial k6s individual page speed test cases
- **app**: metrics_enabled setings checks
- **app**: refactor. order tests alphanumerical
- **api**: ensure documentation key and data is added to API metadata
- **settings**: check to ensure API fields returned are present and correct type for external_links model
- **assistance**: Ensure category fields are present for model articles

## 1.7.0 (2025-01-04)

### feat

- **access**: Enable Objects from global organization to be viewable by user with the permission
- **access**: Enable Objects from globally set organization to return within query
- **access**: Enable the calling of the dynamic permissions function to obtain permissions
- **itam**: Cater for RabbitMQ errors when uploading inventory
- **itam**: On Inventory upload validate existing device
- **access**: During permission checking also capture Http404
- **access**: Super User to be granted permission
- **access**: Cache the permission required during permission checking
- **api**: Add `IndexViewset` to ViewSet mixin
- **access**: If the user lacks the permission during permission checks, return sooner
- **access**: Enforce view action and HTTP/Method match for permission checks
- **itim**: External Links to display on cluster details page
- **api**: Add API v2 Endpoint for cluster services
- **api**: distinguish between read-only and authenticateed user permissions

### Fixes

- **api**: Ensure ALL required classes for viewset are inherited
- **itam**: Dont query parent class for permissions
- **core**: If no org specified serializer fetch, dont attempt to access
- **access**: If no org specified during permission check, rtn false for permission
- **itam**: return serializer for inventory endpoint
- **api**: base index must inherit from IndexViewset
- **core**: Dont attempt to access the object if it doesn't exist when fetching ticket permissions
- **access**: Cached list objects must be a list including an empty one as required
- **core**: when gather ticket permissions, use getter as object may not exist
- **core**: action metadata to use view permission for tickets
- **access**: Use request.method for determining the HTTP/Method for permission checks
- **access**: Add HTTP/Method=DELETE as valid option  for object delete/destroy.
- **access**: Ensure Object permission are checked when an object is having an action performed against it.
- **core**: History View is a read-only view
- **core**: Permissions for Related ticket to be derived from ticket org
- **access**: Team User permission organiztion is team org

### Refactoring

- **itam**: Device UUID field requires no default
- **itam**: mv inventory task to itam app
- **access**: Use exceptions for permission flow as required
- **api**: dedup code within viewset mixin
- **access**: Object permission checking moved to `has_object_permission` function
- **access**: move ability to get required permissions from permissions mixin to organization mixin
- **core**: move ticket linked item to dynamic parent model
- **api**: Use new re-writen Mixins for Tenancy and Permission checks
- **access**: Organization Permission Mixin now caters for API ONLY
- **access**: Organization Mixin now caters for API ONLY

### Tests

- **access**: Skip test case for appsettings different organization due to model not being tenancy model.
- **access**: Ensure items returned from query are from user organization and/or globally set organization
- **itam**: API v2 Inventory Permission Check skip diff org
- **itam**: API v2 Inventory Permission Checks
- mv inventory test to itam app
- **access**: Test Cases for Organization Permission Mixin
- **api**: Adjust test case for metadata visibility
- **core**: remove different org testcase from history checks
- **core**: When testing if history access is possible for user with perms, correct status is HTTP/200
- **access**: When adding org, test case must use non-super user
- **itim**: Ensure external_links are returned as part of _urls
- **itim**: Add API v2 permission checks for cluster services
- **itim**: Add API v2 permission checks for device services

## 1.6.0 (2024-12-23)

### feat

- **access**: Check if organization field is read-only during permission check
- **access**: Ability to specify parent model for permission to do
- **information_management**: add cluster type kb article linking
- **information_management**: Ability to link Knowledge Base article to a Software
- **information_management**: Ability to link Knowledge Base article to a Software
- **information_management**: Ability to link Knowledge Base article to a Software Category
- **information_management**: Ability to link Knowledge Base article to a Operating System Version
- **information_management**: Ability to link Knowledge Base article to a Operating System
- **information_management**: Ability to link Knowledge Base article to a Device
- **information_management**: Ability to link Knowledge Base article to a Device Type
- **information_management**: Ability to link Knowledge Base article to a Device Model
- **information_management**: Ability to link Knowledge Base article to an External Link
- **information_management**: Ability to link Knowledge Base article to a Project
- **information_management**: Ability to link Knowledge Base article to a Project Type
- **information_management**: Ability to link Knowledge Base article to a Project State
- **information_management**: Ability to link Knowledge Base article to a Project Milestone
- **information_management**: Ability to link Knowledge Base article to a Service
- **information_management**: Ability to link Knowledge Base article to a Port
- **information_management**: Ability to link Knowledge Base article to a Cluster Type
- **information_management**: Ability to link Knowledge Base article to a Cluster
- **information_management**: Ability to link Knowledge Base article to a Ticket Category
- **information_management**: Ability to link Knowledge Base article to a Manufacturer
- **information_management**: Ability to link Knowledge Base article to a Config Group
- **information_management**: Ability to link Knowledge Base article to a Team
- **information_management**: Ability to link Knowledge Base article to an Organization
- **information_management**: Add API v2 Endpoint for model KB articles
- **information_management**: Add method `get_url` to model kb article
- **information_management**: DB Model for linking KB articles to models
- **assistanace**: remove kb article content from details tab
- **core**: call models `clean` method prior to saving model to DB
- **api**: during permission checking, if model is an organization and the user is a manager allow access to the organization.
- **api**: If user is organization manager of any org, show organization within navigation
- **core**: Link Team to ticket
- **core**: Link Organization to ticket
- **core**: Link KB to ticket
- **access**: Add project_management permissions to teams avail permissions

### Fixes

- **core**: Add missing KB article delete signal for ticket linking cleanup
- **core**: Ensure for KB article permissions can be correctly checked
- **core**: use cooorect model name for choices
- **itam**: Use Device organization for device operating system
- **settings**: remove field `owner_organization` from App Settings
- **core**: Use object organization for ticket linked items
- **itam**: Use Software organization for Software Version
- **itam**: Use Operating System organization for OS Version
- **itam**: Use Device organization for device software
- **core**: Use Ticket organization for ticket linked items
- **core**: Use parent model organization for object notes
- **access**: During permission checking also use `get_serializer` if avail
- **access**: default to empty when attempting to get view attribute
- **core**: Use ticket organization for permission checking for adding a comment
- **itam**: KB url must use `obj` not `item` when building ursl for device type
- **itam**: KB url must use `obj` not `item` when building ursl for device model
- **core**: Add missing migrations for linking kb to ticket
- **core**: Ensure that a user cant reply to a discussion reply
- **core**: Add Org, Team and KB article to ticket linked Item serializer
- **core**: Ticket Linked Item serializer removed from inheriting from common serializer.
- **core**: Ticket model serializer must inherit from common serializer
- **core**: Ticket Related Item model serializer must inherit from common serializer
- **core**: Ticket Linked Item model serializer must inherit from common serializer
- **core**: Ticket Comment  model serializer must inherit from common serializer
- **core**: Notes model serializer must inherit from common serializer
- **docker**: Correct nginx proxy headers passed to gunicorn
- **core**: Generate the correct url for a ticket comment when it's a discussion
- **core**: organization field set to `write_only=True`
- **core**: If ticket comment is a reply, add the parent id post validation

### Refactoring

- **access**: Adjust permission check logic to use try..catch instead of gettattr due to base method throwing exception
- **base**: move model calling of clean to tenancy model class
- **docker**: gunicorn config moved to con file
- **core**: Add ticket comment organization post validation

### Tests

- **core**: KB article delete ticket link clean up checks
- **core**: KB Ticket linking serializer checks
- **core**: KB Ticket linking permission checks
- **core**: Add data for ticket comment does not use organization field
- revert test case changes from 1c065601f6030aeb6065fa9f1b9afb23e1783646
- **information_management**: Add model test cases for Model KB Article
- **information_management**: Add API v2 Endpoint test cases for Model KB Article
- **information_management**: Add Viewset test cases for Model KB Article
- **information_management**: Add Serializer test cases for Model KB Article
- **api**: mv test case change denied delete to apipermissionchange test cases
- **base**: Ensure Models inherit from Tenancy and SaveHistory Classes
- **core**: test to ensure that a user cant reply to a comment that is already part of a discussion
- **core**: test to ensure that a user can reply to a comment (start comment)

## 1.5.0 (2024-12-09)

### feat

- **python**: update django 5.1.2 -> 5.1.4
- **api**: If global organization defined, filter from ALL organization fields
- **api**: Add nav menu permission checks for settings
- **api**: When fething an items url dueing metadata creation, used named parameters
- **access**: Modify Admin User panel by removing perms and adding teams
- **access**: filter permissions available
- **api**: Filter navigation menu by user permissions
- **api**: Add API version details to the metadata
- **access**: add `back` and `return_url` urls to team user metadata
- **access**: add `back` and `return_url` urls to team metadata
- **api**: Add `back` url to metadata
- **api**: Add `return_url` to metadata

### Fixes

- **settings**: Add missing `get_url` function to user_settings model
- **settings**: Add missing `get_url` function to app_settings model
- **core**: correctr the required parameters for related ticket serializer when fetching own url
- **core**: Remove requirement that ticket be specified for related tickets `get_url`
- **access**: Add missing `table_fields` attribute to team users model
- **api**: during metadata navigation permission checks, cater for non-existant keys
- **core**: Remove superfluous check from ticket viewset
- **access**: Team permissions is not a required field
- **core**: History query must also be for self, not just children
- **access**: correct team users table to correct data key

### Refactoring

- **access**: Settings must be an available permissions when setting team permissions
- **itam**: set deviceoperatingsystem model, device field to be type `onetoone`
- **assistance**: make content the first tab for kb articles
- **api**: move metadata url_return -> urls.self

### Tests

- **api**: Nav menu permission checks for settings
- **api**: Nav menu permission checks
- **core**: Correct `url.self`checks to use list view
- **core**: Dont test History for table view
- **settings**: Dont test user settings for table view
- **steeings**: Dont test app settings for table view
- **core**: Dont test related ticket for table or detail view
- **api**: Refactor test so that endpoints not expected to have an endpoint or be rendered in a table wont be tested for it.
- **settings**: API Metadata checks for user settings
- **settings**: API Metadata checks for external links
- **settings**: API Metadata checks for app settings
- **project_management**: API Metadata checks for project type
- **project_management**: API Metadata checks for project task
- **project_management**: API Metadata checks for project state
- **project_management**: API Metadata checks for project milestone
- **project_management**: API Metadata checks for project
- **itim**: API Metadata checks for problem ticket
- **itim**: API Metadata checks for incident ticket
- **itim**: API Metadata checks for change ticket
- **itim**: API Metadata checks for service
- **itim**: API Metadata checks for port
- **itim**: API Metadata checks for cluster type
- **itim**: API Metadata checks for cluster
- **itam**: API Metadata checks for software version
- **itam**: API Metadata checks for software category
- **itam**: API Metadata checks for software
- **itam**: API Metadata checks for operating system version
- **itam**: API Metadata checks for operating system
- **itam**: API Metadata checks for software
- **itam**: API Metadata checks for operating system
- **itam**: API Metadata checks for device type
- **itam**: API Metadata checks for device OS
- **itam**: API Metadata checks for device model
- **itam**: API Metadata checks for device
- **core**: API Metadata checks for ticket comment category
- **core**: API Metadata checks for ticket comment
- **core**: API Metadata checks for ticket category
- **core**: API Metadata checks for history
- **core**: API Metadata checks for related tickets
- **core**: API Metadata checks for manufacturers
- **config_management**: API Metadata checks for config group software
- **config_management**: API Metadata checks for config groups
- **access**: API Metadata checks for request ticket
- **access**: API Metadata checks for kb category
- **access**: API Metadata checks for kb
- **api**: correct metadata testcases
- **access**: API Metadata checks for organization
- **api**: API Metadata test cases for navigation menu rendering
- **api**: correct logic for test class attribute fetching
- **access**: API Metadata checks for Team User model
- **access**: API Metadata checks for Team model
- **api**: API Metadata functional Test Cases

## 1.4.1 (2024-11-30)

### Fixes

- **itam**: When validating device config, only do so if there is config defined

## 1.4.0 (2024-11-28)

### feat

- **project_management**: add project completed field
- **api**: Implement Sanity error handling for uncaught exceptions
- **itam**: Split device software serializer to include seperate software installs serializer
- **itam**: Add Operating System Installs API v2 endpoint
- **itam**: based off of the request kwaargs, adjust device serializer fields accordingly
- **itam**: Add Software installs endpoint
- **itim**: add cluster and device to Services in new UI
- **config_management**: add hosts to new UI
- **api**: add ticket icons
- **itim**: Add nodes and devices to detail view
- **api**: return_url to default to list view
- **base**: move setting `SECURE_SSL_REDIRECT = True` to etc/settings
- **base**: use senisible settings for SSL
- **itam**: Add device operating system API v2 endpoint
- **api**: Add return URL to metadata if model has attribute `get_url`
- **config_management**: Add field child group count to table fields for groups
- **itam**: Add `page_layout` to SoftwareVersion model
- **itam**: Add `page_layout` to OperatingSystemVersion model
- **project_management**: Add `page_layout` to Milestone model
- **settings**: Add `page_layout` to AppSettings model
- **access**: render team_name field as anchor
- **api**: Support setting char field as an anchor field using .urls._self
- **api**: Added abilty to specify a css class for markdown field
- Add timezone support
- **api**: Add a Common Model serializer to be inherited by all model serializers
- **core**: new field type markdown
- **core**: new field type char
- **core**: add RElated Items choices to metadata
- **itam**: Add Inventory API v2 endpoint
- **api**: Depreciate API V1 endpoint /api/config
- **core**: New signal for cleaning linked ticket items when the item is deleted
- **core**: Show milestone using base serializer for all ticket types
- **core**: Show project using base serializer for all ticket types
- **core**: Add Parse error to exceptions
- **core**: Ticket serializer to ensure user who opens ticket is subscribed to it
- **core**: Ticket serializer to validate milestone
- **core**: Ticket serializer to validate organization
- **itim**: Add Project Task API v2 endpoint
- **itim**: Add Problem Ticket API v2 endpoint
- **itim**: Add Incident Ticket API v2 endpoint
- **itim**: Add Change Ticket API v2 endpoint
- **api**: Depreciate v1 API Endpoint Assistance
- **api**: Depreciate v1 API Endpoint Request Ticket
- **api**: Depreciate v1 API Endpoint Assistance
- **api**: Depreciate v1 API Endpoint Ticket Comments
- **api**: Depreciate v1 API Endpoint Ticket Comment Categories
- **api**: Depreciate v1 API Endpoint Ticket Categories
- **core**: Ensure Related Tickets validate against duplicate entries
- **core**: Add MethodNot Allowed to Centurion exceptions
- **core**: Determine serializer from action and user permissions for Ticket Comments
- **core**: Add custom exception class
- **core**: Ensure ticket comment Serializer validates for existance of comment_type and ticket id
- **core**: Ensure ticket comment Serializer is picked based off of comment_type
- **core**: Ensure that ticket linked item validates if ticket supplied
- **core**: Ensure that ticket comment category cant assign self as parent
- **core**: Ensure that ticket category cant assign self as parent
- **core**: Add Ticket Comment Category API v2 endpoint
- **core**: Add Item Ticket API v2 endpoint
- **core**: Add Related Ticket API v2 endpoint
- **core**: Add Ticket Linked Item API v2 endpoint
- **core**: Add url function to Ticket Linked Items model
- **itim**: Add url function to Service model
- **itim**: Add url function to Cluster model
- **itam**: Add url function to Software model
- **itam**: Add url function to Operating System model
- **itam**: Add url function to Device model
- **config_management**: Add url function to Config Groups model
- **core**: Add Ticket Comment API v2 endpoint
- **core**: Add Ticket Category API v2 endpoint
- **assistance**: Add Request Ticket API v2 endpoint
- **api**: Custom exception UnknownTicketType
- **core**: Add Base Ticket Serializer and ViewSet
- **api**: Setup API to be correctly versioned
- **settings**: Add get_organization function to app settings model
- **settings**: Add Celery Task Logs API v2 endpoint
- **api**: Added ability to specify table fields within the viewset.
- **settings**: Add User Settings API v2 endpoint
- **settings**: Add App Settings API v2 endpoint
- **project_management**: Add remaining Project base serializers for API v2
- **project_management**: Project Validation for API v2
- **project_management**: Add Project Type API v2 endpoint
- **project_management**: Add Project State API v2 endpoint
- **project_management**: Add Project Milestone API v2 endpoint
- **project_management**: Add Project API v2 endpoint
- **itim**: Port Serializer Validations
- **itim**: Service Serializer Validations
- **itim**: Ensure cluster cant assign itself as parent on api v2 endpoint
- **itim**: Add Port API v2 endpoint
- **itim**: Add Cluster API v2 endpoint
- **itim**: Add Cluster Type API v2 endpoint
- **itim**: Add Service API v2 endpoint
- **itam**: Depreciate API v1 Software Endpoint
- **core**: Add Operating System Version API v2 endpoint
- **core**: Add Operating System API v2 endpoint
- **core**: Add External Link API v2 endpoint
- **itam**: Add Device Software API v2 endpoint
- **itam**: Add Device API v2 endpoint
- **itam**: Add Device Type API v2 endpoint
- **itam**: Add Software Version API v2 endpoint
- **itam**: Depreciate API v1 device endpoint
- **itam**: Add Software API v2 endpoint
- **itam**: Add Device Model API v2 endpoint
- **itam**: Add Device API v2 endpoint
- **itim**: Add Service Notes API v2 endpoint
- **core**: Add Software Notes API v2 endpoint
- **core**: Add Manufacturer API v2 endpoint
- **itim**: Add Service base serializer
- **itam**: Add operating system Base Serializer
- **config_management**: Add Notes API v2 endpoint
- **config_management**: Add History API v2 endpoint
- **config_management**: Depreciate API v1 config endpoint
- **config_management**: Add config groups to config api endpoint
- **config_management**: Add Device Base Serializer
- **itam**: Add Software Version Base Serializer
- **itam**: Add Software Base Serializer
- **config_management**: Add Config Group Software API v2 endpoint
- **config_management**: Add Config Group API v2 endpoint
- **assistance**: Ensure Knowledge Base Category cant assign self as parent category
- **assistance**: Knowledge Base Serializer Validation method added
- **assistance**: Add Knowledge Base Category API v2 endpoint
- **assistance**: Add Knowledge Base API v2 endpoint
- **api**: Depreciate API v1 permission endpoint
- **access**: Add Team Users API endpoint
- **access**: Depreciate Team API v1 endpoint
- **access**: Depreciate Organization API v1 endpoint
- **access**: Add Organization API endpoint
- **base**: Add Team API endpoint
- **base**: Add Permission API endpoint
- **base**: Add Content Type API endpoint
- **api**: Add Read Only abstract ViewSet
- **base**: Add user API endpoint
- **api**: add v2 endpoint
- **project_management**: Add attribute table_fields to Project Type model
- **project_management**: Add attribute page_layout to Project Type model
- **project_management**: Add attribute table_fields to Project State model
- **project_management**: Add attribute page_layout to Project State model
- **project_management**: Add attribute page_layout to Project Milestone model
- **project_management**: Add attribute table_fields to Project Milestone model
- **project_management**: Add attribute table_fields to Project model
- **project_management**: Add attribute page_layout to Project model
- **itim**: Add attribute table_fields to Service model
- **itim**: Add attribute page_layout to Service model
- **itim**: Add attribute table_fields to Service Port model
- **itim**: Add attribute page_layout to Service Port model
- **itim**: Add attribute table_fields to Cluster Type model
- **itim**: Add attribute page_layout to Cluster Type model
- **itim**: Add attribute table_field to Cluster model
- **itim**: Add attribute page_layout to Cluster model
- **itam**: Add attribute table_field to Software Category model
- **itam**: Add attribute table_fields to Software model
- **itam**: Add attribute page_layout to Software model
- **itam**: Add attribute table_fields to Operating System Version model
- **itam**: Add attribute page_layout to Operating System Version model
- **itam**: Add attribute table_field to Operating System model
- **itam**: Add attribute page_layout to Operating System model
- **itam**: Add attribute table_fields to "Device Type" model
- **itam**: Add attribute page_layout to "Device Type" model
- **itam**: Add attribute page_layout to "Device Software" model
- **itam**: Add attribute table_fields to "Device Software" model
- **itam**: Add attribute page_layout to "Device Software" model
- **core**: Add attribute table_fields to Ticket Comment Category model
- **core**: Add attribute page_layout to Ticket Comment Category model
- **core**: Add attribute page_layout to Ticket comment model
- **core**: Add attribute table_fields to Ticket Category model
- **core**: Add attribute page_layout to Ticket Category model
- **core**: Add attribute page_layout to Ticket model
- **core**: Add attribute page_layout to Notes model
- **core**: Add attribute table_fields to Manufacturer model
- **core**: Add attribute page_layout to Manufacturer model
- **access**: Add attribute table_fields to Config Group Software model
- **access**: Add attribute page_layout to Config Group Software model
- **access**: Add attribute table_fields to Config Groups model
- **access**: Add attribute page_layout to Config Groups model
- **access**: Add attribute table_fields to KB model
- **access**: Add attribute page_layout to KB model
- **access**: Add attribute table_fields to KB Category model
- **access**: Add attribute page_layout to KB Category model
- **access**: Add attribute table_fields to Team model
- **access**: Add attribute page_layout to Team model
- **core**: Add `table_fields` to Ticket Model
- **itam**: Add v2 endpoint ITAM
- **base**: Add User Serializer
- **settings**: Add v2 endpoint Settings
- **project_management**: Add v2 endpoint Project Management
- **itim**: Add v2 endpoint ITIM
- **config_management**: Add v2 endpoint Config Management
- **assistance**: Add v2 endpoint Assistance
- **access**: Add v2 endpoint Access
- **itim**: Add `table_fields` to Service Model
- **core**: Add `table_fields` to Device Software Model
- **core**: Add `table_fields` to Notes Model
- **core**: Add `table_fields` to History Model
- **itam**: Add `table_fields` and `page_layout` to Device Model
- **itam**: Add `table_fields` and `page_layout` to Device Model
- **core**: Add `table_fields` to Ticket Linked Item
- **core**: Add `table_fields` to Ticket Comment
- **core**: Add `table_fields` to Ticket
- **core**: Add attribute `staatus_badge` to ticket model
- **access**: Add `table_fields` and `page_layout` to Organization
- **api**: Add React UI metadata class
- **api**: Add API v2 Endpoint
- **api**: add API login template to use current login form
- **api**: Update API template to use name Centurion
- **itam**: Add category property to device software model
- **itam**: Add action badge property to device software model
- **itam**: Add status badge property to device model
- **core**: Add a icon serializer field.
- **core**: Add a badge serializer field.
- **api**: Add common ViewSet class for inheritence
- Add dependency django-cors-headers

### Fixes

- **project_management**: Correct All tickets query for calculating project completion
- **core**: Prevent a ticket from being related to itself
- **core**: when fetching ticket serializer set org=None
- **core**: use the view pk to filter self out for ticket category update
- **core**: Ensure for update of ticket the correct serializer is selected
- **core**: dont exclude self for ticket comment category if not exists
- **itam**: Add Operating System API v2 field typo
- **core**: Enusure project_task serializer sets the project_id
- **itam**: device os serializer not to show org and device
- **core**: ticket comment to use model serializer for meta
- **core**: add kwargs to notes
- **core**: correct get_url function notes
- **core**: add missing dep to notes
- **access**: correct team users get_url
- **access**: correct team get_url requires kwargs
- **core**: correct notes get_url
- **access**: correct team get_url
- **core**: ticket model url requires kwargs
- **core**: ticket comment model url requires kwargs
- **core**: dont attempt to fetch org for ticket comment if no data supplied
- **core**: Always set the organization to the ticket org when adding a ticket comment when org not specified.
- **api**: Ensure queryset filters to actual item if pk is defined
- **core**: Automagic fetch data for fields and only require ticket id to link item to ticket
- **core**: Always set the organization to the ticket org when adding a ticket comment.
- **config_management**: show parent groups only on index
- **core**: Set notes _self url to empty val then attempt to sset
- **core**: Ensure API v1 Ticket sets the ticket type prior to validation
- **core**: Dont attempt to use ticket instance organization if it's a new ticket being created
- **access**: Ensure organization is a mandatory field
- **core**: Ensure ticket and comment bodies are set to required
- **core**: correct navigation metadata
- **task**: Ensure if inventory RX is a string, serialize it
- **access**: Team User serializer not to capture exceptions
- **access**: Team User team and user fields required when creating, don't use default value.
- **access**: Team name required when creating, don't use default value.
- **access**: Dont capture exceptions within team serializer
- **core**: Ensure import user can set field `opened_by` when importing tickets
- **core**: Correct duration slash command regex
- **core**: When an item that may be linked to a ticket is deleted, remove the ticket link
- **core**: Related ticket slash command requires model to be imported
- **core**: correct missing or incomplete ticket model fields
- **core**: When creating a ticket, by default give it a status of new
- **core**: Ensure that when creating a ticket an organization is specified
- **core**: Correct Ticket read-only fields
- **core**: Correct inheritence order for ticket serializers
- **core**: Ensure Organization can be set when creating a ticket
- **core**: Ensure that when fetching ticket permission, spaces are replaced with '_'
- **core**: Ticket serializer org validator to access correct data
- **core**: Add project URL to all Ticket Types
- **core**: Add Ticket Category URL to all Ticket Types
- **core**: When obtaining ticket type use it's enum value
- **core**: Ensure triage and import permissions are catered for Tickets
- **core**: Ensure Ticket Linked Item slash command works for ticket comments
- **core**: Only use Import Serializer on Ticket Comment Create if user has perms
- **core**: Ensure related ticket slash command works for ticket comments
- **api**: Ensure `METHOD_NOT_ALLOWED` exception is thrown
- **core**: Correct serializer item field to be for view serializer ONLY
- **config_management**: Correct ticket url in group serializer
- **core**: Add missing ticket comment category url
- **core**: Add missing permissions function to ticket viewset
- **core**: Ensure that when checking linked ticket class name, spaces are replaced
- **core**: Ensure item tickets class can have underscore in name
- Dont attempt to access request within serializers when no context is present
- **core**: Add Ticket Category API v2 endpoint to urls
- **core**: Correct ticket comment model name
- **api**: Ensure read-only fields have choices added to metadata
- **api**: Correct inheritance order for ModelViewSet
- **settings**: Populate user_settings Meta
- **settings**: Populate app_settings Meta
- **project_management**: For Project use a separate Import Serializer
- **project_management**: use the post data dict for fetching edit organisation
- **project_management**: use the post data or existing object for fetching edit organisation
- **project_management**: Dont use init to adjust read_only_fields for project
- **project_management**: if user not hav org specified dont attempt to access
- **project_management**: for project serializer (api v1) ensure org is id
- **itim**: Ensure service config from template is not gathered if not defined
- **itim**: Ensure params passed to super when validating cluster
- **itim**: Correct Device Service API v2 endpoint
- **itam**: Don't attempt to include manufacturer in name for Device Model if not defined
- **itam**: Ensure software version model has page_layout field
- **core**: notes field must be mandatory
- **core**: Add missing attributes name to history model
- **config_management**: ensure validation uses software.id for config group software serializer
- **config_management**: Config Groups Serializer Validation checks
- **assistance**: Correct Knowledge Base Category serializer Validation
- **itam**: Correct inventory validation response data
- **itam**: Correct inventory api upload to use API exceptions instead of django base
- **assistance**: Add missing fields `display_name` and `model_notes` to Knowledge Base Category serializer
- **assistance**: correct KB category serializer validation
- **assistance**: Correct Knowledge Base serialaizer Validation
- **api**: on permission check error, return authorized=false
- **access**: Add missing parameters to Team User fields
- **api**: Add missing organization url routes
- **access**: ensure org id is an integer during permission checks
- **access**: if permission_required attribute doesn't exist during permission check, return empty list
- Ensure all Model fields are created with attributes `help_text` and `verbose_name`
- **api**: correct logic for permission check to use either queryset or get_queryset
- **settings**: Add attribute table_fields to External Links model
- **settings**: Add attribute page_layout to External Links model
- **settings**: Add missing attribute Meta.verbose_name to External Links model
- **settingns**: Add missing attribute Meta.ordering to External Links model
- **itam**: Add missing attribute Meta.verbose_name to Software Category model
- **itam**: Add missing attribute Meta.ordering to Software Category model
- **itam**: Add missing attribute Meta.verbose_name to Software model
- **itam**: Add missing attribute Meta.ordering to Software model
- **itam**: Add missing attribute Meta.verbose_name to Operating System Version model
- **itam**: Add missing attribute Meta.ordering to Operating System Version model
- **itam**: Add missing attribute Meta.verbose_name to Operating System model
- **itam**: Add missing attribute Meta.ordering to Operating System model
- **itam**: Add missing attribute Meta.verbose_name to "Device Type" model
- **itam**: Add missing attribute Meta.ordering to "Device Software" model
- **itam**: Add missing attribute Meta.verbose_name to "Device Software" model
- **itam**: Add missing attribute Meta.verbose_name to "Device Software" model
- **itam**: Add missing attribute Meta.ordering to "Device Software" model
- **itama**: Add missing attribute Meta.verbose_name to "Device Model" model
- **core**: Add missing attribute Meta.verbose_name to Notes model
- **core**: Add missing attribute Meta.verbose_name to Manufacturer model
- **access**: Add missing attribute Meta.verbos_name to Config Group Software model
- **access**: Add missing attribute Meta.verbos_name to Config Groups model
- **access**: Add missing attribute Meta.ordering Config Groups model
- **access**: Add missing meta field verbose_name to Team model
- **api**: during permission checking if request is HTTP/Options and user is authenticated, allow access
- **api**: during permission checking dont attempt to access view obj if it doesn't exist
- **itam**: Add missing model.Meta attributes ordering and verbose_name

### Refactoring

- **itam**: update device software serializer validator
- **itam**: update device software serializer validator
- **itam**: ensure device is unique for device os model
- ensure filed organization is required
- **config_management**: config_group ref to use full model name
- update serializers to use model `get_url` function
- **core**: ticket comment url name updated to match model name
- Add function `get_url` to tenancy models
- **api**: set fields that are for markdown to use the markdown field
- **task**: Adjust inventory to use API v2 serializer
- **core**: Move ticket validation from is_valid -> validate method
- **core**: Ensure Ticket Linked Serializer works for Item Tickets
- **core**: Ticket Linked Item slash command to use serializer
- **core**: Related ticket slash command to use serializer
- **core**: Ticket Comments to use a single API Endpoint
- **core**: Adjust action choices to be integer
- **config_management**: Adjust rendered config str -> dict
- **itam**: Software Action field changed char -> integer
- **itam**: rename dir viewset -> viewsets
- **config_management**: move config_group_hosts to related table
- update model fields
- **config_management**: update serializer dir name
- **access**: add name to modified field
- **api**: Adjust viewset common so that page_layout is available for base
- **assistance**: Correct viewset dir name to viwsets
- **itam**: Cleanup Device Software model field names.
- **core**: Change history fields after and before to be JSON fields
- **api**: Split common ViewSet class into index/model classes
- **itam**: remove requirement to specify the pk when fetching config

### Tests

- **project_management**: Ensure that project field completed exists when API v2 is rendere
- **core**: Ensure a ticket cant be related to itself
- **itam**: correct test setup for device note viewset
- **settings**: Ensure items returned are from users orgs only for API v2 endpoints
- **project_management**: Ensure items returned are from users orgs only for API v2 endpoints
- **itim**: Correct test case for ticket category returned serializer checks
- **core**: Correct test case for ticket category returned serializer checks
- **core**: Ensure items returned are from users orgs only for API v2 endpoints
- **config_management**: Ensure items returned are from users orgs only for API v2 endpoints
- **assistance**: Ensure items returned are from users orgs only for API v2 endpoints
- **access**: Ensure items returned are from users orgs only for API v2 endpoints
- **itam**: Ensure items returned are from users orgs only for API v2 endpoints
- Test Case for viewsets that confirms returned results from user orgs only
- **itam**: update device model test name Device -> DeviceModel
- **Core**: Ticket linked items API V2 Serializer returned checks
- **Core**: Remove duplicate test for ticket linked items
- **assistance**: Project Taask ticket Viewset Serializer checks
- **assistance**: Problem ticket Viewset Serializer checks
- **assistance**: Incident ticket Viewset Serializer checks
- **assistance**: Change ticket Viewset Serializer checks
- **assistance**: Request ticket Viewset Serializer checks
- **core**: Ticket Test Cases for Viewset Serializer returned
- during delete operation dont include data
- Add ViewSet Returned Serializer Checks to a majority of models
- Test Cases to confirm the correct serializer is returned from ViewSet
- Added skipped test for checking model mandatory values.
- **itam**: Operating System Installs API v2 Field checks
- **itam**: Software Installs API v2 Permission checks
- **itam**: Operating_system Installs API v2 Validation checks
- **itam**: Software Installs API v2 Permission checks
- **itam**: Software Installs API v2 Validation checks
- **itam**: Software Installs API v2 Field checks
- **core**: Ticket serializer checks corrected to use project_id within mock view
- **core**: Ticket comment serializer checks corrected to use mock view
- **core**: Ticket comment category field checks corrected
- **itam**: Update Device Operating System history checks to cater for unique device constratint
- **itam**: Device Operating System API field checks checks
- **itim**: Device Operating System API v2 ViewSet permission checks
- **itam**: Device Operating System Serializer Validation checks
- **core**: remove duplicate functional slash commands
- model get_url function checks
- **core**: move unit tests that check functionality to func test for ticket
- **itam**: Inventory API v2 Serializer Checks
- **core**: Ensure that when ticket is assigned it's status is updated to assigned
- **settings**: External Link API ViewSet permission checks
- **access**: External Link API v2 Serializer Checks
- **functional**: Move request ticket checks from unit
- **functional**: Move functional test cases to relevant functional test dir
- **access**: Organization API v2 Serializer Checks, only super user can create
- **access**: Team User API v2 Serializer Checks
- **access**: Team API v2 Serializer Checks
- **access**: Organization API v2 Serializer Checks
- **project_management**: Organization API v2 ViewSet permission checks
- **core**: Ensure test setup correctly for ticket checks
- **core**: Spend Slash command Checks.
- **core**: Relate Slash command Checks.
- **core**: Ensure that an item that may be linked to a ticket, when its deleted, the ticket link is removed
- **core**: Ensure a non-existing item cant be Linked to a Ticket.
- **core**: Action command Related Item Ticket Slash command checks.
- **core**: Blocked by Slash command Checks.
- **core**: Blocks Slash command Checks.
- **core**: Related Item Ticket Slash command checks.
- **project_management**: Project Task API v2 Serializer Checks
- **itim**: Incident Ticket API v2 Serializer Checks
- **itim**: Problem Ticket API v2 Serializer Checks
- **itim**: Change Ticket API v2 Serializer Checks
- **core**: Request Ticket API v2 Serializer Checks
- **core**: Common Ticket Test Cases for API v2 serializers
- **project_management**: Project Task API field checks
- **itim**: Problem Ticket API field checks
- **itim**: Incident Ticket API field checks
- **itim**: Change Ticket API field checks
- **assistance**: Update request field checks to cater for project and milestone as dicts
- **project_management**: Ensure ticket assigned project for all API v2 ViewSet permission checks
- **project_management**: PRoject_task API v2 ViewSet permission checks
- **itim**: Problem Ticket API v2 ViewSet permission checks
- **itim**: Incident Ticket API v2 ViewSet permission checks
- **itim**: Change Ticket API v2 ViewSet permission checks
- **core**: fix broken tests from 8b701785b3489db567f5ae08c58e28ae76529881 changes
- **core**: Item Ticket API v2 Serializer checks
- **core**: Item Linked Ticket API v2 ViewSet permission checks
- **core**: Related Ticket API v2 Serializer checks
- **core**: Related Ticket API v2 ViewSet permission checks
- **core**: Ticket Comment API v2 Serializer checks
- **core**: Ticket Linked Item API v2 Serializer checks
- **core**: Ticket Comment Category API v2 Serializer checks
- **core**: Ticket Category API v2 Serializer checks
- **itim**: Ticket Linked Item API field checks
- **itim**: Service Ticket URL API field checks
- **itim**: Cluster Ticket URL API field checks
- **itam**: Software Ticket URL API field checks
- **itam**: Operating System Ticket URL API field checks
- **itam**: Device Ticket URL API field checks
- **config_management**: Group Ticket URL API field checks
- **core**: Ticket Comment API v2 ViewSet permission checks
- **core**: Ticket Comment Category API v2 ViewSet permission checks
- **core**: Ticket Category API v2 ViewSet permission checks
- **assistance**: Request Ticket API v2 ViewSet permission checks
- **core**: Ticket Common API v2 ViewSet permission checks
- **core**: Ticket Comment Category API field checks
- **core**: Related Tickets API field checks
- **itim**: Service Linked Tickets API field checks
- **itim**: Cluster Linked Tickets API field checks
- **itam**: Software Linked Tickets API field checks
- **itam**: Operating System Linked Tickets API field checks
- **itam**: device Linked Tickets API field checks
- **core**: Config Group Linked Tickets API field checks
- **core**: Linked Ticket Common API field checks
- **core**: Ticket Linked Items API field checks
- **core**: Ticket Comment API field checks
- **core**: Ticket Category API field checks
- **assistance**: Request Ticket API field checks
- **core**: Ticket Common API field checks
- **settings**: Celery Log API v2 ViewSet permission checks
- **settings**: Celery Log API field checks
- **settings**: User Settings API v2 ViewSet permission checks
- **settings**: User Settings API field checks
- **settings**: App Settings API v2 ViewSet permission checks
- **settings**: App Settings API field checks
- **project_management**: Project API v2 ViewSet permission checks for import user
- **project_management**: Project Serializer Validation clean up
- **project_management**: Project Type API v2 ViewSet permission checks
- **project_management**: Project Type Serializer Validation checks
- **project_management**: Project Type API field checks
- **project_management**: Project State API v2 ViewSet permission checks
- **project_management**: Project state Serializer Validation checks
- **project_management**: Project state API field checks
- **project_management**: Project Milestone API v2 ViewSet permission checks
- **project_management**: Project milestone Serializer Validation checks
- **project_management**: add trace output to Project serializer
- **project_management**: Project Milestone API field checks
- **project_management**: Project API v2 ViewSet permission checks
- **project_management**: Project Serializer Validation checks
- **project_management**: Project API field checks
- **itim**: Port API v2 ViewSet permission checks
- **itim**: Port API field checks
- **itim**: Service API v2 ViewSet permission checks
- **itim**: Service Serializer Validation checks
- **itim**: Service API field checks
- **itim**: Cluster Type API v2 ViewSet permission checks
- **itim**: Cluster Type Serializer Validation checks
- **itam**: Cluster Type API field checks
- **itim**: Cluster API ViewSet permission checks
- **itim**: Cluster Serializer Validation checks
- **itam**: Cluster API field checks
- **itam**: remove Device Ticket API field checks
- **itam**: Device Service API field checks
- **itam**: Device Software API ViewSet permission checks
- **itam**: Device Software Serializer Validation checks
- **itam**: Device Software API field checks
- **itam**: Device Model API ViewSet permission checks
- **itam**: Device Model Serializer Validation checks
- **itam**: Device Model API field checks
- **itam**: Device Type API ViewSet permission checks
- **itam**: Device Type Serializer Validation checks
- **itam**: Device Type API field checks
- **itam**: Software Version Tenancy Model Checks
- **itam**: Software Version API ViewSet permission checks
- **itam**: Software Version Serializer Validation checks
- **itam**: Software Version API field checks
- **itam**: Software Category Version API ViewSet permission checks
- **itam**: Software Category Serializer Validation checks
- **itam**: Software Category Version API field checks
- **itam**: Operating System Version API ViewSet permission checks
- **itam**: Operating System Version Serializer Validation checks
- **itam**: Operating System Version API field checks
- **itam**: Software API ViewSet permission checks
- **itam**: Software Serializer Validation checks
- **itam**: Software API field checks
- **itam**: Operating System Serializer Validation checks
- **itam**: Operating_system API ViewSet permission checks
- **itam**: Operating System API field checks
- **itam**: Device API field checks
- **itam**: Device Serializer Validation checks
- **core**: Device API ViewSet permission checks
- enure correct type checks for url
- **core**: Manufacturer API ViewSet permission checks
- **core**: Manufacturer Serializer Validation checks
- **assistance**: Manufacturer API field checks
- **assistance**: Notes API field checks
- **core**: Notes Serializer Validation checks
- **itim**: Service Note API ViewSet permission checks
- **itam**: Softwaare Note API ViewSet permission checks
- **itam**: Operating System Note API ViewSet permission checks
- **config_management**: Device Note API ViewSet permission checks
- Adjust tests to cater for action choices now being an integer
- **config_management**: Config Groups Note API ViewSet permission checks
- **config_management**: History API ViewSet permission checks
- **config_management**: Config Groups Software API ViewSet permission checks
- **config_management**: Config Groups Software Serializer Validation checks
- **config_management**: Config Groups Software Serializer Validation checks
- **config_management**: Config Groups Serializer Validation checks
- **config_management**: Config Groups API ViewSet permission checks
- **assistance**: Config Group API field checks
- **assistance**: Knowledge Base Category Serializer Validation checks
- **assistance**: ensure is_valid raises exceptions for Knowledge Base Serializer Validation checks
- **assistance**: Knowledge Base Serializer Validation checks
- **assistance**: Knowledge Base Category API field checks
- **assistance**: Knowledge Base API field checks
- **access**: correct organization permission checks to have HTTP/403 not HTTP/405
- **assistance**: Knowledge Base Category API ViewSet permission checks
- **assistance**: Knowledge Base API ViewSet permission checks
- **base**: User API ViewSet permission checks
- **base**: Permission API ViewSet permission checks
- **base**: Content Type API ViewSet permission checks
- **access**: Add missing test cases to Team Users Model
- **access**: Team Users API v2 field checks
- **access**: Team User API ViewSet permission checks
- **access**: Team API v2 field checks
- **api**: API Response Field checks Abstract Class added
- **access**: Organization API v2 field checks
- **access**: Team API ViewSet permission checks
- **access**: Organization API ViewSet permission checks
- **api**: API Permission ViewSet Abstract Class added
- **access**: Team custom tests to ensure that during model field creation, attribute verbose_name is defined and not empty
- **itim**: port placeholder test for invalid port number
- use correct logic when testin field parameters as not being empty or none
- Ensure that during model field creation, attribute verbose_name is defined and not empty
- Ensure that during model field creation, attribute help_text is defined and not empty
- **api**: Ensure models have `Meta.ordering` set and not empty
- **api**: viewset documentation attr check
- **api**: fix index import to correct viewset
- **itam**: Add index viewset checks
- **Settings**: Add index viewset checks
- **project_management**: Add index viewset checks
- **itim**: Add index viewset checks
- **config_management**: Add index viewset checks
- **assistance**: Add index viewset checks
- **access**: Add index viewset checks
- **api**: Add API v2 Endpoint
- **api**: ViewSet checks
- Ensure Models have attribute `page_layout`
- Ensure Models have attribute `table_fields`
- Ensure Models have meta attribute `verbose_name`

## 1.3.1 (2024-11-27)

### Fixes

- **core**: Ensure user cant view tickets in orgs they are not part of

### Tests

- **access**: Add dummy functional test for CI to complete

## 1.3.0 (2024-10-31)

### feat

- **docker**: Add worker service config for SupervisorD
- **docker**: ensure supervisor starts
- **docker**: use correct file location for nginx config
- **docker**: Fail the build if django is not found
- **docker**: Install NginX to serve site
- **docker**: Add supervisord for install
- **docker**: Add gunicorn for install
- update docker image alpine 3.19 ->3.20

### Fixes

- **docker**: Ensure SupervisorD daemon config directory exists.
- **docker**: use alias for static
- **access**: testing of param causing gunicorn to fail
- **docker**: place nginx conf in correct path
- **docker**: gunicorn must call method
- **docker**: Ensure NginX config applied after it's installed
- **docker**: Add proxy params for NginX
- **docker**: Make centurion the default nginx conf
- **docker**: Correct NginX start command

### Refactoring

- **docker**: Switch to entrypoint

## 1.2.2 (2024-10-29)

### Fixes

- **docker**: adjust pyyaml to >-6.0.1

## 1.2.1 (2024-10-22)

### Fixes

- **project_management**: Ensure user cant see projects for organizations they are apart of

### Refactoring

- **project_management**: dont order queryset for project

## 1.2.0 (2024-10-11)

### feat

- update django 5.0.8 -> 5.1.2
- **settings**: Add API filter and search
- **core**: Add API filter of fields external_system and external_ref for projects
- **core**: Add API filter of fields external_system and external_ref to tickets
- **project_management**: increase project field length 50 -> 100 chars
- **core**: increase ticket title field length 50 -> 100 chars
- **core**: Add ability track ticket estimation time for completion
- **core**: Add ability to delete a ticket
- **core**: [Templating Engine] Add template tag concat_strings
- **itim**: Add ticket tab to services
- **itim**: Add ticket tab to clusters
- **itam**: Add ticket tab to software
- **itam**: Add ticket tab to operating systems
- **itam**: Add ticket tab to devices
- **config_management**: Add ticket tab to conf groups
- **core**: Add slash command `link` for linking items to tickets
- **core**: Add to markdown rendering model references
- **core**: Ability to link items to all ticket types
- **core**: add model ticket linked items
- **project_management**: Add project milestones api endpoint
- **project_management**: Add import_project permission and add api serializer
- **core**: great odins beard, remove the checkbox formatting
- **project_management**: Add field is_deleted to projects
- **project_management**: Calculate project completion percentage and display
- **core**: order project categories with parent name if applicable
- **project_management**: Add Project Type to the UI
- **project_management**: Add Project State to the UI
- **project_management**: add priority  field to project model, form and api endpoint
- **project_management**: add organization  field to project form and api endpoint
- **project_management**: add project_type  field to project form
- **project_management**: add external_ref and external_system  field to project model
- **project_management**: add project type field to project model
- **project_management**: add project type api endpoint
- **project_management**: new model project type
- **project_management**: add project state api endpoint
- **project_management**: add project state field to project model
- **project_managemenet**: new model project state
- **project_management**: add field external system to projects
- **core**: validate field milestone for all ticket types
- **core**: Add field milestone to all ticket types
- **project_management**: Add project milestones
- **core**: Add slash command "related ticket" for ticket and ticket comments
- **core**: Suffix username to action comments
- **core**: Add slash command `/spend` for ticket and ticket comments
- **core**: Disable HTML tag rendering for markdown
- **project_management**: remove requirement for code field to be populated
- **core**: Add ticket comment category API endpoint
- **core**: Ability to assign categories to ticket comments
- **core**: Add ticket comment categories
- **core**: Extend all ticket endpoints to contain ticket categories
- **core**: Add ticket category API endpoint
- **core**: Ability to assign categories to tickets
- **core**: Addpage titles to view abstract classes
- **core**: Add ticket categories
- **core**: during markdown render, if ticket ID not found return the tag
- **core**: Add heading anchor plugin to markdown
- **core**: correct markdown formatting for KB articles
- **core**: remove project field from being editable when creating project task
- **core**: Add admonition style
- **project_management**: Validate project task has project set
- **core**: set project ID to match url kwarg
- **core**: Add action comment on title change
- **core**: Add task listts plugin to markdowm
- **core**: Add footnote plugin to markdowm
- **core**: Add admonition plugin to markdowm
- **core**: Add table extension to markdowm
- **core**: Add strikethrough extension to markdowm
- **core**: Add linkify extension to markdowm
- **core**: move markdown parser py-markdown -> markdown-it
- **core**: Add organization column to ticket pages
- **core**: Allow super-user to edit ticket comment source
- **core**: Render linked tickets the same as the rendered markdown link
- **core**: Add project task link for related project task
- **project_management**: Add project duration field
- **core**: Add external ref to tickets if populated
- **core**: Add project task permissions
- **project_management**: Add project tasks
- **api**: Add project tasks endpoint
- **api**: Add projects endpoint
- **api**: Add project management endpoint
- **core**: support negative numbers when Calculating ticket duration for ticket meta and comments
- **core**: Caclulate ticket duration for ticket meta and comments
- **core**: Add edit details to ticket and comments
- **core**: Don't save model history for ticket models
- **core**: add option to allow the prevention of history saving for tenancy models
- **core**: Add project field to tickets allowed fields
- **core**: Update ticket status when assigned/unassigned users/teams
- **core**: Create action comment for subscribed users/teams
- **core**: Create action comment for assigned users/teams
- **core**: adding of more ticket status icons
- **api**: Ticket endpoint dynamic permissions
- **core**: add ticket status badge
- **access**: add ability to fetch dynamic permissions
- **core**: Add delete view for ticket types: request, incident, change and problem
- **api**: when attempting to create a device and it's found within DB, dont recreate, return it.
- **core**: When solution comment posted to ticket update status to solved
- **core**: Add opened by column to ticket indexes
- **core**: permit user to add comment to own ticket
- **core**: Allow OP to edit own Ticket Comment
- **core**: Ticket Comment form submission validation
- **core**: Ticket Comment can be edited by owner
- **core**: Ticket Comment source hidden for non-triage users
- **core**: When fetching allowed ticket comment fields, check against permissions
- **core**: pass request to ticket comment form
- **itam**: Accept device UUID in any case.
- **core**: Add ticket status icon
- **core**: Enable ticket comment created date can be set when an import user
- **api**: Set default values for ticket comment form to match ticket
- **core**: render ticket number `#\d+` links within markdown
- **core**: Use common function for markdown rendering for ticket objects
- **api**: Ensure device can add/edit organization
- **core**: Add api validation for ticket
- **core**: Ensure for tenancy objects that the organization is set
- **core**: Ticket comment orgaanization set to ticket organization
- **core**: colour code related ticket background to ticket type
- **core**: Validate ticket related and prevent duel related entries
- **core**: Validate ticket status field for all ticket types
- **core**: Add ticket action comments on ticket update
- **core**: Add Title bar to ticket form
- **core**: Add field level permission and validation checks
- **core**: Add permission checking to Tickets form
- **access**: add dynamic permissions to Tenancy Permissions
- **api**: Add Tickets endpoint
- **itim**: Add Problem ticket to navigation
- **itim**: Add Incident ticket to navigation
- **itim**: Add Change ticket to navigation
- **assistance**: Add Request ticket to navigation
- **core**: add basic ticketing system
- **development**: add option for including additional stylesheets
- **ui**: add project management icon
- **project_management**: Add manager and users for projects and tasks
- **project_management**: Project task view "view"
- **project_management**: Project task edit view
- **project_management**: Project task delete view
- **project_management**: Project task add view
- **project_management**: Add project task model
- **project_management**: save project history
- **project_management**: add project delete page
- **project_management**: add project edit page
- **project_management**: add project view page
- **project_management**: add project add page
- **project_management**: add project index page
- **project_management**: add interim project model

### Fixes

- ensure model mandatory fields don't specify a default value
- **api**: Ensure user is set to current user for ticket comment
- **core**: remove org field when editing a ticket
- **core**: during validation, if subscribed users not specified, use empty list
- **core**: add missing pagination to ticket comment categories index
- **core**: add missing pagination to ticket categories index
- **project_management**: Ensure project type and state show on index page
- **core**: Add replacement function within ticket validation as `cleaned_data` attribute replacement
- **core**: Ensure the ticket clears project field on project removal
- **core**: Remove ticket fields user has no access to
- **core**: correct logic for slash command `/spend`
- **project_management**: correct project view permissions
- **core**: Correct view permissions for ticket comment category
- **core**: correct url typo for ticket category API endpoint
- **core**: dont attempt to modify field for ticket category API list
- **core**: Dont attempt to render ticket category if none
- **core**: Correct the delete permission
- **core**: correct project task reply link for comments
- **core**: correct project task comment buttons
- **project_management**: correct comment reply url name
- **core**: Generate the correct edit url for tickets
- **core**: Generate the correct comment urls for tickets
- **core**: Redirect to correct url for itim tickets after adding comment
- **core**: correct linked tickets hyperlink address
- **core**: order ticket comments by creation date
- **core**: Ensure for both ticket and comment, external details are unique.
- **core**: Ensure on ticket comment create and update a response is returned
- **core**: Ensure related tricket action comment is trimmed
- **core**: Team assigned to ticket status update
- **api**: ensure ticket_type is set from view var
- **core**: Add ticket fields to ticket types
- **core**: During ticket form validation confirm if value specified/different then default
- **core**: Correctly set the ticket type initial value
- **core**: prevent import user from having permssions within UI
- **api**: correct ticket view links
- **core**: Correct display of ticket status within ticket interface
- **api**: Ensure if device found it is returned
- **core**: Ensure status field remains as part of ticket
- **core**: Correct modified field to correct type for ticket comment
- **api**: Filter ticket comments to match ticket
- **core**: Correct modified field to correct type
- **core**: Ensure new ticket can be created
- **core**: Add `ticket_type` field to import_permissions
- **core**: Ensure that the organization field is available
- **core**: dont remove hidden fields on ticket comment form
- **core**: Correct ticket comment permissions
- **access**: correct permission check to cater for is_global=None
- **core**: return correct redirect path for related ticket form
- **core**: use from ticket title for "blocked by"
- **access**: Don't query for `is_global=None` within `TenancyManager`
- **core**: ensure is_global check does not process null value

### Refactoring

- **core**: Ticket Linked ref render as template
- **core**: migrate ticket enums to own class
- **core**: Ticket validation errors setup for both api and ui
- **core**: for tickets use validation for organization field
- **core**: refine ticket field permission and validation
- reduce action comment spacing
- **core**: update markdown styles
- **core**: migrate ticket number rendering as markdown_it plugin
- **core**: move markdown functions out of ticket model
- **core**: Adjust test layout for itsm and project field based permissions
- **project_management**: migrate projects to new style for views
- **core**: REmove constraint on setting user for ticket comment
- **core**: cache fields allowed during ticket validation
- **core**: dont require specifying ticket status
- **core**: move id to end for rendered ticket link.
- **api**: Ticket (change, incident, problem and request) to static api endpoints
- **api**: make ticket status field mandatory
- **api**: Move core tickets to own ticket endpoints
- **core**: During form validation for a ticket, use defaults if not defined for mandatory fields
- **core**: Ticket form ticket_type to use class var
- **core**: cache permission check for ticket types
- **core**: Move allowed fields logic to own function
- **access**: Add definable parameters to organization mixin
- **access**: cache user_organizations on lookup
- **access**: cache object_organization on lookup

### Tests

- **core**: Ticket Linked item view checks
- **core**: Ticket Linked item permission checks
- **project_management**: Project Milestone api permission checks
- **project_management**: Project TYpe tenancy model checks
- **project_management**: Project Type view checks
- **project_management**: Project Type permission checks
- **project_management**: Project Type core history checks
- **project_management**: Project Type tenancy object checks
- **project_management**: Project State permission checks
- **project_management**: Project State tenancy model checks
- **project_management**: Project State view checks
- **project_management**: Project State core history checks
- **project_management**: Project State tenancy object checks
- **project_management**: Project type API permission checks
- **project_management**: Project state API permission checks
- **project_management**: Project miletone skipped api checks
- **project_management**: Project Milestone tenancy model checks
- **project_management**: Project Milestone view checks
- **project_management**: Project Milestone ui permission checks
- **project_management**: Project Milestone core history checks
- **project_management**: Project Milestone Tenancy object checks
- **core**: Project tenancy model checks
- **core**: Project view checks
- **core**: Project UI permission checks
- **core**: Project API permission checks
- **core**: Project history checks
- **core**: Project Tenancy object checks
- **core**: Ticket comment category API permission checks
- **core**: add missing ticket category view checks
- **core**: ticket comment category tenancy model checks
- **core**: ticket comment category view checks
- **core**: ticket comment category ui permission checks
- **core**: ticket comment category history checks
- **core**: ticket comment category tenancy model checks
- **core**: ticket category API permission checks
- **core**: ticket category history checks
- **core**: ticket category tenancy model checks
- **core**: ticket category model checks
- **core**: view checks
- **core**: ui permissions
- **core**: correct project tests for triage user
- **core**: Project task permission checks
- **core**: Ticket comment API permission checks
- **core**: Ticket comment permission checks
- **core**: Ticket comment Views
- **core**: Tenancy model tests for ticket comment
- **core**: ensure history for ticket models is not saved
- Ensure tenancy models save model history
- **core**: remove duplicated tenancy object tests for ticket model
- **core**: correct triage user test names for allowed field permissions
- **core**: project field permission check for triage user
- **core**: Ticket Action comment checks for related tickets
- **core**: Ticket Action comment checks for subscribing team
- **core**: Ticket Action comment checks for subscribing user
- **core**: Ticket Action comment checks for unassigning team
- **core**: Ticket Action comment checks for assigning team
- **core**: Ticket Action comment checks for un-assigning user
- **core**: Ticket Action comment checks for assigning user
- **core**: Add ticket project field permission check
- **core**: ensure ticket_type tests dont have change value that matches ticket type
- **core**: field based permission tests for add, change, import and triage user
- **api**: Ticket (change, incident, problem and request) api permission checks
- **core**: interim ticket unit tests
- **itam**: Ensure if an attempt to add an existing device via API, it's not recreated and is returned.
- correct typo in test description for `test_model_add_has_permission`
- Add view must have function `get_initial`
- **itam**: Refactor Device tests organization field to be editable.
- Ensure tests add organization to tenancy objects on creation

## 1.1.0 (2024-08-23)

### feat

- **itim**: Dont attempt to apply cluster type config if no type specified.
- **itim**: Service config rendered as part of cluster config
- **itim**: dont force config key, validate when it's required
- **itim**: Services assignable to cluster
- **itim**: Ability to add configuration to cluster type
- **itim**: Ability to add external link to cluster
- **itim**: Ability to add and configure Cluster Types
- **itim**: Add cluster to history save
- **itim**: prevent cluster from setting itself as parent
- **itim**: Ability to add and configure cluster
- **itam**: Track if device is virtual
- **api**: Endpoint to fetch user permissions
- **development**: Add function to filter permissions to those used by centurion
- **development**: Add new template tag `choice_ids` for string list casting
- **development**: Render `model_name_plural` as part of back button
- **development**: add to form field `model_name_plural`
- **development**: render heading if section included
- **base**: create detail view templates
- **itam**: Render Service Config with device config
- **itam**: Display deployed services for devices
- **itim**: Prevent circular service dependencies
- **itim**: Port number validation to check for valid port numbers
- **itim**: Prevent Service template from being assigned as dependent service
- **itim**: Add service template support
- **itim**: Ports for service management
- **itim**: Service Management
- **assistance**: Filter KB articles to target user
- **assistance**: Add date picker to date fields for KB articles
- **assistance**: Dont display expired articles for "view" users
- **base**: add code highlighting to markdown
- **assistance**: Categorised Knowledge base articles
- **itim**: Add menu entry
- **itam**: Ability to add device configuration
- **settings**: New model to allow adding templated links to devices and software

### Fixes

- **settings**: return the rendering of external links to models
- **core**: Ensure when saving history json is correctly formatted
- **itim**: Fix name typo in Add Service button
- Ensure tenancy models have `Meta.verbose_name_plural` attribute
- **base**: Use correct url for back button
- **itim**: ensure that the service template config is also rendered as part of device config
- **itim**: dont render link if no device
- **itim**: Dont show self within service dependencies
- **assistance**: Only return distinct values when limiting KB articles

### Refactoring

- **itim**: Add Cluster type to index page
- **itam**: Knowledge Base now uses details template
- **itam**: Device Type now uses details template
- **itam**: Operating System now uses details template
- **itim**: Service Port now uses details template
- **itam**: Device Model now uses details template
- **config_management**: Config Groups now uses details template
- **itam**: Software Categories now uses details template
- **itam**: manufacturer now uses details template
- **itam**: software now uses details template
- **itam**: device now use details template
- **itim**: services now use details template

### Tests

- **itim**: Cluster Types unit tests
- **itim**: Cluster unit tests
- **itam**: Correct Device Type Model permissions test to use "change" view
- **itam**: Correct Operating System Model permissions test to use "change" view
- **config_management**: Correct Device Model permissions test to use "change" view
- **config_management**: Correct Config Group permissions test to use "change" view
- **itam**: Correct Software Category permissions test to use "change" view
- **core**: Correct manufacturer permissions test to use "change" view
- **itam**: Correct software permissions test to use "change" view
- **model**: test for checking if Meta sub-class has variable verbose_name_plural
- **external_link**: add tests

## 1.0.0 (2024-08-23)

## 1.0.0-b14 (2024-08-12)

### Fixes

- **api**: ensure model_notes is an available field

### Tests

- **access**: test field model_notes

## 1.0.0-b13 (2024-08-11)

### Fixes

- Audit models for validations
- **itam**: Ensure device name is formatted according to RFC1035 2.3.1
- **itam**: Ensure device UUID is correctly formatted
- **config_management**: Ensure that config group can't set self as parent
- **settings**: ensure that the api token cant be saved to notes field

### Tests

- api field checks
- **software**: api field checks

## 1.0.0-b12 (2024-08-10)

### Fixes

- **api**: ensure org mixin is inherited by software view
- **base**: correct project links to github

### Tests

- api field checks

#128 #162
- **teams**: api field checks
- **organization**: api field checks

## 1.0.0-b11 (2024-08-10)

## 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

- add Config groups to API
- **api**: Add device config groups to devices
- **api**: Ability to fetch configgroups from api along with config

### Fixes

- **api**: Ensure device groups is read only

### Tests

- **api**: Field existence and type checks for device
- **api**: test configgroups API fields

## 1.0.0-b4 (2024-07-29)

### feat

- **swagger**: remove `{format}` suffixed doc entries

### Fixes

- release-b3 fixes
- **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

### Tests

- confirm that the tenancymanager is called

## 1.0.0-b3 (2024-07-21)

### Fixes

- **itam**: Limit os version count to devices user has access to

## 1.0.0-b2 (2024-07-19)

### Fixes

- **itam**: only show os version once

## 1.0.0-b1 (2024-07-19)

### Fixes

- **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)

### feat

- **api**: When processing uploaded inventory and name does not match, update name to one within inventory file
- **config_management**: Group name to be entire breadcrumb

### Tests

- ensure inventory upload matches by both serial number and uuid if device name different
- placeholder for moving organization

## 1.0.0-a3 (2024-07-18)

### feat

- **config_management**: Prevent a config group from being able to change organization
- **itam**: On device organization change remove config groups

### Fixes

- **config_management**: dont attempt to do action during save if group being created
- **itam**: remove org filter for device so that user can see installations
- **itam**: remove org filter for operating systems so that user can see installations
- **itam**: remove org filter for software so that user can see installations
- **itam**: Device related items should not be global.
- **itam**: When changing device organization move related items too.

## 1.0.0-a2 (2024-07-17)

### feat

- **api**: Inventory matching of device second by uuid
- **api**: Inventory matching of device first by serial number
- **base**: show warning bar if the user has not set a default organization

### Fixes

- **base**: dont show user warning bar for non-authenticated user
- **api**: correct inventory operating system selection by name
- **api**: correct inventory operating system and it's linking to device
- **api**: correct inventory device search to be case insensitive

## 1.0.0-a1 (2024-07-16)

### BREAKING CHANGE

- squashed DB migrations in preparation for v1.0 release.

### feat

- Administratively set global items org/is_global field now read-only
- **access**: Add multi-tennant manager

### Fixes

- **core**: migrate manufacturer to use new form/view logic
- **settings**: correct the permission to view manufacturers
- **access**: Correct team form fields
- **config_management**: don't exclude parent from field, only self

### Refactoring

- repo preperation for v1.0.0-Alpha-1
- Squash database migrations

### Tests

- tenancy objects
- refactor to single abstract model for inclusion.

## 0.7.0 (2024-07-14)

### feat

- **core**: Filter every form field if associated with an organization to users organizations only
- **core**: add var `template_name` to common view template for all views that require it
- **core**: add Display view to common forms abstract class
- **navigation**: always show every menu for super admin
- **core**: only display navigation menu item if use can view model
- **django**: update 5.0.6 -> 5.0.7
- **core**: add common forms abstract class
- **core**: add common views abstract class
- add postgreSQL database support
- **ui**: add config groups navigation icon
- **ui**: add some navigation icons
- **itam**: update inventory status icon
- **itam**: ensure device software pagination links keep interface on software tab
- "Migrate inventory processing to background worker"
- **access**: enable non-organization django permission checks
- **settings**: Add celery task results index and view page
- **base**: Add background worker
- **itam**: Update Serial Number from inventory if present and Serial Number not set
- **itam**: Update UUID from inventory if present and UUID not set

### Fixes

- **config_management**: Don't allow a config group to assign itself as its parent
- **config_management**: correct permission for deleting a host from config group
- **config_management**: use parent group details to work out permissions when adding a host
- **config_management**: use parent group details to work out permissions
- **itam**: Add missing permissions to software categories index view
- **itam**: Add missing permissions to device types index view
- **itam**: Add missing permissions to device model index view
- **settings**: Add missing permissions to app settings view
- **itam**: Add missing permissions to software index view
- **itam**: Add missing permissions to operating system index view
- **itam**: Add missing permissions to device index view
- **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
- inventory
- **itam**: only remove device software when not found during inventory upload
- **itam**: only update software version if different
- existing device without uuid not updated when uploading an inventory
- Device Software tab pagination does not work
- **itam**: correct device software pagination

### Refactoring

- adjust views missing add/change form to now use forms
- add navigation menu expand arrows
- migrate views to use new abstract model view classes
- migrate forms to use new abstract model form class
- **access**: Rename Team Button "new user" -> "Assign User"
- **access**: model pk and name not required context for adding a device
- rename field "model notes" -> "Notes"
- remove settings model
- **ui**: increase indentation to sub-menu items
- **itam**: rename old inventory status icon for use with security
- **api**: migrate inventory processing to background worker
- **itam**: only perform actions on device inventory if DB matches inventory item

### Tests

- add test test_view_*_attribute_not_exists_fields for add and change views
- fix test_view_change_attribute_type_form_class to test if type class
- **views**: add test cases for model views
- Add Test case abstract classes to models
- **inventory**: add mocks?? for calling background worker
- **view**: view permission checks
- **inventory**: update tests for background worker changes

## 0.6.0 (2024-06-30)

### feat

- user api token
- **api**: API token authentication
- **api**: abilty for user to create/delete api token
- **api**: create token model

### Fixes

- **user_token**: conduct user check on token view access
- **itam**: use same form for edit and add
- **itam**: dont add field inventorydate if adding new item
- **api**: inventory upload requires sanitization

### Refactoring

- **settings**: use seperate change/view views
- **settings**: use form for user settings
- **tests**: move unit tests to unit test sub-directory

### Tests

- **token_auth**: test authentication method token
- more tests
- add .coveragerc to remove non-code files from coverage report
- Unit Tests TenancyObjects
- Test Cases for TenancyObjects
- tests for checking links from rendered templetes
- **core**: test cases for notes permissions
- **config_management**: config groups history permissions
- **api**: Majority of Inventory upload tests
- **access**: TenancyObject field tests
- **access**: remove skipped api tests for team users

## 0.5.0 (2024-06-17)

### feat

- Setup Organization Managers
- **access**: add notes field to organization
- **access**: add organization manger
- **config_management**: Use breadcrumbs for child group name display
- **config_management**: ability to add host to global group
- **itam**: add a status of "bad" for devices
- **itam**: paginate device software tab
- **itam**: status of device visible on device index page
- API Browser
- **core**: add skeleton http browser
- **core**: Add a notes field to manufacturer/ publisher
- **itam**: Add a notes field to software category
- **itam**: Add a notes field to device types
- **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
- config group software
- **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
- sso
- 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

### Fixes

- **itam**: remove requirement that user needs change device to add notes
- **core**: dont attempt to access parent_object if 'None' during history save
- **config_management**: Add missing parent item getter to model
- **core**: overridden save within SaveHistory to use default attributes
- **access**: overridden save to use default attributes
- History does not delete when item deleted
- **core**: on object delete remove history entries
- inventory upload cant determin object organization
- **api**: ensure proper permission checking
- dont throw an exception during settings load for an item django already checks
- **core**: Add overrides for delete so delete history saved for items with parent model
- **config_management**: correct delete success url
- **base**: remove social auth from nav menu
- **access**: add a team user permissions to use team organization

### Refactoring

- **access**: relocate permission check to own function
- **itam**: move device os tab to details tab
- **itam**: add device change form and adjust view to be non-form
- **itam**: migrate device vie to use manual entered fields in two columns
- **access**: migrate team users view to use forms
- **access**: migrate teams view to use forms
- **access**: migrate organization view to use form
- **base**: cleanup form and prettyfy
- **config_management**: relocate groups views to own directory
- login to use base template
- adjust template block names

### Tests

- **access**: team user model permission check for organization manager
- **access**: team model permission check for organization manager
- **access**: organization model permission check for organization manager
- **access**: add test cases for model delete as organization manager
- **access**: add test cases for model addd as organization manager
- **access**: add test cases for model change as organization manager
- **access**: add test cases for model view as organization manager
- write some more
- **core**: skip invalid tests
- **itam**: tests for device type history entries
- **core**: tests for manufacturer history entries
- move manufacturer to it's parent
- refactor api model permission tests to use an abstract class of test cases
- move tests to the module they belong to
- refactor history permission tests to use an abstract class of test cases
- refactor model permission tests to use an abstract class of test cases
- refactor history entry to have test cases in abstract classes
- **itam**: history entry tests for software category
- **itam**: history entry tests for device operating system version
- **itam**: history entry tests for device operating system
- **itam**: history entry tests for device software
- **itam**: ensure child history is removed on config group software delete
- add placeholder tests
- **itam**: ensure history is removed on software delete
- **itam**: ensure history is removed on operating system delete
- **itam**: ensure history is removed on device model delete
- **config_management**: test history on delete for config groups
- **itam**: ensure history is removed on device delete
- **access**: test team history
- **access**: ensure team user history is created and removed as required
- **access**: ensure history is removed on team delete
- **access**: ensure history is removed on item delete
- **api**: Inventory upload permission checks
- **config_management**: testing of config_groups rendered config
- **config_management**: history save tests for config groups software
- **config_management**: config group software permission for add, change and delete
- **base**: placeholder tests for config groups software
- **base**: basic test for merge_software helper
- during unit tests add SECRET_KEY

## 0.4.0 (2024-06-05)

### feat

- 2024 06 05
- **database**: add mysql support
- **api**: move invneotry api endpoint to '/api/device/inventory'
- **core**: support more history types
- **core**: function to fetch history entry item
- 2024 06 02
- **config_management**: Add button to groups ui for adding child group
- **access**: throw error if no organization added
- **itam**: add delete button to config group within ui
- **itam**: Config groups rendered configuration now part of devices rendered configuration
- **config_management**: Ability to delete a host from a config group
- **config_management**: Ability to add a host to a config group
- **config_management**: ensure config doesn't use reserved config keys
- **config_management**: Config groups rendered config
- **config_management**: add configuration groups
- **api**: add swagger ui for documentation
- **api**: filter software to users organizations
- **api**: filter devices to users organizations
- randomz
- **api**: add org team view page
- API configuration of permissions
- **api**: configure team permissions

### Fixes

- **itam**: ensure device type saves history
- **core**: correct history view permissions
- **config_management**: set config dict keys to be valid ansible variables
- **itam**: correct logic for device add dynamic success url
- **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

### Refactoring

- **access**: cache object so it doesnt have to be called multiple times
- **config_management**: move groups to nav menu
- **api**: migrate devices and software to viewsets
- **api**: move permission check to mixin
- **access**: add team option to org permission check

### Tests

- **api**: placeholder test for inventory
- **settings**: access permission check for app settings
- **settings**: history view permission check for software category
- **settings**: history view permission check for manufacturer
- **settings**: history view permission check for device type
- **settings**: user settings
- **settings**: view permission check for user settings
- refactor core test layout
- **itam**: view permission check for software
- **itam**: view permission check for operating system
- **itam**: view permission check for device model
- **itam**: view permission check for device
- **config_management**: view permission check for config_groups
- **access**: view permission check for team
- **access**: view permission check for organization
- add history entry creation tests for most models
- **config_management**: when adding a host to config group filter out host that are already members of the group
- **config_management**: unit test for config groups model to ensure permissions are working
- **api**: remove tests for os and manufacturer as they are not used in api
- **api**: check model permissions for software
- **api**: check model permissions for devices
- **api**: check model permissions for teams
- **api**: check model permissions for organizations

## 0.3.0 (2024-05-29)

### feat

- Randomz
- **access**: during organization permission check, check to ensure user is logged on
- **history**: always create an entry even if user=none
- **itam**: device uuid must be unique
- **itam**: device serial number must be unique
- 2024 05 26
- **setting**: Enable super admin to set ALL manufacturer/publishers as global
- **setting**: Enable super admin to set ALL device types as global
- **setting**: Enable super admin to set ALL device models as global
- **setting**: Enable super admin to set ALL software categories as global
- **UI**: show build details with page footer
- **software**: Add output to stdout to show what is and has occurred
- 2024 05 25
- **base**: Add delete icon to content header
- **itam**: Populate initial organization value from user default organization for software category creation
- **itam**: Populate initial organization value from user default organization for device type creation
- **itam**: Populate initial organization value from user default organization for device model creation
- **api**: Populate initial organization value from user default organization inventory
- **itam**: Populate initial organization value from user default organization for Software creation
- **itam**: Populate initial organization value from user default organization for operating system creation
- **device**: Populate initial organization value from user default organization
- Add management command software
- **setting**: Enable super admin to set ALL software as global
- **user**: Add user settings panel
- Manufacturer and Model Information
- **itam**: Add publisher to software
- **itam**: Add publisher to operating system
- **itam**: Add device model
- **core**: Add manufacturers
- **settings**: add dummy model for permissions
- **settings**: new module for whole of application settings/globals
- 2024 05 21-23
- **access**: Save changes to history for organization and teams
- **software**: Save changes to history
- **operating_system**: Save changes to history
- **device**: Save changes to history
- **core**: history model for saving model history
- 2024 05 19/20
- **itam**: Ability to add notes to software
- **itam**: Ability to add notes to operating systems
- **itam**: Ability to add notes on devices
- **core**: notes model added to core
- **device**: Record inventory date and show as part of details
- **ui**: Show inventory details if they exist
- **api**: API accept computer inventory

### Fixes

- **settings**: Add correct permissions for team user delete
- **settings**: Add correct permissions for team user view/change
- **settings**: Add correct permissions for team view/change
- **settings**: Add correct permissions for team add
- **settings**: Add correct permissions for team delete
- **access**: correct back link within team view
- **access**: correct url name to be within naming conventions
- **settings**: Add correct permissions for manufacturer / publisher delete
- **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

### Refactoring

- **access**: add to models a get_organization function
- **access**: remove change view
- **itam**: relocation item delete from list to inside device
- **context_processor**: relocate as base
- **itam**: software index does not require created and modified date
- **organizations**: set org field to null if not set
- **itam**: move software categories to settings app
- **itam**: move device types to settings app
- **template**: content_title can be rendered in base

### Tests

- cleanup duplicate tests and minor reshuffle
- **access**: unit testing team user permissions
- **access**: unit testing team permissions
- **settings**: unit testing manufacturer permissions
- **settings**: unit testing software category permissions
- **device_model**: unit testing device type permissions
- **device_model**: unit testing device model permissions
- **organization**: unit testing organization permissions
- **operating_system**: unit testing operating system permissions
- **software**: unit testing software permissions
- **device**: unit testing device permissions
- adjust test layout and update contributing
- **core**: placeholder tests for history component
- **core**: place holder tests for notes model
- **api**: add placeholder tests for inventory

## 0.2.0 (2024-05-18)

### feat

- 2024 05 18
- **itam**: Add Operating System to ITAM models
- **api**: force content type to be JSON for req/resp
- **software**: view software
- 2024 05 17
- **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

### Fixes

- **device**: correct software link

## 0.1.0 (2024-05-17)

### feat

- API token auth
- **api**: initial token authentication implementation
- itam and API setup
- **docker**: add settings to store data in separate volume
- **django**: add split settings for specifying additional settings paths
- **api**: Add device config to device
- **itam**: add organization to device installs
- **itam**: migrate app from own repo
- Enable API by default
- Genesis
- **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

### Fixes

- **itam**: device software to come from device org or global not users orgs
- **access**: correct team required permissions
- **fields**: correct autoslug field so it works
- **docker**: build wheels then install

### Refactoring

- button to use same selection colour
- **access**: remove inline form for org teams
- rename app from itsm -> app
- **access**: dont use inline formset
- **views**: move views to own directory
- **access**: addjust org and teams to use different view per action

### Tests

- interim unit tests

## 0.0.1 (2024-05-06)
