133 lines
5.1 KiB
Python
133 lines
5.1 KiB
Python
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
|
|
|
|
|
|
|
|
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)
|
|
|
|
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!')
|
|
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") |