News-Zugriff auf Dashboard mit Buttons bei Recht beschränkt; Neue Nutzer können nun angelegt werden mit 2-Schritt-Logik, fehlt noch das Ändern der Stammdaten. Cropper und Drehung bei Profilbild eingebaut; Pfad der Dateien auf Agentur-ID umgebaut, um es nachher besser mit der Git-Ignore zu verwalten.

This commit is contained in:
holger.trampe 2020-02-10 23:04:18 +01:00
parent 14cd82e4dd
commit b3f4808cb6
23 changed files with 60 additions and 72 deletions

View File

@ -8,7 +8,7 @@ from django.utils import timezone
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/agency_<id>/files/<subdirs>/<filename>
return 'agency_{0}/files/{1}/{2}'.format(instance.agency.pk, instance.subdir, filename)
return 'agencydata/agency_{0}/files/{1}/{2}'.format(instance.agency.pk, instance.subdir, filename)
class Data(models.Model):

View File

@ -1,8 +0,0 @@
3D-Druck
+ Gute Struktur
+ Shortucts
+ Planemodellierung - Als VIdeo noch ein
HTML
- Erweiterten Kurs

View File

@ -1,8 +0,0 @@
3D-Druck
+ Gute Struktur
+ Shortucts
+ Planemodellierung - Als VIdeo noch ein
HTML
- Erweiterten Kurs

View File

@ -1,8 +0,0 @@
3D-Druck
+ Gute Struktur
+ Shortucts
+ Planemodellierung - Als VIdeo noch ein
HTML
- Erweiterten Kurs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -9,7 +9,7 @@
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'news-add' %} ">News anlegen</a>
<a class="btn btn-primary" href="{% url 'news-add' %} " data-toggle="tooltip" data-placement="top" title="Neue News für Ihre Agentur erstellen"><i class="fas fa-plus"></i>&nbsp;News</a>
</div>
</div>
<hr>

View File

@ -21,7 +21,7 @@ class NewsManagement(LoginRequiredMixin, ListView):
news = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_online_on__lt=filterdate).filter(go_offline_on__gt=filterdate).order_by('-created_date')
news_arch = News.objects.filter(agency__pk=self.request.user.profile.agency.pk).filter(go_offline_on__lt=filterdate).order_by('-created_date')
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'newsmanagement', 'news' : news, 'news_arch' : news_arch})
context.update({'active_link' : 'dashboard', 'news' : news, 'news_arch' : news_arch})
return context
'''
class NewsAddNews(LoginRequiredMixin, CreateView):
@ -57,7 +57,7 @@ def NewsAdd(request):
new_news.save()
messages.success(request, f'News gespeichert!')
return redirect('news-management')
return redirect('users-dashboard')
else:
normalForm = NewsAddNews(instance=request.user)
@ -67,7 +67,7 @@ def NewsAdd(request):
context = {
'normalForm' : normalForm,
#'editorForm' : editorForm,
'active_link' : 'newsmanagement'
'active_link' : 'dashboard'
}
return render(request, 'news/news_addnews.html', context)
@ -98,7 +98,7 @@ def NewsUpdate(request, id):
context = {
'normalForm' : normalForm,
#'editorForm' : editorForm,
'active_link' : 'newsmanagement',
'active_link' : 'dashboard',
'news_id' : news.pk,
}
return render(request, 'news/news_update.html', context)
@ -118,7 +118,7 @@ class NewsDeleteView(LoginRequiredMixin, DeleteView):
def NewsSingle(request, pk):
news = News.objects.get(pk=pk)
context = {
'active_link':'newsmanagement',
'active_link':'dashboard',
'news' : news
}

View File

@ -17,9 +17,12 @@ def mainorga(request):
# Check, if parented users are invisible. Remove them and give user an info!
for ele in nonvisibleuser:
for vis in agencyuser:
if vis.profile.parent.profile.pk == ele.pk:
agencyuser.remove(vis)
invisible_users += 1
try:
if vis.profile.parent.profile.pk == ele.pk:
agencyuser.remove(vis)
invisible_users += 1
except:
pass
context = {
'active_link' : 'orga',

View File

@ -1,5 +1,5 @@
from django import template
from django.contrib.auth.models import Group
from django.contrib.auth.models import Group, User
from users.models import AgencyGroup
register = template.Library()
@ -22,7 +22,7 @@ def incvar():
b += 1
return ''
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
@ -45,6 +45,11 @@ def usergperm(user, perm):
if user.has_perm('users.'+perm):
stat = True
return stat
@register.filter(name="useringroupbyid")
def is_member(id, groupname):
usertocheck = User.objects.get(pk=id)
return usertocheck.groups.filter(name=groupname).exists()
'''
class Counter:
count = 0

View File

@ -1,10 +1,11 @@
from django.contrib import admin
from .models import Profile, Agency, AgencyGroup
from .models import Profile, Agency, AgencyGroup, AgencyJob
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(AgencyGroup)
admin.site.register(AgencyJob)
admin.site.register(Prio)

View File

