Tootips angefangen, Model fertig aber fehlen noch fast überalle, Gruppen fertig inkl. Rechte, fehlt noch Benutzer hinzufügen

This commit is contained in:
holger.trampe 2020-02-08 00:50:06 +01:00
parent 04cc3802f5
commit 77a604f5be
17 changed files with 132 additions and 44 deletions

View File

@ -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
@ -216,4 +209,10 @@ DEFAULT_FROM_EMAIL = "support@digitale-agentur.com"
# FOR DATEPICKER # FOR DATEPICKER
BOOTSTRAP4 = { BOOTSTRAP4 = {
'include_jquery': True, 'include_jquery': True,
}
OPTIONS={
'libraries': {
'counter_tag': 'standards.tags',
},
} }

View File

@ -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(Prio) admin.site.register(AgencyGroup)
admin.site.register(Prio)

View File

@ -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

View File

@ -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,16 +14,15 @@ 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"
# PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert!
# Im template: if perms.users.PERMISSION
'''
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!
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')
] ]

View File

@ -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()
'''

View File

@ -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;
} }
@ -191,5 +192,4 @@ right connector from last child*/
} }
/*Thats all. I hope you enjoyed it. /*Thats all. I hope you enjoyed it.
Thanks :)*/ Thanks :)*/

View File

@ -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(){

View File

@ -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):
''' '''
@ -122,7 +122,7 @@ class UsersPermForm(forms.Form):
self.fields[ele[0]] = forms.BooleanField(required=False, initial=True, help_text=(ele[1])) self.fields[ele[0]] = forms.BooleanField(required=False, initial=True, help_text=(ele[1]))
else: else:
self.fields[ele[0]] = forms.BooleanField(required=False, initial=False, help_text=(ele[1])) self.fields[ele[0]] = forms.BooleanField(required=False, initial=False, help_text=(ele[1]))
class UserAreaTaskForm(forms.Form): class UserAreaTaskForm(forms.Form):
def __init__(self, user, *args, **kwargs): def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View File

@ -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")
''' '''