digitaleagenturnc/dasettings/views.py

1295 lines
49 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, AbsenceReasonForm
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, UserYearAbsenceInfo
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
import datetime
from datetime import date
from standards.models import Standards
from timemanagement.models import AbsenceReason, FreeDays
from django.core.mail import send_mail
from django.conf import settings
import re, os, csv, requests
from django.templatetags.static import static
from django.db.models import DateField
from django.views.generic import DeleteView, UpdateView
from timemanagement.forms import AddFreeDayForm
from django.urls import reverse_lazy
import re
import json
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).order_by("last_name")
return context
'''
Lädt die Formulare für die einzelnen Einstellungen vollständig
'''
@login_required
def DASettings(request):
# CHECK FOR EVERY USER YEAR-DATA
uina = User.objects.filter(profile__agency=request.user.profile.agency)
today = date.today()
for u in uina:
# NO YEARS FOUND
if len(UserYearAbsenceInfo.objects.filter(agency=request.user.profile.agency, user=u)) == 0:
# CREATE DATA FOR EVERY USER
UserYearAbsenceInfo(agency=request.user.profile.agency, user=u, year=today.year).save()
UserYearAbsenceInfo(agency=request.user.profile.agency, user=u, year=today.year+1).save()
UserYearAbsenceInfo(agency=request.user.profile.agency, user=u, year=today.year+2).save()
# CREATE DATE FOR YEAR PLUS 2
#elif len(UserYearAbsenceInfo.objects.filter(agency=user.profile.agency, year=today.year+2)) == 0:
# uina = User.objects.filter(profile__agency=user.profile.agency)
#
# for u in uina:
# UserYearAbsenceInfo(agency=user.profile.agency, user=u, year=today.year+2).save()
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)
from django.db.models import F, Func, Value
@login_required
def FreeDaysManagemenet(request, initload=0):
if(initload==1):
context = {
'active_link' : 'dasettings',
'init_freedays' : True
}
return render(request, 'dasettings/freedays_management.html', context)
else:
context = {
'active_link' : 'dasettings',
'freedays' : FreeDays.objects.filter(agency=request.user.profile.agency).order_by("-day")
}
return render(request, 'dasettings/freedays_management.html', context)
@login_required
def FreeDayAdd(request):
if request.POST:
freedayform = AddFreeDayForm(request.POST, instance=request.user.profile.agency)
if freedayform.is_valid():
fd = FreeDays(agency=request.user.profile.agency, day=freedayform.cleaned_data['day'], year=freedayform.cleaned_data['day'].year, name=freedayform.cleaned_data['name']).save()
messages.success(request, f'Freier Tag hinzugefügt')
context = {
"active_link" : "dasettings",
}
return redirect("tm-managemenetfreedays")
else:
messages.success(request, f'Fehler beim hinzufügen!')
return redirect("tm-managemenetfreedays")
else:
context = {
"active_link" : "dasettings",
"form" : AddFreeDayForm()
}
return render(request, 'dasettings/freedays_add.html', context)
class FreeDayDeleteView(LoginRequiredMixin, DeleteView):
model = FreeDays
success_url = reverse_lazy('tm-managemenetfreedays')
template_name = 'dasettings/freedays_confirm_delete.html'
def delete(self, request, *args, **kwargs):
response = super(FreeDayDeleteView, self).delete(request, *args, **kwargs)
messages.success(request, f'Freier Tag wurde gelöscht!')
return response
def get_context_data(self, **kwargs):
context = super(FreeDayDeleteView, self).get_context_data(**kwargs)
context['active_link'] = 'dasettings'
return context
class AbsenceReasonDeleteView(LoginRequiredMixin, DeleteView):
model = AbsenceReason
success_url = reverse_lazy('dasettings')
template_name = 'dasettings/absencereason_confirm_delete.html'
def delete(self, request, *args, **kwargs):
response = super(AbsenceReasonDeleteView, self).delete(request, *args, **kwargs)
messages.success(request, f'Abwesenheitskategorie wurde gelöscht!')
return response
def get_context_data(self, **kwargs):
context = super(AbsenceReasonDeleteView, self).get_context_data(**kwargs)
context['active_link'] = 'dasettings'
return context
class AbsenceReasonAddView(LoginRequiredMixin, CreateView):
model = AbsenceReason
success_url = reverse_lazy('dasettings')
form_class = AbsenceReasonForm
template_name = 'dasettings/absencereason_add.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'dasettings'})
return context
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Abwesenheitskategorie angelegt!')
form.instance.color = form.cleaned_data["rgb_color"]
# SAVE OBJECTS TO SIGNALE!
form.instance.agency = self.request.user.profile.agency
return super().form_valid(form)
class AbsenceReasonUpdateView(LoginRequiredMixin, UpdateView):
model = AbsenceReason
template_name = 'dasettings/absencereason_update.html'
success_url = reverse_lazy('dasettings')
form_class = AbsenceReasonForm
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Abwesenheitskategorie aktualisiert!')
self.object.color = form.cleaned_data["rgb_color"]
self.object.save()
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super(AbsenceReasonUpdateView, self).get_context_data(**kwargs)
context['active_link'] = 'dasettings'
return 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
if(request.user.has_perm("users.modulesconfig")):
FreeDays.objects.filter(agency=request.user.profile.agency).delete()
ag.save()
temp_freedays = FreeDays.objects.filter(agency=request.user.profile.agency)
if(request.user.profile.agency.module_timemanagement and len(temp_freedays) == 0):
messages.success(request, f'Moduleinstellungen aktualisiert! Bitte prüfen Sie Ihre Feiertagseinstellungen')
return redirect('tm-initload', 1)
else:
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
# UPDATE FREEDAYS
elif request.method == 'GET' and request.GET['action'] == "initloadfreedays" :
if(request.user.has_perm('users.modulesconfig')):
temp_freedays = FreeDays.objects.filter(agency=request.user.profile.agency)
if(len(temp_freedays) == 0):
tempdays_thisyear = loadingFreeDays(request.user.profile.agency.plz, date.today().year)
tempdays_lastyear = loadingFreeDays(request.user.profile.agency.plz, date.today().year - 1)
tempdays_nextyear = loadingFreeDays(request.user.profile.agency.plz, date.today().year + 1)
if(tempdays_thisyear != False):
for k in tempdays_lastyear.keys():
tempdate = tempdays_lastyear[k]["datum"].split("-")
FreeDays(agency=request.user.profile.agency, name=k, day=datetime.datetime(int(tempdate[0]),int(tempdate[1]),int(tempdate[2])), year=date.today().year-1).save()
for k in tempdays_thisyear.keys():
tempdate = tempdays_thisyear[k]["datum"].split("-")
FreeDays(agency=request.user.profile.agency, name=k, day=datetime.datetime(int(tempdate[0]),int(tempdate[1]),int(tempdate[2])), year=date.today().year).save()
for k in tempdays_nextyear.keys():
tempdate = tempdays_nextyear[k]["datum"].split("-")
FreeDays(agency=request.user.profile.agency, name=k, day=datetime.datetime(int(tempdate[0]),int(tempdate[1]),int(tempdate[2])), year=date.today().year+1).save()
messages.success(request, f'Feiertage erfolgreich gespeichert!')
success = True
else:
success = False
else:
data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name}
success = False
# LOAD MULTIPLE FREEDAYS
elif request.method == 'GET' and request.GET['action'] == "initloadfreedaysmulti" :
if(request.user.has_perm('users.modulesconfig')):
#tempdays_year = False
if(request.GET["land"] == "true"):
tempdays_year = loadingFreeDaysMulti(request.user.profile.agency.plz, request.GET["year"], True)
if(tempdays_year != False):
for k in tempdays_year.keys():
tempdate = tempdays_year[k].split("-")
FreeDays(agency=request.user.profile.agency, name=k, day=datetime.datetime(int(tempdate[0]),int(tempdate[1]),int(tempdate[2])), year=int(request.GET["year"])).save()
messages.success(request, f'Feiertage erfolgreich gespeichert!')
success = True
else:
success = False
else:
tempdays_year = loadingFreeDaysMulti(request.user.profile.agency.plz, request.GET["year"], False)
if(tempdays_year != False):
for k in tempdays_year.keys():
tempdate = tempdays_year[k]["datum"].split("-")
FreeDays(agency=request.user.profile.agency, name=k, day=datetime.datetime(int(tempdate[0]),int(tempdate[1]),int(tempdate[2])), year=int(request.GET["year"])).save()
messages.success(request, f'Feiertage erfolgreich gespeichert!')
success = True
else:
success = False
else:
data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name}
success = False
# DELETE ALL FREE DAYS
elif request.method == 'GET' and request.GET['action'] == "delallfreedays" :
if(request.user.has_perm('users.modulesconfig')):
FreeDays.objects.filter(agency=request.user.profile.agency).delete()
messages.success(request, f'Feiertage erfolgreich entfernt!')
success = True
else:
data = {"userfullname" : tempuser.first_name + " " + tempuser.last_name}
success = False
#return render(request, 'dasettings/change_absence_yeardata.html', context)
# HOLIDAYS UPDATE
elif request.method == 'GET' and request.GET['action'] == "update_holidays" :
context = {
"user_years" : UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])),
}
return render(request, 'dasettings/change_absence_yeardata.html', context)
# UPDATE HOLIDAYS SAVE
elif request.method == 'GET' and request.GET['action'] == "update_holidays_save" :
# GET ELEMENTS
newHolidayData = request.GET["new_data_info"].split("___")
# EVERY ELEMENT GET ID AND SAVE NEW DAY-INFO
for ele in newHolidayData:
ele_elements = ele.split("__")
if(len(ele_elements) == 2):
ele_id = ele_elements[0].split("_")[3]
ele_type = ele_elements[0].split("_")[2]
temp_year = UserYearAbsenceInfo.objects.get(pk=ele_id, agency=request.user.profile.agency)
if(ele_type == "nor"):
temp_year.days = ele_elements[1]
elif(ele_type == "rest"):
temp_year.restdays = ele_elements[1]
temp_year.save()
context = {
"user_years" : UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])),
}
return render(request, 'dasettings/data_absence_yeardata.html', context)
else:
success = False
return JsonResponse({"success" : success, "data" : data})
def loadingFreeDays(plz, year):
# Getting land
file_path = os.path.join(settings.STATIC_ROOT, 'users/extra/plz_short.csv')
land = False
with open(file_path, 'rt') as csvfile:
filecsv = csv.reader(csvfile, delimiter=';')
for row in filecsv:
if str(row[1]) == str(plz):
land = row[6]
break;
if(land != False):
URL = "https://feiertage-api.de/api/"
PARAMS = {'jahr':year,'nur_land':land}
r = requests.get(url = URL, params = PARAMS)
return r.json()
else:
return False
def loadingFreeDaysMulti(plz, year, onlyland):
# Getting land
file_path = os.path.join(settings.STATIC_ROOT, 'users/extra/plz_short.csv')
if(onlyland == False):
land = False
with open(file_path, 'rt') as csvfile:
filecsv = csv.reader(csvfile, delimiter=';')
for row in filecsv:
if str(row[1]) == str(plz):
land = row[6]
break;
URL = "https://feiertage-api.de/api/"
PARAMS = {'jahr':year,'nur_land':land}
r = requests.get(url = URL, params = PARAMS)
return r.json()
elif(onlyland == True):
URL = "https://feiertage-api.de/api/"
PARAMS = {'jahr':year,'nur_daten':1}
r = requests.get(url = URL, params = PARAMS)
return r.json()
else:
return False
'''
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)),
'user_years' : UserYearAbsenceInfo.objects.filter(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()):
# CHECK IF HOLIDAYS_LOOSE IS CORRECT
if(not re.match(r"^([1-9]{1}|0[0-9]{1}|1[0-9]{1}|2[0-9]{1}|3[0-1]{1}).([1-9]{1}|0[0-9]{1}|1[0-2]{1}).$", formtosave.cleaned_data["loose_holidedate"])):
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)),
'user_years' : UserYearAbsenceInfo.objects.filter(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:
# TRY TO CREATE DATE
date = formtosave.cleaned_data["loose_holidedate"].split(".")
try:
datetime.date(int(2020), int(date[1]), int(date[0]))
messages.success(request, f'Vertragsdaten gespeichert!')
formtosave.save()
return redirect('dasettings')
except:
messages.success(request, f'Fehlerhafte Eingabe! Das Verfallsdatum der Urlaubstage liegt außerhalb des Monats.')
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)),
'user_years' : UserYearAbsenceInfo.objects.filter(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:
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)),
'user_years' : UserYearAbsenceInfo.objects.filter(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)),
'user_years' : UserYearAbsenceInfo.objects.filter(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!')
today = date.today()
UserYearAbsenceInfo(agency=request.user.profile.agency, user=newuser, year=today.year).save()
UserYearAbsenceInfo(agency=request.user.profile.agency, user=newuser, year=today.year+1).save()
UserYearAbsenceInfo(agency=request.user.profile.agency, user=newuser, year=today.year+2).save()
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({})