Agentur und Usereinzelansicht zur ADM hinzugefügt
This commit is contained in:
parent
98092af442
commit
781300d20f
|
|
@ -3,16 +3,12 @@
|
||||||
{% load adm_tags %}
|
{% load adm_tags %}
|
||||||
{% getAgencyData agency as agdata %}
|
{% getAgencyData agency as agdata %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h4>Einzelagenturansicht</h4>
|
<h4>Agentur {{agency.name}}</h4>
|
||||||
<hr>
|
<hr>
|
||||||
<h5>Daten der Agentur</h5>
|
<h5>Daten der Agentur</h5>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="min-width: 180px">Name</td>
|
<td style="min-width: 180px">Registriert am</td>
|
||||||
<td>{{agency.name}}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Registriert am</td>
|
|
||||||
<td>{{agency.registerdate|date:"d.m.Y"}}
|
<td>{{agency.registerdate|date:"d.m.Y"}}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
@ -55,10 +51,54 @@ Es liegen keine Rechnungen vor.
|
||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<hr>
|
<hr>
|
||||||
<h5>Nutzerübersicht</h5>
|
<h5>Nutzerübersicht ({{agdata.0}})</h5>
|
||||||
|
<table class="table table-hover" id="agdata" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Vorname</th>
|
||||||
|
<th scope="col">Nachname</th>
|
||||||
|
<th scope="col">Funktion</th>
|
||||||
|
<th scope="col">Letzter Login</th>
|
||||||
|
<th scope="col">Organ. Sichtbar</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
{% for ele in users_of_agency %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{% url 'adm-user-single' ele.pk %}">{{ele.first_name}}</a></td>
|
||||||
|
<td><a href="{% url 'adm-user-single' ele.pk %}">{{ele.last_name}}</a></td>
|
||||||
|
<td>{{ele.profile.func|default:""}}</td>
|
||||||
|
<td>{{ele.last_login|date:"d.m.Y, H:i"|default:""}}</td>
|
||||||
|
<td>{% if ele.profile.visible %} Sichtbar {% else %} Nicht sichtbar {% endif %}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('#agdata').DataTable({
|
||||||
|
"language": {
|
||||||
|
"search" : "Suche",
|
||||||
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
|
"lengthMenu": "Zeige _MENU_ Einträge",
|
||||||
|
"zeroRecords": "Nichts gefunden",
|
||||||
|
"infoEmpty": "Keine Einträge",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Erste",
|
||||||
|
"last": "Letzte",
|
||||||
|
"next": "Nächste",
|
||||||
|
"previous": "Zurück"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"pageLength": 50,
|
||||||
|
"buttons" : {
|
||||||
|
"className" : "btn-danger"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,17 @@
|
||||||
<span>Agenturen</span></a>
|
<span>Agenturen</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<!-- Nav Item - Dashboard -->
|
||||||
|
{% if active_link == 'adm-users' %}
|
||||||
|
<li class="nav-item active">
|
||||||
|
{% else %}
|
||||||
|
<li class="nav-item">
|
||||||
|
{%endif%}
|
||||||
|
<a class="nav-link" href="{% url 'adm-users' %}">
|
||||||
|
<i class="fas fa-user"></i>
|
||||||
|
<span>Benutzer</span></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<hr class="sidebar-divider my-0">
|
<hr class="sidebar-divider my-0">
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
|
|
@ -169,7 +180,7 @@
|
||||||
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3" onclick="javascript:toggleSidebar()">
|
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3" onclick="javascript:toggleSidebar()">
|
||||||
<i class="fa fa-bars"></i>
|
<i class="fa fa-bars"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<b>Mitarbeiterbereich</b>
|
||||||
<!-- Topbar Search -->
|
<!-- Topbar Search -->
|
||||||
<!-- <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search">
|
<!-- <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,40 @@
|
||||||
{% extends "adm/adm_base.html" %}
|
{% extends "adm/adm_base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% load adm_tags %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h4>Statistikdaten</h4>
|
{% if statistik|length > 0 %}
|
||||||
|
{% getlaststat as statistik_last %}
|
||||||
|
<h4>Statistik vom {{statistik.0.staticdate|date:"d.m.Y"}} bis {{statistik_last.staticdate|date:"d.m.Y"}}
|
||||||
|
</h4>
|
||||||
|
{% else %}
|
||||||
|
<h4>Statisk noch nicht begonnen </h4>
|
||||||
|
{% endif %}
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
|
||||||
Anzahl Datensätze: {{statistik|length}}<br />
|
|
||||||
</p>
|
|
||||||
<div class="chart-container" style="">
|
<div class="chart-container" style="">
|
||||||
<canvas id="all_stats"></canvas>
|
<canvas id="all_stats"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
<hr>
|
||||||
|
<h5>Zahlenübersicht stand jetzt</h5>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td style="min-width: 150px;">Agenturen</td>
|
||||||
|
<td>{{agencycount}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nutzer</td>
|
||||||
|
<td>{{usercount}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Standards</td>
|
||||||
|
<td>{{standardcount}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Chatnachrichten</td>
|
||||||
|
<td>{{chatmessagescount}}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
||||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script>
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
{% extends "adm/adm_base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
{% load adm_tags %}
|
||||||
|
<div class="content-section col-12">
|
||||||
|
<h4>{{user.get_full_name}} aus {{user.profile.agency.name}}</h4>
|
||||||
|
<hr>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td style="min-width: 120px;">Name</td>
|
||||||
|
<td>{{user.get_full_name}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>E-Mail</td>
|
||||||
|
<td>{{user.email}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Letzter Login</td>
|
||||||
|
<td>{{user.last_login|default:"-"}}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<h5>Gruppenübersicht</h5>
|
||||||
|
<small>Tabelle zeigt alle Gruppen, in denen der Nutzer ist.</small>
|
||||||
|
<table class="table table-hover" id="users_groups" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Gruppenname</th>
|
||||||
|
<th scope="col">Interner Name</th>
|
||||||
|
<th scope="col">Löschschutz</th>
|
||||||
|
<th scope="col">Administrativ</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
{% for g in user.groups.all %}
|
||||||
|
{% getAgencyGroupName g as aggdata %}
|
||||||
|
<tr>
|
||||||
|
<td>{{aggdata.agencygroupname}}</td>
|
||||||
|
<td>{{g.name}}</td>
|
||||||
|
<td>{% if aggdata.savefordel %} Ja {% else %} Nein {% endif %}</td>
|
||||||
|
<td>{% if aggdata.is_admin %} Ja {% else %} Nein {% endif %}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('#users_groups').DataTable({
|
||||||
|
"language": {
|
||||||
|
"search" : "Suche",
|
||||||
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
|
"lengthMenu": "Zeige _MENU_ Einträge",
|
||||||
|
"zeroRecords": "Nichts gefunden",
|
||||||
|
"infoEmpty": "Keine Einträge",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Erste",
|
||||||
|
"last": "Letzte",
|
||||||
|
"next": "Nächste",
|
||||||
|
"previous": "Zurück"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"pageLength": 50,
|
||||||
|
"buttons" : {
|
||||||
|
"className" : "btn-danger"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -1,26 +1,23 @@
|
||||||
{% extends "adm/adm_base.html" %}
|
{% extends "adm/adm_base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% load adm_tags %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h4>Statistikdaten</h4>
|
<h4>Nutzerübersicht ({{users|length}})</h4>
|
||||||
<hr>
|
<hr>
|
||||||
<table class="table table-hover" id="statistics" >
|
<table class="table table-hover" id="all_users" >
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Datum</th>
|
<th scope="col">Name</th>
|
||||||
<th scope="col">Agenturen</th>
|
<th scope="col">E-Mail</th>
|
||||||
<th scope="col">Benutzer</th>
|
<th scope="col">Agentur</th>
|
||||||
<th scope="col">Standards</th>
|
|
||||||
<th scope="col">Chatnachrichten</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody >
|
<tbody >
|
||||||
{% for ele in statistik %}
|
{% for ele in users %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ele.staticdate|date:"d.m.Y"}}</td>
|
<td><a href="{% url 'adm-user-single' ele.pk %}">{{ele.get_full_name}}</a></td>
|
||||||
<td>{{ele.agencys}}</td>
|
<td>{{ele.email}}</td>
|
||||||
<td>{{ele.users}}</td>
|
<td>{{ele.profile.agency.name}}</td>
|
||||||
<td>{{ele.standards}}</td>
|
|
||||||
<td>{{ele.chatmessages}}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
@ -28,7 +25,7 @@
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$('#statistics').DataTable({
|
$('#all_users').DataTable({
|
||||||
"language": {
|
"language": {
|
||||||
"search" : "Suche",
|
"search" : "Suche",
|
||||||
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
Binary file not shown.
|
|
@ -9,6 +9,7 @@ from django.conf import settings
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import datetime
|
import datetime
|
||||||
|
from adm.models import MainStatistic
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -22,8 +23,17 @@ register = template.Library()
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def getAgencyData(ele):
|
def getAgencyData(ele):
|
||||||
data = [0,1]
|
data = [0,1]
|
||||||
|
|
||||||
data[0] = len(User.objects.filter(profile__agency=ele))
|
data[0] = len(User.objects.filter(profile__agency=ele))
|
||||||
data[1] = len(Standards.objects.filter(agency=ele))
|
data[1] = len(Standards.objects.filter(agency=ele))
|
||||||
|
return data
|
||||||
|
|
||||||
|
# Gibt den letzten Statisk-Datensatz zurück
|
||||||
|
@register.simple_tag
|
||||||
|
def getlaststat():
|
||||||
|
return MainStatistic.objects.all().order_by("-staticdate")[:1][0]
|
||||||
|
|
||||||
|
# Gibt die AgencyGroup anhand einer Gruppe zurück
|
||||||
|
@register.simple_tag
|
||||||
|
def getAgencyGroupName(group):
|
||||||
|
return AgencyGroup.objects.get(group=group)
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
@ -10,6 +10,9 @@ Permissions definiert in models.py bei USERS und dann hier vor die View geschrie
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', AdmMain.as_view(), name='adm-main'),
|
path('', AdmMain.as_view(), name='adm-main'),
|
||||||
path('ag/', AdmAgencys.as_view(), name="adm-agencys"),
|
path('ag/', AdmAgencys.as_view(), name="adm-agencys"),
|
||||||
|
path('us/', AdmUsers.as_view(), name="adm-users"),
|
||||||
path('agsingle/<int:agpk>', AdmAgencySingle.as_view(), name="adm-agency-single"),
|
path('agsingle/<int:agpk>', AdmAgencySingle.as_view(), name="adm-agency-single"),
|
||||||
path('cron/<slug:code>', statisticCronJob, name="adm-cron")
|
path('usersingle/<int:uspk>', AdmUserSingle.as_view(), name="adm-user-single"),
|
||||||
|
path('cron/<slug:code>', statisticCronJob, name="adm-cron"),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
|
||||||
46
adm/views.py
46
adm/views.py
|
|
@ -38,7 +38,12 @@ class AdmMain(TemplateView):
|
||||||
context.update({'active_link' : "adm-statistic"})
|
context.update({'active_link' : "adm-statistic"})
|
||||||
|
|
||||||
context.update({'statistik' : MainStatistic.objects.all().order_by('staticdate')[:180] })
|
context.update({'statistik' : MainStatistic.objects.all().order_by('staticdate')[:180] })
|
||||||
|
context.update({
|
||||||
|
"agencycount" : len(Agency.objects.all()),
|
||||||
|
"usercount" : len(User.objects.all().exclude(is_staff=True, is_superuser=True)),
|
||||||
|
"standardcount" : len(Standards.objects.all()),
|
||||||
|
"chatmessagescount" : len(ChatMessage.objects.all())
|
||||||
|
})
|
||||||
return context
|
return context
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
@ -63,6 +68,26 @@ class AdmAgencys(TemplateView):
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class AdmUsers(TemplateView):
|
||||||
|
template_name = "adm/adm_users.html"
|
||||||
|
|
||||||
|
def dispatch(self, *args, **kwargs):
|
||||||
|
if(checkForStuffUser(self.request)):
|
||||||
|
return super().dispatch(*args, **kwargs)
|
||||||
|
else:
|
||||||
|
messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!')
|
||||||
|
return redirect("login")
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
context.update({'active_link' : "adm-users"})
|
||||||
|
|
||||||
|
context.update({'users' : User.objects.all().exclude(is_staff=True, is_superuser=True)})
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Einzelansicht der Agenturen
|
Einzelansicht der Agenturen
|
||||||
'''
|
'''
|
||||||
|
|
@ -81,9 +106,26 @@ class AdmAgencySingle(TemplateView):
|
||||||
context.update({'active_link' : "adm-agencys"})
|
context.update({'active_link' : "adm-agencys"})
|
||||||
context.update({'agency' : Agency.objects.get(pk=kwargs['agpk'])})
|
context.update({'agency' : Agency.objects.get(pk=kwargs['agpk'])})
|
||||||
context.update({'bills' : AgencyBills.objects.filter(agency=Agency.objects.get(pk=kwargs['agpk'])).order_by('-billdate')[:3]})
|
context.update({'bills' : AgencyBills.objects.filter(agency=Agency.objects.get(pk=kwargs['agpk'])).order_by('-billdate')[:3]})
|
||||||
|
context.update({'users_of_agency' : User.objects.filter(profile__agency=Agency.objects.get(pk=kwargs['agpk'])).order_by('-last_name')})
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
class AdmUserSingle(TemplateView):
|
||||||
|
template_name = "adm/adm_user_single.html"
|
||||||
|
|
||||||
|
def dispatch(self, *args, **kwargs):
|
||||||
|
if(checkForStuffUser(self.request)):
|
||||||
|
return super().dispatch(*args, **kwargs)
|
||||||
|
else:
|
||||||
|
messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!')
|
||||||
|
return redirect("login")
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : "adm-users"})
|
||||||
|
context.update({'users' : User.objects.get(pk=kwargs['uspk'])})
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# CRONJOB, um die Statistik zu füllen!
|
# CRONJOB, um die Statistik zu füllen!
|
||||||
def statisticCronJob(request, code):
|
def statisticCronJob(request, code):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue