chore(itam): Remove no longer used Django UI

ref: #788 #757
This commit is contained in:
2025-06-05 14:10:40 +09:30
parent 25d510f086
commit 6aa7953c2a
47 changed files with 0 additions and 4617 deletions

View File

@ -1,113 +0,0 @@
from django import forms
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.device import Device
class DeviceForm(CommonModelForm):
prefix = 'device'
class Meta:
model = Device
fields = [
'id',
'name',
'device_model',
'serial_number',
'uuid',
'device_type',
'organization',
'is_virtual',
'model_notes',
'config',
]
class DetailForm(DeviceForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'device_model',
'serial_number',
'uuid',
'device_type',
'organization',
'c_created',
'c_modified',
'lastinventory',
],
"right": [
'model_notes',
'is_virtual',
]
}
]
},
"software": {
"name": "Software",
"slug": "software",
"sections": []
},
"tickets": {
"name": "Tickets",
"slug": "tickets",
"sections": []
},
"notes": {
"name": "Notes",
"slug": "notes",
"sections": []
},
"config_management": {
"name": "Config Management",
"slug": "config_management",
"sections": []
}
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.fields['lastinventory'] = forms.DateTimeField(
label="Last Inventory Date",
input_formats=settings.DATETIME_FORMAT,
initial=kwargs['instance'].inventorydate,
disabled=True,
required=False,
)
self.tabs['details'].update({
"edit_url": reverse('ITAM:_device_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('ITAM:Devices')

View File

@ -1,37 +0,0 @@
from django import forms
from django.db.models import Q
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.device import DeviceOperatingSystem
class Update(CommonModelForm):
prefix = 'operating_system'
class Meta:
model = DeviceOperatingSystem
fields = [
"id",
"version",
'operating_system_version',
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'instance' in kwargs.keys():
if kwargs['instance'] is not None:
self.fields['_created'] = forms.DateTimeField(
label="Install Date",
input_formats=settings.DATETIME_FORMAT,
initial=kwargs['instance'].installdate,
disabled=True
)

View File

@ -1,91 +0,0 @@
from django import forms
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.device_models import DeviceModel
from settings.forms.admin_settings_global import AdminGlobalModels
class DeviceModelForm(
AdminGlobalModels,
CommonModelForm
):
class Meta:
fields = [
'name',
'slug',
'manufacturer',
'id',
'organization',
'is_global',
'model_notes',
]
model = DeviceModel
class DetailForm(DeviceModelForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'slug',
'manufacturer',
'organization',
'is_global',
'c_created',
'c_modified',
],
"right": [
'model_notes',
]
}
]
},
# "notes": {
# "name": "Notes",
# "slug": "notes",
# "sections": []
# },
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.tabs['details'].update({
"edit_url": reverse('Settings:_device_model_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('Settings:_device_models')

View File

@ -1,23 +0,0 @@
from django.db.models import Q
from core.forms.common import CommonModelForm
from itam.models.device import DeviceSoftware
from itam.models.software import Software
class SoftwareAdd(CommonModelForm):
class Meta:
model = DeviceSoftware
fields = [
'software',
'action'
]
def __init__(self, *args, **kwargs):
organizations = kwargs.pop('organizations')
super().__init__(*args, **kwargs)
self.fields['software'].queryset = Software.objects.filter(Q(organization_id__in=organizations) | Q(is_global = True))

View File

@ -1,23 +0,0 @@
from django.db.models import Q
from core.forms.common import CommonModelForm
from itam.models.device import DeviceSoftware
from itam.models.software import Software, SoftwareVersion
class SoftwareUpdate(CommonModelForm):
class Meta:
model = DeviceSoftware
fields = [
'action',
'version',
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['version'].queryset = SoftwareVersion.objects.filter(software_id=self.instance.software.id)

View File

@ -1,89 +0,0 @@
from django import forms
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.device import DeviceType
from settings.forms.admin_settings_global import AdminGlobalModels
class DeviceTypeForm(
AdminGlobalModels,
CommonModelForm
):
class Meta:
fields = [
'name',
'slug',
'id',
'organization',
'is_global',
'model_notes',
]
model = DeviceType
class DetailForm(DeviceTypeForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'slug',
'organization',
'is_global',
'c_created',
'c_modified',
],
"right": [
'model_notes',
]
}
]
},
# "notes": {
# "name": "Notes",
# "slug": "notes",
# "sections": []
# }
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.tabs['details'].update({
"edit_url": reverse('Settings:_device_type_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('Settings:_device_types')

View File

@ -1,130 +0,0 @@
from django import forms
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.operating_system import OperatingSystem
class OperatingSystemForm(CommonModelForm):
class Meta:
fields = [
"name",
'publisher',
'slug',
'id',
'organization',
'is_global',
'model_notes',
]
model = OperatingSystem
# class Update(OperatingSystemFormCommon):
# def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# self.fields['_created'] = forms.DateTimeField(
# label="Created",
# input_formats=settings.DATETIME_FORMAT,
# initial=kwargs['instance'].created,
# disabled=True
# )
# self.fields['_modified'] = forms.DateTimeField(
# label="Modified",
# input_formats=settings.DATETIME_FORMAT,
# initial=kwargs['instance'].modified,
# disabled=True
# )
# if kwargs['instance'].is_global:
# self.fields['is_global'].widget.attrs['disabled'] = True
class DetailForm(OperatingSystemForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'publisher',
'serial_number',
'organization',
'c_created',
'c_modified',
],
"right": [
'model_notes',
]
}
]
},
"versions": {
"name": "Versions",
"slug": "versions",
"sections": []
},
"licences": {
"name": "Licences",
"slug": "licences",
"sections": []
},
"installations": {
"name": "Installations",
"slug": "installations",
"sections": []
},
"tickets": {
"name": "Tickets",
"slug": "tickets",
"sections": []
},
"notes": {
"name": "Notes",
"slug": "notes",
"sections": []
}
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.tabs['details'].update({
"edit_url": reverse('ITAM:_operating_system_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('ITAM:Operating Systems')

View File

@ -1,17 +0,0 @@
from django.db.models import Q
from core.forms.common import CommonModelForm
from itam.models.operating_system import OperatingSystemVersion
class OperatingSystemVersionForm(CommonModelForm):
class Meta:
fields = [
'name',
]
model = OperatingSystemVersion

View File

@ -1,127 +0,0 @@
from django import forms
from django.db.models import Q
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.software import Software
class SoftwareForm(CommonModelForm):
class Meta:
model = Software
fields = [
'name',
'publisher',
'slug',
'category',
'model_notes',
]
class SoftwareChange(SoftwareForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if not self.instance.is_global:
self.fields['is_global'] = forms.BooleanField(
label = 'Is Global',
initial = self.instance.is_global
)
self.fields['organization'] = forms.CharField(
label = 'Tenant',
initial = self.instance.organization
)
class DetailForm(SoftwareForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'publisher',
'slug',
'organization',
'is_global',
'category',
'c_created',
'c_modified',
],
"right": [
'model_notes',
]
}
]
},
"versions": {
"name": "Versions",
"slug": "versions",
"sections": []
},
"licences": {
"name": "Licences",
"slug": "licences",
"sections": []
},
"tickets": {
"name": "Tickets",
"slug": "tickets",
"sections": []
},
"notes": {
"name": "Notes",
"slug": "notes",
"sections": []
},
"installations": {
"name": "Installations",
"slug": "installations",
"sections": []
}
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields[ 'organization' ] = forms.CharField(
label = 'Tenant',
initial = self.instance.organization
)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.tabs['details'].update({
"edit_url": reverse('ITAM:_software_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('ITAM:Software')

View File

@ -1,88 +0,0 @@
from django import forms
from django.urls import reverse
from django.conf import settings
from core.forms.common import CommonModelForm
from itam.models.software import SoftwareCategory
from settings.forms.admin_settings_global import AdminGlobalModels
class SoftwareCategoryForm(
AdminGlobalModels,
CommonModelForm
):
class Meta:
fields = [
'name',
'slug',
'id',
'organization',
'is_global',
'model_notes',
]
model = SoftwareCategory
class DetailForm(SoftwareCategoryForm):
tabs: dict = {
"details": {
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'name',
'slug',
'organization',
'is_global',
'c_created',
'c_modified',
],
"right": [
'model_notes',
]
}
]
},
# "notes": {
# "name": "Notes",
# "slug": "notes",
# "sections": []
# },
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['c_created'] = forms.DateTimeField(
label = 'Created',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.created,
)
self.fields['c_modified'] = forms.DateTimeField(
label = 'Modified',
input_formats=settings.DATETIME_FORMAT,
disabled = True,
initial = self.instance.modified,
)
self.tabs['details'].update({
"edit_url": reverse('Settings:_software_category_change', args=(self.instance.pk,))
})
self.url_index_view = reverse('Settings:_software_categories')

View File

@ -1,216 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
<hr />
<div style="display: block; width: 100%;">
<h3>Operating System</h3>
<br>
{{ operating_system.as_p }}
<input type="submit" name="{{ operating_system.prefix }}" value="Submit" />
</div>
<div style="display: block; width: 100%;">
<h3>Dependent Services</h3>
<table>
<tr>
<th>Name</th>
<th>Ports</th>
</tr>
{% if services %}
{% for service in services %}
<tr>
<td><a href="{% url 'ITIM:_service_view' service.pk %}">{{ service }}</a></td>
<td>{% for port in service.port.all %}{{ port }} ({{ port.description}}), {% endfor %}</td>
</tr>
{% endfor%}
{% else %}
<tr>
<td colspan="2"> Nothing Found</td>
</tr>
{% endif %}
</table>
</div>
<div style="display: block; width: 100%;">
<h3>Device Config</h3>
<br>
<textarea cols="90" rows="30" readonly>{{ device.config }}</textarea>
</div>
</div>
<div id="software" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.software %}
<hr>
Installed Software: {{ installed_software }}
<input type="button" value="Add Software Action" onclick="window.location='{% url 'ITAM:_device_software_add' device.id %}';">
<table>
<thead>
<th>Name</th>
<th>Category</th>
<th>Action</th>
<th>Desired Version</th>
<th>Installed Version</th>
<th>Installed</th>
<th>&nbsp;</th>
</thead>
{% if softwares %}
{% for software in softwares %}
<tr>
<td><a href="{% url 'ITAM:_software_view' pk=software.software_id %}">{{ software.software }}</a></td>
<td>{{ software.software.category }}</td>
<td>
{% url 'ITAM:_device_software_view' device_id=device.id pk=software.id as icon_link %}
{% if software.get_action_display == 'Install' %}
{% include 'icons/success_text.html.j2' with icon_text=software.get_action_display icon_link=icon_link %}
{% elif software.get_action_display == 'Remove'%}
{% include 'icons/cross_text.html.j2' with icon_text=software.get_action_display icon_link=icon_link %}
{% else %}
{% include 'icons/add_link.html.j2' with icon_text='Add' icon_link=icon_link %}
{% endif %}
</td>
<td>
{% if software.version %}
{{ software.version }}
{% else %}
-
{% endif %}
</td>
<td>
{% if software.installedversion %}
{{ software.installedversion }}
{% else %}
-
{% endif %}
</td>
<td>
{% if software.installed %}
{{ software.installed }}
{% else %}
-
{% endif %}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<td colspan="5">Nothing Found</td>
{% endif %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1&tab=software">&laquo; first</a>
<a href="?page={{ page_obj.previous_page_number }}&tab=software">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}&tab=software">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}&tab=software">last &raquo;</a>
{% endif %}
</span>
</div>
</div>
<div id="tickets" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.tickets %}
<table>
<thead>
<th>Name</th>
<th>Status</th>
<th>&nbsp</th>
</thead>
{% if tickets %}
{% for ticket in tickets %}
<tr>
<td>{% concat_strings "#" ticket.ticket.id as ticket_ref %}{{ ticket_ref | markdown | safe}}</td>
<td>{% include 'core/ticket/badge_ticket_status.html.j2' with ticket_status_text=ticket.ticket.get_status_display ticket_status=ticket.ticket.get_status_display|ticket_status %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">No related tickets exist</td>
</tr>
{% endif %}
</table>
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
<div id="config_management" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.config_management %}
<div>
<textarea cols="90" rows="30" readonly>{{ config }}</textarea>
</div>
<br />
<hr />
<table class="data">
<tr>
<th>Group</th>
<th>Added</th>
<th>&nbsp;</th>
</tr>
{% if device.configgroups_set %}
{% for group in device.configgroups_set.all %}
<tr>
<td><a href="{% url 'Config Management:_group_view' pk=group.id %}">{{ group }}</a></td>
<td>{{ group.created }}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">Nothing Found.</td>
</tr>
{% endif %}
</table>
</div>
</form>
{% endblock %}

View File

@ -1,155 +0,0 @@
{% extends 'base.html.j2' %}
{% block title %}Devices{% endblock %}
{% block content_header_icon %}{% endblock %}
{% block content %}
<style>
a.status_icon {
display: inline-block;
height: 30px;
line-height: 30px;
/*background-color: aqua;*/
}
span.status_icon {
/* display: inline-block;*/
height: 30px;
line-height: 30px;
/*background-color: aqua;*/
width: auto;
align-items: center;
/*position: relative;*/
vertical-align: middle; padding: auto; margin: 0px
}
.status_icon_ok svg {
fill: #319c3a;
width: 22px;
height: 22px;
vertical-align: middle;
margin: 0px;
padding: 0px;
border: none;
border-radius: 11px;
/*background-color: #c7e2ca;*/
}
.status_icon_warn svg {
fill: #cf9925;
width: 22px;
height: 22px;
vertical-align: middle;
margin: 0px;
padding: 0px;
border: none;
border-radius: 11px;
/*background-color: #ffefc5;*/
}
.status_icon_bad svg {
fill: #cf3025;
width: 22px;
height: 22px;
vertical-align: middle;
margin: 0px;
padding: 0px;
border: none;
border-radius: 11px;
/*background-color: #ffefc5;*/
}
.status_icon_ukn svg {
fill: #999;
width: 22px;
height: 22px;
border: none;
border-radius: 11px;
/*background-color: #e9e9e9;*/
}
</style>
<input type="button" value="New Device" onclick="window.location='{% url 'ITAM:_device_add' %}';">
<table class="data">
<tr>
<th style="width: 50px;">&nbsp;</th>
<th>Name</th>
<th>Device Type</th>
<th>Manufacturer</th>
<th>Model</th>
<th>Organization</th>
<th>&nbsp;</th>
</tr>
{% for device in devices %}
<tr>
<td>
<span class="status_icon status_icon_ok">
{% if device.status == 'OK' %}
<span class="status_icon status_icon_ok">
{% include 'icons/inventory_status_ok.svg' %}
</span>
{% elif device.status == 'WARN' %}
<span class="status_icon status_icon_warn">
{% include 'icons/inventory_status_warning.svg' %}
</span>
{% elif device.status == 'BAD' %}
<span class="status_icon status_icon_bad">
{% include 'icons/inventory_status_bad.svg' %}
</span>
{% else %}
<span class="status_icon status_icon_ukn">
{% include 'icons/inventory_status_unknown.svg' %}
</span>
{% endif %}
</td>
<td>
<a href="{% url 'ITAM:_device_view' pk=device.id %}">{{ device.name }}</a>
</td>
<td>
{% if device.device_type %}
{{ device.device_type }}
{% else %}
-
{% endif %}
</td>
<td>
{% if device.device_model.manufacturer %}
<a href="{% url 'Settings:_manufacturer_view' pk=device.device_model.manufacturer.id %}">{{ device.device_model.manufacturer }}</a>
{% else %}
-
{% endif %}
</td>
<td>
{% if device.device_model.name %}
<a href="{% url 'Settings:_device_model_view' pk=device.device_model.id %}">{{ device.device_model.name }}</a>
{% else %}
-
{% endif %}
</td>
<td>{% if software.is_global %}Global{% else %}{{ device.organization }}{% endif %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -1,34 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
</form>
{% endblock %}

View File

@ -1,36 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
</form>
{% endblock %}

View File

@ -1,154 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
</div>
<div id="versions" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.versions %}
<table>
<thead>
<th>Version</th>
<th>Installations</th>
<th>Vulnerable</th>
<th>&nbsp;</th>
</thead>
{% for version in operating_system_versions %}
<tr>
<td><a href="{% url 'ITAM:_operating_system_version_view' operating_system_id=operating_system.id pk=version.id %}">{{ version.name }}</a></td>
<td>{% if version.installs == 0%}-{% else %}{{ version.installs }}{% endif %}</td>
<td>&nbsp;</td>
<td><a href="{% url 'ITAM:_operating_system_version_delete' operating_system_id=operating_system.id pk=version.id %}">DELETE</a></td>
</tr>
{% endfor %}
</table>
</div>
<div id="licences" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.licences %}
{% include 'icons/issue_link.html.j2' with issue=4 %}
<table>
<thead>
<th>Name</th>
<th>Type</th>
<th>Available</th>
<th>&nbsp;</th>
</thead>
<tr>
<td>GPL-3</td>
<td>Open Source</td>
<td>1 / 5</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>MIT</td>
<td>Open Source</td>
<td>Unlimited</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>Windows Device</td>
<td>CAL</td>
<td>11 / 15</td>
<th>&nbsp;</th>
</tr>
</table>
</div>
<div id="installations" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.installations %}
<table>
<thead>
<th>Device</th>
<th>Organization</th>
<th>Version</th>
<th title="Date Software Installed">Installed</th>
<th>&nbsp;</th>
</thead>
{% for install in installs %}
<tr>
<td><a href="{% url 'ITAM:_device_view' pk=install.device_id %}">{{ install.device }}</a></td>
<td>{{ install.organization }}</td>
<td>{{ install.version }}</td>
<td>
{% if install.installdate %}
{{ install.installdate }}
{% else %}
-
{% endif %}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
</div>
<div id="tickets" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.tickets %}
<table>
<thead>
<th>Name</th>
<th>Status</th>
<th>&nbsp</th>
</thead>
{% if tickets %}
{% for ticket in tickets %}
<tr>
<td>{% concat_strings "#" ticket.ticket.id as ticket_ref %}{{ ticket_ref | markdown | safe}}</td>
<td>{% include 'core/ticket/badge_ticket_status.html.j2' with ticket_status_text=ticket.ticket.get_status_display ticket_status=ticket.ticket.get_status_display|ticket_status %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">No related tickets exist</td>
</tr>
{% endif %}
</table>
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
</form>
{% endblock %}

View File

@ -1,51 +0,0 @@
{% extends 'base.html.j2' %}
{% block title %}Operating Systems{% endblock %}
{% block content_header_icon %}{% endblock %}
{% block content %}
<input type="button" value="New Operating System" onclick="window.location='{% url 'ITAM:_operating_system_add' %}';">
<table class="data">
<tr>
<th>Name</th>
<th>Publisher</th>
<th>Organization</th>
<th>&nbsp;</th>
</tr>
{% for operating_system in operating_systems %}
<tr>
<td><a href="{% url 'ITAM:_operating_system_view' pk=operating_system.id %}">{{ operating_system.name }}</a></td>
<td>
{% if operating_system.publisher %}
<a href="{% url 'Settings:_manufacturer_view' pk=operating_system.publisher.id %}">{{ operating_system.publisher }}</a>
{% else %}
-
{% endif %}
</td>
<td>{% if operating_system.is_global %}Global{% else %}{{ operating_system.organization }}{% endif %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -1,177 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
</div>
<div id="versions" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.versions %}
<input type="button" value="New Software Version" onclick="window.location='{% url 'ITAM:_software_version_add' pk=software.id %}';">
<table>
<thead>
<th>Version</th>
<th>Installations</th>
<th>Vulnerable</th>
<th>&nbsp;</th>
</thead>
{% for version in software_versions %}
<tr>
<td><a href="{% url 'ITAM:_software_version_view' software_id=software.id pk=version.id %}">{{ version.name }}</a></td>
<td>{{ version.installs }}</td>
<td>{% include 'icons/issue_link.html.j2' with issue=3 %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
</div>
<div id="licences" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.licences %}
{% include 'icons/issue_link.html.j2' with issue=4 %}
<table>
<thead>
<th>Name</th>
<th>Type</th>
<th>Available</th>
<th>&nbsp;</th>
</thead>
<tr>
<td>GPL-3</td>
<td>Open Source</td>
<td>1 / 5</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>MIT</td>
<td>Open Source</td>
<td>Unlimited</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>Windows Device</td>
<td>CAL</td>
<td>11 / 15</td>
<th>&nbsp;</th>
</tr>
</table>
</div>
<div id="tickets" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.tickets %}
<table>
<thead>
<th>Name</th>
<th>Status</th>
<th>&nbsp</th>
</thead>
{% if tickets %}
{% for ticket in tickets %}
<tr>
<td>{% concat_strings "#" ticket.ticket.id as ticket_ref %}{{ ticket_ref | markdown | safe}}</td>
<td>{% include 'core/ticket/badge_ticket_status.html.j2' with ticket_status_text=ticket.ticket.get_status_display ticket_status=ticket.ticket.get_status_display|ticket_status %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">No related tickets exist</td>
</tr>
{% endif %}
</table>
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
<div id="installations" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.installations %}
<table>
<thead>
<th>Device</th>
<th>Organization</th>
<th title="Not Set/Install/Remove">Action</th>
<th>Installed Version</th>
<th title="Date Software Installed">Install Date</th>
<th>&nbsp;</th>
</thead>
{% if device_software %}
{% for device in device_software %}
<tr>
<td><a href="{% url 'ITAM:_device_view' pk=device.device.id %}">{{ device.device }}</a></td>
<td>{{ device.organization }}</td>
<td>
{% if device.get_action_display == 'Install' %}
{% include 'icons/success_text.html.j2' with icon_text=device.get_action_display %}
{% elif device.get_action_display == 'Remove'%}
{% include 'icons/cross_text.html.j2' with icon_text=device.get_action_display %}
{% else %}
-
{% endif %}
</td>
<td>
{% if device.installedversion %}
{{ device.installedversion }}
{% else %}
-
{% endif %}
</td>
<td>
{% if device.installed %}
{{ device.installed }}
{% else %}
-
{% endif %}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="6">Nothing Found</td>
</tr>
{% endif %}
</table>
</div>
</form>
{% endblock %}

