ADM Useransicht Überarbeitet

This commit is contained in:
holger.trampe 2021-01-20 11:14:47 +01:00
parent e5f8f8c743
commit 794834ac7c
2 changed files with 332 additions and 232 deletions

View File

@ -3,242 +3,342 @@
{% load adm_tags %} {% load adm_tags %}
<!-- Mitarbeier ist immer der angemeledete!!! --> <!-- Mitarbeier ist immer der angemeledete!!! -->
<div class="content-section col-12"> <div class="content-section col-12">
<h4>{{userdata.get_full_name}} aus {{userdata.profile.agency.name}}</h4> <div class="row">
<div class="col-2">
<img class="img-profile" width="100%" src="{{ userdata.profile.get_photo_url }}" >
</div>
<div class="col-8">
<h4>{{userdata.get_full_name}} aus {{userdata.profile.agency.name}}</h4>
<table>
<tr>
<td style="min-width: 120px;">Name</td>
<td>{{userdata.get_full_name}}</td>
</tr>
<tr>
<td>E-Mail</td>
<td>{{userdata.email}}</td>
</tr>
<tr>
<td>Letzter Login</td>
<td>{{userdata.last_login|default:"-"}}</td>
</tr>
</table>
</div>
</div>
<hr> <hr>
<table> <nav>
<tr> <div class="nav nav-tabs" id="usersingleelements" role="tablist">
<td style="min-width: 120px;">Name</td> <a class="nav-link active" id="nav-groups-tab" data-bs-toggle="tab" href="#nav-groups" role="tab" aria-controls="nav-groups" aria-selected="true">Gruppen</a>
<td>{{userdata.get_full_name}}</td> <a class="nav-link" id="nav-contractdata-tab" data-bs-toggle="tab" href="#nav-contractdata" role="tab" aria-controls="nav-contractdata" aria-selected="false">Vertragsdaten</a>
</tr> <a class="nav-link" id="nav-contract-tab" data-bs-toggle="tab" href="#nav-contract" role="tab" aria-controls="nav-contract" aria-selected="false">Arbeitstage</a>
<tr> <a class="nav-link" id="nav-absence-tab" data-bs-toggle="tab" href="#nav-absence" role="tab" aria-controls="nav-absence" aria-selected="false">Abwesenheiten</a>
<td>E-Mail</td> <a class="nav-link" id="nav-year-tab" data-bs-toggle="tab" href="#nav-year" role="tab" aria-controls="nav-year" aria-selected="false">Jahresübersicht</a>
<td>{{userdata.email}}</td> <a class="nav-link" id="nav-logins-tab" data-bs-toggle="tab" href="#nav-logins" role="tab" aria-controls="nav-logins" aria-selected="false">Logins</a>
</tr> </div>
<tr> </nav>
<td>Letzter Login</td> <div class="tab-content" id="nav-tabContent">
<td>{{userdata.last_login|default:"-"}}</td> <div class="tab-pane fade show active" id="nav-groups" role="tabpanel" aria-labelledby="nav-groups-tab">
</tr> <br />
</table> <h5>Gruppenübersicht</h5>
<hr> <small>Tabelle zeigt alle Gruppen, in denen der Nutzer ist.</small>
<h5>Gruppenübersicht</h5> <table class="table table-hover" id="users_groups" >
<small>Tabelle zeigt alle Gruppen, in denen der Nutzer ist.</small> <thead>
<table class="table table-hover" id="users_groups" > <tr>
<thead> <th scope="col">Gruppenname</th>
<tr> <th scope="col">Interner Name</th>
<th scope="col">Gruppenname</th> <th scope="col">Löschschutz</th>
<th scope="col">Interner Name</th> <th scope="col">Administrativ</th>
<th scope="col">Löschschutz</th> </tr>
<th scope="col">Administrativ</th> </thead>
</tr> <tbody >
</thead> {% for g in userdata.groups.all %}
<tbody > {% getAgencyGroupName g as aggdata %}
{% for g in userdata.groups.all %} <tr>
{% getAgencyGroupName g as aggdata %} <td>{{aggdata.agencygroupname}}</td>
<tr> <td>{{g.name}}</td>
<td>{{aggdata.agencygroupname}}</td> <td>{% if aggdata.savefordel %} Ja {% else %} Nein {% endif %}</td>
<td>{{g.name}}</td> <td>{% if aggdata.is_admin %} Ja {% else %} Nein {% endif %}</td>
<td>{% if aggdata.savefordel %} Ja {% else %} Nein {% endif %}</td> </tr>
<td>{% if aggdata.is_admin %} Ja {% else %} Nein {% endif %}</td> {% endfor %}
</tr> </tbody>
{% endfor %} </table>
</tbody>
</table>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function(){ $(document).ready(function(){
$('#users_groups').DataTable({ $('#users_groups').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",
"lengthMenu": "Zeige _MENU_ Einträge", "lengthMenu": "Zeige _MENU_ Einträge",
"zeroRecords": "Nichts gefunden", "zeroRecords": "Nichts gefunden",
"infoEmpty": "Keine Einträge", "infoEmpty": "Keine Einträge",
"paginate": { "paginate": {
"first": "Erste", "first": "Erste",
"last": "Letzte", "last": "Letzte",
"next": "Nächste", "next": "Nächste",
"previous": "Zurück" "previous": "Zurück"
}, },
}, },
"pageLength": 50, "pageLength": 50,
"buttons" : { "buttons" : {
"className" : "btn-danger" "className" : "btn-danger"
} }
}); });
}) })
</script> </script>
<hr> </div>
<h5>Arbeitstage</h5>
Beginn der Zeiterfassung: {{usertimedata.startdate|date:"d.m.Y"}} <div class="tab-pane fade" id="nav-contractdata" role="tabpanel" aria-labelledby="nav-contractdata-tab">
<table class="table table-hover" id="user_workdays" > <br />
<thead> <h5>Vertragsdaten</h5>
<tr> Arbeitszeit
<th scope="col"></th> <table>
<th scope="col">Start</th> <thead>
<th scope="col">Ende</th> <tr>
<th scope="col">Ziel</th> <td>Montag</td>
</tr> <td>Dienstag</td>
</thead> <td>Mittwoch</td>
<tbody > <td>Donnerstag</td>
{% for wd in workdays %} <td>Freitag</td>
<tr> <td>Samstag</td>
<td>{{forloop.counter}}</td> <td>Sonntag</td>
<td>{{wd.start|date:"d.m.Y H:i"}}</td> </tr>
<td>{{wd.end|date:"d.m.Y H:i"}}</td> </thead>
<td>{{wd.target}}</td> <tbody>
</tr> <tr>
{% endfor %} <td>{{usertimedata.wd_mo}}</td>
</tbody> <td>{{usertimedata.wd_tu}}</td>
</table> <td>{{usertimedata.wd_we}}</td>
<script type="text/javascript"> <td>{{usertimedata.wd_th}}</td>
$(document).ready(function(){ <td>{{usertimedata.wd_fr}}</td>
$('#user_workdays').DataTable({ <td>{{usertimedata.wd_sa}}</td>
columnDefs: [ <td>{{usertimedata.wd_so}}</td>
{ 'targets': 1, type: 'date-euro' }, </tr>
{ 'targets': 2, type: 'date-euro' } </tbody>
], </table>
order: [ <br />
[1, 'asc'] // date column <table>
], <tr>
"language": { <td>Urlaub verfällt am</td>
"search" : "Suche", <td><b>{{usertimedata.loose_holidedate}}</b></td>
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen", </tr>
"lengthMenu": "Zeige _MENU_ Einträge", <tr>
"zeroRecords": "Nichts gefunden", <td>Einstellungsdatum</td>
"infoEmpty": "Keine Einträge", <td><b>{{usertimedata.startdate|date:"d.m.Y"}}</b></td>
"paginate": { </tr>
"first": "Erste", <tr>
"last": "Letzte", <td>Zeiterfassung Startwert</td>
"next": "Nächste", <td><b>{{usertimedata.startcount}}</b></td>
"previous": "Zurück" </tr>
}, <tr>
}, <td>Zeiterfassung Nutzen</td>
"pageLength": 20, <td><b>{{usertimedata.usetime}}</b></td>
"buttons" : { </tr>
"className" : "btn-danger" <tr>
} <td>Zeiterfassung ab dem</td>
}); <td><b>{{usertimedata.usetime_start|date:"d.m.Y"}}</b></td>
}) </tr>
</script> </table>
<hr> </div>
<h5>Abwesenheiten</h5>
<table class="table table-hover" id="user_absences" > <div class="tab-pane fade" id="nav-contract" role="tabpanel" aria-labelledby="nav-contract-tab">
<thead> <br />
<tr> <h5>Arbeitstage</h5>
<th scope="col"></th> <table class="table table-hover" id="user_workdays" >
<th scope="col">Art</th> <thead>
<th scope="col">Start</th> <tr>
<th scope="col">Ende</th> <th scope="col"></th>
<th scope="col">Ganz/Vor/Na</th> <th scope="col">Start</th>
<th scope="col">Ganz/Vor/Na</th> <th scope="col">Ende</th>
<th scope="col">Erstellt am</th> <th scope="col">Ziel</th>
<th scope="col">Status</th> </tr>
<th scope="col">Urlaub N</th> </thead>
<th scope="col">Urlaub R</th> <tbody >
<th scope="col">Urlaub Next N</th> {% for wd in workdays %}
<th scope="col">Urlaub Next Rest</th> <tr>
</tr> <td>{{forloop.counter}}</td>
</thead> <td>{{wd.start|date:"d.m.Y H:i"}}</td>
<tbody > <td>{{wd.end|date:"d.m.Y H:i"}}</td>
{% for ab in absences %} <td>{{wd.target}}</td>
<tr> </tr>
<td>{{forloop.counter}}</td> {% endfor %}
<td>{{ab.reason.name}}</td> </tbody>
<td>{{ab.start|date:"d.m.Y"}}</td> </table>
<td>{{ab.end|date:"d.m.Y"}}</td> <script type="text/javascript">
<td>{% if ab.startday_info == "1" %} Vormittags {% elif ab.startday_info == "2" %} Nachmittags {% else %} Ganzer Tag {% endif %}</td> $(document).ready(function(){
<td>{% if ab.endday_info == "1" %} Vormittags {% elif ab.endday_info == "2" %} Nachmittags {% else %} Ganzer Tag {% endif %}</td> $('#user_workdays').DataTable({
<td>{{ab.created_date|date:"d.m.Y"}}</td> columnDefs: [
<td>{% if ab.confirm_status == 0 %} OK {% elif ab.confirm_status == 1 %} Beantragt {% else %} Abgelehnt {% endif %} </td> { 'targets': 1, type: 'date-euro' },
<td>{{ab.holidays_normal}}</td> { 'targets': 2, type: 'date-euro' }
<td>{{ab.holidays_rest}}</td> ],
<td>{{ab.holidays_normal_next}}</td> order: [
<td>{{ab.holidays_rest_next}}</td> [1, 'asc'] // date column
</tr> ],
{% endfor %} "language": {
</tbody> "search" : "Suche",
</table> "info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
<script type="text/javascript"> "lengthMenu": "Zeige _MENU_ Einträge",
$(document).ready(function(){ "zeroRecords": "Nichts gefunden",
$('#user_absences').DataTable({ "infoEmpty": "Keine Einträge",
columnDefs: [ "paginate": {
{ 'targets': 1, type: 'date-euro' }, "first": "Erste",
{ 'targets': 2, type: 'date-euro' } "last": "Letzte",
], "next": "Nächste",
order: [ "previous": "Zurück"
[1, 'asc'] // date column },
], },
"language": { "pageLength": 20,
"search" : "Suche", "buttons" : {
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen", "className" : "btn-danger"
"lengthMenu": "Zeige _MENU_ Einträge", }
"zeroRecords": "Nichts gefunden", });
"infoEmpty": "Keine Einträge", })
"paginate": { </script>
"first": "Erste",
"last": "Letzte", </div>
"next": "Nächste",
"previous": "Zurück" <div class="tab-pane fade" id="nav-absence" role="tabpanel" aria-labelledby="nav-absence-tab">
}, <br />
}, <h5>Abwesenheiten</h5>
"pageLength": 10, <table class="table table-hover" id="user_absences" >
"buttons" : { <thead>
"className" : "btn-danger" <tr>
} <th scope="col"></th>
}); <th scope="col">Art</th>
}) <th scope="col">Start</th>
</script> <th scope="col">Ende</th>
<hr> <th scope="col">Ganz/Vor/Na</th>
<h5>Jahresübersicht</h5> <th scope="col">Ganz/Vor/Na</th>
<table class="table table-hover" id="user_absence_year" > <th scope="col">Erstellt am</th>
<thead> <th scope="col">Status</th>
<tr> <th scope="col">Urlaub N</th>
<th scope="col"></th> <th scope="col">Urlaub R</th>
<th scope="col">Jahr</th> <th scope="col">Urlaub Next N</th>
<th scope="col">Tage Gesamt</th> <th scope="col">Urlaub Next Rest</th>
<th scope="col">Tage Verbraucht</th> </tr>
<th scope="col">Rest Vorjahr</th> </thead>
</tr> <tbody >
</thead> {% for ab in absences %}
<tbody > <tr>
{% for yi in yearinfo %} <td>{{forloop.counter}}</td>
<tr> <td>{{ab.reason.name}}</td>
<td>{{forloop.counter}}</td> <td>{{ab.start|date:"d.m.Y"}}</td>
<td>{{yi.year}}</td> <td>{{ab.end|date:"d.m.Y"}}</td>
<td>{{yi.days}}</td> <td>{% if ab.startday_info == "1" %} Vormittags {% elif ab.startday_info == "2" %} Nachmittags {% else %} Ganzer Tag {% endif %}</td>
<td>{{yi.days_inuse}}</td> <td>{% if ab.endday_info == "1" %} Vormittags {% elif ab.endday_info == "2" %} Nachmittags {% else %} Ganzer Tag {% endif %}</td>
<td>{{yi.restdays}}</td> <td>{{ab.created_date|date:"d.m.Y"}}</td>
</tr> <td>{% if ab.confirm_status == 0 %} OK {% elif ab.confirm_status == 1 %} Beantragt {% else %} Abgelehnt {% endif %} </td>
{% endfor %} <td>{{ab.holidays_normal}}</td>
</tbody> <td>{{ab.holidays_rest}}</td>
</table> <td>{{ab.holidays_normal_next}}</td>
<script type="text/javascript"> <td>{{ab.holidays_rest_next}}</td>
$(document).ready(function(){ </tr>
$('#user_absence_year').DataTable({ {% endfor %}
"language": { </tbody>
"search" : "Suche", </table>
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen", <script type="text/javascript">
"lengthMenu": "Zeige _MENU_ Einträge", $(document).ready(function(){
"zeroRecords": "Nichts gefunden", $('#user_absences').DataTable({
"infoEmpty": "Keine Einträge", columnDefs: [
"paginate": { { 'targets': 1, type: 'date-euro' },
"first": "Erste", { 'targets': 2, type: 'date-euro' }
"last": "Letzte", ],
"next": "Nächste", order: [
"previous": "Zurück" [1, 'asc'] // date column
}, ],
}, "language": {
"pageLength": 10, "search" : "Suche",
"buttons" : { "info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
"className" : "btn-danger" "lengthMenu": "Zeige _MENU_ Einträge",
} "zeroRecords": "Nichts gefunden",
}); "infoEmpty": "Keine Einträge",
}) "paginate": {
</script> "first": "Erste",
<hr> "last": "Letzte",
<h5>Logins (letzten 50)</h5> "next": "Nächste",
"previous": "Zurück"
},
},
"pageLength": 10,
"buttons" : {
"className" : "btn-danger"
}
});
})
</script>
</div>
<div class="tab-pane fade" id="nav-year" role="tabpanel" aria-labelledby="nav-year-tab">
<br />
<h5>Jahresübersicht</h5>
<table class="table table-hover" id="user_absence_year" >
<thead>
<tr>
<th scope="col"></th>
<th scope="col">Jahr</th>
<th scope="col">Tage Gesamt</th>
<th scope="col">Tage Verbraucht</th>
<th scope="col">Rest Vorjahr</th>
</tr>
</thead>
<tbody >
{% for yi in yearinfo %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{yi.year}}</td>
<td>{{yi.days}}</td>
<td>{{yi.days_inuse}}</td>
<td>{{yi.restdays}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function(){
$('#user_absence_year').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": 10,
"buttons" : {
"className" : "btn-danger"
}
});
})
</script>
</div>
<div class="tab-pane fade" id="nav-logins" role="tabpanel" aria-labelledby="nav-logins-tab">
<br />
<h5>Logins (letzten 50)</h5>
{% for ele in logdata reversed %} {% for ele in logdata reversed %}
{{forloop.revcounter}}. {{ele|date:"d.m.Y, H:i"}}<br /> {{forloop.revcounter}}. {{ele|date:"d.m.Y, H:i"}}<br />
{% endfor %} {% endfor %}
</div>
</div> </div>
</div>
<script type="text/javascript">
$('#usersingleelements a').on('click', function (e) {
e.preventDefault();
$(this).tab('show');
});
</script>
{% endblock content %} {% endblock content %}

BIN
dump.rdb

Binary file not shown.