July 4 - Update Vendor Work-Order Workflow

This commit is contained in:
2026-07-04 16:25:31 -04:00
parent 03ce083691
commit 8f971a403b
12 changed files with 718 additions and 6 deletions
+100
View File
@@ -0,0 +1,100 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Work Order — {{ facility.name if facility else 'JQC' }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<style>
body { background:#f1f5f9; color:#1f2937; }
.wo-wrap { max-width:640px; margin:2rem auto; padding:0 1rem; }
.sev-critical{background:#dc2626}.sev-high{background:#ea580c}
.sev-medium{background:#d97706}.sev-low{background:#64748b}
@media (max-width:576px){ .wo-wrap{ margin:1rem auto; } }
</style>
</head>
<body>
<div class="wo-wrap">
<div class="d-flex align-items-center gap-2 mb-3">
<i class="bi bi-clipboard-check-fill fs-3 text-primary"></i>
<div>
<div class="fw-bold">Contractor Work Order</div>
<div class="text-muted small">{{ facility.name if facility else 'Facility' }}</div>
</div>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% for category, message in messages %}
<div class="alert alert-{{ 'success' if category == 'success' else 'warning' if category == 'warning' else 'info' }}">
{{ message }}
</div>
{% endfor %}
{% endwith %}
<div class="card shadow-sm mb-3">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start mb-2">
<span class="badge sev-{{ issue.severity }} text-white text-uppercase">{{ issue.severity }}</span>
{% set badge = {'sent':'secondary','acknowledged':'info','completed':'success'}[wo.status] %}
<span class="badge bg-{{ badge }}">{{ wo.status_label }}</span>
</div>
<table class="table table-sm mb-3">
<tr><th class="text-muted" style="width:120px;">Facility</th><td>{{ facility.name if facility else '—' }}</td></tr>
{% if area %}<tr><th class="text-muted">Area</th><td>{{ area.name }}</td></tr>{% endif %}
<tr><th class="text-muted">Reported</th><td>{{ issue.reported_at.strftime('%b %d, %Y') if issue.reported_at else '—' }}</td></tr>
</table>
<div class="mb-2">
<div class="text-muted small text-uppercase mb-1">What needs doing</div>
<div>{{ issue.description }}</div>
</div>
{% if wo.message %}
<div class="mt-3 p-2 bg-light rounded">
<div class="text-muted small text-uppercase mb-1">Note from the team</div>
<div>{{ wo.message }}</div>
</div>
{% endif %}
</div>
</div>
{% if wo.status == 'completed' %}
<div class="alert alert-success">
<i class="bi bi-check-circle-fill me-1"></i>
You marked this complete on {{ wo.completed_at.strftime('%b %d, %Y') if wo.completed_at else 'file' }}.
The team will verify the work. No further action is needed.
</div>
{% else %}
{% if wo.status == 'sent' %}
<form method="POST" action="{{ url_for('work_orders.update', token=wo.token) }}" class="mb-2">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="action" value="acknowledge">
<button type="submit" class="btn btn-outline-primary w-100">
<i class="bi bi-hand-thumbs-up me-1"></i> Acknowledge — I'll handle this
</button>
</form>
{% endif %}
<div class="card shadow-sm">
<div class="card-body">
<form method="POST" action="{{ url_for('work_orders.update', token=wo.token) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="action" value="complete">
<label class="form-label fw-semibold">Mark work complete</label>
<textarea name="vendor_note" class="form-control mb-2" rows="3"
placeholder="Optional: describe what you did…"></textarea>
<button type="submit" class="btn btn-success w-100">
<i class="bi bi-check2-circle me-1"></i> Mark as Completed
</button>
</form>
</div>
</div>
{% endif %}
<p class="text-center text-muted small mt-4">This link is private to you. Please don't share it.</p>
</div>
</body>
</html>