views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. from django.shortcuts import render, get_object_or_404
  2. from django.views.generic import ListView, CreateView, DetailView, UpdateView, RedirectView
  3. from django.views.generic.detail import SingleObjectMixin
  4. from django.contrib.auth.mixins import LoginRequiredMixin
  5. from django.contrib.auth.mixins import PermissionRequiredMixin
  6. from django.http import HttpResponseGone
  7. from django.core.exceptions import PermissionDenied
  8. from django.utils import timezone
  9. from djadhere.utils import get_active_filter
  10. from .models import Service, ServiceType, IPResource, ResourceAllocation
  11. from .forms import ServiceForm, ResourceAllocationForm
  12. class ServiceMixin(PermissionRequiredMixin):
  13. model = Service
  14. permission_required = 'services.change_service'
  15. class ServiceList(ServiceMixin, ListView):
  16. pass
  17. class ServiceCreate(ServiceMixin, CreateView):
  18. form_class = ServiceForm
  19. class ServiceDetail(LoginRequiredMixin, DetailView):
  20. def get_queryset(self):
  21. if self.request.user.is_superuser:
  22. return Service.objects.all()
  23. else:
  24. return Service.objects.filter(adhesion__pk__in=self.request.user.profile.adhesions.values_list('pk')) \
  25. .order_by('-created')
  26. class ServiceUpdate(ServiceMixin, UpdateView):
  27. fields = ('label', 'notes', 'active',)
  28. class ServiceAllocate(PermissionRequiredMixin, CreateView):
  29. model = ResourceAllocation
  30. permission_required = 'services.change_resourceallocation'
  31. def get_form(self):
  32. service = get_object_or_404(Service, pk=self.kwargs['pk'])
  33. kwargs = super().get_form_kwargs()
  34. kwargs['initial'].update({'service': service.pk})
  35. form = ResourceAllocationForm(**kwargs)
  36. form.fields['service'].disabled = True
  37. form.fields['resource'].queryset = IPResource.objects.exclude(get_active_filter('allocation'))
  38. return form
  39. class ServiceTypeMixin(PermissionRequiredMixin):
  40. model = ServiceType
  41. permission_required = 'services.change_servicetype'
  42. class ServiceTypeList(ServiceTypeMixin, ListView):
  43. pass
  44. class ServiceTypeCreate(ServiceTypeMixin, CreateView):
  45. fields = ('name',)
  46. class ServiceTypeDetail(ServiceTypeMixin, DetailView):
  47. pass
  48. class ServiceTypeUpdate(ServiceTypeMixin, UpdateView):
  49. fields = ('name',)
  50. class IPResourceMixin(PermissionRequiredMixin):
  51. model = IPResource
  52. permission_required = 'services.change_ipresource'
  53. class IPResourceList(IPResourceMixin, ListView):
  54. pass
  55. class IPResourceDetail(IPResourceMixin, DetailView):
  56. pass
  57. class IPResourceAllocate(PermissionRequiredMixin, CreateView):
  58. model = ResourceAllocation
  59. permission_required = 'services.change_resourceallocation'
  60. def get(self, request, *args, **kwargs):
  61. resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
  62. if resource.in_use:
  63. return HttpResponseGone("Cette IP est déjà alloué !")
  64. return super().get(request, *args, **kwargs)
  65. def get_form(self):
  66. resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
  67. kwargs = super().get_form_kwargs()
  68. kwargs['initial'].update({'resource': resource.pk})
  69. form = ResourceAllocationForm(**kwargs)
  70. form.fields['resource'].disabled = True
  71. return form
  72. class ResourceAllocationMixin(PermissionRequiredMixin):
  73. model = ResourceAllocation
  74. permission_required = 'services.change_resourceallocation'
  75. class ResourceAllocationDeallocate(ResourceAllocationMixin, SingleObjectMixin, RedirectView):
  76. def get_object(self, queryset=None):
  77. obj = super().get_object(queryset)
  78. if not obj.active:
  79. raise PermissionDenied
  80. obj.end = timezone.now()
  81. obj.save()
  82. return obj
  83. def get_redirect_url(self, *args, **kwargs):
  84. return self.get_object().get_absolute_url()