06/10 Reorganize customer dashboard sections 2
This commit is contained in:
@@ -126,6 +126,58 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{# ── Recent activity ─────────────────────────────────────────────────────── #}
|
||||||
|
<div class="card shadow-sm mb-4">
|
||||||
|
<div class="card-header bg-light fw-semibold">
|
||||||
|
<i class="bi bi-clock-history me-1"></i>Recent Activity
|
||||||
|
</div>
|
||||||
|
<div class="card-body p-0">
|
||||||
|
{% if recent_inspections %}
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover mb-0">
|
||||||
|
<thead class="table-light">
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>Facility</th>
|
||||||
|
<th>Area</th>
|
||||||
|
{% if current_user.role != 'inspector' %}<th>Inspector</th>{% endif %}
|
||||||
|
<th>Score</th>
|
||||||
|
<th>Status</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for insp in recent_inspections %}
|
||||||
|
<tr style="cursor:pointer;" onclick="window.location='{{ url_for('inspections.view', inspection_id=insp.id) }}'">
|
||||||
|
<td><small>{{ insp.inspection_date.strftime('%Y-%m-%d %H:%M') }}</small></td>
|
||||||
|
<td>{{ insp.facility.name }}</td>
|
||||||
|
<td>{{ insp.area.name if insp.area else '—' }}</td>
|
||||||
|
{% if current_user.role != 'inspector' %}<td>{{ insp.inspector.display_name }}</td>{% endif %}
|
||||||
|
<td>
|
||||||
|
{% if insp.overall_score %}
|
||||||
|
<span class="badge bg-{% if insp.overall_score >= 90 %}success{% elif insp.overall_score >= 70 %}warning{% else %}danger{% endif %}">
|
||||||
|
{{ insp.overall_score }}%
|
||||||
|
</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="text-muted">—</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="badge bg-{% if insp.status == 'completed' %}success{% elif insp.status == 'flagged' %}danger{% else %}secondary{% endif %}">
|
||||||
|
{{ 'Submitted' if insp.status == 'completed' else insp.status|title }}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="text-center py-4 text-muted">
|
||||||
|
<i class="bi bi-inbox fs-2 d-block mb-2"></i>No recent inspections.
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{# ── System quick stats (admin/director) ─────────────────────────────────── #}
|
{# ── System quick stats (admin/director) ─────────────────────────────────── #}
|
||||||
{% if current_user.role in ['admin', 'director'] %}
|
{% if current_user.role in ['admin', 'director'] %}
|
||||||
@@ -314,59 +366,6 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{# ── Recent activity ─────────────────────────────────────────────────────── #}
|
|
||||||
<div class="card shadow-sm">
|
|
||||||
<div class="card-header bg-light fw-semibold">
|
|
||||||
<i class="bi bi-clock-history me-1"></i>Recent Activity
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-0">
|
|
||||||
{% if recent_inspections %}
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover mb-0">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th>Date</th>
|
|
||||||
<th>Facility</th>
|
|
||||||
<th>Area</th>
|
|
||||||
{% if current_user.role != 'inspector' %}<th>Inspector</th>{% endif %}
|
|
||||||
<th>Score</th>
|
|
||||||
<th>Status</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for insp in recent_inspections %}
|
|
||||||
<tr style="cursor:pointer;" onclick="window.location='{{ url_for('inspections.view', inspection_id=insp.id) }}'">
|
|
||||||
<td><small>{{ insp.inspection_date.strftime('%Y-%m-%d %H:%M') }}</small></td>
|
|
||||||
<td>{{ insp.facility.name }}</td>
|
|
||||||
<td>{{ insp.area.name if insp.area else '—' }}</td>
|
|
||||||
{% if current_user.role != 'inspector' %}<td>{{ insp.inspector.display_name }}</td>{% endif %}
|
|
||||||
<td>
|
|
||||||
{% if insp.overall_score %}
|
|
||||||
<span class="badge bg-{% if insp.overall_score >= 90 %}success{% elif insp.overall_score >= 70 %}warning{% else %}danger{% endif %}">
|
|
||||||
{{ insp.overall_score }}%
|
|
||||||
</span>
|
|
||||||
{% else %}
|
|
||||||
<span class="text-muted">—</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="badge bg-{% if insp.status == 'completed' %}success{% elif insp.status == 'flagged' %}danger{% else %}secondary{% endif %}">
|
|
||||||
{{ 'Submitted' if insp.status == 'completed' else insp.status|title }}
|
|
||||||
</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="text-center py-4 text-muted">
|
|
||||||
<i class="bi bi-inbox fs-2 d-block mb-2"></i>No recent inspections.
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{# ── Customer portal: scoped facilities panel ───────────────────────────── #}
|
{# ── Customer portal: scoped facilities panel ───────────────────────────── #}
|
||||||
{% if current_user.role == 'customer' %}
|
{% if current_user.role == 'customer' %}
|
||||||
<div class="row g-3 mt-2">
|
<div class="row g-3 mt-2">
|
||||||
|
|||||||
Reference in New Issue
Block a user