|
|
|
|
@ -134,7 +134,7 @@ def export_csv(request, course_id):
@@ -134,7 +134,7 @@ def export_csv(request, course_id):
|
|
|
|
|
response = HttpResponse(content_type='text/csv') |
|
|
|
|
response['Content-Disposition'] = f'attachment; filename="course_{course_id}_resultats.csv"' |
|
|
|
|
writer = csv.writer(response) |
|
|
|
|
writer.writerow(['Rang', 'Nom', 'Classe', 'Temps']) |
|
|
|
|
writer.writerow(['Rang', 'Nom', 'Prénom', 'Classe', 'Temps']) |
|
|
|
|
|
|
|
|
|
import json |
|
|
|
|
rows_json = request.POST.get('rows') |
|
|
|
|
@ -172,13 +172,14 @@ def export_pdf(request, course_id):
@@ -172,13 +172,14 @@ def export_pdf(request, course_id):
|
|
|
|
|
p.setFont("Helvetica-Bold", 16) |
|
|
|
|
p.drawString(50, y, f"Résultats - {course.nom} ({course.date})") |
|
|
|
|
|
|
|
|
|
# En-tête du tableau |
|
|
|
|
# En-tête du tableau (colonnes: premier, Nom, Prénom, Classe, Temps) |
|
|
|
|
y -= 40 |
|
|
|
|
p.setFont("Helvetica", 12) |
|
|
|
|
p.drawString(50, y, first_col_label) |
|
|
|
|
p.drawString(100, y, "Nom") |
|
|
|
|
p.drawString(300, y, "Classe") |
|
|
|
|
p.drawString(400, y, "Temps") |
|
|
|
|
p.drawString(220, y, "Prénom") |
|
|
|
|
p.drawString(340, y, "Classe") |
|
|
|
|
p.drawString(460, y, "Temps") |
|
|
|
|
y -= 20 |
|
|
|
|
|
|
|
|
|
# Contenu : soit les lignes filtrées envoyées en POST, soit toutes les arrivées en base |
|
|
|
|
@ -188,10 +189,24 @@ def export_pdf(request, course_id):
@@ -188,10 +189,24 @@ def export_pdf(request, course_id):
|
|
|
|
|
try: |
|
|
|
|
rows = json.loads(rows_json) |
|
|
|
|
for row in rows: |
|
|
|
|
p.drawString(50, y, str(row[0])) |
|
|
|
|
p.drawString(100, y, str(row[1])) |
|
|
|
|
p.drawString(300, y, str(row[2])) |
|
|
|
|
p.drawString(400, y, str(row[3])) |
|
|
|
|
# If we receive a group marker row (injected client-side when grouping), render it as a header |
|
|
|
|
if isinstance(row, list) and len(row) > 0 and row[0] == '__GROUP__': |
|
|
|
|
# Render group header spanning the table width |
|
|
|
|
p.setFont("Helvetica-Bold", 12) |
|
|
|
|
p.drawString(50, y, str(row[1])) |
|
|
|
|
p.setFont("Helvetica", 12) |
|
|
|
|
else: |
|
|
|
|
# Standard row: expected format [first, nom, prenom, classe, temps] |
|
|
|
|
first = row[0] if len(row) > 0 else '' |
|
|
|
|
nom = row[1] if len(row) > 1 else '' |
|
|
|
|
prenom = row[2] if len(row) > 2 else '' |
|
|
|
|
classe = row[3] if len(row) > 3 else '' |
|
|
|
|
temps_val = row[4] if len(row) > 4 else '' |
|
|
|
|
p.drawString(50, y, str(first)) |
|
|
|
|
p.drawString(100, y, str(nom)) |
|
|
|
|
p.drawString(220, y, str(prenom)) |
|
|
|
|
p.drawString(340, y, str(classe)) |
|
|
|
|
p.drawString(460, y, str(temps_val)) |
|
|
|
|
y -= 20 |
|
|
|
|
# Nouvelle page si nécessaire |
|
|
|
|
if y < 50: |
|
|
|
|
@ -206,8 +221,9 @@ def export_pdf(request, course_id):
@@ -206,8 +221,9 @@ def export_pdf(request, course_id):
|
|
|
|
|
first_value = a.tour if course.type == 'multi' else a.rang |
|
|
|
|
p.drawString(50, y, str(first_value)) |
|
|
|
|
p.drawString(100, y, a.coureur.nom) |
|
|
|
|
p.drawString(300, y, a.coureur.classe) |
|
|
|
|
p.drawString(400, y, str(a.temps)) |
|
|
|
|
p.drawString(220, y, a.coureur.prenom) |
|
|
|
|
p.drawString(340, y, a.coureur.classe) |
|
|
|
|
p.drawString(460, y, str(a.temps)) |
|
|
|
|
y -= 20 |
|
|
|
|
# Nouvelle page si nécessaire |
|
|
|
|
if y < 50: |
|
|
|
|
|