Files
POPS/app/templates/printer_detail.html
Martin Hohenberg ff2b618414 Duplicate job
2026-07-06 17:17:22 +02:00

127 lines
5.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% extends "base.html" %}
{% block title %}{{ printer.name }} — POPS{% endblock %}
{% block content %}
<div class="d-flex align-items-center gap-3 mb-4">
<a href="/printers" class="text-secondary text-decoration-none"><i class="bi bi-arrow-left"></i></a>
<h5 class="text-white mb-0">{{ printer.name }}</h5>
{% set s = printer.status.value %}
{% if s == 'printing' %}<span class="badge bg-primary">printing</span>
{% elif s == 'idle' %}<span class="badge bg-success">idle</span>
{% elif s == 'error' %}<span class="badge bg-danger">error</span>
{% else %}<span class="badge bg-secondary">offline</span>
{% endif %}
{% if printer.decommissioned_at %}
<span class="badge bg-warning text-dark">decommissioned</span>
{% endif %}
</div>
{# ── Currently printing ── #}
{% if current_job %}
<a href="/jobs/{{ current_job.id }}" class="text-decoration-none">
<div class="card mb-4 border-primary">
<div class="card-body d-flex align-items-center gap-3">
<i class="bi bi-printer text-primary fs-4"></i>
<div>
<div class="text-secondary small text-uppercase">Currently printing</div>
<div class="text-white fw-semibold">{{ current_job.file_name or current_job.name or '—' }}</div>
{% if current_job.customer %}<div class="text-secondary small">{{ current_job.customer }}</div>{% endif %}
</div>
<i class="bi bi-chevron-right text-secondary ms-auto"></i>
</div>
</div>
</a>
{% endif %}
<div class="row g-3 mb-4">
{# ── Info card ── #}
<div class="col-md-6">
<div class="card h-100">
<div class="card-header text-secondary small text-uppercase fw-normal" style="border-color:#21262d">Details</div>
<div class="card-body">
<table class="table table-dark table-sm mb-0" style="font-size:.875rem">
<tbody>
<tr><td class="text-secondary border-0" style="width:40%">Type</td>
<td class="border-0">{{ printer.printer_type.name if printer.printer_type else '—' }}</td></tr>
<tr><td class="text-secondary">Bed volume</td>
<td>{% if printer.printer_type %}{{ printer.printer_type.bed_x_mm }}×{{ printer.printer_type.bed_y_mm }}×{{ printer.printer_type.bed_z_mm }} mm{% else %}—{% endif %}</td></tr>
<tr><td class="text-secondary">Location</td>
<td>{{ printer.location or '—' }}</td></tr>
</tbody>
</table>
</div>
</div>
</div>
{# ── Lifecycle card ── #}
<div class="col-md-6">
<div class="card h-100">
<div class="card-header text-secondary small text-uppercase fw-normal" style="border-color:#21262d">Lifecycle</div>
<div class="card-body">
<table class="table table-dark table-sm mb-0" style="font-size:.875rem">
<tbody>
<tr><td class="text-secondary border-0" style="width:50%">Purchased</td>
<td class="border-0">{{ printer.bought_at.strftime('%d.%m.%Y') if printer.bought_at else '—' }}</td></tr>
<tr><td class="text-secondary">Last maintenance</td>
<td>{{ printer.last_maintenance_at.strftime('%d.%m.%Y') if printer.last_maintenance_at else '—' }}</td></tr>
<tr><td class="text-secondary">Decommissioned</td>
<td>{{ printer.decommissioned_at.strftime('%d.%m.%Y') if printer.decommissioned_at else '—' }}</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
{# ── Log ── #}
<div class="d-flex align-items-center justify-content-between mb-3">
<h6 class="text-white mb-0">Log</h6>
<button class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#addLogModal">
<i class="bi bi-plus-lg me-1"></i>Add entry
</button>
</div>
<div class="card">
{% if printer.logs %}
<table class="table table-dark table-hover mb-0 align-middle">
<tbody>
{% for entry in printer.logs %}
<tr>
<td class="text-secondary small" style="width:140px;white-space:nowrap">
{{ entry.created_at.strftime('%d.%m.%Y %H:%M') }}
</td>
<td>{{ entry.message }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<div class="card-body text-secondary">No log entries yet.</div>
{% endif %}
</div>
{# ── Add log entry modal ── #}
<div class="modal fade" id="addLogModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content bg-dark border-secondary">
<form method="POST" action="/printers/{{ printer.id }}/log">
<div class="modal-header border-secondary">
<h6 class="modal-title text-white">Add Log Entry</h6>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<textarea name="message" class="form-control bg-dark border-secondary text-white"
rows="3" placeholder="What happened?" required autofocus></textarea>
</div>
<div class="modal-footer border-secondary">
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary btn-sm">Add</button>
</div>
</form>
</div>
</div>
</div>
{% endblock %}