Files
2026-07-06 23:31:17 +02:00

135 lines
4.7 KiB
HTML

{% extends 'base.html' %}
{% block title %}{{ project.name }}{% endblock %}
{% block content %}
<div class="page-header d-flex justify-content-between align-items-center">
<div>
<a href="{{ url_for('projects') }}" class="text-muted text-decoration-none small">
<i class="bi bi-arrow-left"></i> Projets
</a>
<h1 class="mt-1">{{ project.name }}</h1>
<span class="text-muted small">{{ project.client_name or 'Sans client' }}</span>
{% if project.deadline %}
<span class="badge bg-secondary ms-2">Livraison : {{ project.deadline }}</span>
{% endif %}
</div>
<div class="d-flex gap-2">
<a href="{{ url_for('new_job') }}?project_id={{ project.id }}" class="btn btn-outline-secondary">
<i class="bi bi-plus-circle me-1"></i>Ajouter un run
</a>
<a href="{{ url_for('edit_project', id=project.id) }}" class="btn btn-outline-secondary">
<i class="bi bi-pencil me-1"></i>Modifier
</a>
</div>
</div>
<!-- Totaux -->
<div class="row g-3 mb-4">
<div class="col-md-3">
<div class="stat-card">
<div class="label">Runs</div>
<div class="value">{{ jobs|length }}</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card">
<div class="label">Pièces totales</div>
<div class="value">{{ total_pieces }}</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card">
<div class="label">CA total commande</div>
<div class="value" style="color:#ff6b35">{{ "%.2f"|format(total_revenue) }} €</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card">
<div class="label">Prix moyen / pièce</div>
<div class="value">
{% if total_pieces > 0 %}{{ "%.2f"|format(total_revenue / total_pieces) }} €{% else %}—{% endif %}
</div>
</div>
</div>
</div>
{% if project.notes %}
<div class="alert alert-light border mb-4"><i class="bi bi-sticky me-2"></i>{{ project.notes }}</div>
{% endif %}
<!-- Liste des runs -->
<div class="card">
<div class="card-header py-3 d-flex justify-content-between align-items-center">
<span><i class="bi bi-list-ul me-2"></i>Runs d'impression</span>
</div>
{% if jobs %}
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th>Nom du run</th>
<th>Matière</th>
<th class="text-center">Pièces/plateau</th>
<th class="text-center">Qté commandée</th>
<th class="text-center">Plateaux</th>
<th class="text-end">Prix/pièce</th>
<th class="text-end">Total run</th>
<th></th>
</tr>
</thead>
<tbody>
{% set ns = namespace(total_plateaux=0) %}
{% for j in jobs %}
{% set qty = j.order_qty or 1 %}
{% set ppp = j.pieces_per_plate or 1 %}
{% set nb_p = ((qty + ppp - 1) // ppp) %}
{% set ns.total_plateaux = ns.total_plateaux + nb_p %}
<tr>
<td>
<a href="{{ url_for('job_detail', id=j.id) }}" class="fw-semibold text-decoration-none">
{{ j.name }}
</a>
<div class="small text-muted">{{ j.created_at[:10] }}</div>
</td>
<td>
{% if j.material_name %}
<span class="badge bg-secondary">{{ j.material_type }}</span> {{ j.material_name }}
{% else %}<span class="text-muted"></span>{% endif %}
</td>
<td class="text-center">{{ ppp }}</td>
<td class="text-center fw-semibold">{{ qty }}</td>
<td class="text-center">{{ nb_p }}</td>
<td class="text-end">{{ "%.2f"|format(j.final_price) }} €</td>
<td class="text-end fw-bold" style="color:#ff6b35">{{ "%.2f"|format(j.final_price * qty) }} €</td>
<td>
<a href="{{ url_for('job_detail', id=j.id) }}" class="btn btn-sm btn-outline-secondary">
<i class="bi bi-eye"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot class="table-light fw-bold">
<tr>
<td colspan="3">Total</td>
<td class="text-center">{{ total_pieces }}</td>
<td class="text-center">{{ ns.total_plateaux }}</td>
<td class="text-end">
{% if total_pieces > 0 %}{{ "%.2f"|format(total_revenue / total_pieces) }} € moy.{% endif %}
</td>
<td class="text-end" style="color:#ff6b35">{{ "%.2f"|format(total_revenue) }} €</td>
<td></td>
</tr>
</tfoot>
</table>
</div>
{% else %}
<div class="card-body text-center text-muted py-4">
<i class="bi bi-printer fs-2 d-block mb-2"></i>
Aucun run encore.
<a href="{{ url_for('new_job') }}">Créer un calcul</a> et l'associer à ce projet.
</div>
{% endif %}
</div>
{% endblock %}