View File

@ -1,150 +0,0 @@
{% extends 'detail.html.j2' %}
{% load json %}
{% load markdown %}
{% block tabs %}
<form action="" method="post">
{% csrf_token %}
<div id="details" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.details %}
</div>
<div id="versions" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.versions %}
<input type="button" value="New Software Version" onclick="window.location='{% url 'ITAM:_software_version_add' pk=software.id %}';">
<table>
<thead>
<th>Version</th>
<th>Installations</th>
<th>Vulnerable</th>
<th>&nbsp;</th>
</thead>
{% for version in software_versions %}
<tr>
<td><a href="{% url 'ITAM:_software_version_view' software_id=software.id pk=version.id %}">{{ version.name }}</a></td>
<td>{{ version.installs }}</td>
<td>{% include 'icons/issue_link.html.j2' with issue=3 %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
</div>
<div id="licences" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.licences %}
{% include 'icons/issue_link.html.j2' with issue=4 %}
<table>
<thead>
<th>Name</th>
<th>Type</th>
<th>Available</th>
<th>&nbsp;</th>
</thead>
<tr>
<td>GPL-3</td>
<td>Open Source</td>
<td>1 / 5</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>MIT</td>
<td>Open Source</td>
<td>Unlimited</td>
<th>&nbsp;</th>
</tr>
<tr>
<td>Windows Device</td>
<td>CAL</td>
<td>11 / 15</td>
<th>&nbsp;</th>
</tr>
</table>
</div>
<div id="notes" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
{{ notes_form }}
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
<div class="comments">
{% if notes %}
{% for note in notes%}
{% include 'note.html.j2' %}
{% endfor %}
{% endif %}
</div>
</div>
<div id="installations" class="content-tab">
{% include 'content/section.html.j2' with tab=form.tabs.installations %}
<table>
<thead>
<th>Device</th>
<th>Organization</th>
<th title="Not Set/Install/Remove">Action</th>
<th>Installed Version</th>
<th title="Date Software Installed">Install Date</th>
<th>&nbsp;</th>
</thead>
{% if device_software %}
{% for device in device_software %}
<tr>
<td><a href="{% url 'ITAM:_device_view' pk=device.device.id %}">{{ device.device }}</a></td>
<td>{{ device.organization }}</td>
<td>
{% if device.get_action_display == 'Install' %}
{% include 'icons/success_text.html.j2' with icon_text=device.get_action_display %}
{% elif device.get_action_display == 'Remove'%}
{% include 'icons/cross_text.html.j2' with icon_text=device.get_action_display %}
{% else %}
-
{% endif %}
</td>
<td>
{% if device.installedversion %}
{{ device.installedversion }}
{% else %}
-
{% endif %}
</td>
<td>
{% if device.installed %}
{{ device.installed }}
{% else %}
-
{% endif %}
</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="6">Nothing Found</td>
</tr>
{% endif %}
</table>
</div>
</form>
{% endblock %}

