feat(itam): Change model to inherit from Centurion
for DeviceSoftware model
ref:#817 #802
This commit is contained in:
@ -0,0 +1,101 @@
|
|||||||
|
# Generated by Django 5.1.9 on 2025-06-11 09:15
|
||||||
|
|
||||||
|
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"),
|
||||||
|
("itam", "0017_remove_deviceoperatingsystem_is_global_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
name="is_global",
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
name="action",
|
||||||
|
field=models.IntegerField(
|
||||||
|
blank=True,
|
||||||
|
choices=[(1, "Install"), (0, "Remove")],
|
||||||
|
help_text="Action to perform",
|
||||||
|
null=True,
|
||||||
|
verbose_name="Action",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
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="devicesoftware",
|
||||||
|
name="installedversion",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
help_text="Version that is installed",
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name="installedversion",
|
||||||
|
to="itam.softwareversion",
|
||||||
|
verbose_name="Installed Version",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
name="model_notes",
|
||||||
|
field=models.TextField(
|
||||||
|
blank=True,
|
||||||
|
help_text="Tid bits of information",
|
||||||
|
null=True,
|
||||||
|
verbose_name="Notes",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
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="devicesoftware",
|
||||||
|
name="software",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
help_text="Software Name",
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to="itam.software",
|
||||||
|
verbose_name="Software",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="devicesoftware",
|
||||||
|
name="version",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
help_text="Version to install",
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to="itam.softwareversion",
|
||||||
|
verbose_name="Desired Version",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
@ -14,11 +14,8 @@ from access.fields import AutoLastModifiedField
|
|||||||
from centurion.helpers.merge_software import merge_software
|
from centurion.helpers.merge_software import merge_software
|
||||||
|
|
||||||
from core.classes.icon import Icon
|
from core.classes.icon import Icon
|
||||||
from core.lib.feature_not_used import FeatureNotUsed
|
|
||||||
from core.mixins.history_save import SaveHistory
|
|
||||||
from core.models.centurion import CenturionModel
|
from core.models.centurion import CenturionModel
|
||||||
|
|
||||||
from itam.models.device_common import DeviceCommonFields
|
|
||||||
from itam.models.device_models import DeviceModel
|
from itam.models.device_models import DeviceModel
|
||||||
from itam.models.software import Software, SoftwareVersion
|
from itam.models.software import Software, SoftwareVersion
|
||||||
from itam.models.operating_system import OperatingSystemVersion
|
from itam.models.operating_system import OperatingSystemVersion
|
||||||
@ -537,9 +534,16 @@ class Device(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
class DeviceSoftware(
|
||||||
|
CenturionModel,
|
||||||
|
):
|
||||||
""" A way for the device owner to configure software to install/remove """
|
""" A way for the device owner to configure software to install/remove """
|
||||||
|
|
||||||
|
_audit_enabled = False
|
||||||
|
|
||||||
|
_notes_enabled = False
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = [
|
ordering = [
|
||||||
'-action',
|
'-action',
|
||||||
@ -559,37 +563,35 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
|||||||
|
|
||||||
device = models.ForeignKey(
|
device = models.ForeignKey(
|
||||||
Device,
|
Device,
|
||||||
blank= False,
|
blank = False,
|
||||||
help_text = 'Device this software is on',
|
help_text = 'Device this software is on',
|
||||||
on_delete=models.CASCADE,
|
on_delete = models.CASCADE,
|
||||||
null = False,
|
null = False,
|
||||||
verbose_name = 'Device'
|
verbose_name = 'Device'
|
||||||
)
|
)
|
||||||
|
|
||||||
software = models.ForeignKey(
|
software = models.ForeignKey(
|
||||||
Software,
|
Software,
|
||||||
blank= False,
|
blank = False,
|
||||||
help_text = 'Software Name',
|
help_text = 'Software Name',
|
||||||
null = False,
|
null = False,
|
||||||
on_delete=models.CASCADE,
|
on_delete = models.PROTECT,
|
||||||
verbose_name = 'Software'
|
verbose_name = 'Software'
|
||||||
)
|
)
|
||||||
|
|
||||||
action = models.IntegerField(
|
action = models.IntegerField(
|
||||||
blank = True,
|
blank = True,
|
||||||
choices=Actions,
|
choices = Actions,
|
||||||
default=None,
|
|
||||||
help_text = 'Action to perform',
|
help_text = 'Action to perform',
|
||||||
null=True,
|
null = True,
|
||||||
verbose_name = 'Action',
|
verbose_name = 'Action',
|
||||||
)
|
)
|
||||||
|
|
||||||
version = models.ForeignKey(
|
version = models.ForeignKey(
|
||||||
SoftwareVersion,
|
SoftwareVersion,
|
||||||
blank= True,
|
blank = True,
|
||||||
default = None,
|
|
||||||
help_text = 'Version to install',
|
help_text = 'Version to install',
|
||||||
on_delete=models.CASCADE,
|
on_delete = models.PROTECT,
|
||||||
null = True,
|
null = True,
|
||||||
verbose_name = 'Desired Version'
|
verbose_name = 'Desired Version'
|
||||||
)
|
)
|
||||||
@ -597,11 +599,10 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
|||||||
|
|
||||||
installedversion = models.ForeignKey(
|
installedversion = models.ForeignKey(
|
||||||
SoftwareVersion,
|
SoftwareVersion,
|
||||||
blank= True,
|
blank = True,
|
||||||
default = None,
|
|
||||||
help_text = 'Version that is installed',
|
help_text = 'Version that is installed',
|
||||||
null = True,
|
null = True,
|
||||||
on_delete=models.CASCADE,
|
on_delete = models.PROTECT,
|
||||||
related_name = 'installedversion',
|
related_name = 'installedversion',
|
||||||
verbose_name = 'Installed Version'
|
verbose_name = 'Installed Version'
|
||||||
)
|
)
|
||||||
@ -651,39 +652,24 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_url_kwargs(self) -> dict:
|
def get_url_kwargs(self, many = False) -> dict:
|
||||||
|
|
||||||
return {
|
kwargs = super().get_url_kwargs( many = many )
|
||||||
|
|
||||||
|
kwargs.update({
|
||||||
'device_id': self.device.id,
|
'device_id': self.device.id,
|
||||||
'pk': self.id
|
})
|
||||||
}
|
|
||||||
|
|
||||||
|
return kwargs
|
||||||
def get_url_kwargs_notes(self):
|
|
||||||
|
|
||||||
return FeatureNotUsed
|
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parent_object(self):
|
def parent_object(self):
|
||||||
""" Fetch the parent object """
|
""" Fetch the parent object """
|
||||||
|
|
||||||
return self.device
|
return self.device
|
||||||
|
|
||||||
|
|
||||||
def save_history(self, before: dict, after: dict) -> bool:
|
|
||||||
|
|
||||||
from itam.models.device_software_history import DeviceSoftwareHistory
|
|
||||||
|
|
||||||
history = super().save_history(
|
|
||||||
before = before,
|
|
||||||
after = after,
|
|
||||||
history_model = DeviceSoftwareHistory,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
return history
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceOperatingSystem(
|
class DeviceOperatingSystem(
|
||||||
CenturionModel,
|
CenturionModel,
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
from django.db import models
|
|
||||||
|
|
||||||
from access.fields import *
|
|
||||||
from access.models.tenancy import TenancyObject
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceCommonFields(TenancyObject, models.Model):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
abstract = True
|
|
||||||
|
|
||||||
id = models.AutoField(
|
|
||||||
blank=False,
|
|
||||||
help_text = 'ID of this item',
|
|
||||||
primary_key=True,
|
|
||||||
unique=True,
|
|
||||||
verbose_name = 'ID'
|
|
||||||
)
|
|
||||||
|
|
||||||
created = AutoCreatedField()
|
|
||||||
|
|
||||||
modified = AutoLastModifiedField()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceCommonFieldsName(DeviceCommonFields):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
abstract = True
|
|
||||||
|
|
||||||
name = models.CharField(
|
|
||||||
blank = False,
|
|
||||||
help_text = 'The items name',
|
|
||||||
max_length = 50,
|
|
||||||
unique = True,
|
|
||||||
verbose_name = 'Name'
|
|
||||||
)
|
|
||||||
|
|
||||||
slug = AutoSlugField()
|
|
Reference in New Issue
Block a user