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) { @@ -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

8
main/views.py

@ -22,14 +22,13 @@ from PIL import Image @@ -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): @@ -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): @@ -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)

BIN
static/mp3/error.mp3

Binary file not shown.

BIN
static/mp3/ok.mp3

Binary file not shown.
Loading…
Cancel
Save