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 %} + + + + + + + + + + + {% for item in list %} + + + + + + {% endfor %} + +
NameOrganization 
{{ item.name }}{% if item.is_global %}Global{% else %}{{ item.organization }}{% endif %}Delete
+ + +{% 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