From d09de4901804e673995c14bb02661826b4623ec4 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 6 Feb 2026 16:24:08 +0100 Subject: [PATCH] feat(tournament): enhance PDF generation for missing participant data - Updated the TournamentPlacementsTab component to include phone numbers in the PDF generation for participants with missing data. - Improved the layout of the PDF by adjusting column widths and changing the orientation to landscape. - Enhanced internationalization by adding new translation keys for "phone", "generatingPDF", and "page" across multiple languages. - Updated the button text to reflect the PDF generation status more accurately. --- .../tournament/TournamentPlacementsTab.vue | 32 +++++++++++++------ frontend/src/i18n/locales/de-CH.json | 3 ++ frontend/src/i18n/locales/de-extended.json | 3 ++ frontend/src/i18n/locales/de.json | 3 ++ frontend/src/i18n/locales/en-AU.json | 3 ++ frontend/src/i18n/locales/en-GB.json | 3 ++ frontend/src/i18n/locales/en-US.json | 3 ++ frontend/src/i18n/locales/es.json | 3 ++ frontend/src/i18n/locales/fil.json | 3 ++ frontend/src/i18n/locales/fr.json | 3 ++ frontend/src/i18n/locales/it.json | 3 ++ frontend/src/i18n/locales/ja.json | 3 ++ frontend/src/i18n/locales/pl.json | 3 ++ frontend/src/i18n/locales/th.json | 3 ++ frontend/src/i18n/locales/tl.json | 3 ++ frontend/src/i18n/locales/zh.json | 3 ++ 16 files changed, 67 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/tournament/TournamentPlacementsTab.vue b/frontend/src/components/tournament/TournamentPlacementsTab.vue index 7dbbef12..11092811 100644 --- a/frontend/src/components/tournament/TournamentPlacementsTab.vue +++ b/frontend/src/components/tournament/TournamentPlacementsTab.vue @@ -92,7 +92,7 @@
@@ -586,6 +586,13 @@ export default { email = member.email; } + let phone = ''; + if (member.contacts && Array.isArray(member.contacts)) { + phone = member.contacts.filter(c => c.type === 'phone').map(c => c.value).join(', '); + } else if (member.phone) { + phone = member.phone; + } + const name = `${member.firstName || ''} ${member.lastName || ''}`.trim(); const gender = member.gender && member.gender !== 'unknown' ? member.gender : null; @@ -594,7 +601,8 @@ export default { birthDate: member.birthDate || null, gender, address: address || null, - email: email || null + email: email || null, + phone: phone || null }); } @@ -610,12 +618,13 @@ export default { birthDate: src.birthDate || null, gender, address: src.address || null, - email: src.email || null + email: src.email || null, + phone: src.phone || null }); } // 2. Nur Teilnehmer mit fehlenden Daten filtern - const fields = ['birthDate', 'gender', 'address', 'email']; + const fields = ['birthDate', 'gender', 'address', 'email', 'phone']; const playersWithMissing = allPlayerData.filter(p => fields.some(f => !p[f]) ); @@ -629,7 +638,7 @@ export default { playersWithMissing.sort((a, b) => a.name.localeCompare(b.name)); // 3. PDF erzeugen - const pdf = new jsPDF('p', 'mm', 'a4'); + const pdf = new jsPDF('l', 'mm', 'a4'); const margin = 15; const t = this.$t; @@ -666,6 +675,7 @@ export default { t('members.birthdate'), t('members.gender'), t('tournaments.address'), + t('tournaments.phone'), t('members.emailAddress') ]]; @@ -674,6 +684,7 @@ export default { p.birthDate ? formatDate(p.birthDate) : linePlaceholder, p.gender ? formatGender(p.gender) : linePlaceholder, p.address || linePlaceholder, + p.phone || linePlaceholder, p.email || linePlaceholder ]); @@ -696,11 +707,12 @@ export default { fontSize: 9 }, columnStyles: { - 0: { cellWidth: 35 }, + 0: { cellWidth: 40 }, 1: { cellWidth: 28 }, 2: { cellWidth: 25 }, - 3: { cellWidth: 45 }, - 4: { cellWidth: 45 } + 3: { cellWidth: 50 }, + 4: { cellWidth: 40 }, + 5: { cellWidth: 50 } }, didParseCell: (data) => { // Platzhalter-Zeilen grau und kursiv markieren @@ -718,9 +730,9 @@ export default { pdf.setFontSize(8); pdf.setTextColor(150); pdf.text( - `${t('tournaments.missingDataPDFTitle')} – ${new Date().toLocaleDateString('de-DE')} – Seite ${i}/${pageCount}`, + `${t('tournaments.missingDataPDFTitle')} – ${new Date().toLocaleDateString('de-DE')} – ${t('tournaments.page')} ${i}/${pageCount}`, margin, - 290 + 200 ); } diff --git a/frontend/src/i18n/locales/de-CH.json b/frontend/src/i18n/locales/de-CH.json index 41338628..5c4fdfad 100644 --- a/frontend/src/i18n/locales/de-CH.json +++ b/frontend/src/i18n/locales/de-CH.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Bitte d'fehlende Date (markiert mit ____) bi de Teilnehmer nochfroge und do notiere.", "allDataComplete": "Alli Teilnehmerdaten sind vollständig.", "address": "Adrässe", + "phone": "Telefon", + "generatingPDF": "PDF wird erstellt...", + "page": "Siite", "dataNotRecorded": "No nid erfasst" } } diff --git a/frontend/src/i18n/locales/de-extended.json b/frontend/src/i18n/locales/de-extended.json index 7cb1169e..86f262a1 100644 --- a/frontend/src/i18n/locales/de-extended.json +++ b/frontend/src/i18n/locales/de-extended.json @@ -280,6 +280,9 @@ "missingDataPDFSubtitle": "Bitte die fehlenden Daten (markiert mit ____) bei den Teilnehmern erfragen und hier notieren.", "allDataComplete": "Alle Teilnehmerdaten sind vollständig.", "address": "Adresse", + "phone": "Telefon", + "generatingPDF": "PDF wird erstellt...", + "page": "Seite", "dataNotRecorded": "Noch nicht erfasst" }, "permissions": { diff --git a/frontend/src/i18n/locales/de.json b/frontend/src/i18n/locales/de.json index ac1e6b7e..fd3b1c2c 100644 --- a/frontend/src/i18n/locales/de.json +++ b/frontend/src/i18n/locales/de.json @@ -586,6 +586,9 @@ "missingDataPDFSubtitle": "Bitte die fehlenden Daten (markiert mit ____) bei den Teilnehmern erfragen und hier notieren.", "allDataComplete": "Alle Teilnehmerdaten sind vollständig.", "address": "Adresse", + "phone": "Telefon", + "generatingPDF": "PDF wird erstellt...", + "page": "Seite", "create": "Erstellen", "exportPDF": "PDF exportieren", "playInGroups": "Spielen in Gruppen", diff --git a/frontend/src/i18n/locales/en-AU.json b/frontend/src/i18n/locales/en-AU.json index c786c2b5..d77a1370 100644 --- a/frontend/src/i18n/locales/en-AU.json +++ b/frontend/src/i18n/locales/en-AU.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Please collect the missing data (marked with ____) from participants and note them here.", "allDataComplete": "All participant data is complete.", "address": "Address", + "phone": "Phone", + "generatingPDF": "Generating PDF...", + "page": "Page", "dataNotRecorded": "Not yet recorded" } } diff --git a/frontend/src/i18n/locales/en-GB.json b/frontend/src/i18n/locales/en-GB.json index 0b0c6ebf..743d2638 100644 --- a/frontend/src/i18n/locales/en-GB.json +++ b/frontend/src/i18n/locales/en-GB.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Please collect the missing data (marked with ____) from participants and note them here.", "allDataComplete": "All participant data is complete.", "address": "Address", + "phone": "Phone", + "generatingPDF": "Generating PDF...", + "page": "Page", "dataNotRecorded": "Not yet recorded" } } diff --git a/frontend/src/i18n/locales/en-US.json b/frontend/src/i18n/locales/en-US.json index 6137ae66..3204b207 100644 --- a/frontend/src/i18n/locales/en-US.json +++ b/frontend/src/i18n/locales/en-US.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Please collect the missing data (marked with ____) from participants and note them here.", "allDataComplete": "All participant data is complete.", "address": "Address", + "phone": "Phone", + "generatingPDF": "Generating PDF...", + "page": "Page", "dataNotRecorded": "Not yet recorded" } } diff --git a/frontend/src/i18n/locales/es.json b/frontend/src/i18n/locales/es.json index 05fd03c9..cec089a0 100644 --- a/frontend/src/i18n/locales/es.json +++ b/frontend/src/i18n/locales/es.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Por favor, recopile los datos faltantes (marcados con ____) de los participantes y anótelos aquí.", "allDataComplete": "Todos los datos de los participantes están completos.", "address": "Dirección", + "phone": "Teléfono", + "generatingPDF": "Generando PDF...", + "page": "Página", "dataNotRecorded": "Aún no registrado" } } diff --git a/frontend/src/i18n/locales/fil.json b/frontend/src/i18n/locales/fil.json index d0722cb0..f8866a70 100644 --- a/frontend/src/i18n/locales/fil.json +++ b/frontend/src/i18n/locales/fil.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Pakikolekta ang nawawalang datos (may markang ____) mula sa mga kalahok at itala dito.", "allDataComplete": "Kumpleto na ang lahat ng datos ng mga kalahok.", "address": "Address", + "phone": "Telepono", + "generatingPDF": "Gumagawa ng PDF...", + "page": "Pahina", "dataNotRecorded": "Hindi pa naitala" } } diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 1fa5bf84..fff582f8 100644 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Veuillez collecter les données manquantes (marquées ____) auprès des participants et les noter ici.", "allDataComplete": "Toutes les données des participants sont complètes.", "address": "Adresse", + "phone": "Téléphone", + "generatingPDF": "Génération du PDF...", + "page": "Page", "dataNotRecorded": "Pas encore enregistré" } } diff --git a/frontend/src/i18n/locales/it.json b/frontend/src/i18n/locales/it.json index 68ffab3b..c25603f0 100644 --- a/frontend/src/i18n/locales/it.json +++ b/frontend/src/i18n/locales/it.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Si prega di raccogliere i dati mancanti (contrassegnati con ____) dai partecipanti e annotarli qui.", "allDataComplete": "Tutti i dati dei partecipanti sono completi.", "address": "Indirizzo", + "phone": "Telefono", + "generatingPDF": "Generazione PDF...", + "page": "Pagina", "dataNotRecorded": "Non ancora registrato" } } diff --git a/frontend/src/i18n/locales/ja.json b/frontend/src/i18n/locales/ja.json index e513b368..6564c63a 100644 --- a/frontend/src/i18n/locales/ja.json +++ b/frontend/src/i18n/locales/ja.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "不足しているデータ(____で表示)を参加者から収集し、ここに記入してください。", "allDataComplete": "すべての参加者データが揃っています。", "address": "住所", + "phone": "電話", + "generatingPDF": "PDF作成中...", + "page": "ページ", "dataNotRecorded": "未登録" } } diff --git a/frontend/src/i18n/locales/pl.json b/frontend/src/i18n/locales/pl.json index e20ec641..e6c29fe9 100644 --- a/frontend/src/i18n/locales/pl.json +++ b/frontend/src/i18n/locales/pl.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Proszę zebrać brakujące dane (oznaczone ____) od uczestników i zanotować je tutaj.", "allDataComplete": "Wszystkie dane uczestników są kompletne.", "address": "Adres", + "phone": "Telefon", + "generatingPDF": "Generowanie PDF...", + "page": "Strona", "dataNotRecorded": "Jeszcze nie wprowadzono" } } diff --git a/frontend/src/i18n/locales/th.json b/frontend/src/i18n/locales/th.json index 71bbaa72..548001d9 100644 --- a/frontend/src/i18n/locales/th.json +++ b/frontend/src/i18n/locales/th.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "กรุณาเก็บข้อมูลที่ขาดหาย (ทำเครื่องหมาย ____) จากผู้เข้าร่วมและจดบันทึกที่นี่", "allDataComplete": "ข้อมูลผู้เข้าร่วมทั้งหมดครบถ้วน", "address": "ที่อยู่", + "phone": "โทรศัพท์", + "generatingPDF": "กำลังสร้าง PDF...", + "page": "หน้า", "dataNotRecorded": "ยังไม่ได้บันทึก" } } diff --git a/frontend/src/i18n/locales/tl.json b/frontend/src/i18n/locales/tl.json index d0722cb0..f8866a70 100644 --- a/frontend/src/i18n/locales/tl.json +++ b/frontend/src/i18n/locales/tl.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "Pakikolekta ang nawawalang datos (may markang ____) mula sa mga kalahok at itala dito.", "allDataComplete": "Kumpleto na ang lahat ng datos ng mga kalahok.", "address": "Address", + "phone": "Telepono", + "generatingPDF": "Gumagawa ng PDF...", + "page": "Pahina", "dataNotRecorded": "Hindi pa naitala" } } diff --git a/frontend/src/i18n/locales/zh.json b/frontend/src/i18n/locales/zh.json index 60fd22b9..60803724 100644 --- a/frontend/src/i18n/locales/zh.json +++ b/frontend/src/i18n/locales/zh.json @@ -112,6 +112,9 @@ "missingDataPDFSubtitle": "请向参赛者收集缺失数据(标记为____)并在此记录。", "allDataComplete": "所有参赛者数据已完整。", "address": "地址", + "phone": "电话", + "generatingPDF": "正在生成PDF...", + "page": "页", "dataNotRecorded": "尚未录入" } }