View File

@ -1,53 +0,0 @@
{% extends 'base.html.j2' %}
{% block title %}Software{% endblock %}
{% block content_header_icon %}{% endblock %}
{% block content %}
<input type="button" value="New Software" onclick="window.location='{% url 'ITAM:_software_add' %}';">
<table class="data">
<tr>
<th>Name</th>
<th>Publisher</th>
<th>Category</th>
<th>Organization</th>
<th>&nbsp;</th>
</tr>
{% for software in softwares %}
<tr>
<td><a href="{% url 'ITAM:_software_view' pk=software.id %}">{{ software.name }}</a></td>
<td>
{% if software.publisher %}
<a href="{% url 'Settings:_manufacturer_view' pk=software.publisher.id %}">{{ software.publisher }}</a>
{% else %}
-
{% endif %}
</td>
<td>{{ software.category }}</td>
<td>{% if software.is_global %}Global{% else %}{{ software.organization }}{% endif %}</td>
<td>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -1,195 +0,0 @@
import django
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.device import Device
User = django.contrib.auth.get_user_model()
class DevicePermissions(TestCase, ModelPermissions):
model = Device
app_label = 'itam'
app_namespace = 'ITAM'
url_name_view = '_device_view'
url_name_add = '_device_add'
url_name_change = '_device_change'
url_name_delete = '_device_delete'
url_delete_response = reverse('ITAM:Devices')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a device
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'deviceone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'device': 'device', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'device': 'device'}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'device': 'device'}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,28 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class DeviceViews(
TestCase,
PrimaryModel
):
add_module = 'itam.views.device'
add_view = 'Add'
change_module = 'itam.views.device'
change_view = 'Change'
delete_module = 'itam.views.device'
delete_view = 'Delete'
display_module = 'itam.views.device'
display_view = 'View'
index_module = 'itam.views.device'
index_view = 'IndexView'

