zeiterfassung für admin eingefügt

This commit is contained in:
2025-02-19 21:47:29 +01:00
parent 3757658539
commit 4b1d7ca7be
3 changed files with 88 additions and 0 deletions

View File

@@ -432,6 +432,25 @@ def time_tracking():
return redirect(url_for('dashboard'))
@app.route('/admin/time_tracking', methods=['GET'])
def admin_time_tracking():
if not is_admin():
flash("Zugriff verweigert!", "red")
return redirect(url_for('dashboard'))
db = get_db()
# Hole alle Zeiteinträge (JOIN mit users, damit wir den username sehen)
time_entries = db.execute("""
SELECT t.id, t.user_id, t.activity, t.start_time, t.end_time,
u.username
FROM time_entries t
JOIN users u ON t.user_id = u.id
ORDER BY t.start_time DESC
""").fetchall()
return render_template('admin_time_entries.html', time_entries=time_entries)
# ------------------------------------------------------------
# DASHBOARD
# ------------------------------------------------------------

View File

@@ -165,6 +165,11 @@ Admin-Bereich
<p class="text-sm text-gray-400 mt-6">Wähle oben in der Benutzerverwaltung „Lesezeichen“ für einen Nutzer aus, um konkrete Einträge zu sehen.</p>
{% endif %}
</div>
<a href="{{ url_for('admin_time_tracking') }}"
class="bg-blue-500 hover:bg-blue-600 text-white px-3 py-1 rounded text-sm">
Zeiterfassung einsehen
</a>
</div> <!-- Grid Ende -->

View File

@@ -0,0 +1,64 @@
{% extends "base.html" %}
{% block title %}Zeiterfassung aller Benutzer{% endblock title %}
{% block content %}
<div class="container mx-auto py-8 px-4">
<h1 class="text-2xl font-bold mb-4">Zeiterfassung (alle Benutzer)</h1>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="bg-{{category}}-500 text-white p-2 mb-2 rounded">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
<div class="overflow-x-auto">
<table class="table-auto w-full text-left">
<thead>
<tr class="border-b">
<th class="px-2 py-1">ID</th>
<th class="px-2 py-1">Benutzer</th>
<th class="px-2 py-1">Aktivität</th>
<th class="px-2 py-1">Start</th>
<th class="px-2 py-1">Ende</th>
<th class="px-2 py-1">Dauer</th>
</tr>
</thead>
<tbody>
{% for entry in time_entries %}
<tr class="border-b">
<td class="px-2 py-1">{{ entry.id }}</td>
<td class="px-2 py-1">{{ entry.username }}</td>
<td class="px-2 py-1">{{ entry.activity }}</td>
<td class="px-2 py-1">{{ entry.start_time }}</td>
<td class="px-2 py-1">
{% if entry.end_time %}
{{ entry.end_time }}
{% else %}
<span class="text-sm text-gray-600">läuft …</span>
{% endif %}
</td>
<td class="px-2 py-1">
{% if entry.end_time %}
<!-- Beispielhafter Zeitunterschied in Minuten -->
{% set duration = (entry.end_time|datetime - entry.start_time|datetime).total_seconds() / 60 %}
{{ duration|round(2) }} Minuten
{% else %}
...
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<a href="{{ url_for('admin_panel') }}"
class="inline-block bg-blue-500 text-white px-4 py-2 rounded mt-4 hover:bg-blue-600">
Zurück zum Admin-Menü
</a>
</div>
{% endblock content %}