123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- from django.shortcuts import render, get_object_or_404
- from django.views.generic import ListView, CreateView, DetailView, UpdateView, RedirectView
- from django.views.generic.detail import SingleObjectMixin
- from django.contrib.auth.mixins import LoginRequiredMixin
- from django.contrib.auth.mixins import PermissionRequiredMixin
- from django.http import HttpResponseGone
- from django.urls import reverse
- from djadhere.utils import get_active_filter
- from .models import Service, ServiceType, IPResource, ResourceAllocation
- from .forms import ServiceForm, ResourceAllocationForm
- class ServiceMixin(PermissionRequiredMixin):
- model = Service
- permission_required = 'services.change_service'
- class ServiceList(ServiceMixin, ListView):
- pass
- class ServiceCreate(ServiceMixin, CreateView):
- form_class = ServiceForm
- class ServiceDetail(LoginRequiredMixin, DetailView):
- def get_queryset(self):
- if self.request.user.is_superuser:
- return Service.objects.all()
- else:
- return Service.objects.filter(adhesion__pk__in=self.request.user.profile.adhesions.values_list('pk')) \
- .order_by('-created')
- class ServiceUpdate(ServiceMixin, UpdateView):
- fields = ('label', 'notes', 'active',)
- class ServiceAllocate(PermissionRequiredMixin, CreateView):
- model = ResourceAllocation
- permission_required = 'services.change_resourceallocation'
- fields = ('service', 'resource',)
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['service'] = get_object_or_404(Service, pk=self.kwargs['pk'])
- return context
- def get_form(self):
- service = get_object_or_404(Service, pk=self.kwargs['pk'])
- kwargs = super().get_form_kwargs()
- kwargs['initial'].update({'service': service.pk})
- form = self.get_form_class()(**kwargs)
- form.fields['service'].disabled = True
- form.fields['resource'].queryset = IPResource.objects.exclude(get_active_filter('allocation'))
- return form
- def get_success_url(self):
- return reverse('service-detail', kwargs={'pk': self.kwargs['pk']})
- class ServiceTypeMixin(PermissionRequiredMixin):
- model = ServiceType
- permission_required = 'services.change_servicetype'
- class ServiceTypeList(ServiceTypeMixin, ListView):
- pass
- class ServiceTypeCreate(ServiceTypeMixin, CreateView):
- fields = ('name',)
- class ServiceTypeDetail(ServiceTypeMixin, DetailView):
- pass
- class ServiceTypeUpdate(ServiceTypeMixin, UpdateView):
- fields = ('name',)
- class IPResourceMixin(PermissionRequiredMixin):
- model = IPResource
- permission_required = 'services.change_ipresource'
- class IPResourceList(IPResourceMixin, ListView):
- pass
- class IPResourceDetail(IPResourceMixin, DetailView):
- pass
- class IPResourceAllocate(PermissionRequiredMixin, CreateView):
- model = ResourceAllocation
- permission_required = 'services.change_resourceallocation'
- fields = ('service', 'resource',)
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['ipresource'] = get_object_or_404(IPResource, pk=self.kwargs['pk'])
- return context
- def get(self, request, *args, **kwargs):
- resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
- if resource.in_use:
- return HttpResponseGone("Cette IP est déjà alloué !")
- return super().get(request, *args, **kwargs)
- def get_form(self):
- resource = get_object_or_404(IPResource, pk=self.kwargs['pk'])
- kwargs = super().get_form_kwargs()
- kwargs['initial'].update({'resource': resource.pk})
- form = self.get_form_class()(**kwargs)
- form.fields['resource'].disabled = True
- return form
- def get_success_url(self):
- return reverse('ip-detail', kwargs={'pk': self.kwargs['pk']})
- class ResourceAllocationMixin(PermissionRequiredMixin):
- model = ResourceAllocation
- permission_required = 'services.change_resourceallocation'
- class ResourceAllocationDeallocate(ResourceAllocationMixin, SingleObjectMixin, RedirectView):
- http_method_names = ['post']
- def get_object(self, queryset=None):
- obj = super().get_object(queryset)
- obj.deallocate()
- obj.save()
- return obj
- def get_redirect_url(self, *args, **kwargs):
- return self.get_object().get_absolute_url()
|