View File

@ -1,197 +0,0 @@
import django
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase, Client
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.device import DeviceModel
User = django.contrib.auth.get_user_model()
class DeviceModelPermissions(TestCase, ModelPermissions):
model = DeviceModel
model_name = 'devicemodel'
app_label = 'itam'
app_namespace = 'Settings'
url_name_view = '_device_model_view'
url_name_add = '_device_model_add'
url_name_change = '_device_model_change'
url_name_delete = '_device_model_delete'
url_delete_response = reverse('Settings:_device_models')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a device
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'deviceone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'devicemodel': 'devicemodel', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'devicemodel': 'devicemodel', 'organization': self.organization.id}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'devicemodel': 'devicemodel', 'organization': self.organization.id}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,29 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class DeviceModelViews(
TestCase,
PrimaryModel
):
add_module = 'itam.views.device_model'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
index_module = 'settings.views.device_models'
index_view = 'Index'

View File

@ -1,35 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class DeviceOperatingSystemViews(
TestCase,
# PrimaryModel
):
add_module = 'itam.views.device_model'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
index_module = 'settings.views.device_models'
index_view = 'Index'
@pytest.mark.skip(reason="refactor moddel views to proper CRUD views")
def test_dummy(self):
pass

View File

@ -1,28 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import ModelAdd, ModelChange, ModelDisplay
class DeviceSoftwareViews(
TestCase,
ModelAdd,
ModelChange,
ModelDisplay
):
add_module = 'itam.views.device'
add_view = 'SoftwareAdd'
change_module = add_module
change_view = 'SoftwareView'
# delete_module = add_module
# delete_view = 'Delete'
display_module = add_module
display_view = 'SoftwareView'

View File

