🎾 TennisResult Générateur CSV Canva

Bienvenue

Cet outil génère le fichier CSV à importer dans Canva pour le bloc de données « Résultats » de votre club.

  1. Créez d'abord un championnat (saison, catégorie, sexe, format des matchs).
  2. Créez les équipes de votre club avec leur logo.
  3. À chaque rencontre : utilisez Nouvelle rencontre pour importer le PDF (feuille de match) et le xlsx (classement), valider les données, et télécharger le CSV.

📥 Import direct depuis Tenup (bookmarklet)

Avec ce favori, tu peux importer une rencontre directement depuis la page tenup en un clic — récupération automatique du PDF + du classement, sans télécharger manuellement.

  1. Glisse-dépose ce bouton dans la barre de favoris de ton navigateur (clic-droit + « Ajouter aux favoris » ne marche pas — il faut un drag&drop) :

    📥 Importer dans TennisResult
  2. Connecte-toi à tenup et va sur la page d'une rencontre (URL contenant /rencontre/).
  3. Clique le favori → l'app récupère le PDF + le classement et te propose de les charger ici.

Le favori utilise tes cookies de session tenup (tu dois être connecté). Aucune donnée ne transite par un serveur externe — tout va directement vers {{ settings.public_base_url || 'http://localhost:7272' }}.

Réglages — URL publique pour les logos

Les URLs des logos écrites dans le CSV utilisent cette base. Pour que Canva puisse charger les images, l'URL doit être accessible depuis Internet (ngrok, reverse proxy, serveur public…). Sinon les logos n'apparaîtront pas dans Canva.

Valeur par défaut (depuis env TENNIS_PUBLIC_BASE_URL) : {{ settings.default_public_base_url }}

✅ Réglage enregistré


📤 Connexion Facebook

Facebook : {{ metaStatus.page_name }}
Publication FB active.
Instagram : @{{ metaStatus.ig_username }}
Publication IG active.
Instagram : non configuré
Re-génère un User Token incluant instagram_business_basic + instagram_business_content_publish et utilise « Reconfigurer ».

{{ metaTestResult.ok ? '✅ ' + (metaTestResult.message || 'Connexion OK') : '❌ ' + metaTestResult.message }}

Pas de page connectée
Configure le connecteur pour publier les affiches en un clic sur Facebook.

{{ editingId ? 'Modifier la rencontre #'+editingId : 'Nouvelle rencontre' }}

📥
Import tenup en attente
{{ pendingImport.rencontre.equipe_visite }} {{ pendingImport.rencontre.score_visite }} / {{ pendingImport.rencontre.score_visiteur }} {{ pendingImport.rencontre.equipe_visiteur }} · {{ pendingImport.rencontre.date }} · {{ pendingImport.rencontre.categorie }}
— Sans rattachement —
Aucun championnat
{{ c.nom }}
{{ c.saison }} {{ c.categorie }} {{ c.sexe }}
{{ c.nb_simples }} simples · {{ c.nb_doubles }} double{{ c.nb_doubles>1 ? 's' : '' }}
Aucun championnat — créez-en un dans l'onglet "Championnats"

Glissez-déposez ou collez (Ctrl+V) le PDF et le xlsx ici, ou utilisez les boutons ci-dessous.

📄
PDF feuille de match
{{ pdfFile ? pdfFile.name : 'Aucun fichier' }}
📊
xlsx classement
{{ xlsxFile ? xlsxFile.name : 'Aucun fichier' }}

{{ error }}

🏠
vs
✈️
Date
Catégorie
Sexe

Simples

Simple {{ m.numero }}

Doubles

Double {{ m.numero }}

Classement de la poule

⚠ pas de match ✓ {{ findTeam(e.equipe).nom }}
pts

Seules les 8 premières équipes sont exportées dans le CSV. Si « ⚠ pas de match » apparaît, va dans Équipes pour créer l'équipe (ou ajouter un alias).

{{ error }}

✅ Rencontre {{ editingId ? 'mise à jour' : 'enregistrée' }}

Rencontre #{{ lastRencontreId }} — Score : {{ lastScore }}

Choisis ce que tu veux faire :

🖼️
Voir l'affiche
Visualise le visuel prêt à publier, télécharge en PNG.
📊
Exporter le CSV
Télécharge le fichier CSV pour l'importer dans Canva (bloc de données).

Aperçu de l'affiche

Si un logo manque, ajoute-le dans l'onglet Équipes puis reviens ici.

