This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BreakPilot Dev 19855efacc
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
feat: BreakPilot PWA - Full codebase (clean push without large binaries)
All services: admin-v2, studio-v2, website, ai-compliance-sdk,
consent-service, klausur-service, voice-service, and infrastructure.
Large PDFs and compiled binaries excluded via .gitignore.
2026-02-11 13:25:58 +01:00

184 lines
5.7 KiB
Python

"""
School Module - Dashboard Page
Main school dashboard with stats and quick actions
"""
from ..styles import SCHOOL_BASE_STYLES, DASHBOARD_STYLES
from ..templates import ICONS, render_base_page, COMMON_SCRIPTS
def school_dashboard() -> str:
"""Main school dashboard"""
styles = SCHOOL_BASE_STYLES + DASHBOARD_STYLES
content = f'''
<main class="main-content">
<div class="page-header">
<div>
<h1 class="page-title">Dashboard</h1>
<p class="page-subtitle">Willkommen zurück! Hier ist die Übersicht für heute.</p>
</div>
</div>
<!-- Stats Grid -->
<div class="dashboard-grid">
<div class="card">
<div class="card-header">
<span class="card-title">Anwesend heute</span>
<div class="card-icon accent">
{ICONS['check_circle']}
</div>
</div>
<div class="stat-value">24/26</div>
<div class="stat-label">92% Anwesenheitsrate</div>
</div>
<div class="card">
<div class="card-header">
<span class="card-title">Offene Entschuldigungen</span>
<div class="card-icon warning">
{ICONS['warning']}
</div>
</div>
<div class="stat-value">3</div>
<div class="stat-label">Warten auf Bestätigung</div>
</div>
<div class="card">
<div class="card-header">
<span class="card-title">Ungelesene Nachrichten</span>
<div class="card-icon info">
{ICONS['mail']}
</div>
</div>
<div class="stat-value">5</div>
<div class="stat-label">Neue Elternnachrichten</div>
</div>
<div class="card">
<div class="card-header">
<span class="card-title">Nächster Elternsprechtag</span>
<div class="card-icon primary">
{ICONS['calendar']}
</div>
</div>
<div class="stat-value">15.01.</div>
<div class="stat-label">8 Termine gebucht</div>
</div>
</div>
<!-- Quick Actions -->
<h3 style="margin-bottom: 1rem; font-weight: 600;">Schnellzugriff</h3>
<div class="quick-actions">
<a href="#" class="quick-action" onclick="recordAttendance()">
<div class="quick-action-icon">
{ICONS['attendance']}
</div>
<span class="quick-action-text">Anwesenheit erfassen</span>
</a>
<a href="#" class="quick-action" onclick="addGrade()">
<div class="quick-action-icon">
{ICONS['edit']}
</div>
<span class="quick-action-text">Note eintragen</span>
</a>
<a href="#" class="quick-action" onclick="sendMessage()">
<div class="quick-action-icon">
{ICONS['messages']}
</div>
<span class="quick-action-text">Nachricht senden</span>
</a>
<a href="#" class="quick-action" onclick="generateQRCode()">
<div class="quick-action-icon">
{ICONS['qr']}
</div>
<span class="quick-action-text">Eltern-QR erstellen</span>
</a>
</div>
<!-- Recent Activity Table -->
<div class="table-container">
<div class="table-header">
<span class="table-title">Heutige Abwesenheiten</span>
<button class="btn btn-secondary" onclick="viewAllAbsences()">Alle anzeigen</button>
</div>
<table>
<thead>
<tr>
<th>Schüler</th>
<th>Klasse</th>
<th>Stunden</th>
<th>Status</th>
<th>Aktion</th>
</tr>
</thead>
<tbody>
<tr>
<td>Anna Schmidt</td>
<td>5a</td>
<td>1.-4. Stunde</td>
<td><span class="badge absent">⚠ Unentschuldigt</span></td>
<td><button class="btn btn-primary" onclick="confirmAbsence('1')">Bestätigen</button></td>
</tr>
<tr>
<td>Ben Müller</td>
<td>5a</td>
<td>Ganztägig</td>
<td><span class="badge pending">⏳ Gemeldet</span></td>
<td><button class="btn btn-secondary" onclick="confirmAbsence('2')">Prüfen</button></td>
</tr>
<tr>
<td>Clara Weber</td>
<td>5a</td>
<td>3. Stunde</td>
<td><span class="badge late">⏰ Verspätet</span></td>
<td><button class="btn btn-secondary" onclick="viewDetails('3')">Details</button></td>
</tr>
</tbody>
</table>
</div>
</main>'''
scripts = COMMON_SCRIPTS + '''
<script>
function recordAttendance() {
window.location.href = '/school/attendance';
}
function addGrade() {
window.location.href = '/school/grades';
}
function sendMessage() {
alert('Nachrichtenkomponist wird geöffnet...');
}
function generateQRCode() {
alert('QR-Code Generator wird geöffnet...');
}
function confirmAbsence(id) {
alert('Abwesenheit ' + id + ' wird bestätigt...');
}
function viewDetails(id) {
alert('Details für ' + id + ' werden angezeigt...');
}
function viewAllAbsences() {
window.location.href = '/school/attendance';
}
document.addEventListener('DOMContentLoaded', async () => {
if (!getAuthToken()) {
// Redirect to login if not authenticated
// window.location.href = '/app/login';
}
});
</script>'''
return render_base_page("Schulverwaltung", styles, content, scripts, "dashboard")