Gleicher Satzstand bleibt ein Unentschieden — die Sonderregel kommt weg

Sven beim Testen von Begegnung 93 (2:2 im Doppel, Modus 3 Gewinnsaetze,
Wertung Sieg 2/Remis 1): das Formular rechnete 7:3 vor, gespeichert wurde 6:2.
„Und das ist meinem Verstaendnis nach doch auch das richtige Ergebnis?" — ja.

Zwei Fehler in einem:

1. Die Spielpunkte werden an DREI Stellen berechnet, nicht an zweien: zusaetzlich
   zu admin.php und begegnungenAktualisieren() rechnet das Formular selbst per
   JavaScript mit (view_admin.php, spielpunkte_bedingung()). 554ad25/35384a5
   hatten die Remis-Sonderregel in die ersten beiden eingebaut, die dritte lief
   nach der alten Regel weiter — daher 7:3 gegen 6:2.

2. Die Sonderregel selbst war falsch. „Unentschieden nur, wo der Satzmodus es
   zulaesst" war eine Ableitung aus 554ad25, keine Anforderung. Die Wertung
   sagt ausdruecklich „Sieg 2 Punkte, Unentschieden 1 Punkt" — das ist eine
   Anweisung fuer den gleichen Stand, und eine Zahl von Gewinnsaetzen sagt nur,
   WANN ein Spiel endet, nicht dass ein gleicher Stand wertlos ist. Spiele
   enden faktisch gleich (Abbruch, Zeitlimit, Absprache); ein 0:0 an der Stelle
   verliert dieselbe Information, die es schuetzen wollte.

Also: remisMoeglich() samt beiden Verwendungen entfernt, alle drei Wege rechnen
wieder die langjaehrige Regel. Gemessen auf zwei Pruefligen (je 6 Begegnungen,
30 Spiele, 4 Gleichstaende ungleich 0:0): die auf demselben Datenbestand neu
berechneten Tabellen sind zwischen dem Stand vor diesem PR und danach
VOLLSTAENDIG identisch — keine einzige Zahl weicht ab. Begegnung 93 zeigt im
Formular, auf der Seite und in der Datenbank uebereinstimmend 7:3.
This commit is contained in:
svennickel
2026-09-08 18:31:24 +02:00
parent 7f1bedc41e
commit 5d1df8579d
2 changed files with 4 additions and 15 deletions
@@ -10933,13 +10933,6 @@ function adminEditBegegnungSpielplan($bestaetigen): void
}
function remisMoeglich($saetze_modus): bool
{
if ($saetze_modus == 0) return true; // keine Angabe
if ($saetze_modus < 0) return false; // Gewinnsaetze: am Ende steht keiner gleich
return $saetze_modus % 2 == 0; // feste Satzzahl: nur eine gerade endet remis
}
function adminSaveBegegnungSpielplan(): void
{
$app = Factory::getContainer()->get(SiteApplication::class);
@@ -11283,8 +11276,7 @@ function adminSaveBegegnungSpielplan(): void
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
$spiel_heim_spielpunkte = 0;
$spiel_gast_spielpunkte = 0;
} else if ($spielpunkte_wertung_einzel != 3
&& remisMoeglich($teamspiel_modus->saetze_modus_einzel)) {
} else if ($spielpunkte_wertung_einzel != 3) {
$spiel_heim_spielpunkte = 1;
$spiel_gast_spielpunkte = 1;
} else {
@@ -11306,8 +11298,7 @@ function adminSaveBegegnungSpielplan(): void
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
$spiel_heim_spielpunkte = 0;
$spiel_gast_spielpunkte = 0;
} else if ($spielpunkte_wertung_doppel != 3
&& remisMoeglich($teamspiel_modus->saetze_modus_doppel)) {
} else if ($spielpunkte_wertung_doppel != 3) {
$spiel_heim_spielpunkte = 1;
$spiel_gast_spielpunkte = 1;
} else {
@@ -6183,8 +6183,7 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
$spiel_heim_spielpunkte = 0;
$spiel_gast_spielpunkte = 0;
} else if ($spielpunkte_wertung_einzel != 3
&& remisMoeglich($teamspiel_modus->saetze_modus_einzel)) {
} else if ($spielpunkte_wertung_einzel != 3) {
$spiel_heim_spielpunkte = 1;
$spiel_gast_spielpunkte = 1;
} else {
@@ -6206,8 +6205,7 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
$spiel_heim_spielpunkte = 0;
$spiel_gast_spielpunkte = 0;
} else if ($spielpunkte_wertung_doppel != 3
&& remisMoeglich($teamspiel_modus->saetze_modus_doppel)) {
} else if ($spielpunkte_wertung_doppel != 3) {
$spiel_heim_spielpunkte = 1;
$spiel_gast_spielpunkte = 1;
} else {