Browse Source

Bug affichage temps lors des arrivées

master
scayac 3 months ago
parent
commit
d7d149ad7b
  1. 34
      main/templates/course_detail.html
  2. 8
      main/views.py
  3. BIN
      static/mp3/error.mp3
  4. BIN
      static/mp3/ok.mp3

34
main/templates/course_detail.html

@ -128,44 +128,18 @@ socket.onmessage = function(e) {
} catch { } catch {
return; return;
} }
// Vérifie le format des données reçues // Vérifie le format des données reçues
let rowData; let rowData;
function formatHMS(seconds) {
// Copie la logique du templatetag temps_format if (typeof data === 'object' && data !== null) {
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) {
// Transforme l'objet en tableau dans l'ordre attendu // Transforme l'objet en tableau dans l'ordre attendu
let temps = data.temps;
if (/^\d+$/.test(temps)) temps = formatHMS(temps);
rowData = [ rowData = [
data.rang, data.rang,
data.nom || (data.coureur && data.coureur.nom), data.nom || (data.coureur && data.coureur.nom),
data.prenom || (data.coureur && data.coureur.prenom), data.prenom || (data.coureur && data.coureur.prenom),
data.classe || (data.coureur && data.coureur.classe), data.classe || (data.coureur && data.coureur.classe),
temps data.temps
]; ];
} else { } else {
// Format inconnu, ignore // Format inconnu, ignore

8
main/views.py

@ -22,14 +22,13 @@ from PIL import Image
def seconds_to_hms(delta: timedelta) -> str: def seconds_to_hms(delta: timedelta) -> str:
"""Format a timedelta as H:MM:SS (handles days too)."""
if delta is None: if delta is None:
return '' return ''
total = int(delta.total_seconds()) total = int(delta.total_seconds())
hours = total // 3600 hours = total // 3600
minutes = (total % 3600) // 60 minutes = (total % 3600) // 60
seconds = total % 60 seconds = total % 60
return f"{hours}:{minutes:02d}:{seconds:02d}" return f"{hours}h{minutes:02d}m{seconds:02d}s"
@login_required @login_required
def main_view(request): def main_view(request):
@ -141,10 +140,6 @@ def course_detail_view(request, course_id):
is_finished = True is_finished = True
return redirect('course_detail', course_id=course.id) 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', { return render(request, 'course_detail.html', {
'title': 'Course : '+course.nom+" ("+str(course.date)+")", 'title': 'Course : '+course.nom+" ("+str(course.date)+")",
'course': course, 'course': course,
@ -152,6 +147,7 @@ def course_detail_view(request, course_id):
'is_started': is_started, 'is_started': is_started,
'is_finished': is_finished 'is_finished': is_finished
}) })
@login_required @login_required
def scan_view(request): def scan_view(request):
courses = Course.objects.filter(owner=request.user, depart__isnull=False, fin__isnull=True) courses = Course.objects.filter(owner=request.user, depart__isnull=False, fin__isnull=True)

BIN
static/mp3/error.mp3

Binary file not shown.

BIN
static/mp3/ok.mp3

Binary file not shown.
Loading…
Cancel
Save