Browse Source

Ajout filtrage par classe dans détail courses

master
scayac 2 months ago
parent
commit
0f47357618
  1. 26
      main/templates/course_detail.html
  2. 5
      main/views.py

26
main/templates/course_detail.html

@ -57,6 +57,15 @@ @@ -57,6 +57,15 @@
{% if course.type == 'multi' %}
<button id="btnGroup" type="button" class="btn btn-info mb-2">Grouper par coureur</button>
{% endif %}
{% if classes %}
<label for="filterClasse" class="mb-0 mr-2">Filtrer par classe :</label>
<select id="filterClasse" class="form-control d-inline-block mr-2" style="width:auto;">
<option value="">Toutes</option>
{% for classe in classes %}
<option value="{{ classe }}">{{ classe }}</option>
{% endfor %}
</select>
{% endif %}
{% if export_options %}
<!-- Button to open exports modal -->
<button id="btnMoreExports" type="button" class="btn btn-secondary mb-2" data-toggle="modal" data-target="#exportsModal">
@ -234,6 +243,23 @@ $(document).ready(function() { @@ -234,6 +243,23 @@ $(document).ready(function() {
}
table.draw();
});
// Filtre par classe (colonne 3) — comportement identique à dossards.html
$('#filterClasse').on('change', function() {
var val = $(this).val();
if (val) {
table.column(3).search('^'+val+'$', true, false).draw();
} else {
table.column(3).search('').draw();
}
// If grouping/selection logic needs to mark visible rows as selected, do it here
try {
if (table.rows) {
// select all visible rows to match dossards behaviour
table.rows({search:'applied'}).select();
}
} catch (e) {}
});
});
// Export CSV/PDF des données filtrées
function getVisibleRows() {

5
main/views.py

@ -241,6 +241,9 @@ def course_detail_view(request, course_id): @@ -241,6 +241,9 @@ def course_detail_view(request, course_id):
is_started = course.depart is not None
is_finished = course.fin is not None
# Liste des classes présentes dans les arrivées de cette course (pour le filtre)
classes = course.arrivees.select_related('coureur').values_list('coureur__classe', flat=True).distinct().order_by('coureur__classe')
if request.method == 'POST':
# Démarrer ou terminer la course via le formulaire de détail
if 'start' in request.POST and not is_started:
@ -296,7 +299,6 @@ def course_detail_view(request, course_id): @@ -296,7 +299,6 @@ def course_detail_view(request, course_id):
'help': "Télécharge un fichier PDF contenant les rangs, noms, prénoms, classes et temps des arrivées. Si vous avez filtré ou groupé la table, seules les lignes visibles seront exportées",
},
]
return render(request, 'course_detail.html', {
'title': f'Course : {course.nom} ({date_str})',
'course': course,
@ -304,6 +306,7 @@ def course_detail_view(request, course_id): @@ -304,6 +306,7 @@ def course_detail_view(request, course_id):
'is_started': is_started,
'is_finished': is_finished,
'export_options': export_options,
'classes': classes,
})

Loading…
Cancel
Save