101 lines
4.3 KiB
HTML
101 lines
4.3 KiB
HTML
{% extends 'base.html' %}
|
|
{% block title %}{% if material %}Modifier{% else %}Nouvelle{% endif %} matière{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="page-header">
|
|
<a href="{{ url_for('materials') }}" class="text-muted text-decoration-none small">
|
|
<i class="bi bi-arrow-left"></i> Matières
|
|
</a>
|
|
<h1 class="mt-1">{% if material %}Modifier — {{ material.name }}{% else %}Nouvelle matière{% endif %}</h1>
|
|
</div>
|
|
|
|
<div class="row g-4">
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<form method="POST">
|
|
<div class="row g-3">
|
|
<div class="col-8">
|
|
<label class="form-label fw-semibold">Nom *</label>
|
|
<input type="text" name="name" class="form-control" required
|
|
value="{{ material.name if material else '' }}"
|
|
placeholder="ex: PLA+ Rouge Bambu">
|
|
</div>
|
|
<div class="col-4">
|
|
<label class="form-label fw-semibold">Type</label>
|
|
<select name="type" class="form-select">
|
|
{% for t in ['PLA','PLA+','PETG','ASA','ABS','TPU','Nylon','PC','Résine','Autre'] %}
|
|
<option value="{{ t }}" {% if material and material.type==t %}selected{% endif %}>{{ t }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-6">
|
|
<label class="form-label fw-semibold">Marque</label>
|
|
<input type="text" name="brand" class="form-control"
|
|
value="{{ material.brand if material else '' }}"
|
|
placeholder="Bambu, eSUN, Polymaker…">
|
|
</div>
|
|
<div class="col-6">
|
|
<label class="form-label fw-semibold">Couleur</label>
|
|
<input type="text" name="color" class="form-control"
|
|
value="{{ material.color if material else '' }}"
|
|
placeholder="Rouge, #FF0000…">
|
|
</div>
|
|
<div class="col-6">
|
|
<label class="form-label fw-semibold">Prix (€/kg) *</label>
|
|
<input type="number" name="price_per_kg" class="form-control"
|
|
step="0.01" min="0" required
|
|
value="{{ material.price_per_kg if material else '25.00' }}">
|
|
</div>
|
|
<div class="col-6">
|
|
<label class="form-label fw-semibold">Stock actuel (g)</label>
|
|
<input type="number" name="stock_g" class="form-control"
|
|
step="1" min="0"
|
|
value="{{ material.stock_g|round(0)|int if material else 0 }}">
|
|
<div class="form-text">1 rouleau ≈ 1000 g</div>
|
|
</div>
|
|
<div class="col-6">
|
|
<label class="form-label fw-semibold">Seuil alerte stock bas (g)</label>
|
|
<input type="number" name="low_stock_threshold_g" class="form-control"
|
|
step="50" min="0"
|
|
value="{{ material.low_stock_threshold_g|round(0)|int if material else 200 }}">
|
|
</div>
|
|
<div class="col-12">
|
|
<label class="form-label fw-semibold">Notes</label>
|
|
<textarea name="notes" class="form-control" rows="2">{{ material.notes if material else '' }}</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="d-flex gap-2 mt-4">
|
|
<button type="submit" class="btn" style="background:#ff6b35;color:#fff">
|
|
<i class="bi bi-save me-1"></i>Enregistrer
|
|
</button>
|
|
<a href="{{ url_for('materials') }}" class="btn btn-outline-secondary">Annuler</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% if history %}
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-header py-3"><i class="bi bi-clock-history me-2"></i>Historique des prix</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-sm mb-0">
|
|
<thead class="table-light"><tr><th>Date</th><th class="text-end">€/kg</th></tr></thead>
|
|
<tbody>
|
|
{% for h in history %}
|
|
<tr>
|
|
<td class="text-muted small">{{ h.recorded_at[:10] }}</td>
|
|
<td class="text-end fw-semibold">{{ h.price_per_kg }} €</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|