@ -1,194 +0,0 @@
import django
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase, Client
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.device import DeviceType
User = django.contrib.auth.get_user_model()
class DeviceTypePermissions(TestCase, ModelPermissions):
model = DeviceType
app_namespace = 'Settings'
url_name_view = '_device_type_view'
url_name_add = '_device_type_add'
url_name_change = '_device_type_change'
url_name_delete = '_device_type_delete'
url_delete_response = reverse('Settings:_device_types')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a device
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'deviceone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'device': 'device', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'device': 'device', 'organization': self.organization.id}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'device': 'device', 'organization': self.organization.id}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,32 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import ModelAdd, ModelChange, ModelDelete, ModelDisplay
class DeviceTypeViews(
TestCase,
ModelAdd,
ModelChange,
ModelDelete,
ModelDisplay
):
add_module = 'itam.views.device_type'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
# index_module = 'settings.views.device_models'
# index_view = 'Index'

View File

@ -1,194 +0,0 @@
import django
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase, Client
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.operating_system import OperatingSystem
User = django.contrib.auth.get_user_model()
class OperatingSystemPermissions(TestCase, ModelPermissions):
model = OperatingSystem
app_namespace = 'ITAM'
url_name_view = '_operating_system_view'
url_name_add = '_operating_system_add'
url_name_change = '_operating_system_change'
url_name_delete = '_operating_system_delete'
url_delete_response = reverse('ITAM:Operating Systems')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a device
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'deviceone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'operating_system': 'operating_system', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'operating_system': 'operating_system', 'organization': self.organization.id}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'operating_system': 'operating_system', 'organization': self.organization.id}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,29 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class OperatingSystemViews(
TestCase,
PrimaryModel
):
add_module = 'itam.views.operating_system'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
index_module = 'settings.views.device_models'
index_view = 'Index'

View File

@ -1,32 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import ModelAdd, ModelChange, ModelDelete, ModelDisplay
class OperatingSystemVersionViews(
TestCase,
ModelAdd,
ModelChange,
ModelDelete,
ModelDisplay
):
add_module = 'itam.views.operating_system_version'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
# index_module = 'settings.views.device_models'
# index_view = 'Index'

View File

@ -1,194 +0,0 @@
import django
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase, Client
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.software import Software
User = django.contrib.auth.get_user_model()
class SoftwarePermissions(TestCase, ModelPermissions):
model = Software
app_namespace = 'ITAM'
url_name_view = '_software_view'
url_name_add = '_software_add'
url_name_change = '_software_change'
url_name_delete = '_software_delete'
url_delete_response = reverse('ITAM:Software')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a software
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'softwareone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'software': 'software', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'software': 'software', 'organization': self.organization.id}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'software': 'software', 'organization': self.organization.id}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,29 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class SoftwareViews(
TestCase,
PrimaryModel
):
add_module = 'itam.views.software'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
index_module = add_module
index_view = 'IndexView'

View File

@ -1,196 +0,0 @@
import django
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser, Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import TestCase, Client
import pytest
import unittest
import requests
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from centurion.tests.abstract.model_permissions import ModelPermissions
from itam.models.software import SoftwareCategory
User = django.contrib.auth.get_user_model()
class SoftwareCategoryPermissions(TestCase, ModelPermissions):
model = SoftwareCategory
model_name = 'softwarecategory'
app_label = 'itam'
app_namespace = 'Settings'
url_name_view = '_software_category_view'
url_name_add = '_software_category_add'
url_name_change = '_software_category_change'
url_name_delete = '_software_category_delete'
url_delete_response = reverse('Settings:_software_categories')
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a softwarecategory
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=organization,
name = 'softwarecategoryone'
)
self.url_view_kwargs = {'pk': self.item.id}
# self.url_add_kwargs = {'pk': self.item.id}
self.add_data = {'softwarecategory': 'softwarecategory', 'organization': self.organization.id}
self.url_change_kwargs = {'pk': self.item.id}
self.change_data = {'softwarecategory': 'softwarecategory', 'organization': self.organization.id}
self.url_delete_kwargs = {'pk': self.item.id}
self.delete_data = {'softwarecategory': 'softwarecategory', 'organization': self.organization.id}
view_permissions = Permission.objects.get(
codename = 'view_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model_name,
content_type = ContentType.objects.get(
app_label = self.app_label,
model = self.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
self.view_user = User.objects.create_user(username="test_user_view", password="password")
teamuser = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
teamuser = TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
teamuser = TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
teamuser = TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)

View File

@ -1,29 +0,0 @@
import pytest
import unittest
import requests
from django.test import TestCase
from centurion.tests.abstract.models import PrimaryModel
class SoftwareCategoryViews(
TestCase,
PrimaryModel
):
add_module = 'itam.views.software'
add_view = 'Add'
change_module = add_module
change_view = 'View'
delete_module = add_module
delete_view = 'Delete'
display_module = add_module
display_view = 'View'
index_module = 'settings.views.software_categories'
index_view = 'Index'

View File

@ -1,39 +0,0 @@
from django.urls import path
from .views import device, software, software_version, operating_system, operating_system_version
app_name = "ITAM"
urlpatterns = [
path("device/", device.IndexView.as_view(), name="Devices"),
path("device/<int:pk>/", device.View.as_view(), name="_device_view"),
path("device/<int:pk>/edit", device.Change.as_view(), name="_device_change"),
path("device/<int:pk>/software/add", device.SoftwareAdd.as_view(), name="_device_software_add"),
path("device/<int:device_id>/software/<int:pk>", device.SoftwareView.as_view(), name="_device_software_view"),
path("device/<int:pk>/delete", device.Delete.as_view(), name="_device_delete"),
path("device/add/", device.Add.as_view(), name="_device_add"),
path("operating_system", operating_system.IndexView.as_view(), name="Operating Systems"),
path("operating_system/<int:pk>", operating_system.View.as_view(), name="_operating_system_view"),
path("operating_system/<int:pk>/edit", operating_system.Change.as_view(), name="_operating_system_change"),
path("operating_system/add", operating_system.Add.as_view(), name="_operating_system_add"),
path("operating_system/delete/<int:pk>", operating_system.Delete.as_view(), name="_operating_system_delete"),
path("operating_system/<int:operating_system_id>/version/<int:pk>", operating_system_version.View.as_view(), name="_operating_system_version_view"),
path("operating_system/<int:pk>/version/add", operating_system_version.Add.as_view(), name="_operating_system_version_add"),
path("operating_system/<int:operating_system_id>/version/<int:pk>/delete", operating_system_version.Delete.as_view(), name="_operating_system_version_delete"),
path("software/", software.IndexView.as_view(), name="Software"),
path("software/<int:pk>/", software.View.as_view(), name="_software_view"),
path("software/<int:pk>/change", software.Change.as_view(), name="_software_change"),
path("software/<int:pk>/delete", software.Delete.as_view(), name="_software_delete"),
path("software/<int:pk>/version/add", software_version.Add.as_view(), name="_software_version_add"),
path("software/<int:software_id>/version/<int:pk>", software_version.View.as_view(), name="_software_version_view"),
path("software/add/", software.Add.as_view(), name="_software_add"),
]

View File

@ -1,373 +0,0 @@
import json
from django.contrib.auth import decorators as auth_decorator
from django.core.paginator import Paginator
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.utils.decorators import method_decorator
from access.models.tenant import Tenant as Organization
from ..models.device import Device, DeviceSoftware, DeviceOperatingSystem
from ..models.software import Software
from core.forms.comment import AddNoteForm
from core.models.notes import Notes
from core.models.ticket.ticket_linked_items import Ticket, TicketLinkedItem
from core.views.common import AddView, ChangeView, DeleteView, IndexView
from itam.forms.device_softwareadd import SoftwareAdd
from itam.forms.device_softwareupdate import SoftwareUpdate
from itam.forms.device.device import DetailForm, DeviceForm
from itam.forms.device.operating_system import Update as OperatingSystemForm
from itim.models.services import Service
from settings.models.user_settings import UserSettings
class IndexView(IndexView):
model = Device
permission_required = [
'itam.view_device'
]
template_name = 'itam/device_index.html.j2'
context_object_name = "devices"
paginate_by = 10
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_docs_path'] = self.model._meta.app_label + '/' + self.model._meta.model_name + '/'
return context
def get_queryset(self):
if self.request.user.is_superuser:
return Device.objects.filter().order_by('name')
else:
return Device.objects.filter().order_by('name')
def _get_form(request, formcls, prefix, **kwargs):
data = request.POST if prefix in request.POST else None
return formcls(data, prefix=prefix, **kwargs)
class View(ChangeView):
model = Device
permission_required = [
'itam.view_device',
]
template_name = 'itam/device.html.j2'
form_class = DetailForm
context_object_name = "device"
paginate_by = 10
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
try:
operating_system_version = DeviceOperatingSystem.objects.get(device=self.kwargs['pk'])
except DeviceOperatingSystem.DoesNotExist:
operating_system_version = None
if operating_system_version:
context['operating_system'] = OperatingSystemForm(prefix='operating_system', instance=operating_system_version)
else:
context['operating_system'] = OperatingSystemForm(prefix='operating_system')
context['services'] = Service.objects.filter(device=self.kwargs['pk'])
context['tickets'] = TicketLinkedItem.objects.filter(
item = int(self.kwargs['pk']),
item_type = TicketLinkedItem.Modules.DEVICE
)
softwares = DeviceSoftware.objects.filter(device=self.kwargs['pk'])
softwares = Paginator(softwares, 10)
context['installed_software'] = len(DeviceSoftware.objects.filter(device=self.kwargs['pk']))
if 'page' in self.request.GET:
context['page_number'] = int(self.request.GET.get("page"))
else:
context['page_number'] = 1
if 'tab' in self.request.GET:
context['tab'] = str(self.request.GET.get("tab")).lower()
else:
context['tab'] = None
context['page_obj'] = softwares.get_page(context['page_number'])
context['softwares'] = softwares.page(context['page_number']).object_list
context['notes_form'] = AddNoteForm(prefix='note')
context['notes'] = Notes.objects.filter(device=self.kwargs['pk'])
config = self.object.get_configuration
context['config'] = json.dumps(config, indent=4, sort_keys=True)
context['model_pk'] = self.kwargs['pk']
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
context['model_delete_url'] = reverse('ITAM:_device_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def post(self, request, *args, **kwargs):
device = Device.objects.get(pk=self.kwargs['pk'])
try:
existing_os = DeviceOperatingSystem.objects.get(device=self.kwargs['pk'])
except DeviceOperatingSystem.DoesNotExist:
existing_os = None
operating_system = OperatingSystemForm(request.POST, prefix='operating_system', instance=existing_os)
if operating_system.is_bound and operating_system.is_valid():
if request.user.has_perm('itam.change_device'):
operating_system.instance.organization = device.organization
operating_system.instance.device = device
operating_system.save()
notes = AddNoteForm(request.POST, prefix='note')
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
if request.user.has_perm('core.add_notes'):
notes.instance.organization = device.organization
notes.instance.device = device
notes.instance.usercreated = request.user
notes.save()
return super().post(request, *args, **kwargs)
def get_success_url(self, **kwargs):
return f"/itam/device/{self.kwargs['pk']}/"
class SoftwareView(ChangeView):
model = DeviceSoftware
permission_required = [
'itam.view_devicesoftware'
]
template_name = 'form.html.j2'
context_object_name = "devicesoftware"
form_class = SoftwareUpdate
def form_valid(self, form):
device = Device.objects.get(pk=self.kwargs['device_id'])
form.instance.organization_id = device.organization.id
form.instance.device_id = self.kwargs['device_id']
return super().form_valid(form)
def get_success_url(self, **kwargs):
return f"/itam/device/{self.kwargs['device_id']}/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Edit Software Action'
return context
class Add(AddView):
form_class = DeviceForm
model = Device
permission_required = [
'itam.add_device',
]
template_name = 'form.html.j2'
def get_initial(self):
return {
'organization': UserSettings.objects.get(user = self.request.user).default_organization
}
def form_valid(self, form):
form.instance.is_global = False
return super().form_valid(form)
def get_success_url(self, **kwargs):
return f"/itam/device/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Device'
return context
class SoftwareAdd(AddView):
model = DeviceSoftware
permission_required = [
'itam.add_devicesoftware',
]
template_name = 'form.html.j2'
# fields = [
# 'software',
# 'action'
# ]
form_class = SoftwareAdd
def form_valid(self, form):
device = Device.objects.get(pk=self.kwargs['pk'])
form.instance.organization_id = device.organization.id
form.instance.device_id = self.kwargs['pk']
software = Software.objects.get(pk=form.instance.software.id)
if DeviceSoftware.objects.get(device=device, software=software):
software_version = DeviceSoftware.objects.get(
device=device,
software=software
)
software_version.action = form.instance.action
software_version.save()
return HttpResponseRedirect(self.get_success_url())
else:
return super().form_valid(form)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
device = Device.objects.get(pk=self.kwargs['pk'])
kwargs['organizations'] = [ device.organization.id ]
return kwargs
def get_success_url(self, **kwargs):
return f"/itam/device/{self.kwargs['pk']}/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Software Action'
return context
class Delete(DeleteView):
model = Device
permission_required = [
'itam.delete_device',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return f"/itam/device/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context
class Change(ChangeView):
model = Device
permission_required = [
'itam.change_device',
]
template_name = 'form.html.j2'
form_class = DeviceForm
def get_success_url(self, **kwargs):
return reverse('ITAM:_device_view', args=(self.kwargs['pk'],))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Edit ' + self.object.name
return context

View File

@ -1,133 +0,0 @@
from django.contrib.auth import decorators as auth_decorator
from django.urls import reverse
from django.utils.decorators import method_decorator
from itam.forms.device_model import DetailForm, DeviceModelForm
from itam.models.device_models import DeviceModel
from core.views.common import AddView, ChangeView, DeleteView
from settings.models.user_settings import UserSettings
class Change(ChangeView):
form_class = DeviceModelForm
context_object_name = "device_model"
model = DeviceModel
permission_required = [
'itam.change_devicemodel',
]
template_name = 'form.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_device_model_view', args=(self.kwargs['pk'],))
class View(ChangeView):
form_class = DetailForm
context_object_name = "device_model"
model = DeviceModel
permission_required = [
'itam.view_devicemodel',
]
template_name = 'itam/device_model.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_pk'] = self.kwargs['pk']
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
context['model_delete_url'] = reverse('Settings:_device_model_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_device_model_view', args=(self.kwargs['pk'],))
@method_decorator(auth_decorator.permission_required("itam.change_devicemodel", raise_exception=True))
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
class Add(AddView):
form_class = DeviceModelForm
model = DeviceModel
permission_required = [
'itam.add_devicemodel',
]
template_name = 'form.html.j2'
def get_initial(self):
return {
'organization': UserSettings.objects.get(user = self.request.user).default_organization
}
def get_success_url(self, **kwargs):
return reverse('Settings:_device_models')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Device Model'
return context
class Delete(DeleteView):
model = DeviceModel
permission_required = [
'itam.delete_devicemodel',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return reverse('Settings:_device_models')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context

View File

@ -1,129 +0,0 @@
from django.contrib.auth import decorators as auth_decorator
from django.urls import reverse
from django.utils.decorators import method_decorator
from core.views.common import AddView, ChangeView, DeleteView, IndexView
from itam.models.device import DeviceType
from itam.forms.device_type import DetailForm, DeviceTypeForm
class Add(AddView):
form_class = DeviceTypeForm
model = DeviceType
permission_required = [
'itam.add_devicetype',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return reverse('Settings:_device_types')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Device Type'
return context
class Change(ChangeView):
form_class = DeviceTypeForm
model = DeviceType
permission_required = [
'itam.change_devicetype'
]
template_name = 'form.html.j2'
context_object_name = "device_category"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_delete_url'] = reverse('Settings:_device_type_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_device_type_view', args=(self.kwargs['pk'],))
class Delete(DeleteView):
model = DeviceType
permission_required = [
'itam.delete_devicetype',
]
template_name = 'form.html.j2'
# fields = [
# 'name',
# 'organization',
# 'is_global'
# ]
def get_success_url(self, **kwargs):
return reverse('Settings:_device_types')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context
class View(ChangeView):
form_class = DetailForm
model = DeviceType
permission_required = [
'itam.view_devicetype',
]
template_name = 'itam/device_type.html.j2'
context_object_name = "device_category"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_delete_url'] = reverse('Settings:_device_type_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_device_type_view', args=(self.kwargs['pk'],))
@method_decorator(auth_decorator.permission_required("itam.change_devicetype", raise_exception=True))
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)

View File

@ -1,233 +0,0 @@
from django.contrib.auth import decorators as auth_decorator
from django.db.models import Count, Q
from django.urls import reverse
from django.utils.decorators import method_decorator
from core.forms.comment import AddNoteForm
from core.models.notes import Notes
from core.models.ticket.ticket_linked_items import Ticket, TicketLinkedItem
from core.views.common import AddView, ChangeView, DeleteView, IndexView
from itam.models.device import DeviceOperatingSystem
from itam.models.operating_system import OperatingSystem, OperatingSystemVersion
from itam.forms.operating_system.update import DetailForm, OperatingSystemForm
from settings.models.user_settings import UserSettings
class Add(AddView):
form_class = OperatingSystemForm
model = OperatingSystem
permission_required = [
'itam.add_operatingsystem',
]
template_name = 'form.html.j2'
def get_initial(self):
return {
'organization': UserSettings.objects.get(user = self.request.user).default_organization
}
def get_success_url(self, **kwargs):
return reverse('ITAM:Operating Systems')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Operating System'
return context
class Change(ChangeView):
context_object_name = "operating_system"
form_class = OperatingSystemForm
model = OperatingSystem
permission_required = [
'itam.change_operatingsystem',
]
template_name = 'form.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = self.object.name
return context
@method_decorator(auth_decorator.permission_required("itam.change_operatingsystem", raise_exception=True))
def post(self, request, *args, **kwargs):
operatingsystem = OperatingSystem.objects.get(pk=self.kwargs['pk'])
notes = AddNoteForm(request.POST, prefix='note')
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
notes.instance.organization = operatingsystem.organization
notes.instance.operatingsystem = operatingsystem
notes.instance.usercreated = request.user
notes.save()
return super().post(request, *args, **kwargs)
def get_success_url(self, **kwargs):
return reverse('ITAM:_operating_system_view', args=(self.kwargs['pk'],))
class Delete(DeleteView):
model = OperatingSystem
permission_required = [
'itam.delete_operatingsystem',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return reverse('ITAM:Operating Systems')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_pk'] = self.kwargs['pk']
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
context['content_title'] = 'Delete ' + self.object.name
return context
class IndexView(IndexView):
model = OperatingSystem
permission_required = [
'itam.view_operatingsystem'
]
template_name = 'itam/operating_system_index.html.j2'
context_object_name = "operating_systems"
paginate_by = 10
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_docs_path'] = self.model._meta.app_label + '/operating_system/'
return context
def get_queryset(self):
if self.request.user.is_superuser:
return OperatingSystem.objects.filter().order_by('name')
else:
return OperatingSystem.objects.filter().order_by('name')
class View(ChangeView):
context_object_name = "operating_system"
form_class = DetailForm
model = OperatingSystem
permission_required = [
'itam.view_operatingsystem',
]
template_name = 'itam/operating_system.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
operating_system_versions = OperatingSystemVersion.objects.filter(
operating_system=self.kwargs['pk']
).order_by(
'name'
).annotate(
installs=Count(
"deviceoperatingsystem",
filter=Q(deviceoperatingsystem__device__organization__in = self.user_organizations())
),
# filter=Q(deviceoperatingsystem__operating_system_version__organization__in = self.user_organizations())
# filter=Q(deviceoperatingsystem__operating_system_version__deviceoperatingsystem__device__organization__in = self.user_organizations()),
filter=Q(deviceoperatingsystem__operating_system_version__organization__in = self.user_organizations()),
)
context['operating_system_versions'] = operating_system_versions
context['tickets'] = TicketLinkedItem.objects.filter(
item = int(self.kwargs['pk']),
item_type = TicketLinkedItem.Modules.OPERATING_SYSTEM
)
installs = DeviceOperatingSystem.objects.filter(operating_system_version__operating_system_id=self.kwargs['pk'])
context['installs'] = installs
context['notes_form'] = AddNoteForm(prefix='note')
context['notes'] = Notes.objects.filter(operatingsystem=self.kwargs['pk'])
context['model_pk'] = self.kwargs['pk']
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
context['model_delete_url'] = reverse('ITAM:_operating_system_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
# @method_decorator(auth_decorator.permission_required("itam.change_operatingsystem", raise_exception=True))
def post(self, request, *args, **kwargs):
operatingsystem = OperatingSystem.objects.get(pk=self.kwargs['pk'])
notes = AddNoteForm(request.POST, prefix='note')
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
notes.instance.organization = operatingsystem.organization
notes.instance.operatingsystem = operatingsystem
notes.instance.usercreated = request.user
notes.save()
return super().post(request, *args, **kwargs)
def get_success_url(self, **kwargs):
return reverse('ITAM:_operating_system_view', args=(self.kwargs['pk'],))

View File

@ -1,89 +0,0 @@
from django.urls import reverse
from core.views.common import AddView, ChangeView, DeleteView
from itam.forms.operating_system_version import OperatingSystemVersionForm
from itam.models.operating_system import OperatingSystem, OperatingSystemVersion
class View(ChangeView):
form_class = OperatingSystemVersionForm
model = OperatingSystemVersion
permission_required = [
'itam.view_operating_systemversion'
]
template_name = 'form.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = self.object.operating_system.name + ' ' + self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('ITAM:_operating_system_view', args=(self.kwargs['operating_system_id'],))
class Add(AddView):
form_class = OperatingSystemVersionForm
model = OperatingSystemVersion
permission_required = [
'access.add_operating_systemversion',
]
template_name = 'form.html.j2'
def form_valid(self, form):
operating_system = OperatingSystem.objects.get(pk=self.kwargs['pk'])
form.instance.is_global = operating_system.is_global
form.instance.organization_id = operating_system.organization.id
form.instance.operating_system_id = self.kwargs['pk']
return super().form_valid(form)
def get_success_url(self, **kwargs):
return reverse('ITAM:_operating_system_view', args=(self.kwargs['pk'],))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Operating System Version'
return context
class Delete(DeleteView):
model = OperatingSystemVersion
permission_required = [
'access.delete_operating_system',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return reverse('ITAM:_operating_system_view', args=(self.kwargs['operating_system_id'],))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context

View File

@ -1,224 +0,0 @@
from django.contrib.auth import decorators as auth_decorator
from django.db.models import Count, Q
from django.urls import reverse
from django.utils.decorators import method_decorator
from core.forms.comment import AddNoteForm
from core.models.notes import Notes
from core.models.ticket.ticket_linked_items import Ticket, TicketLinkedItem
from core.views.common import AddView, ChangeView, DeleteView, IndexView
from itam.models.device import DeviceSoftware
from itam.models.software import Software, SoftwareVersion
from itam.forms.software.update import DetailForm, SoftwareForm, SoftwareChange
from settings.models.user_settings import UserSettings
class IndexView(IndexView):
context_object_name = "softwares"
model = Software
paginate_by = 10
permission_required = [
'itam.view_software'
]
template_name = 'itam/software_index.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_docs_path'] = self.model._meta.app_label + '/' + self.model._meta.model_name + '/'
return context
def get_queryset(self):
if self.request.user.is_superuser:
return Software.objects.filter().order_by('name')
else:
return Software.objects.filter().order_by('name')
class Change(ChangeView):
model = Software
permission_required = [
'itam.change_software',
]
template_name = 'form.html.j2'
form_class = SoftwareChange
def get_success_url(self, **kwargs):
return reverse('ITAM:_software_view', args=(self.kwargs['pk'],))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Edit ' + self.object.name
return context
class View(ChangeView):
context_object_name = "software"
form_class = DetailForm
model = Software
permission_required = [
'itam.view_software',
'itam.change_software'
]
template_name = 'itam/software.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
software_versions = SoftwareVersion.objects.filter(
software=self.kwargs['pk'],
).annotate(
installs=Count(
"installedversion",
filter=Q(installedversion__organization__in = self.user_organizations())
)
)
context['software_versions'] = software_versions
context['tickets'] = TicketLinkedItem.objects.filter(
item = int(self.kwargs['pk']),
item_type = TicketLinkedItem.Modules.SOFTWARE
)
context['notes_form'] = AddNoteForm(prefix='note')
context['notes'] = Notes.objects.filter(software=self.kwargs['pk'])
context['model_pk'] = self.kwargs['pk']
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
context['model_delete_url'] = reverse('ITAM:_software_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
if self.request.user.is_superuser:
context['device_software'] = DeviceSoftware.objects.filter(
software=self.kwargs['pk']
).order_by(
'device',
'organization'
)
elif not self.request.user.is_superuser:
context['device_software'] = DeviceSoftware.objects.filter(
software=self.kwargs['pk']
).order_by(
'device',
'organization'
)
return context
@method_decorator(auth_decorator.permission_required("itam.change_software", raise_exception=True))
def post(self, request, *args, **kwargs):
software = Software.objects.get(pk=self.kwargs['pk'])
notes = AddNoteForm(request.POST, prefix='note')
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
notes.instance.organization = software.organization
notes.instance.software = software
notes.instance.usercreated = request.user
notes.save()
return super().post(request, *args, **kwargs)
def get_success_url(self, **kwargs):
return f"/itam/software/{self.kwargs['pk']}/"
class Add(AddView):
form_class = SoftwareForm
model = Software
permission_required = [
'itam.add_software',
]
template_name = 'form.html.j2'
def get_initial(self):
return {
'organization': UserSettings.objects.get(user = self.request.user).default_organization
}
def get_success_url(self, **kwargs):
return f"/itam/software/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Software'
return context
class Delete(DeleteView):
model = Software
permission_required = [
'itam.delete_software',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return f"/itam/software/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context

View File

@ -1,133 +0,0 @@
from django.contrib.auth import decorators as auth_decorator
from django.urls import reverse
from django.utils.decorators import method_decorator
from core.views.common import AddView, ChangeView, DeleteView
from itam.forms.software_category import DetailForm, SoftwareCategoryForm
from itam.models.software import Software, SoftwareCategory
from settings.models.user_settings import UserSettings
class Change(ChangeView):
context_object_name = "software"
form_class = SoftwareCategoryForm
model = SoftwareCategory
permission_required = [
'itam.change_softwarecategory',
]
template_name = 'form.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_delete_url'] = reverse('Settings:_software_category_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_software_category_view', args=(self.kwargs['pk'],))
@method_decorator(auth_decorator.permission_required("itam.change_softwarecategory", raise_exception=True))
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
class View(ChangeView):
context_object_name = "software"
form_class = DetailForm
model = SoftwareCategory
permission_required = [
'itam.view_softwarecategory',
]
template_name = 'itam/software_categories.html.j2'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['model_delete_url'] = reverse('Settings:_software_category_delete', args=(self.kwargs['pk'],))
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return reverse('Settings:_software_category_view', args=(self.kwargs['pk'],))
class Add(AddView):
form_class = SoftwareCategoryForm
model = SoftwareCategory
permission_required = [
'itam.add_softwarecategory',
]
template_name = 'form.html.j2'
def get_initial(self):
return {
'organization': UserSettings.objects.get(user = self.request.user).default_organization
}
def get_success_url(self, **kwargs):
return reverse('Settings:_software_categories')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Software Category'
return context
class Delete(DeleteView):
model = SoftwareCategory
permission_required = [
'itam.delete_softwarecategory',
]
template_name = 'form.html.j2'
def get_success_url(self, **kwargs):
return reverse('Settings:_software_categories')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Delete ' + self.object.name
return context

View File

@ -1,59 +0,0 @@
from core.views.common import AddView, ChangeView
from ..models.software import Software, SoftwareVersion
class View(ChangeView):
model = SoftwareVersion
permission_required = [
'itam.view_softwareversion'
]
template_name = 'form.html.j2'
fields = [
"name",
]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = self.object.name
return context
def get_success_url(self, **kwargs):
return f"/itam/software/{self.kwargs['software_id']}/"
class Add(AddView):
model = SoftwareVersion
permission_required = [
'access.add_softwareversion',
]
template_name = 'form.html.j2'
fields = [
'name'
]
def form_valid(self, form):
software = Software.objects.get(pk=self.kwargs['pk'])
form.instance.is_global = software.is_global
form.instance.organization_id = software.organization.id
form.instance.software_id = self.kwargs['pk']
return super().form_valid(form)
def get_success_url(self, **kwargs):
return f"/itam/software/{self.kwargs['pk']}/"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['content_title'] = 'Add Software Version'
return context