Aug 5 - Update (new design) - move scheduled Inspection section to top
This commit is contained in:
@@ -20,6 +20,75 @@
|
|||||||
<div class="text-muted">{{ now_display }}</div>
|
<div class="text-muted">{{ now_display }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{# ── Scheduled inspections ────────────────────────────────────────────── #}
|
||||||
|
{% if current_user.role != 'customer' %}
|
||||||
|
<div class="jqc-card">
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||||
|
<div class="jqc-card-title mb-0">
|
||||||
|
<span class="jqc-tile-icon"><i class="bi bi-calendar2-week"></i></span>Scheduled Inspection In Progress
|
||||||
|
</div>
|
||||||
|
<a href="{{ url_for('scheduled_inspections.index') }}" class="btn btn-sm btn-outline-primary">View all</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if sched_overdue_count %}
|
||||||
|
<div class="alert alert-danger py-2">
|
||||||
|
<i class="bi bi-alarm-fill me-1"></i>
|
||||||
|
<strong>{{ sched_overdue_count }}</strong> scheduled inspection{{ 's' if sched_overdue_count != 1 }}
|
||||||
|
{{ 'are' if sched_overdue_count != 1 else 'is' }} <strong>overdue</strong>.
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if sched_upcoming %}
|
||||||
|
<div class="jqc-table-wrap table-responsive">
|
||||||
|
<table class="table table-hover align-middle">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Facility</th><th>Inspection Template</th><th>Inspector</th>
|
||||||
|
<th>How Often</th><th>Next Due Date</th><th class="text-end"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for s in sched_upcoming %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ s.facility.name if s.facility else '—' }}</td>
|
||||||
|
<td class="small">{{ s.template.name if s.template else '—' }}</td>
|
||||||
|
<td class="small">{{ s.inspector.display_name if s.inspector else '—' }}</td>
|
||||||
|
<td class="small text-muted">{{ s.recurrence_label }}</td>
|
||||||
|
<td class="small">{{ s.next_due_date.strftime('%b %d, %Y') }}</td>
|
||||||
|
<td class="text-end text-nowrap">
|
||||||
|
{% if s.inspector_id and s.inspector_id == current_user.id %}
|
||||||
|
{% if s.is_acknowledged %}
|
||||||
|
<span class="badge bg-success" title="You confirmed receipt"><i class="bi bi-check-circle"></i> Confirmed</span>
|
||||||
|
{% else %}
|
||||||
|
<form method="POST" class="d-inline" action="{{ url_for('scheduled_inspections.acknowledge', schedule_id=s.id) }}">
|
||||||
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||||
|
<button type="submit" class="btn btn-sm btn-outline-success py-0"
|
||||||
|
title="Confirm you received this request">
|
||||||
|
<i class="bi bi-check-lg"></i> Confirm</button>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
{% set open_id = sched_open_inspections.get(s.id) %}
|
||||||
|
{% if open_id %}
|
||||||
|
<a href="{{ url_for('inspections.execute', inspection_id=open_id) }}"
|
||||||
|
class="btn btn-sm btn-warning py-0" title="You already started this — resume it">
|
||||||
|
<i class="bi bi-pencil-square"></i> Continue</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ url_for('scheduled_inspections.start', schedule_id=s.id) }}"
|
||||||
|
class="btn btn-sm btn-success py-0"><i class="bi bi-play-fill"></i> Start</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="text-muted small"><i class="bi bi-info-circle me-1"></i>No inspections due in the next 7 days.</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{# ── KPI row ──────────────────────────────────────────────────────────── #}
|
{# ── KPI row ──────────────────────────────────────────────────────────── #}
|
||||||
<div class="row row-cols-2 row-cols-lg-4 g-3 mb-4">
|
<div class="row row-cols-2 row-cols-lg-4 g-3 mb-4">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
@@ -150,75 +219,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# ── Scheduled inspections ────────────────────────────────────────────── #}
|
|
||||||
{% if current_user.role != 'customer' %}
|
|
||||||
<div class="jqc-card">
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
||||||
<div class="jqc-card-title mb-0">
|
|
||||||
<span class="jqc-tile-icon"><i class="bi bi-calendar2-week"></i></span>Scheduled Inspection In Progress
|
|
||||||
</div>
|
|
||||||
<a href="{{ url_for('scheduled_inspections.index') }}" class="btn btn-sm btn-outline-primary">View all</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if sched_overdue_count %}
|
|
||||||
<div class="alert alert-danger py-2">
|
|
||||||
<i class="bi bi-alarm-fill me-1"></i>
|
|
||||||
<strong>{{ sched_overdue_count }}</strong> scheduled inspection{{ 's' if sched_overdue_count != 1 }}
|
|
||||||
{{ 'are' if sched_overdue_count != 1 else 'is' }} <strong>overdue</strong>.
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if sched_upcoming %}
|
|
||||||
<div class="jqc-table-wrap table-responsive">
|
|
||||||
<table class="table table-hover align-middle">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Facility</th><th>Inspection Template</th><th>Inspector</th>
|
|
||||||
<th>How Often</th><th>Next Due Date</th><th class="text-end"></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for s in sched_upcoming %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ s.facility.name if s.facility else '—' }}</td>
|
|
||||||
<td class="small">{{ s.template.name if s.template else '—' }}</td>
|
|
||||||
<td class="small">{{ s.inspector.display_name if s.inspector else '—' }}</td>
|
|
||||||
<td class="small text-muted">{{ s.recurrence_label }}</td>
|
|
||||||
<td class="small">{{ s.next_due_date.strftime('%b %d, %Y') }}</td>
|
|
||||||
<td class="text-end text-nowrap">
|
|
||||||
{% if s.inspector_id and s.inspector_id == current_user.id %}
|
|
||||||
{% if s.is_acknowledged %}
|
|
||||||
<span class="badge bg-success" title="You confirmed receipt"><i class="bi bi-check-circle"></i> Confirmed</span>
|
|
||||||
{% else %}
|
|
||||||
<form method="POST" class="d-inline" action="{{ url_for('scheduled_inspections.acknowledge', schedule_id=s.id) }}">
|
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
|
||||||
<button type="submit" class="btn btn-sm btn-outline-success py-0"
|
|
||||||
title="Confirm you received this request">
|
|
||||||
<i class="bi bi-check-lg"></i> Confirm</button>
|
|
||||||
</form>
|
|
||||||
{% endif %}
|
|
||||||
{% set open_id = sched_open_inspections.get(s.id) %}
|
|
||||||
{% if open_id %}
|
|
||||||
<a href="{{ url_for('inspections.execute', inspection_id=open_id) }}"
|
|
||||||
class="btn btn-sm btn-warning py-0" title="You already started this — resume it">
|
|
||||||
<i class="bi bi-pencil-square"></i> Continue</a>
|
|
||||||
{% else %}
|
|
||||||
<a href="{{ url_for('scheduled_inspections.start', schedule_id=s.id) }}"
|
|
||||||
class="btn btn-sm btn-success py-0"><i class="bi bi-play-fill"></i> Start</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="text-muted small"><i class="bi bi-info-circle me-1"></i>No inspections due in the next 7 days.</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{# ── Recent activity ──────────────────────────────────────────────────── #}
|
{# ── Recent activity ──────────────────────────────────────────────────── #}
|
||||||
<div class="jqc-card">
|
<div class="jqc-card">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||||
|
|||||||
Reference in New Issue
Block a user