Aperçu du visuel

L'image est rendue ici à 1080×1080 (taille native). Les logos doivent être présents dans le référentiel Équipes pour apparaître.

RÉSULTATS
{{ affichCategorie() }}
{{ extracted.rencontre.date }}
{{ displayTeamName(extracted.rencontre.equipe_visite) }}
{{ extracted.rencontre.score_visite }}
VS
{{ extracted.rencontre.score_visiteur }}
{{ displayTeamName(extracted.rencontre.equipe_visiteur) }}
{{ m.type==='double' ? 'D'+m.numero : 'S'+m.numero }}
{{ m.vainqueur==='visite' ? 'V' : '' }} {{ setVal(m.sets_visite[0]) }} {{ setVal(m.sets_visite[1]) }} {{ setVal(m.sets_visite[2]) }}
{{ m.vainqueur==='visiteur' ? 'V' : '' }} {{ setVal(m.sets_visiteur[0]) }} {{ setVal(m.sets_visiteur[1]) }} {{ setVal(m.sets_visiteur[2]) }}
{{ m.type==='double' ? 'D'+m.numero : 'S'+m.numero }}
{{ m.vainqueur==='visite' ? 'V' : '' }} {{ setVal(m.sets_visite[0]) }} {{ setVal(m.sets_visite[1]) }} {{ setVal(m.sets_visite[2]) }}
{{ m.vainqueur==='visiteur' ? 'V' : '' }} {{ setVal(m.sets_visiteur[0]) }} {{ setVal(m.sets_visiteur[1]) }} {{ setVal(m.sets_visiteur[2]) }}
D{{ m.numero }}
{{ displayPlayerName(m.joueurs_visite[0]) || '—' }} / {{ displayPlayerName(m.joueurs_visite[1]) || '—' }} {{ m.vainqueur==='visite' ? 'V' : '' }} {{ setVal(m.sets_visite[0]) }} {{ setVal(m.sets_visite[1]) }} {{ setVal(m.sets_visite[2]) }}
{{ displayPlayerName(m.joueurs_visiteur[0]) || '—' }} / {{ displayPlayerName(m.joueurs_visiteur[1]) || '—' }} {{ m.vainqueur==='visiteur' ? 'V' : '' }} {{ setVal(m.sets_visiteur[0]) }} {{ setVal(m.sets_visiteur[1]) }} {{ setVal(m.sets_visiteur[2]) }}
{{ e.position || (i+1) }} {{ displayTeamName(e.equipe) }} {{ e.points || 0 }}

Rencontres

⏳ Import…

{{ calendrierError }}

J Date Heure Équipe locale Score Équipe visiteur Statut Publié Actions
{{ r.journee || '—' }} {{ formatDateFr(r.date) }} {{ r.equipe_visite_nom }} {{ r.score_visite }} / {{ r.score_visiteur }} {{ r.equipe_visiteur_nom }} ✓ joué ⏳ à venir | Suppr
{{ rencontresFilterChampId ? 'Aucune rencontre. Importe le calendrier xlsx pour démarrer.' : 'Aucune rencontre. Choisis un championnat puis importe le xlsx, ou utilise le bookmarklet tenup.' }}

Championnats

NomSaisonCatégorieSexeCouleursSimplesDoublesFormat SFormat D
{{ c.nom }}{{ c.saison }}{{ c.categorie }}{{ c.sexe }} {{ c.nb_simples }}{{ c.nb_doubles }} {{ c.format_simple }}{{ c.format_double }} Éditer | Suppr

Équipes

Une équipe par ligne. Format : Nom équipe, ou Nom équipe | alias1 | alias2, ou ajouter * en fin de ligne pour marquer ton club.

{{ bulkResult }}

Utile si tenup utilise un nom légèrement différent (ex. avec « INTERCOMMUNAL » ou un numéro d'équipe). Le matching se fait déjà tout seul pour les cas simples (numéros, ponctuation).
LogoNomAliasesMon clubLogo upload
{{ e.nom }} {{ e.aliases.split('\n').filter(x=>x.trim()).join(' · ') }} {{ e.est_mon_club ? '✓' : '' }} ou déposer / Ctrl+V ici Éditer | Suppr

Utilisateurs

Gérez les comptes pouvant se connecter à l'application.

Créer un compte

IdentifiantRôleActions
{{ u.username }} vous Réinit. mot de passe

Mon mot de passe