From d7d149ad7b6b1dda93f1e68e4c1f85c983453066 Mon Sep 17 00:00:00 2001 From: scayac Date: Sun, 5 Oct 2025 21:19:36 +0200 Subject: [PATCH] =?UTF-8?q?Bug=20affichage=20temps=20lors=20des=20arriv?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/templates/course_detail.html | 34 ++++-------------------------- main/views.py | 8 ++----- static/mp3/error.mp3 | Bin 0 -> 15588 bytes static/mp3/ok.mp3 | Bin 0 -> 10788 bytes 4 files changed, 6 insertions(+), 36 deletions(-) create mode 100644 static/mp3/error.mp3 create mode 100644 static/mp3/ok.mp3 diff --git a/main/templates/course_detail.html b/main/templates/course_detail.html index b9314ee..e79c313 100644 --- a/main/templates/course_detail.html +++ b/main/templates/course_detail.html @@ -128,44 +128,18 @@ socket.onmessage = function(e) { } catch { return; } + // Vérifie le format des données reçues let rowData; - function formatHMS(seconds) { - // Copie la logique du templatetag temps_format - if (seconds === undefined || seconds === null || seconds === "") return "--:--:--"; - let total_seconds = 0; - if (typeof seconds === 'string' && seconds.includes(':')) { - // déjà formaté - return seconds; - } - if (!isNaN(Number(seconds))) { - total_seconds = Math.floor(Number(seconds)); - } else { - return "--:--:--"; - } - let h = Math.floor(total_seconds / 3600); - let m = Math.floor((total_seconds % 3600) / 60); - let s = total_seconds % 60; - return (h < 10 ? '0' : '') + h + 'h' + (m < 10 ? '0' : '') + m + 'm' + (s < 10 ? '0' : '') + s + 's'; - } - if (Array.isArray(data)) { - // Si la ligne reçue n'a pas 5 colonnes, on complète avec des vides - rowData = data.slice(0, 5); - while (rowData.length < 5) rowData.push(''); - // Si le temps est en secondes, on le formate - if (rowData.length > 4 && /^\d+$/.test(rowData[4])) { - rowData[4] = formatHMS(rowData[4]); - } - } else if (typeof data === 'object' && data !== null) { + + if (typeof data === 'object' && data !== null) { // Transforme l'objet en tableau dans l'ordre attendu - let temps = data.temps; - if (/^\d+$/.test(temps)) temps = formatHMS(temps); rowData = [ data.rang, data.nom || (data.coureur && data.coureur.nom), data.prenom || (data.coureur && data.coureur.prenom), data.classe || (data.coureur && data.coureur.classe), - temps + data.temps ]; } else { // Format inconnu, ignore diff --git a/main/views.py b/main/views.py index 8fe5323..05e68d9 100644 --- a/main/views.py +++ b/main/views.py @@ -22,14 +22,13 @@ from PIL import Image def seconds_to_hms(delta: timedelta) -> str: - """Format a timedelta as H:MM:SS (handles days too).""" if delta is None: return '' total = int(delta.total_seconds()) hours = total // 3600 minutes = (total % 3600) // 60 seconds = total % 60 - return f"{hours}:{minutes:02d}:{seconds:02d}" + return f"{hours}h{minutes:02d}m{seconds:02d}s" @login_required def main_view(request): @@ -141,10 +140,6 @@ def course_detail_view(request, course_id): is_finished = True return redirect('course_detail', course_id=course.id) - if request.headers.get('x-requested-with') == 'XMLHttpRequest': - from django.template.loader import render_to_string - tbody = render_to_string('arrivees_tbody.html', {'arrivees': arrivees}) - return HttpResponse(tbody) return render(request, 'course_detail.html', { 'title': 'Course : '+course.nom+" ("+str(course.date)+")", 'course': course, @@ -152,6 +147,7 @@ def course_detail_view(request, course_id): 'is_started': is_started, 'is_finished': is_finished }) + @login_required def scan_view(request): courses = Course.objects.filter(owner=request.user, depart__isnull=False, fin__isnull=True) diff --git a/static/mp3/error.mp3 b/static/mp3/error.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..396da7e5f8a48bb5fef3b309ae223f4962a5d3ef GIT binary patch literal 15588 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