Tootips angefangen, Model fertig aber fehlen noch fast überalle, Gruppen fertig inkl. Rechte, fehlt noch Benutzer hinzufügen
This commit is contained in:
parent
04cc3802f5
commit
77a604f5be
Binary file not shown.
|
|
@ -46,6 +46,8 @@ INSTALLED_APPS = [
|
||||||
'django_summernote',
|
'django_summernote',
|
||||||
'ckeditor_uploader',
|
'ckeditor_uploader',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
|
'mathfilters',
|
||||||
|
'django.contrib.humanize',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
|
|
@ -121,7 +123,7 @@ CKEDITOR_CONFIGS = {
|
||||||
}
|
}
|
||||||
# Database
|
# Database
|
||||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
||||||
'''
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.mysql',
|
'ENGINE': 'django.db.backends.mysql',
|
||||||
|
|
@ -131,16 +133,7 @@ DATABASES = {
|
||||||
'PORT' : 3306
|
'PORT' : 3306
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'''
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.mysql',
|
|
||||||
'NAME' : 'digitaleagentur',
|
|
||||||
'USER' : 'root',
|
|
||||||
'PASSWORD' : '',
|
|
||||||
'PORT' : 3306
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# Password validation
|
# Password validation
|
||||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
|
@ -217,3 +210,9 @@ DEFAULT_FROM_EMAIL = "support@digitale-agentur.com"
|
||||||
BOOTSTRAP4 = {
|
BOOTSTRAP4 = {
|
||||||
'include_jquery': True,
|
'include_jquery': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OPTIONS={
|
||||||
|
'libraries': {
|
||||||
|
'counter_tag': 'standards.tags',
|
||||||
|
},
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,7 +1,10 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from .models import Profile, Agency
|
from .models import Profile, Agency, AgencyGroup
|
||||||
from .priomodel import Prio
|
from .priomodel import Prio
|
||||||
|
from django.contrib.auth.models import Permission
|
||||||
|
admin.site.register(Permission)
|
||||||
admin.site.register(Profile)
|
admin.site.register(Profile)
|
||||||
admin.site.register(Agency)
|
admin.site.register(Agency)
|
||||||
|
admin.site.register(AgencyGroup)
|
||||||
admin.site.register(Prio)
|
admin.site.register(Prio)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,6 @@ from django.apps import AppConfig
|
||||||
class UsersConfig(AppConfig):
|
class UsersConfig(AppConfig):
|
||||||
name = 'users'
|
name = 'users'
|
||||||
|
|
||||||
# Hunzufügen der Signals für den User
|
# Hinzufügen der Signals für den User
|
||||||
def ready(self):
|
def ready(self):
|
||||||
import users.signals
|
import users.signals
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ from django.db import models
|
||||||
from django.contrib.auth.models import User, AbstractBaseUser
|
from django.contrib.auth.models import User, AbstractBaseUser
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from django.utils import timezone
|
||||||
# MAKE EMAIL UNIQUE
|
# MAKE EMAIL UNIQUE
|
||||||
from django.contrib.auth.models import AbstractUser, User
|
from django.contrib.auth.models import AbstractUser, User, Group, Permission
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
|
|
||||||
# UNIQUE and NO BLANK fields while user-registration
|
# UNIQUE and NO BLANK fields while user-registration
|
||||||
|
|
@ -14,17 +14,16 @@ User._meta.get_field('email').blank = False
|
||||||
User._meta.get_field('first_name').blank = False
|
User._meta.get_field('first_name').blank = False
|
||||||
User._meta.get_field('last_name').blank = False
|
User._meta.get_field('last_name').blank = False
|
||||||
|
|
||||||
|
# PATH FOR AGENCYPIC
|
||||||
def picturepath_agency(instance, filename):
|
def picturepath_agency(instance, filename):
|
||||||
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
||||||
return 'agency_{0}/agencystats/{1}'.format(instance.pk, filename)
|
return 'agency_{0}/agencystats/{1}'.format(instance.pk, filename)
|
||||||
|
|
||||||
|
# PATH FOR PROFILEPICS
|
||||||
def picturepath_user(instance, filename):
|
def picturepath_user(instance, filename):
|
||||||
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
||||||
return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename)
|
return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Class Agency
|
Class Agency
|
||||||
|
|
||||||
|
|
@ -45,6 +44,10 @@ class Agency(models.Model):
|
||||||
phone = models.CharField(default="", max_length=50, blank=True)
|
phone = models.CharField(default="", max_length=50, blank=True)
|
||||||
agencypic = models.ImageField(default='agencymain/default.jpg', upload_to=picturepath_agency, blank=True)
|
agencypic = models.ImageField(default='agencymain/default.jpg', upload_to=picturepath_agency, blank=True)
|
||||||
|
|
||||||
|
# MONEY
|
||||||
|
balance = models.FloatField(default=0.0, max_length=9, blank=True)
|
||||||
|
nextdebiting = models.DateTimeField(default=timezone.now, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'{self.name}'
|
return f'{self.name}'
|
||||||
|
|
||||||
|
|
@ -105,6 +108,9 @@ class Profile(models.Model):
|
||||||
visible = models.BooleanField(default=True)
|
visible = models.BooleanField(default=True)
|
||||||
persnumber = models.CharField(default="", max_length=50, blank=True)
|
persnumber = models.CharField(default="", max_length=50, blank=True)
|
||||||
|
|
||||||
|
# TOOLTIPPS
|
||||||
|
showtooltips = models.BooleanField(default=True)
|
||||||
|
|
||||||
# NOTIFICATIONS
|
# NOTIFICATIONS
|
||||||
#NEWS
|
#NEWS
|
||||||
# Mitteilung bei neuen News innerhalb der Agentur
|
# Mitteilung bei neuen News innerhalb der Agentur
|
||||||
|
|
@ -158,19 +164,32 @@ class Profile(models.Model):
|
||||||
else:
|
else:
|
||||||
return "/media/userprofilepics/default.jpg"
|
return "/media/userprofilepics/default.jpg"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
CLASS AgencyGroup
|
||||||
|
|
||||||
|
Hier werden die Gruppen mit der Agency verbunden
|
||||||
|
|
||||||
|
'''
|
||||||
|
class AgencyGroup(models.Model):
|
||||||
|
group = models.OneToOneField(Group, on_delete=models.CASCADE)
|
||||||
|
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
|
||||||
|
agencygroupname = models.CharField(max_length=60, blank=True)
|
||||||
|
savefordel = models.BooleanField(default=False)
|
||||||
|
|
||||||
# PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert!
|
# PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert!
|
||||||
# Im template: if perms.users.PERMISSION
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
||||||
permissions = [
|
permissions = [
|
||||||
('agency_change', 'Agenturinformationen verändern'),
|
('agency', 'Agenturinformationen verändern'),
|
||||||
('users_usermanagement', 'Benutzer bearbeiten'),
|
('users', 'Benutzer bearbeiten'),
|
||||||
('areas_management', 'Bereiche bearbeiten'),
|
('group', 'Gruppen bearbeiten'),
|
||||||
('tasks_management', 'Aufgabenbereiche bearbeiten'),
|
('areas', 'Bereiche bearbeiten'),
|
||||||
('standard_management', 'Standards bearbeiten und freischalten'),
|
('tasks', 'Tätigkeiten bearbeiten'),
|
||||||
('news_management', 'News bearbeiten und veröffentlichen'),
|
('standard', 'Standards bearbeiten und freischalten'),
|
||||||
('ql_management', 'Quicklinks bearbeiten und erstellen')
|
('news', 'News bearbeiten und veröffentlichen'),
|
||||||
|
('quciklinks', 'Quicklinks bearbeiten und erstellen')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
from django.db.models.signals import post_save, pre_delete
|
from django.db.models.signals import post_save, pre_delete
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User, Group
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from .models import Profile, Agency
|
from .models import Profile, Agency, AgencyGroup
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
|
|
||||||
|
# SIGNALS FOR USER
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=User)
|
||||||
def create_profile(sender, instance, created, **kwargs):
|
def create_profile(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
|
|
@ -20,9 +20,24 @@ def create_profile(sender, instance, created, **kwargs):
|
||||||
for ele in temprof._meta.permissions:
|
for ele in temprof._meta.permissions:
|
||||||
tempperm = Permission.objects.get(codename=ele[0])
|
tempperm = Permission.objects.get(codename=ele[0])
|
||||||
tempuser.user_permissions.add(tempperm)
|
tempuser.user_permissions.add(tempperm)
|
||||||
tempuser.profile.func = 'lead'
|
#tempuser.profile.func = 'lead'
|
||||||
tempuser.save()
|
tempuser.save()
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=User)
|
||||||
def save_profile(sender, instance, **kwargs):
|
def save_profile(sender, instance, **kwargs):
|
||||||
instance.profile.save()
|
instance.profile.save()
|
||||||
|
|
||||||
|
|
||||||
|
# SIGNALS FOR GROUPS
|
||||||
|
'''
|
||||||
|
@receiver(post_save, sender=Group)
|
||||||
|
def create_group(sender, instance, created, **kwargs):
|
||||||
|
print("NEW GROUP SIGNAL")
|
||||||
|
if created:
|
||||||
|
AgencyGroup.objects.create(group=instance, agency=instance.agency)
|
||||||
|
|
||||||
|
@receiver(post_save, sender=Group)
|
||||||
|
def save_group(sender, instance, **kwargs):
|
||||||
|
print("GROUP SAVED SIGNAL")
|
||||||
|
#instance.group.save()
|
||||||
|
'''
|
||||||
|
|
@ -67,6 +67,7 @@ body{
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.default_content_style {
|
.default_content_style {
|
||||||
margin-left: 212px !important;
|
margin-left: 212px !important;
|
||||||
}
|
}
|
||||||
|
|
@ -192,4 +193,3 @@ right connector from last child*/
|
||||||
|
|
||||||
/*Thats all. I hope you enjoyed it.
|
/*Thats all. I hope you enjoyed it.
|
||||||
Thanks :)*/
|
Thanks :)*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,6 @@
|
||||||
<link href="{% static 'users/css/theme.css' %}" rel="stylesheet">
|
<link href="{% static 'users/css/theme.css' %}" rel="stylesheet">
|
||||||
<link href="{% static 'users/css/custom.css' %}" rel="stylesheet">
|
<link href="{% static 'users/css/custom.css' %}" rel="stylesheet">
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Page Wrapper -->
|
<!-- Page Wrapper -->
|
||||||
|
|
@ -374,7 +373,17 @@
|
||||||
<!--<script src="js/demo/chart-pie-demo.js"></script>-->
|
<!--<script src="js/demo/chart-pie-demo.js"></script>-->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
{% if request.user.profile.showtooltips %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('[data-toggle="tooltip"]').tooltip()
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function clearSF(){
|
function clearSF(){
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ class AgencyUpdateForm(forms.ModelForm):
|
||||||
print("no photo")
|
print("no photo")
|
||||||
|
|
||||||
|
|
||||||
|
######################## USERSPERMFORM LÖSCHEN WEIL IN AGENCYGROUP ################################
|
||||||
# PERMISSION USER FORM
|
# PERMISSION USER FORM
|
||||||
class UsersPermForm(forms.Form):
|
class UsersPermForm(forms.Form):
|
||||||
'''
|
'''
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,21 @@ from django.utils import formats
|
||||||
from news.models import News
|
from news.models import News
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
import random
|
||||||
|
import string
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.contrib.auth.forms import PasswordResetForm
|
from django.contrib.auth.forms import PasswordResetForm
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from users.models import AgencyJob
|
from users.models import AgencyJob, AgencyGroup
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
|
||||||
|
|
||||||
|
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
|
@login_required
|
||||||
def toUpdate(request):
|
def toUpdate(request):
|
||||||
|
|
@ -46,6 +55,40 @@ def toUpdate(request):
|
||||||
tempAgencyJob = AgencyJob(name=ele, agency=request.user.profile.agency)
|
tempAgencyJob = AgencyJob(name=ele, agency=request.user.profile.agency)
|
||||||
tempAgencyJob.save()
|
tempAgencyJob.save()
|
||||||
|
|
||||||
|
agencygroups = AgencyGroup.objects.filter(agency__pk=request.user.profile.agency.pk)
|
||||||
|
if(len(agencygroups) == 0):
|
||||||
|
print("default groups not existing - creating")
|
||||||
|
# MITARBEITER
|
||||||
|
letters = string.ascii_lowercase
|
||||||
|
temgroup_mitarbeiter = Group(name=str(request.user.profile.agency.pk) + "_" + randomString(8))
|
||||||
|
temgroup_mitarbeiter.save()
|
||||||
|
temgroup_mitarbeiter_ag = AgencyGroup(savefordel=True, group=temgroup_mitarbeiter, agency=request.user.profile.agency, agencygroupname="Mitarbeiter")
|
||||||
|
temgroup_mitarbeiter_ag.save()
|
||||||
|
|
||||||
|
# VERWALTUNG
|
||||||
|
temgroup_verwaltung = Group(name=str(request.user.profile.agency.pk) + "_" + randomString(8))
|
||||||
|
temgroup_verwaltung.save()
|
||||||
|
temgroup_verwaltung_ag = AgencyGroup(savefordel=True, group=temgroup_verwaltung, agency=request.user.profile.agency, agencygroupname="Verwaltung")
|
||||||
|
temgroup_verwaltung_ag.save()
|
||||||
|
print("default groups created...adding users...")
|
||||||
|
users_of_agency = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk)
|
||||||
|
for user in users_of_agency:
|
||||||
|
print(temgroup_verwaltung_ag)
|
||||||
|
print(temgroup_verwaltung_ag.group)
|
||||||
|
temgroup_verwaltung_ag.group.user_set.add(user)
|
||||||
|
temgroup_mitarbeiter_ag.group.user_set.add(user)
|
||||||
|
|
||||||
|
# ADDING ALL RIGHTS TO GROUP "VERWALTUNG"
|
||||||
|
perms = AgencyGroup._meta.permissions
|
||||||
|
for p in perms:
|
||||||
|
tempperm = Permission.objects.get(codename=p[0])
|
||||||
|
temgroup_verwaltung_ag.group.permissions.add(tempperm)
|
||||||
|
|
||||||
|
|
||||||
|
print("default groups created and users added")
|
||||||
|
else:
|
||||||
|
print("default groups existing")
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue