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:
parent
14cd82e4dd
commit
b3f4808cb6
Binary file not shown.
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
3D-Druck
|
||||
+ Gute Struktur
|
||||
+ Shortucts
|
||||
+ Planemodellierung - Als VIdeo noch ein
|
||||
|
||||
HTML
|
||||
- Erweiterten Kurs
|
||||
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
3D-Druck
|
||||
+ Gute Struktur
|
||||
+ Shortucts
|
||||
+ Planemodellierung - Als VIdeo noch ein
|
||||
|
||||
HTML
|
||||
- Erweiterten Kurs
|
||||
|
||||
|
|
@ -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 |
Binary file not shown.
|
|
@ -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> News</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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',
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
]
|
||||
]
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue