Files
centurion_erp/app/assistance/models/model_knowledge_base_article.py

179 lines
3.7 KiB
Python

import importlib
from django.apps import apps
from django.db import models
from access.fields import *
from access.models.tenancy import TenancyObject
from assistance.models.knowledge_base import KnowledgeBase
from core.lib.feature_not_used import FeatureNotUsed
def all_models() -> list(tuple()):
models: list(tuple()) = []
model_apps: list = [
'access',
'accounting',
'api',
'app',
'assistance',
'config_management',
'core',
'devops',
'human_resources',
'itam',
'itim',
'project_management',
'settings',
]
excluded_models: list = [
'appsettings',
'authtoken',
'configgrouphosts',
'configgroupsoftware',
'deviceoperatingsystem',
'devicesoftware',
'history',
'knowledgebase',
'modelknowledgebasearticle',
'notes',
'relatedtickets',
'teamusers',
'ticket',
'ticketcomment',
'ticketlinkeditem',
'token',
'usersettings',
]
for app_model in apps.get_models():
if(
str(app_model._meta.app_label) in model_apps
and str(app_model._meta.model_name) not in excluded_models
and not str(app_model._meta.model_name).lower().endswith('notes')
):
models.append(
(str(app_model._meta.app_label) + '.' + str(app_model._meta.model_name), str(app_model._meta.verbose_name))
)
models.sort(key=lambda tup: tup[1])
return models
class ModelKnowledgeBaseArticle(TenancyObject):
class Meta:
default_permissions = ('add', 'delete', 'view')
ordering = [
'model',
'id'
]
unique_together = ('article', 'model', 'model_pk',)
verbose_name = "Model Knowledge Base Article"
verbose_name_plural = "Model Knowledge Base Articles"
model_notes = None
id = models.AutoField(
blank=False,
help_text = 'ID of this KB article link',
primary_key=True,
unique=True,
verbose_name = 'ID'
)
article = models.ForeignKey(
KnowledgeBase,
blank = False,
help_text = 'Article to be linked to model',
null = False,
on_delete = models.CASCADE,
unique = False,
verbose_name = 'Article',
)
model = models.CharField(
blank = False,
choices = all_models,
help_text = 'Model type to link to article article',
max_length = 50,
null = False,
unique = False,
verbose_name = 'Model Type',
)
model_pk = models.IntegerField(
blank = False,
help_text = 'PK of the model the article is linked to',
null = False,
unique = False,
verbose_name = 'Model Primary Key'
)
created = AutoCreatedField()
modified = AutoLastModifiedField()
page_layout: list = []
table_fields: list = [
'article',
'category',
'organization',
'created',
'modified',
]
def clean(self):
for model in apps.get_models():
if(
str(model._meta.app_label) + '.' + str(model._meta.model_name)
==
self.model
):
app = importlib.import_module( model.__module__ )
model_class = getattr(app, model.__name__)
item = model_class.objects.get(pk = self.model_pk)
if item:
self.organization = item.organization
def get_url( self, request = None ):
""" Function not required nor-used"""
return None
def get_url_kwargs_notes(self):
return FeatureNotUsed