diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index c5b95d1..9cf97d1 100644 Binary files a/digitaleagentur/__pycache__/settings.cpython-38.pyc and b/digitaleagentur/__pycache__/settings.cpython-38.pyc differ diff --git a/digitaleagentur/settings.py b/digitaleagentur/settings.py index 2eb2a09..2f4ae1a 100644 --- a/digitaleagentur/settings.py +++ b/digitaleagentur/settings.py @@ -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', + }, } \ No newline at end of file diff --git a/standards/__pycache__/views.cpython-38.pyc b/standards/__pycache__/views.cpython-38.pyc index a2913bf..f26de1d 100644 Binary files a/standards/__pycache__/views.cpython-38.pyc and b/standards/__pycache__/views.cpython-38.pyc differ diff --git a/users/__pycache__/admin.cpython-38.pyc b/users/__pycache__/admin.cpython-38.pyc index 407ba3c..9455fd4 100644 Binary files a/users/__pycache__/admin.cpython-38.pyc and b/users/__pycache__/admin.cpython-38.pyc differ diff --git a/users/__pycache__/apps.cpython-38.pyc b/users/__pycache__/apps.cpython-38.pyc index cea3da8..d2b2e8e 100644 Binary files a/users/__pycache__/apps.cpython-38.pyc and b/users/__pycache__/apps.cpython-38.pyc differ diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index f263358..3461887 100644 Binary files a/users/__pycache__/models.cpython-38.pyc and b/users/__pycache__/models.cpython-38.pyc differ diff --git a/users/__pycache__/signals.cpython-38.pyc b/users/__pycache__/signals.cpython-38.pyc index b6b447c..183ce7c 100644 Binary files a/users/__pycache__/signals.cpython-38.pyc and b/users/__pycache__/signals.cpython-38.pyc differ diff --git a/users/__pycache__/usersforms.cpython-38.pyc b/users/__pycache__/usersforms.cpython-38.pyc index f0a65f4..880d476 100644 Binary files a/users/__pycache__/usersforms.cpython-38.pyc and b/users/__pycache__/usersforms.cpython-38.pyc differ diff --git a/users/__pycache__/views.cpython-38.pyc b/users/__pycache__/views.cpython-38.pyc index 2855e95..c13658f 100644 Binary files a/users/__pycache__/views.cpython-38.pyc and b/users/__pycache__/views.cpython-38.pyc differ diff --git a/users/admin.py b/users/admin.py index e436278..482ccba 100644 --- a/users/admin.py +++ b/users/admin.py @@ -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) \ No newline at end of file +admin.site.register(AgencyGroup) +admin.site.register(Prio) + diff --git a/users/apps.py b/users/apps.py index 95b3cd3..1f60ff9 100644 --- a/users/apps.py +++ b/users/apps.py @@ -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 diff --git a/users/models.py b/users/models.py index 9a31a4c..e36997b 100644 --- a/users/models.py +++ b/users/models.py @@ -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_// 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_// 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') ] - - - diff --git a/users/signals.py b/users/signals.py index 52d51a9..daabba0 100644 --- a/users/signals.py +++ b/users/signals.py @@ -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() \ No newline at end of file + 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() +''' \ No newline at end of file diff --git a/users/static/users/css/custom.css b/users/static/users/css/custom.css index e3f5710..8d918c4 100644 --- a/users/static/users/css/custom.css +++ b/users/static/users/css/custom.css @@ -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 :)*/ \ No newline at end of file diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 68906d7..464c87f 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -44,7 +44,6 @@ - @@ -374,7 +373,17 @@ + +{% if request.user.profile.showtooltips %} +{% endif %} + +