937 lines
35 KiB
Python
937 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('users.standardmanager')):
|
|
for s in tempstandards:
|
|
s.area = None
|
|
s.task = None
|
|
s.public = False
|
|
s.save()
|
|
|
|
tasks = Tasks.objects.filter(agency=request.user.profile.agency, area=todelarea).delete()
|
|
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('users.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('users.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('users.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.',
|
|
'noreply@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("users.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("users.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({})
|