6ea3eae981
- Flask + SQLAlchemy (MariaDB-compatible schema) battery tracking web app - 40 pre-seeded batteries (Eneloop, BONAI, Energizer NiMH) across 5 devices - Business rules: block retired assignment, brand-mix warnings, capacity checks - Mobile-friendly Jinja2 templates with inline CSS - waitress WSGI server via systemd user service (sbin/install-service.sh) - SQLite → MariaDB migration script (migrate_to_mariadb.py) - 26 passing acceptance tests (pytest + Flask test client) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
71 lines
2.5 KiB
HTML
71 lines
2.5 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}{{ battery.label }} — Battery Tracker{% endblock %}
|
|
|
|
{% block content %}
|
|
<h1>{{ battery.label }}</h1>
|
|
|
|
<div class="card">
|
|
<table style="width:auto;border:none;">
|
|
<tr>
|
|
<td style="padding:0.3rem 1rem 0.3rem 0;font-weight:600;color:#64748b;border:none;">Label</td>
|
|
<td style="border:none;">{{ battery.label }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:0.3rem 1rem 0.3rem 0;font-weight:600;color:#64748b;border:none;">Brand</td>
|
|
<td style="border:none;">{{ battery.brand }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:0.3rem 1rem 0.3rem 0;font-weight:600;color:#64748b;border:none;">Status</td>
|
|
<td style="border:none;"><span class="badge badge-{{ battery.status }}">{{ battery.status|capitalize }}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:0.3rem 1rem 0.3rem 0;font-weight:600;color:#64748b;border:none;">Device</td>
|
|
<td style="border:none;">
|
|
{% if battery.device %}
|
|
<a href="{{ url_for('device_detail', device_id=battery.device.id) }}">{{ battery.device.name }}</a>
|
|
{% else %}
|
|
<span class="text-muted">None</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<!-- Notes -->
|
|
<div class="card">
|
|
<h2>Notes</h2>
|
|
<form method="post" action="{{ url_for('battery_edit_notes', battery_id=battery.id) }}">
|
|
<div class="form-group">
|
|
<textarea name="notes" placeholder="No notes yet…">{{ battery.notes or '' }}</textarea>
|
|
</div>
|
|
<button class="btn btn-primary" type="submit">Save Notes</button>
|
|
</form>
|
|
</div>
|
|
|
|
<!-- Actions -->
|
|
<div class="card">
|
|
<h2>Actions</h2>
|
|
<div class="form-actions">
|
|
{% if battery.is_available() %}
|
|
<a class="btn btn-primary" href="{{ url_for('battery_assign', battery_id=battery.id) }}">Assign to Device</a>
|
|
{% endif %}
|
|
|
|
{% if battery.is_installed() %}
|
|
<form method="post" action="{{ url_for('battery_unassign', battery_id=battery.id) }}">
|
|
<button class="btn btn-warning" type="submit">Unassign</button>
|
|
</form>
|
|
{% endif %}
|
|
|
|
{% if not battery.is_retired() %}
|
|
<form method="post" action="{{ url_for('battery_retire', battery_id=battery.id) }}">
|
|
<button class="btn btn-secondary" type="submit">Retire Battery</button>
|
|
</form>
|
|
{% endif %}
|
|
|
|
<a class="btn btn-danger" href="{{ url_for('battery_delete', battery_id=battery.id) }}">Delete Battery</a>
|
|
</div>
|
|
</div>
|
|
|
|
<a class="text-muted" href="{{ url_for('dashboard') }}">← Back to Dashboard</a>
|
|
{% endblock %}
|