Kunden & Lizenzen + Ressourcen - Nicht so zufrieden

Dieser Commit ist enthalten in:
2025-06-09 23:45:42 +02:00
Ursprung 06bfdfaf2a
Commit c7decff64e
6 geänderte Dateien mit 573 neuen und 40 gelöschten Zeilen

Datei anzeigen

@@ -68,10 +68,10 @@
<div class="d-flex justify-content-between align-items-center mb-4">
<h1>Dashboard</h1>
<div>
<a href="/customers-licenses" class="btn btn-success">👥 Kunden & Lizenzen</a>
<a href="/create" class="btn btn-primary"> Neue Lizenz</a>
<a href="/batch" class="btn btn-primary">🔑 Batch-Lizenzen</a>
<a href="/audit" class="btn btn-secondary">📝 Log</a>
<a href="/customers-licenses{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-success">👥 Kunden & Lizenzen</a>
<a href="/create{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-primary"> Neue Lizenz</a>
<a href="/resources{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-info">📦 Resource Pool</a>
<a href="/audit{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-secondary">📝 Log</a>
</div>
</div>
@@ -274,7 +274,14 @@
<div class="card-header bg-primary text-white">
<h5 class="mb-0">
<i class="fas fa-server"></i> Resource Pool Status
<a href="/resources{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-sm btn-light float-end">Verwalten →</a>
<div class="float-end">
<a href="/resources/add{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-sm btn-success me-1" title="Ressourcen hinzufügen">
<i class="bi bi-plus"></i> Hinzufügen
</a>
<a href="/resources{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}" class="btn btn-sm btn-light">
Verwalten →
</a>
</div>
</h5>
</div>
<div class="card-body">
@@ -284,25 +291,46 @@
<div class="col-md-4 mb-3">
<div class="d-flex align-items-center">
<div class="me-3">
<i class="fas fa-{{ 'globe' if type == 'domain' else ('network-wired' if type == 'ipv4' else 'phone') }} fa-2x text-{{ 'success' if data.available_percent > 50 else ('warning' if data.available_percent > 20 else 'danger') }}"></i>
<a href="/resources?type={{ type }}{{ '&show_test=true' if request.args.get('show_test') == 'true' else '' }}"
class="text-decoration-none">
<i class="fas fa-{{ 'globe' if type == 'domain' else ('network-wired' if type == 'ipv4' else 'phone') }} fa-2x text-{{ 'success' if data.available_percent > 50 else ('warning' if data.available_percent > 20 else 'danger') }}"></i>
</a>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">{{ type|upper }}</h6>
<h6 class="mb-1">
<a href="/resources?type={{ type }}{{ '&show_test=true' if request.args.get('show_test') == 'true' else '' }}"
class="text-decoration-none text-dark">{{ type|upper }}</a>
</h6>
<div class="d-flex justify-content-between align-items-center">
<span>
<strong>{{ data.available }}</strong> / {{ data.total }} verfügbar
<strong class="text-{{ 'success' if data.available_percent > 50 else ('warning' if data.available_percent > 20 else 'danger') }}">{{ data.available }}</strong> / {{ data.total }} verfügbar
</span>
<span class="badge bg-{{ 'success' if data.available_percent > 50 else ('warning' if data.available_percent > 20 else 'danger') }}">
{{ data.available_percent }}%
</span>
</div>
<div class="progress mt-1" style="height: 6px;">
<div class="progress mt-1" style="height: 8px;">
<div class="progress-bar bg-{{ 'success' if data.available_percent > 50 else ('warning' if data.available_percent > 20 else 'danger') }}"
style="width: {{ data.available_percent }}%"></div>
style="width: {{ data.available_percent }}%"
data-bs-toggle="tooltip"
title="{{ data.available }} von {{ data.total }} verfügbar"></div>
</div>
<div class="d-flex justify-content-between mt-1">
<small class="text-muted">
<a href="/resources?type={{ type }}&status=allocated{{ '&show_test=true' if request.args.get('show_test') == 'true' else '' }}"
class="text-decoration-none text-muted">
{{ data.allocated }} zugeteilt
</a>
</small>
{% if data.quarantine > 0 %}
<small>
<a href="/resources?type={{ type }}&status=quarantine{{ '&show_test=true' if request.args.get('show_test') == 'true' else '' }}"
class="text-decoration-none text-warning">
<i class="bi bi-exclamation-triangle"></i> {{ data.quarantine }} in Quarantäne
</a>
</small>
{% endif %}
</div>
<small class="text-muted">
{{ data.allocated }} zugeteilt | {{ data.quarantine }} in Quarantäne
</small>
</div>
</div>
</div>
@@ -318,9 +346,15 @@
{% endif %}
</div>
{% if resource_warning %}
<div class="alert alert-warning mt-3 mb-0" role="alert">
<i class="fas fa-exclamation-triangle"></i>
<strong>Warnung:</strong> {{ resource_warning }}
<div class="alert alert-danger mt-3 mb-0 d-flex justify-content-between align-items-center" role="alert">
<div>
<i class="fas fa-exclamation-triangle"></i>
<strong>Kritisch:</strong> {{ resource_warning }}
</div>
<a href="/resources/add{{ '?show_test=true' if request.args.get('show_test') == 'true' else '' }}"
class="btn btn-sm btn-danger">
<i class="bi bi-plus"></i> Ressourcen auffüllen
</a>
</div>
{% endif %}
</div>