From 851bf553b082d990adc3623a91dcb48128cd0463 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 12 Jun 2025 12:17:54 +0930 Subject: [PATCH] feat(itam): Change model to inherit from `CenturionModel` for SoftwareCategory model ref: #823 #821 closes #595 --- ...ove_softwarecategory_is_global_and_more.py | 126 ++++++++++++++++++ app/itam/models/software.py | 34 ++--- 2 files changed, 136 insertions(+), 24 deletions(-) create mode 100644 app/itam/migrations/0022_remove_softwarecategory_is_global_and_more.py diff --git a/app/itam/migrations/0022_remove_softwarecategory_is_global_and_more.py b/app/itam/migrations/0022_remove_softwarecategory_is_global_and_more.py new file mode 100644 index 00000000..15dd19b1 --- /dev/null +++ b/app/itam/migrations/0022_remove_softwarecategory_is_global_and_more.py @@ -0,0 +1,126 @@ +# Generated by Django 5.1.9 on 2025-06-12 02:42 + +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", "0021_remove_software_is_global_remove_software_slug_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="softwarecategory", + name="is_global", + ), + migrations.RemoveField( + model_name="softwarecategory", + name="slug", + ), + migrations.AlterField( + model_name="softwarecategory", + 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="softwarecategory", + name="model_notes", + field=models.TextField( + blank=True, + help_text="Tid bits of information", + null=True, + verbose_name="Notes", + ), + ), + migrations.AlterField( + model_name="softwarecategory", + 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.CreateModel( + name="SoftwareCategoryAuditHistory", + 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.softwarecategory", + verbose_name="Model", + ), + ), + ], + options={ + "verbose_name": "Software Category History", + "verbose_name_plural": "Software Category Histories", + "db_table": "itam_softwarecategory_audithistory", + "managed": True, + }, + bases=("core.centurionaudit",), + ), + migrations.CreateModel( + name="SoftwareCategoryCenturionModelNote", + 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.softwarecategory", + verbose_name="Model", + ), + ), + ], + options={ + "verbose_name": "Software Category Note", + "verbose_name_plural": "Software Category Notes", + "db_table": "itam_softwarecategory_centurionmodelnote", + "managed": True, + }, + bases=("core.centurionmodelnote",), + ), + ] diff --git a/app/itam/models/software.py b/app/itam/models/software.py index 770e8adb..12f94468 100644 --- a/app/itam/models/software.py +++ b/app/itam/models/software.py @@ -1,14 +1,11 @@ from django.db import models -from django.db.models.signals import post_delete -from django.dispatch import receiver from access.fields import * -from access.models.tenancy import Tenant, TenancyObject +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 from settings.models.app_settings import AppSettings @@ -33,9 +30,11 @@ class SoftwareCommonFields(TenancyObject, models.Model): class SoftwareCategory( - SoftwareCommonFields, SaveHistory + CenturionModel, ): + model_tag = 'software_category' + class Meta: @@ -104,6 +103,11 @@ class SoftwareCategory( ] + def __str__(self): + + return self.name + + def clean(self): app_settings = AppSettings.objects.get(owner_organization=None) @@ -113,27 +117,9 @@ class SoftwareCategory( self.organization = app_settings.global_organization - def __str__(self): - - return self.name - - def save_history(self, before: dict, after: dict) -> bool: - - from itam.models.software_category_history import SoftwareCategoryHistory - - history = super().save_history( - before = before, - after = after, - history_model = SoftwareCategoryHistory, - ) - - - return history - - class Software( - CenturionModel + CenturionModel, ): model_tag = 'software'