from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect,HttpResponse, JsonResponse from .forms import UsersSelfChangeForm, UsersNotificationForm, AgencyGroupPerms, AgencyModulsForm, UserNewUserForm, UserProfileForm, AgencyNetworkForm, AgencyOrganigrammForm, UserTimeForm, AgencyTimeManagement from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm from users.usersforms import AgencyUpdateForm from users.models import AgencyJob, AgencyGroup, AgencyNetwork, Agency, AgencyNetworkPreperation from django.contrib.auth.models import User, Group, Permission from users.models import UserTime import random import string from django.template.loader import render_to_string from users.usersforms import UsersPermForm from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView from users.models import Profile from areas.models import Areas from tasks.models import Tasks import webcolors from datetime import datetime from standards.models import Standards from timemanagement.models import AbsenceReason from django.core.mail import send_mail from django.conf import settings import re def randomString(stringLength=10): """Generate a random string of fixed length """ letters = string.ascii_lowercase return ''.join(random.choice(letters) for i in range(stringLength)) @login_required def checkForGroupName(request, newgroupname): stat = True groupsagency = AgencyGroup.objects.filter(agency__pk=request.user.profile.agency.pk) for group in groupsagency: if group.agencygroupname.upper() == newgroupname.upper(): stat = False return stat @login_required def getAllForms(request, context): # USERFORMS userform = UsersSelfChangeForm(instance=request.user) passwordform = PasswordChangeForm(request.user) context.update({'userform' : userform}) context.update({'passwordform' : passwordform}) # NOTIFICTAION FORMS notificationform = UsersNotificationForm(instance=request.user.profile) context.update({'notificationform' : notificationform}) # AGENCY UPDATE FORMS agencyform = AgencyUpdateForm(instance=request.user.profile.agency) context.update({'agencyform' : agencyform}) #PERMS perms = AgencyGroupPerms() context.update({'perms' : perms}) #MODULFORMS modulform = AgencyModulsForm(instance=request.user.profile.agency) context.update({'modulform' : modulform}) #MODULSETTUNGS #Modulsettings ORGANIGRAMM modsettings_organigramm = AgencyOrganigrammForm(instance=request.user.profile.agency) context.update({'modsettings_organigramm' : modsettings_organigramm}) #Modulsettings ABWESENHEIT- UND ZEITERFASSUNG modsettings_tm = AgencyTimeManagement(instance=request.user.profile.agency) context.update({'modsettings_tm' : modsettings_tm}) context.update({"modsettings_tm_abcat" : AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("-name") }) # USER FOR USERTABLE users = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk) return context ''' Lädt die Formulare für die einzelnen Einstellungen vollständig ''' @login_required def DASettings(request): context = { 'active_link' : 'dasettings', 'baseurl' : settings.BASE_URL } context = getAllForms(request, context) # USERS FOR MEMBERS AND GROUPCOUNTERS usersofagency = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk).order_by("last_name") context.update({"usersofagency" : usersofagency}) # LOAD AGENCYJOBS context.update({"agencyjobs" : AgencyJob.objects.filter(agency__pk=request.user.profile.agency.pk).order_by("name")}) # LOAD GROUPS agencygroups = AgencyGroup.objects.filter(agency__pk=request.user.profile.agency.pk).order_by("agencygroupname") context.update({"agencygroups" : agencygroups}) # LOAD AREAS agencyareas = Areas.objects.filter(agency__pk=request.user.profile.agency.pk).order_by('areaorder') context.update({"agencyareas" : agencyareas}) # LOAD AGENCYNETWORKS #agencynetworks = AgencyNetwork.objects.filter(creator_agency=request.user.profile.agency) | AgencyNetwork.objects.filter(adminagencys__in=[request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(members__in=[request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(sharemembers__in=[request.user.profile.agency.pk]) #agencynetworks = AgencyNetwork.objects.filter(adminagencys__in=[request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(members__in=[request.user.profile.agency.pk]) | AgencyNetwork.objects.filter(sharemembers__in=[request.user.profile.agency.pk]) agencynetworks_all = AgencyNetwork.objects.all() agencynetworks = [] for a in agencynetworks_all: if request.user.profile.agency in a.adminagencys.all() or request.user.profile.agency in a.members.all() or request.user.profile.agency in a.sharemembers.all(): agencynetworks.append(a) context.update({"agencynetworks" : agencynetworks}) # LOAD TASKS alltasks = Tasks.objects.filter(agency__pk=request.user.profile.agency.pk).order_by('name') context.update({"alltasks" : alltasks}) if request.method == 'POST' and request.POST.get("settings_area") == "profil": return SettingsProfilManagement(request, context) elif request.method == 'POST' and request.POST.get("settings_area") == "agency": return SettingsAgency(request, context) elif request.method == 'POST' and request.POST.get("settings_area") == "moduls": return SettingsAgencyModuls(request, context) # Returning the data from database for normal-loading Settings else: # DEFAULT DATA FORM-INFOS # Hier müssen alle Standard-Formulare rein, damit die Seite Settings # generell geladen werden kann. # PROFILE FORMS userform = UsersSelfChangeForm(instance=request.user) passwordform = PasswordChangeForm(request.user) context.update({'userform' : userform}) context.update({'passwordform' : passwordform}) # NOTIFICTAION FORMS notificationform = UsersNotificationForm(instance=request.user.profile) context.update({'notificationform' : notificationform}) # AGENCY UPDATE FORMS agencyform = AgencyUpdateForm(instance=request.user.profile.agency) context.update({'agencyform' : agencyform}) return render(request, 'dasettings/settings.html', context) ''' AGENCY Hier werden die Agenturinfos ink. Agenturcropper für das Agenturbild angepasst. ''' @login_required def SettingsAgency(request, context): if request.POST.get("form_type") == "agencyform": agencyform = AgencyUpdateForm(request.POST, instance=request.user.profile.agency) if agencyform.is_valid(): if 'agencypic' in request.FILES: request.user.profile.agency.agencypic = request.FILES['agencypic'] agencyform.save() context['agencyform'] = AgencyUpdateForm(instance=request.user.profile.agency) messages.success(request, f'Agenturdaten aktualisiert!') return render(request, 'dasettings/settings.html', context) else: messages.success(request, f'Daten falsch eingegeben!') context['agencyform'] = AgencyUpdateForm(instance=request.user.profile.agency) return render(request, 'dasettings/settings.html', context) @login_required def SettingsAgencyModuls(request, context): if request.POST.get("form_type") == "agencymodform": agencymoduleform = AgencyModulsForm(request.POST, instance=request.user.profile.agency) if agencymoduleform.is_valid(): agencymoduleform.save() context['modulform'] = AgencyModulsForm(instance=request.user.profile.agency) messages.success(request, f'Moduleinstellungen aktualisiert!') return render(request, 'dasettings/settings.html', context) else: context['modulform'] = AgencyModulsForm(instance=request.user.profile.agency) messages.success(request, f'Fehler beim aktualisieren! Bitte wenden Sie sich an den Support.') return render(request, 'dasettings/settings.html', context) ''' Hier werden die Profilinfos des User zurückgesetzt; Parameter kommen von Settings() - Email - Passwort aktualisieren ''' @login_required def SettingsProfilManagement(request, context): # Check, which form # USERFORM if request.POST.get("form_type") == "userform": userform = UsersSelfChangeForm(request.POST, instance=request.user) if userform.is_valid(): userform.save() messages.success(request, f'E-Mailadresse aktualisiert!') passwordform = PasswordChangeForm(request.user) context['userform'] = userform context['passwordform'] = passwordform return render(request, 'dasettings/settings.html', context) else: messages.success(request, f'Keine E-Mailadresse eingegeben oder E-Mail bereits vorhanden!') passwordform = PasswordChangeForm(request.user) userform = UsersSelfChangeForm(instance=request.user) context['userform'] = userform context['passwordform'] = passwordform return render(request, 'dasettings/settings.html', context) # PASSWORDFORM elif request.POST.get("form_type") == "passwordform": passwordform = PasswordChangeForm(request.user, request.POST) if passwordform.is_valid(): passwordform.save() update_session_auth_hash(request, request.user) userform = UsersSelfChangeForm(instance=request.user) context['userform'] = userform context['passwordform'] = passwordform messages.success(request, f'Passwort aktualisiert!') return render(request, 'dasettings/settings.html', context) else: messages.success(request, f'Passwort falsch eingegeben!') passwordform = PasswordChangeForm(request.user) userform = UsersSelfChangeForm(instance=request.user) context['userform'] = userform context['passwordform'] = passwordform return render(request, 'dasettings/settings.html', context) @login_required def SettingsAjaxRouter(request): success = False data = {} # UPDATE NOTIFICATIONS BY FIELDNAME AND NEW VALUE if request.method == 'GET' and request.GET['action'] == "update_notifications" : success = False new_stat = request.GET['new_stat'] field_to_change = getattr(request.user.profile, request.GET['fieldname']) if(field_to_change or not field_to_change): if(new_stat == "1"): setattr(request.user.profile, request.GET['fieldname'], True) else: setattr(request.user.profile, request.GET['fieldname'], False) request.user.profile.save() success = True # UPDATE TOOLTUP elif request.method == 'GET' and request.GET['action'] == "change_showtooltips" : newtooltipvalue = False user = User.objects.get(pk=request.user.pk, profile__agency=request.user.profile.agency) if(request.GET['newtoolvalue'] == "true"): user.profile.showtooltips = True newtooltipvalue = True else: user.profile.showtooltips = False user.save() success = True data = {'newttvalue' : newtooltipvalue} # UPDATE AGENCYJOB elif request.method == 'GET' and request.GET['action'] == "update_agencyfunc" : job_id = request.GET['id'] job_value = request.GET['newvalue'] tempjob = AgencyJob.objects.get(pk=job_id, agency=request.user.profile.agency) tempjob.name = job_value tempjob.save() success = True # DELETE AGENVY JOB FUNC - RETURN ONLY NAME FOR CONFIRM elif request.method == 'GET' and request.GET['action'] == "get_agencyfunc" : job_id = request.GET['id'] tempjob = AgencyJob.objects.get(pk=job_id, agency=request.user.profile.agency) data = {"funcname" : tempjob.name} success = True # DELETE FINAL AGECY JOB elif request.method == 'GET' and request.GET['action'] == "delete_agencyfunc" : job_id = request.GET['id'] tempjob = AgencyJob.objects.get(pk=job_id, agency=request.user.profile.agency) tempjob.delete() success = True elif request.method == 'GET' and request.GET['action'] == "add_agencyfunc" : tempjob = AgencyJob(name="", agency=request.user.profile.agency) tempjob.save() data = {"new_id" : tempjob.pk} success = True # GRUPPENAMEN AKTUALISIEREN elif request.method == 'GET' and request.GET['action'] == "update_groupname" : group = AgencyGroup.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) if(checkForGroupName(request, request.GET['newvalue'])): group.agencygroupname = request.GET['newvalue'] group.save() data = {"newvalue" : group.agencygroupname} success = True else: success = False # GRUPPENNAMEN HOLEN elif request.method == 'GET' and request.GET['action'] == "get_groupname" : group = AgencyGroup.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) data = {"groupname" : group.agencygroupname} success = True elif request.method == 'GET' and request.GET['action'] == "add_group" : if(checkForGroupName(request, request.GET['newvalue'])): tempgroup = Group(name=str(request.user.profile.agency.pk) + "_" + randomString(8)) tempgroup.save() tempgroup_ag = AgencyGroup(savefordel=False, group=tempgroup, agency=request.user.profile.agency, agencygroupname=request.GET['newvalue']) tempgroup_ag.save() success = True data = {"group_id" : tempgroup_ag.pk, "group_name" : tempgroup_ag.agencygroupname} else: success = False elif request.method == 'GET' and request.GET['action'] == "delete_group" : groupag = AgencyGroup.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) group_to_del = groupag.group group_to_del.delete() success = True # PERMISSIONS ON GROUP! elif request.method == 'GET' and request.GET['action'] == "change_perm_group" : success = True group_id = request.GET['id'] perm_name = request.GET['perm'] val = request.GET['val'] aggroup = AgencyGroup.objects.get(pk=group_id, agency=request.user.profile.agency) # CHECK IF REQUESTED USER IS IN THIS AGENCY if(request.user.profile.agency.pk == aggroup.agency.pk): if(val == "true"): tempperm = Permission.objects.get(codename=perm_name) aggroup.group.permissions.add(tempperm) else: tempperm = Permission.objects.get(codename=perm_name) aggroup.group.permissions.remove(tempperm) else: success = False # REMOVE USER FROM GROUP elif request.method == 'GET' and request.GET['action'] == "remove_user_from_group" : success = True groupid = request.GET['groupid'] userid = request.GET['userid'] aggroup = AgencyGroup.objects.get(pk=groupid, agency=request.user.profile.agency) usertoremove = User.objects.get(pk=userid, profile__agency=request.user.profile.agency) # CHECK IF REQUESTED USER IS IN THIS AGENCY if(request.user.profile.agency.pk == aggroup.agency.pk): if aggroup.group in usertoremove.groups.all(): aggroup.group.user_set.remove(usertoremove) data = {"userid" : usertoremove.pk, "groupid" : aggroup.pk, "user_fname" : usertoremove.first_name, "user_lname" : usertoremove.last_name} else: success = False # ADD USER TO GROUP elif request.method == 'GET' and request.GET['action'] == "add_user_to_group" : success = True groupid = request.GET['groupid'] userid = request.GET['userid'] aggroup = AgencyGroup.objects.get(pk=groupid, agency=request.user.profile.agency) usertoadd = User.objects.get(pk=userid, profile__agency=request.user.profile.agency) # CHECK IF REQUESTED USER IS IN THIS AGENCY if(request.user.profile.agency.pk == aggroup.agency.pk): aggroup.group.user_set.add(usertoadd) data = {"userid" : usertoadd.pk, "groupid" : aggroup.pk, "user_fname" : usertoadd.first_name, "user_lname" : usertoadd.last_name} else: success = False # AREA # AREANAMEN HOLEN elif request.method == 'GET' and request.GET['action'] == "get_areaname" : area = Areas.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) data = {"areaname" : area.name, "areacolor" : area.color} success = True # ARENAMEN UPDATE elif request.method == 'GET' and request.GET['action'] == "update_areaname" : area = Areas.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) area.name = request.GET['newvalue'] area.color = request.GET['color'] area.save() data = {"newvalue" : area.name, "color" : area.color} success = True # ADD AREA elif request.method == 'GET' and request.GET['action'] == "add_area" : area = Areas(created_area_by=request.user, agency=request.user.profile.agency, name=request.GET["newvalue"], color=request.GET['color']) area.save() success = True # REMOVE AREA elif request.method == 'GET' and request.GET['action'] == "remove_area" : Areas(pk=request.GET['id']).delete() success = True # ADD TASK elif request.method == 'GET' and request.GET['action'] == "add_task" : task = Tasks(created_area_by=request.user, area=Areas.objects.get(pk=request.GET['areaid']), agency=request.user.profile.agency, name=request.GET["newvalue"]) task.save() taskcreator_fullname = task.created_area_by.first_name + " " + task.created_area_by.last_name data = {"name" : task.name, "newtaskid" : task.pk, "areaname" : task.area.name, "taskcreator_fullname" : taskcreator_fullname, "createdate" : task.created_area_date.strftime("%d. %B %Y")} success = True # TASKNAME VISIBLE UND USERS HOLEN elif request.method == 'GET' and request.GET['action'] == "get_taskname" : task = Tasks.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) # User still in Area # Get all Users from same Agency which are NOT in context_added_users added_users = task.usersfield.all() addus = {} posus = {} i = 0 # GET ADDED USERS for us in added_users: addus.update({ i : {"fullname" : us.first_name + " " + us.last_name, "userid" : us.pk}}) i += 1 # GET POSSIBLE TO ADD USERS k = 0 possible_users = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk).exclude(pk__in=added_users) for us in possible_users: posus.update({ k : {"fullname" : us.first_name + " " + us.last_name, "userid" : us.pk}}) k += 1 data = {"taskname" : task.name, "visible" : task.visible, "added_users" : addus, "addedl" : i, "possl" : k, "possible_users" : posus, "taskarea" : task.area.pk} success = True # REMOVE Task elif request.method == 'GET' and request.GET['action'] == "remove_task" : Tasks.objects.get(pk=request.GET['id'], agency=request.user.profile.agency).delete() success = True # UPDATE TASK VISIBLE elif request.method == 'GET' and request.GET['action'] == "update_visible_taskname" : task = Tasks.objects.get(pk=request.GET['id'], agency=request.user.profile.agency) if(task.visible): task.visible = False; else: task.visible = True; task.save() success = True # UPDATE TASKNAME elif request.method == 'GET' and request.GET['action'] == "change_taskname" : task = Tasks.objects.get(pk=request.GET['id']) task.name = request.GET["newvalue"] data = {"newvalue" : task.name} newareaid = request.GET["newareaid"] standardsmoved = False if int(task.area.pk) != int(newareaid): standardsmoved = True newareaobj = Areas.objects.get(pk=newareaid, agency=request.user.profile.agency) Standards.objects.filter(agency=request.user.profile.agency, area=task.area).update(area=newareaobj) task.area = newareaobj task.save() data = {"newvalue" : task.name, "smoved" : standardsmoved} success = True # UPDATE USER MAIL elif request.method == 'GET' and request.GET['action'] == "update_usermail" : tempuser = User.objects.get(pk=request.GET['userid']) if(request.user.profile.agency == tempuser.profile.agency and request.user.has_perm('usermanager')): tempmail = tempuser.email regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$' if(re.search(regex,request.GET['newmail'])): newmail = request.GET['newmail'] usertest = User.objects.filter(email=newmail) if(len(usertest) > 0): data = {"mail" : tempmail} success = False else: tempuser.email = newmail tempuser.save() success = True else: data = {"mail" : tempmail} success = False else: success = False # UPDATE USERNAME elif request.method == 'GET' and request.GET['action'] == "update_usernames" : tempuser = User.objects.get(pk=request.GET['userid']) if(request.user.profile.agency == tempuser.profile.agency and request.user.has_perm('usermanager')): regex = '^[a-zA-Z0-9_.-üöäÜÖÄ ]+$' if(re.search(regex,request.GET['new_first_name']) and re.search(regex,request.GET['new_last_name'])): tempuser.first_name = request.GET['new_first_name'] tempuser.last_name = request.GET['new_last_name'] tempuser.save() data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name} success = True else: data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name} success = False else: data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name} success = False else: success = False return JsonResponse({"success" : success, "data" : data}) ''' UserProfileUpdate unterscheidet zwischen newuser=0 --> PROFIL AKTUALISIEREN und newuser=1 --> PROFIL Neu speichern ''' @login_required def UserProfileUpdate(request, pk, newuser=0): usertochange = User.objects.get(pk=pk) user_fullname = usertochange.first_name + " " + usertochange.last_name parentuser = "" if(usertochange.profile.parent != None): parentuser = usertochange.profile.parent.pk if request.method == 'POST': if 'image' in request.FILES: usertochange.profile.image = request.FILES['image'] formtosave = False if(request.POST["form_type"] == "profileform"): formtosave = UserProfileForm(request.POST, instance=usertochange.profile) if formtosave.is_valid(): try: usertochange.profile.parent = User.objects.get(pk=request.POST['usertoparent'], profile__agency=request.user.profile.agency) usertochange.save() except Exception as e: usertochange.profile.parent = None usertochange.save() formtosave.save() messages.success(request, f'Profil gespeichert!') return redirect('dasettings') else: messages.success(request, f'Fehlerhafte Eingabe!') context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, 'first_name' : usertochange.first_name, 'last_name' : usertochange.last_name, 'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)), 'newuser' : newuser, 'vieweduser' : usertochange.pk, 'parentuser' : parentuser, 'mail' : usertochange.email, 'imagelink' : usertochange.profile.get_photo_url, 'profileform' : UserProfileForm(instance=usertochange.profile), 'usertoparent' : User.objects.filter(profile__agency__pk=usertochange.profile.agency.pk, profile__visible=True) } return render(request, 'dasettings/user_usprof.html', context) elif(request.POST["form_type"] == "contract"): formtosave = UserTimeForm(request.POST, instance=UserTime.objects.get(user=usertochange)) if(formtosave.is_valid()): messages.success(request, f'Vertragsdaten gespeichert!') formtosave.save() return redirect('dasettings') else: messages.success(request, f'Fehlerhafte Eingabe!') context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, 'first_name' : usertochange.first_name, 'last_name' : usertochange.last_name, 'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)), 'newuser' : newuser, 'vieweduser' : usertochange.pk, 'parentuser' : parentuser, 'mail' : usertochange.email, 'imagelink' : usertochange.profile.get_photo_url, 'profileform' : UserProfileForm(instance=usertochange.profile), 'usertoparent' : User.objects.filter(profile__agency__pk=usertochange.profile.agency.pk, profile__visible=True) } return render(request, 'dasettings/user_usprof.html', context) else: context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, 'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)), 'first_name' : usertochange.first_name, 'last_name' : usertochange.last_name, 'newuser' : newuser, 'mail' : usertochange.email, 'vieweduser' : usertochange.pk, 'imagelink' : usertochange.profile.get_photo_url, 'profileform' : UserProfileForm(instance=usertochange.profile), 'parentuser' : parentuser, 'usertoparent' : User.objects.filter(profile__agency__pk=usertochange.profile.agency.pk, profile__visible=True), 'agencygroups' : AgencyGroup.objects.filter(agency__pk=usertochange.profile.agency.pk).order_by("agencygroupname") } return render(request, 'dasettings/user_usprof.html', context) # View zur Veränderung der Stammdaten des Benutzers @login_required def UserChangeMain(request, pk): usertochange = User.objects.get(pk=pk, profile__agency=request.user.profile.agency) user_fullname = usertochange.first_name + " " + usertochange.last_name if request.method == 'POST': formtosave = UserNewUserForm(request.POST, instance=usertochange) if formtosave.is_valid(): formtosave.save() formtosave.save() messages.success(request, f'Stammdaten aktualisiert!') return redirect('dasettings') else: messages.success(request, f'Fehlerhafte Eingabe! Mailadresse bereits vorhanden!') context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, 'userform' : UserNewUserForm(request.POST, instance=usertochange), } return render(request, 'dasettings/user_changemaindata.html', context) else: context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, 'userform' : UserNewUserForm(instance=usertochange), } return render(request, 'dasettings/user_changemaindata.html', context) # Method for first User-Creation-Step @login_required def NewUserFirstStep(request): context = { 'active_link' : 'dasettings' } if request.method == 'POST': newuserform = UserNewUserForm(request.POST) if newuserform.is_valid(): if(request.POST.get("sendmailnewuser")): msg_html = render_to_string('users/register_mail.html', {'username': newuserform.cleaned_data.get('first_name') + " " + newuserform.cleaned_data.get('last_name')}) send_mail( request.user.profile.agency.name + ' Account', 'Hallo ' + newuserform.cleaned_data.get('first_name') + ' ' + newuserform.cleaned_data.get('last_name') + '! Bitte setzen sie sich auf https://digitale-agentur.com/password-reset/ ein Passwort.', 'support@digitale-agentur.com', [newuserform.cleaned_data.get('email')], html_message=msg_html, fail_silently=False, ) newuser = newuserform.save(commit=False) newuser.username = newuser.email newprofile = Profile(agency=request.user.profile.agency, parent=None) newprofile.save() newuser.profile = newprofile newuser.save() newuser_id = newuser.id messages.success(request, f'Benutzer angelegt!') getadmingroup = AgencyGroup.objects.filter(savefordel=True, is_admin=False, agency=request.user.profile.agency) for g in getadmingroup: g.group.user_set.add(newuser) return redirect('/dasettings/usprof/'+str(newuser_id)+'/1') else: messages.success(request, f'Daten falsch eingegeben!') context['newuserform'] = UserNewUserForm(request.POST) return render(request, 'dasettings/user_newuser_step1.html', context) # Returning the data from database for normal-loading Settings else: newuserform = UserNewUserForm() context.update({'newuserform' : newuserform}) return render(request, 'dasettings/user_newuser_step1.html', context) # NEUER AGENTURVERBUND @login_required def AddAgencyNetwork(request): if request.method == 'POST': newagn = AgencyNetworkForm(request.POST) if(newagn.is_valid()): newagn_object = AgencyNetwork(name=newagn.cleaned_data.get("name"), publicjoin=newagn.cleaned_data.get("publicjoin"), creator=request.user, creator_agency=request.user.profile.agency, networkid=randomString(20)) newagn_object.save() newagn_object.adminagencys.add(request.user.profile.agency) messages.success(request, f'Agenturverbund ' + newagn_object.name + ' angelegt!') return redirect('dasettings') else: context = { 'active_link' : 'dasettings', 'form' : AgencyNetworkForm(), } return render(request, 'dasettings/addagencynetwork_content.html', context) @login_required def UpdateAgencyNetwork(request, pk): if request.method == 'POST': agn = AgencyNetwork.objects.get(pk=pk) formdata = AgencyNetworkForm(request.POST) if(formdata.is_valid()): agn.name = formdata.cleaned_data.get("name") agn.publicjoin= formdata.cleaned_data.get("publicjoin") agn.save() #newagn_object.adminagencys.add(request.user.profile.agency) messages.success(request, f'Agenturverbund ' + agn.name + ' aktualisiert!') return redirect('dasettings') else: context = { 'active_link' : 'dasettings', 'form' : AgencyNetworkForm(instance=AgencyNetwork.objects.get(pk=pk)), } return render(request, 'dasettings/addagencynetwork_content.html', context) @login_required def DelAgencyNetwork(request, pk): agn = AgencyNetwork.objects.get(pk=pk) if request.method == 'POST': if request.user.profile.agency in agn.adminagencys.all(): agn.delete() messages.success(request, f'Agenturverbund erfolgreich gelöscht!') return redirect('dasettings') else: messages.success(request, f'Sie dürfen diesen Agenturverbund nicht löschen!') return redirect('dasettings') else: context = { 'active_link' : 'dasettings', 'agn' : agn } return render(request, 'dasettings/delagencynetwork_content.html', context) @login_required def AddMyAgencyToAgn(request, networkid): agn = AgencyNetwork.objects.filter(networkid=networkid) if len(agn) == 0: messages.info(request, f'Agenturverband nicht gefunden!') return redirect('dasettings') else: context = { 'active_link' : 'dasettings', 'agn' : list(agn)[0] } return render(request, 'dasettings/joinagn_first.html', context) def IsAgencyInAgNetwork(agencyid, agnetworkid): is_in = False agn = AgencyNetwork.objects.get(pk=agnetworkid) agency = Agency.objects.get(pk=agencyid) if agency in agn.adminagencys.all(): is_in = True if agency in agn.members.all(): is_in = True if agency in agn.sharemembers.all(): is_in = True return is_in @login_required def JoinAGN(request, pk): if IsAgencyInAgNetwork(request.user.profile.agency.pk, pk): messages.success(request, f'Ihre Agentur ist bereits in diesem Verbund!') else: agn = AgencyNetwork.objects.get(pk=pk) if(agn.publicjoin): messages.success(request, f'Verbund erfolgreich beigetreten!') agn.members.add(request.user.profile.agency) else: # STATUS # 1 WANTED AG ASKED TO TARGET NETWORK agnp = AgencyNetworkPreperation(target_network=AgencyNetwork.objects.get(pk=pk), wanted_agency=request.user.profile.agency, status=1) agnp.save() messages.success(request, f'Ihre Anfrage zum Beitritt wurde versendet. Sie erhalten eine Information, wenn die Anfrage angenommen wurde!') return redirect('dasettings') @login_required def ManageAgInAgn(request, pk): agn = AgencyNetwork.objects.filter(pk=pk) if len(agn) == 0: messages.info(request, f'Agenturverband nicht gefunden!') return redirect('dasettings') else: network = list(agn)[0] allagofagn = [] for a in network.members.all(): allagofagn.append(a) for a in network.sharemembers.all(): allagofagn.append(a) for a in network.adminagencys.all(): allagofagn.append(a) context = { 'active_link' : 'dasettings', 'agn' : list(agn)[0], 'outstanding': AgencyNetworkPreperation.objects.filter(target_network=list(agn)[0]) , 'allagofagn' : allagofagn } return render(request, 'dasettings/agencynetwork_agmanagement_content.html', context) @login_required def AddAgToNetwork(request, network, targetag, aginvpk): if IsAgencyInAgNetwork(Agency.objects.get(pk=targetag).pk, network): messages.info(request, f'Sie sind bereits in der Agentur!') return redirect('dasettings') else: messages.info(request, f'Einladung angenommen!') agn = AgencyNetwork.objects.get(pk=network) agn.members.add(Agency.objects.get(pk=targetag)) AgencyNetworkPreperation.objects.get(pk=aginvpk).delete() return redirect('managagn', network) @login_required def DelAgInv(request, pk): AgencyNetworkPreperation.objects.get(pk=pk).delete() messages.info(request, f'Einladung abgelehnt!') return redirect('dasettings') @login_required def DelFromAgn(request, agn, ag): return redirect('managagn', agn) @login_required def AgencyNetworkAjaxSettings(request): success = False data = {} if request.method == 'GET' and request.GET['action'] == "remove_ag_from_agn": agency = Agency.objects.get(pk=request.GET['agid']) agencynetwork = AgencyNetwork.objects.get(pk=request.GET['agnid']) if(agency != None and agencynetwork != None): agencynetwork.members.remove(agency) agencynetwork.adminagencys.remove(agency) agencynetwork.sharemembers.remove(agency) success = True elif request.method == 'GET' and request.GET['action'] == "removeinv": AgencyNetworkPreperation.objects.get(pk=request.GET['agn_inv']).delete() success = True elif request.method == 'GET' and request.GET['action'] == "changeagrights": agency = Agency.objects.get(pk=request.GET['agency']) agn = AgencyNetwork.objects.get(pk=request.GET['agnid']) if(agency != None and agn != None): agn.members.remove(agency) agn.adminagencys.remove(agency) agn.sharemembers.remove(agency) if (request.GET['newstatus'] == "0"): agn.members.add(agency) elif (request.GET['newstatus'] == "1"): agn.sharemembers.add(agency) elif (request.GET['newstatus'] == "2"): agn.adminagencys.add(agency) success = True else: success = False return JsonResponse(data) @login_required def ModSettingsOrga(request): if request.method == 'GET' and request.user.has_perm("modulesconfig"): if(request.GET['dynorga'] == "true"): ag = request.user.profile.agency ag.dynamicprofile = True ag.save() else: ag = request.user.profile.agency ag.dynamicprofile = False ag.save() return JsonResponse({}) else: return JsonResponse({}) @login_required def ModSettingsTm(request): if request.method == 'GET' and request.user.has_perm("modulesconfig"): if(request.GET['aze'] == "true"): ag = request.user.profile.agency ag.module_timemanagement_ze = True ag.save() else: ag = request.user.profile.agency ag.module_timemanagement_ze = False ag.save() return JsonResponse({}) else: return JsonResponse({})