@ -1,5 +1,5 @@
from django.db import models
from django.contrib.auth.models import User, AbstractBaseUser
from django.contrib.auth.models import User, AbstractUser
from django.conf import settings
from PIL import Image
from django.utils import timezone
@ -17,12 +17,11 @@ 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)
return 'agencydata/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)
return 'agencydata/agency_{0}/agencystats/profilepics/{1}'.format(instance.agency.pk, filename)
'''
Class Agency
@ -101,7 +100,7 @@ Klasse für die Zusatzinfos eines Nutzers.
class Profile(models.Model):
# Wenn der User gelöscht wird, wird auch das Profil gelöscht
user = models.OneToOneField(User, on_delete=models.CASCADE)
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True, default=None)
parent = models.ForeignKey(User, on_delete=models.PROTECT, blank=True, null=True, related_name='parent_user')
phoneland = models.CharField(max_length=60, blank=True)
phonemobile = models.CharField(max_length=60, blank=True)
@ -165,11 +164,11 @@ class Profile(models.Model):
'''
@property
def get_photo_url(self):
if self.image and hasattr(self.image, 'url'):
return self.image.url
else:
return "/media/userprofilepics/default.jpg"
if self.image and hasattr(self.image, 'url'):
return self.image.url
else:
return "/media/default.jpg"
@ -184,9 +183,8 @@ class AgencyGroup(models.Model):
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!
is_admin = models.BooleanField(default=False)
class Meta:
permissions = [
@ -199,4 +197,4 @@ class AgencyGroup(models.Model):
('modulenews', 'News bearbeiten und veröffentlichen'),
('modulesconfig', 'Module verwalten'),
('modulequicklinks', 'Quicklinks bearbeiten')
]
]

View File

@ -8,14 +8,15 @@ from notificsys.models import UserNotification
from django.core.mail import send_mail
from django.template.loader import render_to_string
# SIGNALS FOR USER
'''
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
def create_profile(sender, instance, created, **kwargs):
print(instance)
if created:
Profile.objects.create(user=instance, agency=instance.agency, parent=instance.parent)
'''
Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist,
erhält dieser automatisch alle verfügbaren Rechte!
'''
#Wenn ein neuer Nutzer angelegt wird und dies der erste der Agentur ist,
#erhält dieser automatisch alle verfügbaren Rechte!
user_agency = User.objects.filter(profile__agency__pk=instance.agency.pk)
if len(user_agency) == 1:
tempuser = user_agency[0]
@ -25,7 +26,7 @@ def create_profile(sender, instance, created, **kwargs):
tempuser.user_permissions.add(tempperm)
#tempuser.profile.func = 'lead'
tempuser.save()
'''
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()

View File

@ -138,9 +138,6 @@
</a>
</li>
{% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management or perms.user.news_management %}
<hr class="sidebar-divider">
<!-- Heading -->
@ -148,7 +145,7 @@
Agenturorga
</div>
{%endif%}
<!--
{% if perms.users.users_usermanagement %}
{% if active_link == 'usersmanagement' %}
<li class="nav-item active">
@ -160,7 +157,7 @@
<span>Benutzer</span></a>
</li>
{%endif%}
-->
{% if perms.users.areas_management %}
{% if active_link == 'areasmanagement' %}
<li class="nav-item active">
@ -186,7 +183,7 @@
</a>
</li>
{%endif%}
<!--
{% if perms.users.news_management %}
{% if active_link == 'newsmanagement' %}
<li class="nav-item active">
@ -199,6 +196,7 @@
</a>
</li>
{%endif%}
-->
<!-- Divider -->

View File

@ -11,7 +11,13 @@
{% if request.user.profile.agency.module_news %}
<div class="card d-block mb-3 mr-3 " style="width: 60%" >
<div class="card-body" >
<h5 class="card-title">News</h5>
<h5 class="card-title">News
{% if perms.users.modulenews %}
<a class="btn btn-primary btn-sm ml-1" href="{% url 'news-add' %} " style="float: right;" data-toggle="tooltip" data-placement="top" title="Neue News für Ihre Agentur erstellen"><i class="fas fa-plus"></i></a>
<a class="btn btn-secondary btn-sm" href="{% url 'news-management' %} " style="float: right;" data-toggle="tooltip" data-placement="top" title="Alle News und das News-Archiv betrachten"><i class="fas fa-list"></i></a>
{% endif %}
</h5>
<div class="table-responsive">
<table class="table">
<thead>

View File

@ -68,7 +68,7 @@ def toUpdate(request):
# 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 = AgencyGroup(savefordel=True, is_admin=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)
@ -83,8 +83,6 @@ def toUpdate(request):
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")
@ -175,23 +173,24 @@ class UsersManagement(LoginRequiredMixin, ListView):
'''
class UsersCreateUser(LoginRequiredMixin, CreateView):
model = User
fields = ['first_name', 'last_name','username', 'email']
success_url = '/dashboard/usersman/'
fields = ['first_name', 'last_name', 'email']
success_url = '/settings/newuser/s2/'
# Adding active_link
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'usersmanagement'})
context.update({'active_link' : 'settings'})
return context
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Benutzer angelegt!')
messages.success(self.request, f'Neuer Mitarbeiter angelegt!')
# SAVE OBJECTS TO SIGNALE!
form.instance.agency = self.request.user.profile.agency
form.instance.parent = None
newuser_name = form.cleaned_data.get('first_name') + " " + form.cleaned_data.get('last_name')
msg_html = render_to_string('users/newusers_email.html', {'username': newuser_name})
'''
if(self.request.POST.get("sendmailnewuser")):
send_mail(
self.request.user.profile.agency.name + ' Account',
@ -201,6 +200,7 @@ class UsersCreateUser(LoginRequiredMixin, CreateView):
html_message=msg_html,
fail_silently=False,
)
'''
return super().form_valid(form)
# USER muss eingeloggt sein, um diese Seite zu sehen
@ -346,7 +346,7 @@ def setuserparent(request):
'''
class ProfileDeleteView(LoginRequiredMixin, DeleteView):
model = User
success_url = '/dashboard/usersman'
success_url = '/dasettings/main'
template_name = 'users/user_confirm_delete.html'