06/12 Redesign dashboard 2

This commit is contained in:
2026-06-12 11:34:27 -04:00
parent bad5b51746
commit 479f4ecb14
2 changed files with 237 additions and 15 deletions
+103
View File
@@ -90,6 +90,66 @@
{% endif %}
</div>
{# ── Second stat row ────────────────────────────────────────────────────── #}
<div class="row g-3 mb-4">
<div class="col-6 col-md">
<a href="{{ url_for('issues.index') }}" class="text-decoration-none">
<div class="card h-100 border-0 shadow-sm" style="background:#fff7ed;">
<div class="card-body d-flex justify-content-between align-items-center">
<div>
<div class="small fw-semibold" style="color:#c2410c;">Issues Opened Today</div>
<div class="fs-2 fw-bold" style="color:#ea580c;">{{ issues_opened_today }}</div>
</div>
<i class="bi bi-flag" style="font-size:2.5rem;opacity:.2;color:#ea580c;"></i>
</div>
</div>
</a>
</div>
{% if current_user.role != 'customer' %}
<div class="col-6 col-md">
<a href="{{ url_for('issues.index', status='pending_verification') }}" class="text-decoration-none">
<div class="card h-100 border-0 shadow-sm" style="background:#eff6ff;">
<div class="card-body d-flex justify-content-between align-items-center">
<div>
<div class="small fw-semibold" style="color:#1d4ed8;">Pending Verification</div>
<div class="fs-2 fw-bold" style="color:#2563eb;">{{ pending_verification }}</div>
</div>
<i class="bi bi-clipboard2-check" style="font-size:2.5rem;opacity:.2;color:#2563eb;"></i>
</div>
</div>
</a>
</div>
<div class="col-6 col-md">
<a href="{{ url_for('inspections.index', status='in_progress') }}" class="text-decoration-none">
<div class="card h-100 border-0 shadow-sm" style="background:#fefce8;">
<div class="card-body d-flex justify-content-between align-items-center">
<div>
<div class="small fw-semibold" style="color:#a16207;">Stale In-Progress</div>
<div class="fs-2 fw-bold" style="color:#ca8a04;">{{ stale_in_progress }}</div>
<div class="small" style="color:#a16207;font-size:.7rem;">started &gt;24h ago</div>
</div>
<i class="bi bi-hourglass-split" style="font-size:2.5rem;opacity:.2;color:#ca8a04;"></i>
</div>
</div>
</a>
</div>
<div class="col-6 col-md">
<a href="{{ url_for('issues.index', status='open') }}" class="text-decoration-none">
<div class="card h-100 border-0 shadow-sm" style="background:#f0fdf4;">
<div class="card-body d-flex justify-content-between align-items-center">
<div>
<div class="small fw-semibold" style="color:#166534;">Unassigned Open</div>
<div class="fs-2 fw-bold" style="color:#16a34a;">{{ unassigned_open }}</div>
<div class="small" style="color:#166534;font-size:.7rem;">no assignee</div>
</div>
<i class="bi bi-person-dash" style="font-size:2.5rem;opacity:.2;color:#16a34a;"></i>
</div>
</div>
</a>
</div>
{% endif %}
</div>
{# ── SLA Summary ─────────────────────────────────────────────────────────── #}
{% if sla_breached > 0 or sla_at_risk > 0 %}
<div class="row g-3 mb-4">
@@ -181,6 +241,49 @@
{# ── Inspector activity today (admin / director / PM) ───────────────────── #}
{% if inspector_activity %}
<div class="card shadow-sm mb-4">
<div class="card-header bg-light d-flex justify-content-between align-items-center">
<span class="fw-semibold"><i class="bi bi-people me-1"></i>Inspector Activity Today</span>
<a href="{{ url_for('inspections.index', date_from=today_str, date_to=today_str) }}"
class="btn btn-sm btn-outline-secondary">View all</a>
</div>
<div class="card-body p-0">
<table class="table table-sm table-hover mb-0" style="font-size:.85rem;">
<thead class="table-light">
<tr>
<th>Inspector</th>
<th class="text-center" style="width:120px;">Submitted Today</th>
<th style="width:200px;"></th>
</tr>
</thead>
<tbody>
{% for row in inspector_activity %}
<tr class="{{ 'table-success' if row.count > 0 else '' }}">
<td>{{ row.name }}</td>
<td class="text-center">
{% if row.count > 0 %}
<span class="badge bg-success">{{ row.count }}</span>
{% else %}
<span class="text-muted"></span>
{% endif %}
</td>
<td>
<div class="progress" style="height:6px;margin-top:4px;">
{% set max_count = inspector_activity | map(attribute='count') | max %}
{% set pct = (row.count / max_count * 100) | int if max_count > 0 else 0 %}
<div class="progress-bar bg-success" style="width:{{ pct }}%;"></div>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endif %}
{# ── My open issues (inspector widget) ──────────────────────────────────── #}
{% if my_issues %}
<div class="card shadow-sm mb-4">