digitaleagenturnc/dasettings/views.py

936 lines
35 KiB
Python

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").order_by("-savefordel")
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()
# Check, if Timemanagement is deactivate, to deactivate Zeiterfassung
if(request.user.profile.agency.module_timemanagement == False):
ag = request.user.profile.agency
ag.module_timemanagement_ze = False
ag.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" :
todelarea = Areas.objects.get(pk=request.GET['id'], agency=request.user.profile.agency)
# REMOVE STANDARDS AREA
tempstandards = Standards.objects.filter(agency=request.user.profile.agency, area=todelarea)
if(request.user.has_perm('standardmanager')):
for s in tempstandards:
s.area = None
s.task = None
s.public = False
s.save()
todelarea.delete()
success = True
else:
success = False
# 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" :
todeltask = Tasks.objects.get(pk=request.GET['id'], agency=request.user.profile.agency)
# REMOVE STANDARDS AREA
tempstandards = Standards.objects.filter(agency=request.user.profile.agency, task=todeltask)
if(request.user.has_perm('standardmanager')):
for s in tempstandards:
s.task = None
s.public = False
s.save()
todeltask.delete()
success = True
else:
success = False
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:
usertime = ""
try:
usertime = UserTimeForm(instance=UserTime.objects.get(user=usertochange))
except:
usertime = UserTime(user=usertochange)
usertime.save()
usertime = UserTimeForm(instance=UserTime.objects.get(user=usertochange))
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=True,
)
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({})