Bugliste von Darius abgearbeitet, außer Bug Profilbild (neu-Erstellung) und Agentur-Default-Bild

This commit is contained in:
holger.trampe 2020-02-23 11:23:58 +01:00
parent d0aa0290d1
commit d422d4c5b9
18 changed files with 71 additions and 37 deletions

6
.gitignore vendored
View File

@ -3,6 +3,8 @@ media/agencymain/*
!media/agencymain/default.jpg
!media/agencymain/linkdefault.png
digitaleagentur/__pycache__/*
media/userprofilepics/*
!media/userprofilepics/default.jpg
media/uploadsCK/*
@ -40,5 +42,9 @@ notificsys/migrations/*
!notificsys/migrations/__init__.py
notificsys/__pycache__/*
dasettings/migrations/*
!dasettings/migrations/__init__.py
dasettings/__pycache__/*
orga/__pycache__/*

View File

@ -3,9 +3,6 @@
{% load counter_tag %}
{% load static %}
{% block content %}
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="{% static 'users/js/jsLists.js' %}"></script>
<link href="{% static 'users/css/jsLists.css' %}" rel="stylesheet">
<style>
.icon-hover:hover{
color: gray;
@ -15,7 +12,6 @@ a.disabled {
cursor: default;
}
</style>
<div aria-live="polite" aria-atomic="true" class="d-flex justify-content-center align-items-center" style="min-height: 200px; max-width: 250px; position: fixed; margin-top: -3%; margin-left: 70.5%; z-index: 10">
<!-- Then put toasts within -->
<div id="fileerr" class="toast alert-danger" role="alert" aria-live="assertive" aria-atomic="true">
@ -31,7 +27,7 @@ a.disabled {
<h3>Dateien&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Hier können Sie Dateien und Ordner für ihre Agentur verwalten." class="far fa-question-circle"></i></small></h3>
<hr>
</div>
<div class="content-section col-12">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item" aria-current="page"><a href="{% url 'cloud-main' 'first' %}"><i class="fas fa-home"></i></a></li>
@ -153,6 +149,7 @@ a.disabled {
gespeichert.
</small></p>
</div>
</div>
{% endif %}
<!-- MODAL CHANGE DIRNAME -->
<div class="modal fade" id="changeName" tabindex="-1" role="dialog" data-backdrop="static" aria-labelledby="" aria-hidden="true">

View File

@ -1,7 +1,5 @@
{% load crispy_forms_tags %}
{% load static %}
{% load mathfilters %}
{% load humanize %}
<button type="button" class="btn btn-primary" onclick="javascript:showAgencyJob()" data-toggle="tooltip" data-placement="top" title="Fügen Sie hier weitere Standard-Agenturfunktionen zu oder bearbeiten bestehende.">Agenturfunktionen verwalten</button>
<hr>
<script src="{% static 'users/js/cropper.min.js' %}"></script>
@ -26,14 +24,7 @@
{% endif %}
{% endfor %}
</div>
<div class="col-3">
<h5 class="mt-3">Abrechnung</h5>
<p>Kontostand:&nbsp;<b>{{request.user.profile.agency.balance|floatformat:0}} €</b></p>
<p>Nächste Abbuchung am&nbsp;<b>{{request.user.profile.agency.nextdebiting|date:"d.m.Y"}}</b></p>
<p>Max. Nutzungszeit:&nbsp; <b>{{request.user.profile.agency.balance|div:30|floatformat:0}} Monate</b></p>
<p>IBAN: DE4412345678912345</p>
<p><small>Laden Sie das Konto mit einem beliebigen Geldbetrag auf. Die Kosten belaufen sich auf 40 € pro Monat.</small></p>
</div>
</div>
</fieldset>
<hr>

View File

@ -0,0 +1,7 @@
{% load mathfilters %}
{% load humanize %}
<p>Kontostand:&nbsp;<b>{{request.user.profile.agency.balance|floatformat:0}} €</b></p>
<p>Nächste Abbuchung am&nbsp;<b>{{request.user.profile.agency.nextdebiting|date:"d.m.Y"}}</b></p>
<p>Max. Nutzungszeit:&nbsp; <b>{{request.user.profile.agency.balance|div:30|floatformat:0}} Monate</b></p>
<p>IBAN: DE4412345678912345</p>
<p><small>Laden Sie das Konto mit einem beliebigen Geldbetrag auf. Die Kosten belaufen sich auf 30 € pro Monat zzgl. gebuchter Module.</small></p>

View File

@ -3,8 +3,6 @@
<button type="button" class="btn btn-primary" onclick="javascript:addGroup()" data-toggle="tooltip" data-placement="top" title="Neue Gruppe erstellen, Namen und Rechte vergeben und anschließend Mitglieder hinzufügen."><i class="fas fa-plus"></i>&nbsp;Gruppe</button>
<!-- GROUPS -->
<!-- COUNTER USER IN GROUPS -->
<div id="allGroups">
<div id="groupAccordion" class="mt-3">
@ -24,14 +22,15 @@
<button class="btn btn-link" data-toggle="collapse" data-target="#agroup_{{aggroup.pk}}_card" aria-expanded="false" aria-controls="agroup_{{aggroup.pk}}_card"><small><i class="fas fa-chevron-down"></i></small></button>&nbsp;&nbsp;&nbsp;
<button class="btn btn-link" data-toggle="collapse" data-target="#agroup_{{aggroup.pk}}_card" aria-expanded="false" aria-controls="agroup_{{aggroup.pk}}_card">
<span id="groupname_{{aggroup.pk}}" >Gruppe <b>{{aggroup.agencygroupname}}&nbsp;</b></span><small>(<span id="groupcounter_{{aggroup.pk}}">{{varcounter}}</span>)</small>
</button>
</button>
{% if not aggroup.savefordel %}
<button type="button" style="float: right" class="btn btn-primary btn-sm" onclick="javascript:changeGroupName({{aggroup.pk}})" data-toggle="tooltip" data-placement="top" title="Gruppennamen andern"><small><i class="fas fa-pen"></i></small></button>
{% endif %}
{% if not aggroup.savefordel %}
<button style="float: right" type="button" class="btn btn-danger btn-sm mr-1" onclick="javascript:delGroup({{aggroup.pk}})" data-toggle="tooltip" data-placement="top" title="Gruppe löschen. Nur möglich, bei selbst erstellten Gruppen."><i class="fas fa-trash-alt"></i></button>
{% endif %}
{% if aggroup.savefordel %}
<button style="float: right" type="button" class="btn btn-danger btn-sm mr-1" onclick="javascript:delGroup({{aggroup.pk}})" data-toggle="tooltip" data-placement="top" title="Gruppe löschen. Nur möglich, bei selbst erstellten Gruppen." disabled><i class="fas fa-trash-alt" ></i></button>
{% endif %}
</h5>
</div>

View File

@ -87,7 +87,8 @@
type: "GET",
url: "/dasettings/ajax",
data:{
action : "change_showtooltips"
action : "change_showtooltips",
newtoolvalue : $("#showtooltips").prop("checked")
},
success: function( data )
{
@ -97,10 +98,10 @@
$("#toast_savecontent").html("Tooltipseinstellung erfolgreich gespeichert!");
if(data['data']['newttvalue']){
$('*').tooltip("enable");
$('*').tooltip("enable");
}
else{
$('*').tooltip("disable");
$('*').tooltip("disable");
}
}
else{

View File

@ -48,6 +48,11 @@
<a class="nav-link" id="agency-tab" data-toggle="tab" href="#agency" role="tab" aria-controls="agency" aria-selected="false">Agentur</a>
</li>
{% endif %}
{% if user|usergperm:"agencyinfo" %}
<li class="nav-item">
<a class="nav-link" id="calc-tab" data-toggle="tab" href="#calc" role="tab" aria-controls="calc" aria-selected="false">Abrechnung</a>
</li>
{% endif %}
{% if user|usergperm:"structuremanager" %}
<li class="nav-item">
<a class="nav-link" id="structure-tab" data-toggle="tab" href="#structure" role="tab" aria-controls="structure" aria-selected="false">Struktur</a>
@ -92,6 +97,15 @@
{% include "dasettings/agency_content.html" %}
{% endblock %}
</div>
{% endif %}
{% if user|usergperm:"agencyinfo" %}
<div class="tab-pane fade" id="calc" role="tabpanel" aria-labelledby="calc-tab">
<h5 class="mt-3">Abrechnung&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Hier können Sie die aktuellen Abrechnungsinfos einsehen." class="far fa-question-circle"></i></small></h5>
<hr>
{% block calc_content %}
{% include "dasettings/calc_content.html" %}
{% endblock %}
</div>
{% endif %}
{% if user|usergperm:"structuremanager" %}
<div class="tab-pane fade" id="structure" role="tabpanel" aria-labelledby="structure-tab">

View File

@ -226,11 +226,11 @@ def SettingsAjaxRouter(request):
elif request.method == 'GET' and request.GET['action'] == "change_showtooltips" :
newtooltipvalue = False
user = User.objects.get(pk=request.user.pk, profile__agency=request.user.profile.agency)
if user.profile.showtooltips:
user.profile.showtooltips = False
else:
if(request.GET['newtoolvalue'] == "true"):
user.profile.showtooltips = True
newtooltipvalue = True
else:
user.profile.showtooltips = False
user.save()
success = True
data = {'newttvalue' : newtooltipvalue}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -345,7 +345,7 @@ def updatesbyajax(request, pk):
success = True
workingstandard = Standards.objects.get(pk=pk, agency=request.user.profile.agency)
# Check for correct user and userrights
if(request.user.profile.agency == workingstandard.agency and request.user.has_perm("standardmanager")):
if(request.user.profile.agency == workingstandard.agency and request.user.has_perm("users.standardmanager")):
# CHANGE GROUP
# ADD
if(request.GET["action"] == "s_addgroup"):

View File

@ -1,10 +1,10 @@
from django.db import models
from django.contrib.auth.models import User, AbstractUser
from django.contrib.auth.models import User
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, Group, Permission
from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType

View File

@ -10,6 +10,7 @@ from django.template.loader import render_to_string
from tasks.models import Tasks
from cloud.models import DataFile
import os
# Deletes all Notifications added to to delete news
@receiver(pre_delete, sender=News)
def del_news_notifications(sender, instance, **kwargs):

View File

@ -36,7 +36,9 @@
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.js"></script>
{% endif %}
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="{% static 'users/js/jsLists.js' %}"></script>
<link href="{% static 'users/css/jsLists.css' %}" rel="stylesheet">
<!-- CROPPER -->
<link href="{% static 'users/css/cropper.min.css' %}" rel="stylesheet">

View File

@ -20,13 +20,23 @@
{% endif %}
<hr>
<h4>Aufgaben</h4>
<h4>Tätigkeiten</h4>
{% if res_tasks|length > 0 %}
{% for s in res_tasks %}
<i class="fas fa-fw fa-tasks"></i>&nbsp;&nbsp;<a href="{% url 'standard-task' s.pk %}"><b>{{s.name|striptags}}</b></a><br /><br />
{% endfor %}
{% else %}
<p>Keine Ergebnisse in Aufgaben</p>
<p>Keine Ergebnisse in Tätigkeiten</p>
{% endif %}
<hr>
<h4>News</h4>
{% if res_news|length > 0 %}
{% for s in res_news %}
<i class="fas fa-external-link-alt"></i>&nbsp;&nbsp;<a href="{% url 'news-single' s.pk%}"><b>{{s.name}}</b></a><br /><br />
{% endfor %}
{% else %}
<p>Keine Ergebnisse in News</p>
{% endif %}
<hr>

View File

@ -149,7 +149,7 @@ class SupportForm(forms.Form):
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
user_name = user.first_name + " " + user.last_name
self.fields['name'] = forms.CharField(required=True, label="Ihr Name", initial=user_name)
self.fields['name'] = forms.CharField(required=True, label="Name", initial=user_name)
self.fields['mail'] = forms.EmailField(required=True, label="E-Mail", initial=user.email)
self.fields['problemconc'] = forms.CharField(required=True, label="Problemzusammenfassung")
self.fields['problem'] = forms.CharField(required=True, widget=forms.Textarea, label="Ausführliche Beschreibung")

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, is_admin=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="Administratoren")
temgroup_verwaltung_ag.save()
print("default groups created...adding users...")
users_of_agency = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk)
@ -273,7 +273,7 @@ class UsersPermUpdateView(LoginRequiredMixin, View):
user_tochange.user_permissions.add(tempperm)
else:
# Eingeloggter User darf sich nicht selbst die Userverwaltungsrechte entziehen
if user_tochange == request.user and ele[0]=='users_usermanagement':
if user_tochange == request.user and ele[0]=='usermanager':
messages.warning(request, f'Benutzerverwaltungsrechte für {user_tochange.first_name} {user_tochange.last_name} kann nicht entfernt werden.')
else:
user_tochange.user_permissions.remove(tempperm)
@ -475,11 +475,17 @@ def GlobalSearch(request):
searchfor = request.GET['searchstring']
ag = request.user.profile.agency.pk
res_standard = Standards.objects.filter(agency__pk=ag, public=True).filter(name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(content__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(area__name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(task__name__icontains=searchfor) | Standards.objects.filter(agency__pk=ag, public=True).filter(created_standard_by__last_name__icontains=searchfor)|Standards.objects.filter(agency__pk=ag, public=True).filter(created_standard_by__first_name__icontains=searchfor)
res_news = News.objects.filter(agency__pk=ag).filter(name__icontains=searchfor) | News.objects.filter(agency__pk=ag).filter(content__icontains=searchfor) | News.objects.filter(agency__pk=ag).filter(created_by__last_name__icontains=searchfor)|News.objects.filter(agency__pk=ag).filter(created_by__first_name__icontains=searchfor)
res_areas = Areas.objects.filter(agency__pk=ag).filter(name__icontains=searchfor)
res_tasks = Tasks.objects.filter(agency__pk=ag).filter(name__icontains=searchfor) |Tasks.objects.filter(agency__pk=ag).filter(area__name__icontains=searchfor)
res_pers = User.objects.filter(profile__agency__pk=ag).filter(first_name__icontains=searchfor) | User.objects.filter(profile__agency__pk=ag).filter(last_name__icontains=searchfor)
links = QuickLinks.objects.filter(agency__pk=ag).filter(name__icontains=searchfor) | QuickLinks.objects.filter(agency__pk=ag).filter(link__icontains=searchfor)
html = render_to_string('users/searchres.html', {'links': links, 'res_standard': res_standard, 'res_areas': res_areas, 'res_tasks': res_tasks, 'res_pers': res_pers})
html = render_to_string('users/searchres.html', {'links': links, 'res_standard': res_standard, 'res_areas': res_areas, 'res_tasks': res_tasks, 'res_pers': res_pers, 'res_news' : res_news})
return HttpResponse(html)
else:
return HttpResponse("Request method is not a GET")