diff --git a/app/itam/views/device_type.py b/app/itam/views/device_type.py
index 8340b0d9..49d1b765 100644
--- a/app/itam/views/device_type.py
+++ b/app/itam/views/device_type.py
@@ -33,7 +33,7 @@ class View(OrganizationPermission, generic.UpdateView):
def get_success_url(self, **kwargs):
- return f"/itam/device/{self.kwargs['pk']}/"
+ return f"/settings/device_type/{self.kwargs['pk']}"
@@ -52,7 +52,7 @@ class Add(PermissionRequiredMixin, OrganizationPermission, generic.CreateView):
def get_success_url(self, **kwargs):
- return f"/itam/device/"
+ return f"/settings/device_type/"
def get_context_data(self, **kwargs):
@@ -61,3 +61,28 @@ class Add(PermissionRequiredMixin, OrganizationPermission, generic.CreateView):
context['content_title'] = 'Add Device Type'
return context
+
+class Delete(PermissionRequiredMixin, OrganizationPermission, generic.DeleteView):
+ model = DeviceType
+ permission_required = [
+ 'access.delete_device_type',
+ ]
+ template_name = 'form.html.j2'
+ # fields = [
+ # 'name',
+ # 'organization',
+ # 'is_global'
+ # ]
+
+
+ def get_success_url(self, **kwargs):
+
+ return f"/settings/device_type/"
+
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+
+ context['content_title'] = 'Delete ' + self.object.name
+
+ return context
diff --git a/app/itam/views/software_category.py b/app/itam/views/software_category.py
index 8e6bc0cd..6c416f4e 100644
--- a/app/itam/views/software_category.py
+++ b/app/itam/views/software_category.py
@@ -51,7 +51,7 @@ class View(OrganizationPermission, generic.UpdateView):
def get_success_url(self, **kwargs):
- return f"/itam/software/{self.kwargs['pk']}/"
+ return f"/settings/software_category/{self.kwargs['pk']}/"
@@ -70,7 +70,7 @@ class Add(PermissionRequiredMixin, OrganizationPermission, generic.CreateView):
def get_success_url(self, **kwargs):
- return f"/itam/software/"
+ return f"/settings/software_category"
def get_context_data(self, **kwargs):
@@ -81,7 +81,7 @@ class Add(PermissionRequiredMixin, OrganizationPermission, generic.CreateView):
return context
class Delete(PermissionRequiredMixin, OrganizationPermission, generic.DeleteView):
- model = Software
+ model = SoftwareCategory
permission_required = [
'access.delete_software',
]
@@ -95,7 +95,7 @@ class Delete(PermissionRequiredMixin, OrganizationPermission, generic.DeleteView
def get_success_url(self, **kwargs):
- return f"/itam/software/"
+ return f"/settings/software_category"
def get_context_data(self, **kwargs):
diff --git a/app/settings/templates/settings/software_categories.html.j2 b/app/settings/templates/settings/software_categories.html.j2
new file mode 100644
index 00000000..16553c29
--- /dev/null
+++ b/app/settings/templates/settings/software_categories.html.j2
@@ -0,0 +1,44 @@
+{% extends 'base.html.j2' %}
+
+
+{% block content_header_icon %}{% endblock %}
+
+{% block body %}
+
+
+
+
+
+
+ | Name |
+ Organization |
+ |
+
+ {% for item in list %}
+
+ | {{ item.name }} |
+ {% if item.is_global %}Global{% else %}{{ item.organization }}{% endif %} |
+ Delete |
+
+ {% endfor %}
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/settings/tests/software_category/test_software_category_access_organization.py b/app/settings/tests/software_category/test_software_category_access_organization.py
new file mode 100644
index 00000000..dd9e8e79
--- /dev/null
+++ b/app/settings/tests/software_category/test_software_category_access_organization.py
@@ -0,0 +1,19 @@
+
+from django.test import TestCase, Client
+
+import pytest
+import unittest
+import requests
+
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_create_has_organization():
+ """ Software Category must be assigned an organization """
+ pass
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_edit_has_organization():
+ """ Software Category must be assigned an organization """
+ pass
diff --git a/app/settings/tests/software_category/test_software_category_permission.py b/app/settings/tests/software_category/test_software_category_permission.py
new file mode 100644
index 00000000..97998894
--- /dev/null
+++ b/app/settings/tests/software_category/test_software_category_permission.py
@@ -0,0 +1,32 @@
+# from django.conf import settings
+# from django.shortcuts import reverse
+from django.test import TestCase, Client
+
+import pytest
+import unittest
+import requests
+
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_auth_view(user):
+ """ Check correct permission for view """
+ pass
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_auth_add(user):
+ """ Check correct permission for add """
+ pass
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_auth_change(user):
+ """ Check correct permission for change """
+ pass
+
+
+@pytest.mark.skip(reason="to be written")
+def test_software_category_auth_delete(user):
+ """ Check correct permission for delete """
+ pass
diff --git a/app/settings/urls.py b/app/settings/urls.py
index 7abf142e..265d13d8 100644
--- a/app/settings/urls.py
+++ b/app/settings/urls.py
@@ -1,8 +1,8 @@
from django.urls import path
-from .views import home, device_types
+from .views import home, device_types, software_categories
-from itam.views import device_type
+from itam.views import device_type, software_category
app_name = "Settings"
urlpatterns = [
@@ -14,4 +14,9 @@ urlpatterns = [
path("device_type/add/", device_type.Add.as_view(), name="_device_type_add"),
path("device_type//delete", device_type.Delete.as_view(), name="_device_type_delete"),
+ path("software_category", software_categories.Index.as_view(), name="_software_categories"),
+ path("software_category/", software_category.View.as_view(), name="_software_category_view"),
+ path("software_category/add/", software_category.Add.as_view(), name="_software_category_add"),
+ path("software_category//delete", software_category.Delete.as_view(), name="_software_category_delete"),
+
]
diff --git a/app/settings/views/device_types.py b/app/settings/views/device_types.py
index f22d7581..cefd9964 100644
--- a/app/settings/views/device_types.py
+++ b/app/settings/views/device_types.py
@@ -3,6 +3,7 @@ from django.db.models import Q
from django.views import generic
+from access.mixin import OrganizationPermission
from itam.models.device import DeviceType
diff --git a/app/settings/views/software_categories.py b/app/settings/views/software_categories.py
new file mode 100644
index 00000000..1d8ad8cb
--- /dev/null
+++ b/app/settings/views/software_categories.py
@@ -0,0 +1,36 @@
+from django.contrib.auth.mixins import PermissionRequiredMixin
+from django.views import generic
+
+from access.mixin import OrganizationPermission
+
+from itam.models.software import SoftwareCategory
+
+
+class Index(PermissionRequiredMixin, OrganizationPermission, generic.ListView):
+
+ model = SoftwareCategory
+
+ permission_required = 'itam.view_software'
+
+ template_name = 'settings/software_categories.html.j2'
+
+ context_object_name = "list"
+
+
+ def get_queryset(self):
+
+ if self.request.user.is_superuser:
+
+ return self.model.objects.filter().order_by('name')
+
+ else:
+
+ return self.model.objects.filter(organization=self.user_organizations()).order_by('name')
+
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+
+ context['content_title'] = 'Software Categories'
+
+ return context