from django.contrib.auth.mixins import PermissionRequiredMixin from django.db.models import Q, Count from django.urls import reverse from django.views import generic from access.mixin import OrganizationPermission from itam.models.device import DeviceOperatingSystem from itam.models.operating_system import OperatingSystem, OperatingSystemVersion from itam.forms.operating_system.update import Update class IndexView(PermissionRequiredMixin, OrganizationPermission, generic.ListView): model = OperatingSystem permission_required = 'itam.view_operating_system' template_name = 'itam/operating_system_index.html.j2' context_object_name = "operating_systems" paginate_by = 10 def get_queryset(self): if self.request.user.is_superuser: return OperatingSystem.objects.filter().order_by('name') else: return OperatingSystem.objects.filter(Q(organization__in=self.user_organizations()) | Q(is_global = True)).order_by('name') class View(OrganizationPermission, generic.UpdateView): model = OperatingSystem permission_required = [ 'itam.view_operating_system' ] template_name = 'itam/operating_system.html.j2' form_class = Update context_object_name = "operating_system" 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")) context['operating_system_versions'] = operating_system_versions installs = DeviceOperatingSystem.objects.filter(operating_system_version__operating_system_id=self.kwargs['pk']) context['installs'] = installs context['content_title'] = self.object.name return context def get_success_url(self, **kwargs): return reverse('ITAM:_operating_system_view', args=(self.kwargs['pk'],)) class Add(PermissionRequiredMixin, OrganizationPermission, generic.CreateView): model = OperatingSystem permission_required = [ 'access.add_operating_system', ] template_name = 'form.html.j2' fields = [ 'name', 'organization', 'is_global' ] 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 Delete(PermissionRequiredMixin, OrganizationPermission, generic.DeleteView): model = OperatingSystem permission_required = [ 'access.delete_operating_system', ] 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['content_title'] = 'Delete ' + self.object.name return context