76 lines
3.0 KiB
Python
76 lines
3.0 KiB
Python
from netbox.views import generic
|
|
from django.utils.translation import gettext_lazy as _
|
|
from netbox_slm import filtersets, forms, tables
|
|
from netbox_slm.models import SoftwareLicense
|
|
from utilities.views import register_model_view
|
|
|
|
|
|
class EmailNotificationPermissionMixin:
|
|
"""Prevent users without the dedicated permission from changing SMTP delivery."""
|
|
|
|
email_permission = "netbox_slm.manage_softwarelicense_email_notifications"
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
form_attribute = "model_form" if hasattr(self, "model_form") else "form"
|
|
base_form = getattr(self, form_attribute)
|
|
can_manage_email = request.user.has_perm(self.email_permission)
|
|
|
|
class PermissionAwareForm(base_form):
|
|
def __init__(self, *form_args, **form_kwargs):
|
|
super().__init__(*form_args, **form_kwargs)
|
|
if not can_manage_email and "email_notifications" in self.fields:
|
|
field = self.fields["email_notifications"]
|
|
field.disabled = True
|
|
field.help_text = _(
|
|
"Only administrators or explicitly authorized users can change this setting."
|
|
)
|
|
|
|
setattr(self, form_attribute, PermissionAwareForm)
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "list", path="", detail=False)
|
|
class SoftwareLicenseListView(generic.ObjectListView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
filterset = filtersets.SoftwareLicenseFilterSet
|
|
filterset_form = forms.SoftwareLicenseFilterForm
|
|
table = tables.SoftwareLicenseTable
|
|
|
|
|
|
@register_model_view(SoftwareLicense)
|
|
class SoftwareLicenseView(generic.ObjectView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "add", detail=False)
|
|
@register_model_view(SoftwareLicense, "edit")
|
|
class SoftwareLicenseEditView(EmailNotificationPermissionMixin, generic.ObjectEditView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
form = forms.SoftwareLicenseForm
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "delete")
|
|
class SoftwareLicenseDeleteView(generic.ObjectDeleteView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "bulk_import", detail=False)
|
|
class SoftwareLicenseBulkImportView(EmailNotificationPermissionMixin, generic.BulkImportView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
model_form = forms.SoftwareLicenseBulkImportForm
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "bulk_edit", path="edit", detail=False)
|
|
class SoftwareLicenseBulkEditView(EmailNotificationPermissionMixin, generic.BulkEditView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
filterset = filtersets.SoftwareLicenseFilterSet
|
|
table = tables.SoftwareLicenseTable
|
|
form = forms.SoftwareLicenseBulkEditForm
|
|
|
|
|
|
@register_model_view(SoftwareLicense, "bulk_delete", path="delete", detail=False)
|
|
class SoftwareLicenseBulkDeleteView(generic.BulkDeleteView):
|
|
queryset = SoftwareLicense.objects.all()
|
|
filterset = filtersets.SoftwareLicenseFilterSet
|
|
table = tables.SoftwareLicenseTable
|