Agentur und Usereinzelansicht zur ADM hinzugefügt

This commit is contained in:
holger.trampe 2020-10-10 18:09:16 +02:00
parent 98092af442
commit 781300d20f
10 changed files with 231 additions and 35 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -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>

View File

@ -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">

View File

@ -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>

View File

@ -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 %}

View File

@ -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",

View File

@ -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

View File

@ -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"),
] ]

View File

@ -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):