feat(itam): Change model to inherit from CenturionModel for DeviceSoftware model

ref:#817 #818
This commit is contained in:
2025-06-11 19:53:56 +09:30
parent d7e70c1e62
commit 465c0d8679
2 changed files with 171 additions and 44 deletions

View File

@ -0,0 +1,138 @@
# Generated by Django 5.1.9 on 2025-06-11 10:22
import access.models.tenancy_abstract
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("access", "0016_remove_tenant_slug_alter_tenant_manager_and_more"),
("core", "0033_alter_ticketcommentcategory_parent_and_more"),
("itam", "0018_remove_devicesoftware_is_global_and_more"),
]
operations = [
migrations.RemoveField(
model_name="operatingsystem",
name="is_global",
),
migrations.RemoveField(
model_name="operatingsystem",
name="slug",
),
migrations.AlterField(
model_name="operatingsystem",
name="id",
field=models.AutoField(
help_text="ID of the item",
primary_key=True,
serialize=False,
unique=True,
verbose_name="ID",
),
),
migrations.AlterField(
model_name="operatingsystem",
name="model_notes",
field=models.TextField(
blank=True,
help_text="Tid bits of information",
null=True,
verbose_name="Notes",
),
),
migrations.AlterField(
model_name="operatingsystem",
name="organization",
field=models.ForeignKey(
help_text="Tenant this belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="access.tenant",
validators=[
access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists
],
verbose_name="Tenant",
),
),
migrations.AlterField(
model_name="operatingsystem",
name="publisher",
field=models.ForeignKey(
blank=True,
help_text="Who publishes this Operating System",
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="core.manufacturer",
verbose_name="Publisher",
),
),
migrations.CreateModel(
name="OperatingSystemAuditHistory",
fields=[
(
"centurionaudit_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="core.centurionaudit",
),
),
(
"model",
models.ForeignKey(
help_text="Model this history belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="audit_history",
to="itam.operatingsystem",
verbose_name="Model",
),
),
],
options={
"verbose_name": "Operating System History",
"verbose_name_plural": "Operating System Histories",
"db_table": "itam_operatingsystem_audithistory",
"managed": True,
},
bases=("core.centurionaudit",),
),
migrations.CreateModel(
name="OperatingSystemCenturionModelNote",
fields=[
(
"centurionmodelnote_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="core.centurionmodelnote",
),
),
(
"model",
models.ForeignKey(
help_text="Model this note belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="itam.operatingsystem",
verbose_name="Model",
),
),
],
options={
"verbose_name": "Operating System Note",
"verbose_name_plural": "Operating System Notes",
"db_table": "itam_operatingsystem_centurionmodelnote",
"managed": True,
},
bases=("core.centurionmodelnote",),
),
]

View File

@ -1,15 +1,11 @@
from django.db import models
from django.db.models.signals import post_delete
from django.dispatch import receiver
from rest_framework.reverse import reverse
from access.fields import *
from access.fields import AutoLastModifiedField, AutoCreatedField, AutoSlugField
from access.models.tenancy import TenancyObject
from core.mixins.history_save import SaveHistory
from core.models.centurion import CenturionModel
from core.models.manufacturer import Manufacturer
from core.signal.ticket_linked_item_delete import TicketLinkedItem, deleted_model
@ -28,7 +24,7 @@ class OperatingSystemCommonFields(TenancyObject, models.Model):
created = AutoCreatedField()
modified = AutoLastModifiedField()
# modified = AutoLastModifiedField()
@ -37,20 +33,23 @@ class OperatingSystemFieldsName(OperatingSystemCommonFields):
class Meta:
abstract = True
name = models.CharField(
blank = False,
help_text = 'Name of this item',
max_length = 50,
unique = True,
verbose_name = 'Name'
)
# name = models.CharField(
# blank = False,
# help_text = 'Name of this item',
# max_length = 50,
# unique = True,
# verbose_name = 'Name'
# )
slug = AutoSlugField()
class OperatingSystem(OperatingSystemFieldsName, SaveHistory):
class OperatingSystem(
CenturionModel
):
model_tag = 'operating_system'
class Meta:
@ -66,13 +65,22 @@ class OperatingSystem(OperatingSystemFieldsName, SaveHistory):
publisher = models.ForeignKey(
Manufacturer,
blank = True,
default = None,
help_text = 'Who publishes this Operating System',
null = True,
on_delete = models.SET_DEFAULT,
on_delete = models.PROTECT,
verbose_name = 'Publisher'
)
name = models.CharField(
blank = False,
help_text = 'Name of this item',
max_length = 50,
unique = True,
verbose_name = 'Name'
)
modified = AutoLastModifiedField()
page_layout: dict = [
{
@ -161,42 +169,20 @@ class OperatingSystem(OperatingSystemFieldsName, SaveHistory):
]
def get_url( self, request = None ) -> str:
if request:
return reverse("v2:_api_v2_operating_system-detail", request=request, kwargs={'pk': self.id})
return reverse("v2:_api_v2_operating_system-detail", kwargs={'pk': self.id})
def __str__(self):
return self.name
def save_history(self, before: dict, after: dict) -> bool:
from itam.models.operating_system_history import OperatingSystemHistory
def get_organization(self):
history = super().save_history(
before = before,
after = after,
history_model = OperatingSystemHistory,
)
return history
return self.organization
@receiver(post_delete, sender=OperatingSystem, dispatch_uid='operating_system_delete_signal')
def signal_deleted_model(sender, instance, using, **kwargs):
deleted_model.send(sender='operating_system_deleted', item_id=instance.id, item_type = TicketLinkedItem.Modules.OPERATING_SYSTEM)
class OperatingSystemVersion(OperatingSystemCommonFields, SaveHistory):
class OperatingSystemVersion(
OperatingSystemCommonFields, SaveHistory
):
class Meta:
@ -225,6 +211,9 @@ class OperatingSystemVersion(OperatingSystemCommonFields, SaveHistory):
verbose_name = 'Major Version',
)
modified = AutoLastModifiedField()
page_layout: list = [
{
"name": "Details",