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',
|
||||
'ckeditor_uploader',
|
||||
'django.contrib.admin',
|
||||
'mathfilters',
|
||||
'django.contrib.humanize',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
|
|
@ -121,7 +123,7 @@ CKEDITOR_CONFIGS = {
|
|||
}
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
||||
'''
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
|
|
@ -131,16 +133,7 @@ DATABASES = {
|
|||
'PORT' : 3306
|
||||
}
|
||||
}
|
||||
'''
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'NAME' : 'digitaleagentur',
|
||||
'USER' : 'root',
|
||||
'PASSWORD' : '',
|
||||
'PORT' : 3306
|
||||
}
|
||||
}
|
||||
|
||||
# Password validation
|
||||
# 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
|
||||
BOOTSTRAP4 = {
|
||||
'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 .models import Profile, Agency
|
||||
from .models import Profile, Agency, AgencyGroup
|
||||
from .priomodel import Prio
|
||||
|
||||
from django.contrib.auth.models import Permission
|
||||
admin.site.register(Permission)
|
||||
admin.site.register(Profile)
|
||||
admin.site.register(Agency)
|
||||
admin.site.register(Prio)
|
||||
admin.site.register(AgencyGroup)
|
||||
admin.site.register(Prio)
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@ from django.apps import AppConfig
|
|||
class UsersConfig(AppConfig):
|
||||
name = 'users'
|
||||
|
||||
# Hunzufügen der Signals für den User
|
||||
# Hinzufügen der Signals für den User
|
||||
def ready(self):
|
||||
import users.signals
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@ from django.db import models
|
|||
from django.contrib.auth.models import User, AbstractBaseUser
|
||||
from django.conf import settings
|
||||
from PIL import Image
|
||||
|
||||
from django.utils import timezone
|
||||
# MAKE EMAIL UNIQUE
|
||||
from django.contrib.auth.models import AbstractUser, User
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import AbstractUser, User, Group, Permission
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
# 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('last_name').blank = False
|
||||
|
||||
# PATH FOR AGENCYPIC
|
||||
def picturepath_agency(instance, filename):
|
||||
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
||||
return 'agency_{0}/agencystats/{1}'.format(instance.pk, filename)
|
||||
|
||||
|
||||
# PATH FOR PROFILEPICS
|
||||
def picturepath_user(instance, filename):
|
||||
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
|
||||
return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename)
|
||||
|
||||
|
||||
|
||||
'''
|
||||
Class Agency
|
||||
|
|
@ -45,6 +44,10 @@ class Agency(models.Model):
|
|||
phone = models.CharField(default="", max_length=50, 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):
|
||||
return f'{self.name}'
|
||||
|
||||
|
|
@ -105,6 +108,9 @@ class Profile(models.Model):
|
|||
visible = models.BooleanField(default=True)
|
||||
persnumber = models.CharField(default="", max_length=50, blank=True)
|
||||
|
||||
# TOOLTIPPS
|
||||
showtooltips = models.BooleanField(default=True)
|
||||
|
||||
# NOTIFICATIONS
|
||||
#NEWS
|
||||
# Mitteilung bei neuen News innerhalb der Agentur
|
||||
|
|
@ -158,19 +164,32 @@ class Profile(models.Model):
|
|||
else:
|
||||
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:
|
||||
|
||||
permissions = [
|
||||
('agency_change', 'Agenturinformationen verändern'),
|
||||
('users_usermanagement', 'Benutzer bearbeiten'),
|
||||
('areas_management', 'Bereiche bearbeiten'),
|
||||
('tasks_management', 'Aufgabenbereiche bearbeiten'),
|
||||
('standard_management', 'Standards bearbeiten und freischalten'),
|
||||
('news_management', 'News bearbeiten und veröffentlichen'),
|
||||
('ql_management', 'Quicklinks bearbeiten und erstellen')
|
||||
('agency', 'Agenturinformationen verändern'),
|
||||
('users', 'Benutzer bearbeiten'),
|
||||
('group', 'Gruppen bearbeiten'),
|
||||
('areas', 'Bereiche bearbeiten'),
|
||||
('tasks', 'Tätigkeiten bearbeiten'),
|
||||
('standard', 'Standards bearbeiten und freischalten'),
|
||||
('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.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.dispatch import receiver
|
||||
from .models import Profile, Agency
|
||||
from .models import Profile, Agency, AgencyGroup
|
||||
from django.contrib.auth.models import Permission
|
||||
|
||||
|
||||
# SIGNALS FOR USER
|
||||
@receiver(post_save, sender=User)
|
||||
def create_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
|
|
@ -20,9 +20,24 @@ def create_profile(sender, instance, created, **kwargs):
|
|||
for ele in temprof._meta.permissions:
|
||||
tempperm = Permission.objects.get(codename=ele[0])
|
||||
tempuser.user_permissions.add(tempperm)
|
||||
tempuser.profile.func = 'lead'
|
||||
#tempuser.profile.func = 'lead'
|
||||
tempuser.save()
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
.default_content_style {
|
||||
margin-left: 212px !important;
|
||||
}
|
||||
|
|
@ -191,5 +192,4 @@ right connector from last child*/
|
|||
}
|
||||
|
||||
/*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/custom.css' %}" rel="stylesheet">
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- Page Wrapper -->
|
||||
|
|
@ -374,7 +373,17 @@
|
|||
<!--<script src="js/demo/chart-pie-demo.js"></script>-->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
{% if request.user.profile.showtooltips %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
|
||||
function clearSF(){
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ class AgencyUpdateForm(forms.ModelForm):
|
|||
print("no photo")
|
||||
|
||||
|
||||
|
||||
######################## USERSPERMFORM LÖSCHEN WEIL IN AGENCYGROUP ################################
|
||||
# PERMISSION USER 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]))
|
||||
else:
|
||||
self.fields[ele[0]] = forms.BooleanField(required=False, initial=False, help_text=(ele[1]))
|
||||
|
||||
|
||||
class UserAreaTaskForm(forms.Form):
|
||||
def __init__(self, user, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
|||
|
|
@ -20,12 +20,21 @@ from django.utils import formats
|
|||
from news.models import News
|
||||
import requests
|
||||
import json
|
||||
import random
|
||||
import string
|
||||
from PIL import Image
|
||||
from django.template.loader import render_to_string
|
||||
from django.contrib.auth.forms import PasswordResetForm
|
||||
from django.template.loader import render_to_string
|
||||
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
|
||||
def toUpdate(request):
|
||||
|
|
@ -46,6 +55,40 @@ def toUpdate(request):
|
|||
tempAgencyJob = AgencyJob(name=ele, agency=request.user.profile.agency)
|
||||
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