diff --git a/frontend/src/components/members/MembersOverviewSection.vue b/frontend/src/components/members/MembersOverviewSection.vue index d4d137d8..f2c4c4ff 100644 --- a/frontend/src/components/members/MembersOverviewSection.vue +++ b/frontend/src/components/members/MembersOverviewSection.vue @@ -189,6 +189,7 @@ + diff --git a/frontend/src/i18n/locales/de-CH.json b/frontend/src/i18n/locales/de-CH.json index 94ca87e3..3f88b7e3 100644 --- a/frontend/src/i18n/locales/de-CH.json +++ b/frontend/src/i18n/locales/de-CH.json @@ -637,6 +637,7 @@ "sortFirstName": "Vorname", "sortBirthday": "Geburtstag", "sortAge": "Alter", + "sortQttr": "QTTR-Wert", "ageRange": "Alter von - bis", "ageFromPlaceholder": "von", "ageToPlaceholder": "bis", diff --git a/frontend/src/i18n/locales/de-extended.json b/frontend/src/i18n/locales/de-extended.json index ef0bf687..b1969178 100644 --- a/frontend/src/i18n/locales/de-extended.json +++ b/frontend/src/i18n/locales/de-extended.json @@ -384,6 +384,7 @@ "sortFirstName": "Vorname", "sortBirthday": "Geburtstag", "sortAge": "Alter", + "sortQttr": "QTTR-Wert", "ageRange": "Alter von - bis", "ageFromPlaceholder": "von", "ageToPlaceholder": "bis", diff --git a/frontend/src/i18n/locales/de.json b/frontend/src/i18n/locales/de.json index dad8cabf..b386180a 100644 --- a/frontend/src/i18n/locales/de.json +++ b/frontend/src/i18n/locales/de.json @@ -385,6 +385,7 @@ "sortFirstName": "Vorname", "sortBirthday": "Geburtstag", "sortAge": "Alter", + "sortQttr": "QTTR-Wert", "ageRange": "Alter von - bis", "ageFromPlaceholder": "von", "ageToPlaceholder": "bis", diff --git a/frontend/src/i18n/locales/en-AU.json b/frontend/src/i18n/locales/en-AU.json index 4c7e0908..336cb0c3 100644 --- a/frontend/src/i18n/locales/en-AU.json +++ b/frontend/src/i18n/locales/en-AU.json @@ -636,6 +636,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "QTTR value", "ageRange": "Age from - to", "ageFromPlaceholder": "from", "ageToPlaceholder": "to", diff --git a/frontend/src/i18n/locales/en-GB.json b/frontend/src/i18n/locales/en-GB.json index fba1b7c8..c0041c77 100644 --- a/frontend/src/i18n/locales/en-GB.json +++ b/frontend/src/i18n/locales/en-GB.json @@ -911,6 +911,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "QTTR value", "ageRange": "Age from - to", "ageFromPlaceholder": "from", "ageToPlaceholder": "to", diff --git a/frontend/src/i18n/locales/en-US.json b/frontend/src/i18n/locales/en-US.json index 49a0db1a..cf19818e 100644 --- a/frontend/src/i18n/locales/en-US.json +++ b/frontend/src/i18n/locales/en-US.json @@ -636,6 +636,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "QTTR value", "ageRange": "Age from - to", "ageFromPlaceholder": "from", "ageToPlaceholder": "to", diff --git a/frontend/src/i18n/locales/es.json b/frontend/src/i18n/locales/es.json index 2b4858e0..c4b99dc8 100644 --- a/frontend/src/i18n/locales/es.json +++ b/frontend/src/i18n/locales/es.json @@ -602,6 +602,7 @@ "sortFirstName": "Nombre", "sortBirthday": "Fecha de nacimiento", "sortAge": "Edad", + "sortQttr": "Valor QTTR", "ageRange": "Edad de - a", "ageFromPlaceholder": "de", "ageToPlaceholder": "a", diff --git a/frontend/src/i18n/locales/fil.json b/frontend/src/i18n/locales/fil.json index 003f392a..5fe0a305 100644 --- a/frontend/src/i18n/locales/fil.json +++ b/frontend/src/i18n/locales/fil.json @@ -602,6 +602,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "Halaga ng QTTR", "ageRange": "Edad mula - hanggang", "ageFromPlaceholder": "mula", "ageToPlaceholder": "hanggang", diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 35e0c145..215441c7 100644 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -602,6 +602,7 @@ "sortFirstName": "Prénom", "sortBirthday": "Date de naissance", "sortAge": "Âge", + "sortQttr": "Valeur QTTR", "ageRange": "Âge de - à", "ageFromPlaceholder": "de", "ageToPlaceholder": "à", diff --git a/frontend/src/i18n/locales/it.json b/frontend/src/i18n/locales/it.json index 1340f523..ed1267cf 100644 --- a/frontend/src/i18n/locales/it.json +++ b/frontend/src/i18n/locales/it.json @@ -602,6 +602,7 @@ "sortFirstName": "Nome", "sortBirthday": "Data di nascita", "sortAge": "Età", + "sortQttr": "Valore QTTR", "ageRange": "Età da - a", "ageFromPlaceholder": "da", "ageToPlaceholder": "a", diff --git a/frontend/src/i18n/locales/ja.json b/frontend/src/i18n/locales/ja.json index f82305b9..251e3ffc 100644 --- a/frontend/src/i18n/locales/ja.json +++ b/frontend/src/i18n/locales/ja.json @@ -602,6 +602,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "QTTR値", "ageRange": "年齢範囲", "ageFromPlaceholder": "から", "ageToPlaceholder": "まで", diff --git a/frontend/src/i18n/locales/pl.json b/frontend/src/i18n/locales/pl.json index 162cd45f..d47fe619 100644 --- a/frontend/src/i18n/locales/pl.json +++ b/frontend/src/i18n/locales/pl.json @@ -602,6 +602,7 @@ "sortFirstName": "Imię", "sortBirthday": "Data urodzenia", "sortAge": "Wiek", + "sortQttr": "Wartość QTTR", "ageRange": "Wiek od - do", "ageFromPlaceholder": "od", "ageToPlaceholder": "do", diff --git a/frontend/src/i18n/locales/th.json b/frontend/src/i18n/locales/th.json index 9b97a8ae..87f42b19 100644 --- a/frontend/src/i18n/locales/th.json +++ b/frontend/src/i18n/locales/th.json @@ -602,6 +602,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "ค่า QTTR", "ageRange": "ช่วงอายุ", "ageFromPlaceholder": "จาก", "ageToPlaceholder": "ถึง", diff --git a/frontend/src/i18n/locales/tl.json b/frontend/src/i18n/locales/tl.json index 462c3919..38c2286f 100644 --- a/frontend/src/i18n/locales/tl.json +++ b/frontend/src/i18n/locales/tl.json @@ -602,6 +602,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "Halaga ng QTTR", "ageRange": "Edad mula - hanggang", "ageFromPlaceholder": "mula", "ageToPlaceholder": "hanggang", diff --git a/frontend/src/i18n/locales/zh.json b/frontend/src/i18n/locales/zh.json index 17dc8cb2..778a18ee 100644 --- a/frontend/src/i18n/locales/zh.json +++ b/frontend/src/i18n/locales/zh.json @@ -602,6 +602,7 @@ "sortFirstName": "First name", "sortBirthday": "Birthday", "sortAge": "Age", + "sortQttr": "QTTR值", "ageRange": "年龄范围", "ageFromPlaceholder": "从", "ageToPlaceholder": "到", diff --git a/frontend/src/views/MembersView.vue b/frontend/src/views/MembersView.vue index 845d2b8e..fc2e8f3c 100644 --- a/frontend/src/views/MembersView.vue +++ b/frontend/src/views/MembersView.vue @@ -916,6 +916,10 @@ export default { const date = new Date(member.lastTraining); return Number.isNaN(date.getTime()) ? Number.MAX_SAFE_INTEGER : date.getTime(); }; + const getQttrValue = (member) => { + const parsed = Number.parseFloat(member?.qttr); + return Number.isFinite(parsed) ? parsed : null; + }; const compareStrings = (a, b) => String(a || '').localeCompare(String(b || ''), 'de-DE'); const direction = this.sortDirection === 'desc' ? -1 : 1; @@ -931,6 +935,24 @@ export default { case 'age': result = getAgeValue(a) - getAgeValue(b) || compareStrings(a.lastName, b.lastName); break; + case 'qttr': { + const qttrA = getQttrValue(a); + const qttrB = getQttrValue(b); + const hasQttrA = qttrA !== null; + const hasQttrB = qttrB !== null; + + // Fehlende QTTR-Werte immer nach unten sortieren, unabhängig von der Sortierrichtung. + if (!hasQttrA && hasQttrB) { + result = 1; + } else if (hasQttrA && !hasQttrB) { + result = -1; + } else if (!hasQttrA && !hasQttrB) { + result = compareStrings(a.lastName, b.lastName) || compareStrings(a.firstName, b.firstName); + } else { + result = (qttrA - qttrB) * direction || compareStrings(a.lastName, b.lastName) || compareStrings(a.firstName, b.firstName); + } + break; + } case 'lastTraining': result = getLastTrainingValue(a) - getLastTrainingValue(b) || compareStrings(a.lastName, b.lastName); break; @@ -942,6 +964,10 @@ export default { result = compareStrings(a.lastName, b.lastName) || compareStrings(a.firstName, b.firstName); break; } + // QTTR berücksichtigt die Sortierrichtung bereits im Zweig selbst. + if (this.selectedSort === 'qttr') { + return result; + } return result * direction; });