views.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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.urls import reverse
  8. from djadhere.utils import get_active_filter
  9. from .models import Service, ServiceType, IPResource, ResourceAllocation
  10. from .forms import ServiceForm, ResourceAllocationForm
  11. class ServiceMixin(PermissionRequiredMixin):
  12. model = Service
  13. permission_required = 'services.change_service'
  14. class ServiceList(ServiceMixin, ListView):
  15. pass
  16. class ServiceCreate(ServiceMixin, CreateView):
  17. form_class = ServiceForm
  18. class ServiceDetail(LoginRequiredMixin, DetailView):
  19. def get_queryset(self):
  20. if self.request.user.is_superuser:
  21. return Service.objects.all()
  22. else:
  23. return Service.objects.filter(adhesion__pk__in=self.request.user.profile.adhesions.values_list('pk')) \
  24. .order_by('-created')
  25. class ServiceUpdate(ServiceMixin, UpdateView):
  26. fields = ('label', 'notes', 'active',)
  27. class ServiceAllocate(PermissionRequiredMixin, CreateView):
  28. model = ResourceAllocation
  29. permission_required = 'services.change_resourceallocation'
  30. fields = ('service', 'resource',)
  31. def get_context_data(self, **kwargs):
  32. context = super().get_context_data(**kwargs)
  33. context['service'] = get_object_or_404(Service, pk=self.kwargs['pk'])
  34. return context
  35. def get_form(self):
  36. service = get_object_or_404(Service, pk=self.kwargs['pk'])
  37. kwargs = super().get_form_kwargs()
  38. kwargs['initial'].update({'service': service.pk})
  39. form = self.get_form_class()(**kwargs)
  40. form.fields['service'].disabled = True
  41. form.fields['resource'].queryset = IPResource.objects.exclude(get_active_filter('allocation'))
  42. return form
  43. def get_success_url(self):
  44. return reverse('service-detail', kwargs={'pk': self.kwargs['pk']})
  45. class ServiceTypeMixin(PermissionRequiredMixin):
  46. model = ServiceType
  47. permission_required = 'services.change_servicetype'
  48. class ServiceTypeList(ServiceTypeMixin, ListView):
  49. pass
  50. class ServiceTypeCreate(ServiceTypeMixin, CreateView):
  51. fields = ('name',)
  52. class ServiceTypeDetail(ServiceTypeMixin, DetailView):
  53. pass
  54. class ServiceTypeUpdate(ServiceTypeMixin, UpdateView):
  55. fields = ('name',)
  56. class IPResourceMixin(PermissionRequiredMixin):
  57. model = IPResource
  58. permission_required = 'services.change_ipresource'
  59. class IPResourceList(IPResourceMixin, ListView):
  60. pass
  61. class IPResourceDetail(IPResourceMixin, DetailView):
  62. pass
  63. class IPResourceAllocate(PermissionRequiredMixin, CreateView):
  64. model = ResourceAllocation
  65. permission_required = 'services.change_resourceallocation'
  66. fields = ('service', 'resource',)
  67. def get_context_data(self, **kwargs):
  68. context = super().get_context_data(**kwargs)
  69. context['ipresource'] = get_object_or_404(IPResource, pk=self.kwargs['pk'])
  70. return context
  71. def get(self, request, *args, **kwargs):
  72. resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
  73. if resource.in_use:
  74. return HttpResponseGone("Cette IP est déjà alloué !")
  75. return super().get(request, *args, **kwargs)
  76. def get_form(self):
  77. resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
  78. kwargs = super().get_form_kwargs()
  79. kwargs['initial'].update({'resource': resource.pk})
  80. form = self.get_form_class()(**kwargs)
  81. form.fields['resource'].disabled = True
  82. return form
  83. def get_success_url(self):
  84. return reverse('ip-detail', kwargs={'pk': self.kwargs['pk']})
  85. class ResourceAllocationMixin(PermissionRequiredMixin):
  86. model = ResourceAllocation
  87. permission_required = 'services.change_resourceallocation'
  88. class ResourceAllocationDeallocate(ResourceAllocationMixin, SingleObjectMixin, RedirectView):
  89. http_method_names = ['post']
  90. def get_object(self, queryset=None):
  91. obj = super().get_object(queryset)
  92. obj.deallocate()
  93. obj.save()
  94. return obj
  95. def get_redirect_url(self, *args, **kwargs):
  96. return self.get_object().get_absolute_url()