from django.shortcuts import render from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View from .models import Areas from django.contrib import messages from .forms import AreaAddAreaForm from django.contrib.auth.models import User from django.http import HttpResponse, JsonResponse import json class AreasManagement(LoginRequiredMixin, ListView): model = Areas # Adding active_link # Loading only user same agency # Change context and return for template-data def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # # Get all Users of the Same Agency as logged user areas_of_agency = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk).order_by('areaorder') context.update({'active_link' : 'areasmanagement', 'areas_of_agency':areas_of_agency}) return context class AreasAddArea(LoginRequiredMixin, CreateView): model = Areas success_url = '/areas' #fields = ['name', 'color', 'desc', 'usersfield'] form_class = AreaAddAreaForm #def get(self,request,*args, **kwargs): # # User ist der hier Aufgerufene, bzw. das Profil! # return render (request, self.template_name, {'form':self.form_class(self.request.user), 'active_link': 'areasmanagement'}) # Adding active_link def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : 'areasmanagement'}) return context def form_valid(self, form): # Send message to the site messages.success(self.request, f'Bereich angelegt!') # SAVE OBJECTS TO SIGNALE! form.instance.agency = self.request.user.profile.agency form.instance.created_area_by = self.request.user return super().form_valid(form) class AreaDeleteView(LoginRequiredMixin, DeleteView): model = Areas success_url = '/areas' template_name = 'areas/area_confirm_delete.html' def delete(self, request, *args, **kwargs): area = Areas.objects.get(pk=kwargs['pk']) response = super(AreaDeleteView, self).delete(request, *args, **kwargs) name = area.name messages.success(request, f'Bereich ' +name+ ' wurde gelöscht!') return response def get_context_data(self, **kwargs): context = super(AreaDeleteView, self).get_context_data(**kwargs) context['active_link'] = 'areasmanagement' return context # Hier andere Nutzer ändern, wenn man Usersmanagement darf! class AreaUpdateView(LoginRequiredMixin, UpdateView): model = Areas template_name = 'areas/areas_update.html' success_url = '/areas' form_class = AreaAddAreaForm def form_valid(self, form): # Send message to the site messages.success(self.request, f'Bereich aktualisiert!') print(form) return super().form_valid(form) # Form wird geladen; Checkboxen werden vorbereitet und hier rausgerendert. #def get(self,request,*args, **kwargs): # # User ist der hier Aufgerufene, bzw. das Profil! # loggeduser = request.user # # return render (request, self.template_name, {'form':self.form_class(loggeduser), 'active_link': 'usersmanagement'}) def get_context_data(self, **kwargs): context = super(AreaUpdateView, self).get_context_data(**kwargs) area = Areas.objects.get(pk=context['object'].pk) # User still in Area context['added_users'] = area.usersfield.all() # Get all Users from same Agency which are NOT in context_added_users possible_users = User.objects.filter(profile__agency__pk=self.request.user.profile.agency.pk).exclude(pk__in=context['added_users']) context['possible_users'] = possible_users # Active-Link for Base-Design context['active_link'] = 'areasmanagement' # Area ID context['objectid'] = context['object'].pk return context def area_addareas_ajax(request): if request.method == 'GET': # ADD USER TO MANY-TO-MANY USERSFIELD if request.GET['action'] == 'adduser': area = Areas.objects.get(pk=request.GET['objectid']) area.usersfield.add(User.objects.get(pk=request.GET['userid'])) area.save() # REMOVE USER TO MANY-TO-MANY USERSFIELD elif request.GET['action'] == 'remuser': area = Areas.objects.get(pk=request.GET['objectid']) area.usersfield.remove(User.objects.get(pk=request.GET['userid'])) area.save() userid = request.GET['userid'] workinguser = User.objects.get(pk=userid) username_clean = workinguser.first_name + " " + workinguser.last_name # Getting Remaining-Users area = Areas.objects.get(pk=request.GET['objectid']) added_users = area.usersfield.all() possible_users = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk).exclude(pk__in=added_users) possible_users_js = list(possible_users.values()) # Cleaned out, that only data is neede will send to the side (first/last-name and id) final_possible_users = {} for ele in possible_users_js: final_possible_users.update({'first_name':ele['first_name'],'last_name':ele['last_name'],'id':ele['id']}) # Counter for remaining users to show/hide "Keine Mitarbeiter"-Div remaining_users_counter = len(added_users) return JsonResponse({'userid' : userid, 'username_clean' : username_clean, 'remaining_users':possible_users_js, 'remaining_users_counter' : final_possible_users}) else: return HttpResponse("Request method is not a GET") ''' Update the Area-Order by drag and drop. Save per ID and order in table, example: ID ORDER 0 --> 0 4 --> 1 2 --> 2 5 --> 3 Triggered by ajax in areas_management.html Save all areas after drag n drop elements in table ''' def area_neworder(request): if request.method == 'GET': if request.GET['action'] == 'newareaorder': neworderdata = json.loads(request.GET['finalod']) for ele in neworderdata: area = Areas.objects.get(pk=ele['id']) area.areaorder = ele['neworder'] area.save() return HttpResponse("UPDATED") else: return HttpResponse("Request method is not a GET")