236 lines
7.7 KiB
Python
236 lines
7.7 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.conf import settings
|
|
from .usersforms import UsersAddNewUser, UsersAddProfileForm, UsersChangeProfil, AgencyUpdateForm, UsersPermForm
|
|
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View
|
|
from django.contrib import messages
|
|
from django.contrib.auth.models import User
|
|
from django.db import models
|
|
from .models import Profile, Agency
|
|
from django.core.mail import send_mail
|
|
from django.contrib.auth.models import Permission
|
|
from django.http import HttpResponseRedirect
|
|
|
|
|
|
'''
|
|
|
|
DASHBOARD-View
|
|
|
|
View nach erfolgreichem Login und anzeige des Dashboards.
|
|
|
|
TODO: ROLLENVERTEILUNG
|
|
|
|
Templates: welcomeusers.html und base.html
|
|
|
|
'''
|
|
|
|
class AgencyCreateView(CreateView):
|
|
model = User
|
|
fields = ['first_name', 'last_name','username', 'email']
|
|
success_url = '/register/done'
|
|
|
|
def form_valid(self, form):
|
|
# Send message to the site
|
|
messages.success(self.request, f'Agentur erstellt! Es wurde eine E-Mail verschickt mit weitere Infos zur Passworterstellung.')
|
|
# SAVE OBJECTS TO SIGNALE!
|
|
agency = Agency()
|
|
agency.save()
|
|
form.instance.agency = agency
|
|
|
|
# E-Mail für Passwort-Setzung!
|
|
send_mail(
|
|
'Agenturanmeldung',
|
|
'Hallo ' + form.cleaned_data.get('first_name') + ' ' + form.cleaned_data.get('last_name') + '! Bitte setzen sie sich auf localhost:8000/password-reset/ ein Passwort. Anschließend können Sie weitere Details Ihrer Agentur eingeben.',
|
|
'htrampe@gmail.com',
|
|
[form.cleaned_data.get('email')],
|
|
fail_silently=False,
|
|
)
|
|
|
|
return super().form_valid(form)
|
|
|
|
|
|
@login_required
|
|
def dashboard(request):
|
|
|
|
context = {
|
|
'active_link' : 'dashboard'
|
|
}
|
|
|
|
return render (request, 'users/dashboard.html', context)
|
|
|
|
class UsersManagement(LoginRequiredMixin, ListView):
|
|
model = User
|
|
|
|
# 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
|
|
users_of_agency = User.objects.filter(profile__agency__pk=self.request.user.profile.agency.pk)
|
|
context.update({'active_link' : 'usersmanagement', 'users_of_agency':users_of_agency})
|
|
return context
|
|
|
|
'''
|
|
Class AddNewUser()
|
|
|
|
Erstellt einen neuen Nutzer mit SIGNALS, Profile und Agency (des aktuellen Users mit Rechten)
|
|
|
|
'''
|
|
class UsersCreateUser(LoginRequiredMixin, CreateView):
|
|
model = User
|
|
fields = ['first_name', 'last_name','username', 'email']
|
|
success_url = '/dashboard/usersman/'
|
|
|
|
# Adding active_link
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context.update({'active_link' : 'usersmanagement'})
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
# Send message to the site
|
|
messages.success(self.request, f'Benutzer angelegt!')
|
|
# SAVE OBJECTS TO SIGNALE!
|
|
form.instance.agency = self.request.user.profile.agency
|
|
|
|
# E-Mail für Passwort-Setzung!
|
|
send_mail(
|
|
self.request.user.profile.agency.name + ' Anmeldung',
|
|
'Hallo ' + form.cleaned_data.get('first_name') + ' ' + form.cleaned_data.get('last_name') + '! Bitte setzen sie sich auf localhost:8000/password-reset/ ein Passwort.',
|
|
'htrampe@gmail.com',
|
|
[form.cleaned_data.get('email')],
|
|
fail_silently=False,
|
|
)
|
|
|
|
return super().form_valid(form)
|
|
|
|
# USER muss eingeloggt sein, um diese Seite zu sehen
|
|
@login_required
|
|
def profile(request):
|
|
# NEUE DATEN KOMMEN AN!
|
|
if request.method == 'POST':
|
|
# Hier werden die Daten aus POST geholt und in die Instance(konkreten User) gespeichert
|
|
u_form = UsersChangeProfil(request.POST, instance=request.user)
|
|
#p_form = UsersAddProfileForm(request.POST, request.FILES, instance=request.user.profile)
|
|
|
|
if u_form.is_valid():
|
|
#if u_form.is_valid() and p_form.is_valid():
|
|
u_form.save()
|
|
#p_form.save()
|
|
prename = request.user.first_name
|
|
name = request.user.last_name
|
|
#name = p_form.cleaned_data.get('name')
|
|
messages.success(request, f'Daten für {prename} {name} aktualisiert!')
|
|
# Daten neu laden und nicht die "Mächten sie die Daten speichern...?"
|
|
return redirect('users-dashboard')
|
|
|
|
else:
|
|
# Form in Klammern sind die aktuellen Daten :)
|
|
u_form = UsersChangeProfil(instance=request.user)
|
|
#p_form = UsersAddProfileForm(instance=request.user.profile)
|
|
|
|
context = {
|
|
'u_form' : u_form,
|
|
#'p_form' : p_form,
|
|
'active_link' : 'dashboard'
|
|
}
|
|
return render(request, 'users/profile.html', context)
|
|
|
|
# Hier andere Nutzer ändern, wenn man Usersmanagement darf!
|
|
class UserManagementUpdateForm(LoginRequiredMixin, UpdateView):
|
|
model = Profile
|
|
labels = {
|
|
"phoneland" : "Telefon",
|
|
"phonemobile" : "Mobil",
|
|
"compfunc" : "Agenturfunktion",
|
|
}
|
|
fields = ['phoneland','phonemobile','compfunc']
|
|
|
|
class UsersPermUpdateView(LoginRequiredMixin, View):
|
|
template_name = 'users/users_perm.html'
|
|
form_class = UsersPermForm
|
|
success_url = '/dashboard/usersman/'
|
|
|
|
|
|
# Form wird geladen; Checkboxen werden vorbereitet und hier rausgerendert.
|
|
def get(self,request,*args, **kwargs):
|
|
# User ist der hier Aufgerufene, bzw. das Profil!
|
|
user_tochange = Profile.objects.get(pk=kwargs['pk']).user
|
|
return render (request, self.template_name, {'form':self.form_class(user_tochange), 'active_link': 'usersmanagement', 'user_tochange': user_tochange})
|
|
|
|
|
|
#messages.success(self.request, f'Berechtigungen aktualisiert!')
|
|
#print(form)
|
|
#return super().form_valid(form)
|
|
|
|
# Handle POST GTTP requests
|
|
def post(self, request, *args, **kwargs):
|
|
permissions_loaded = dict(request.POST.lists())
|
|
user_tochange = Profile.objects.get(pk=kwargs['pk']).user
|
|
# ITERATION Über alle Elemente gehen und Rechte entziehen (nicht vorhanden) oder adden (wenn vorhanden)
|
|
# Hat ein user ein Recht NICHT, ist es NICHT in permissions
|
|
# LOAD PERMISSIONS
|
|
temprof = Profile
|
|
for ele in temprof._meta.permissions:
|
|
tempperm = Permission.objects.get(codename=ele[0])
|
|
if ele[0] in permissions_loaded:
|
|
user_tochange.user_permissions.add(tempperm)
|
|
else:
|
|
user_tochange.user_permissions.remove(tempperm)
|
|
user_tochange.save()
|
|
messages.success(request, f'Berechtigungen für {user_tochange.first_name} {user_tochange.last_name} aktualisiert!')
|
|
return HttpResponseRedirect('/dashboard/usersman/')
|
|
|
|
|
|
|
|
|
|
# Benutzerprofil wird aktualisiert
|
|
class ProfileUpdateView(LoginRequiredMixin, UpdateView):
|
|
model = Profile
|
|
form_class = UsersAddProfileForm
|
|
template_name = 'users/profile_update.html'
|
|
success_url = '/dashboard/usersman/'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ProfileUpdateView, self).get_context_data(**kwargs)
|
|
context['active_link'] = 'usersmanagement'
|
|
return context
|
|
|
|
# Delete a user!
|
|
class ProfileDeleteView(LoginRequiredMixin, DeleteView):
|
|
model = User
|
|
success_url = '/dashboard/usersman'
|
|
template_name = 'users/user_confirm_delete.html'
|
|
|
|
def test_func(self):
|
|
tempuser = self.get_object()
|
|
todel_name = self.get_object().first_name + " " + self.get_object().last_name
|
|
# self request user ist der aktuell user
|
|
messages.success(self.request, f'Benutzer {todel_name} entfernet!')
|
|
if self.request.user == tempuser:
|
|
return False
|
|
return True
|
|
|
|
|
|
# USER muss eingeloggt sein, um diese Seite zu sehen
|
|
@login_required
|
|
def agency(request):
|
|
context = {
|
|
'active_link' : 'agencyinfo'
|
|
}
|
|
|
|
return render(request, 'users/agency.html', context)
|
|
|
|
|
|
class AgencyUpdateView(LoginRequiredMixin, UpdateView):
|
|
model = Agency
|
|
form_class = AgencyUpdateForm
|
|
template_name = 'users/agency_update.html'
|
|
success_url = '/dashboard/agencyinfo'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(AgencyUpdateView, self).get_context_data(**kwargs)
|
|
context['active_link'] = 'agencyinfo'
|
|
return context |