From c8d66e4611f3ff507e5d4db4faac2a3bf763f083 Mon Sep 17 00:00:00 2001 From: svennickel Date: Fri, 11 Sep 2026 23:20:35 +0200 Subject: [PATCH] Saetze redundant mitfuehren: vier Spalten, noch von niemandem gelesen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sven 2026-09-11: "ergaenze in #__sportsmanager_team ausserdem saetze_gewonnen und saetze_verloren an geeigneter Stelle und zaehle diese auch redundant geeignet mit. Analog in #__sportsmanager_teamspiel teamspiel_heim_saetze_gewonnen und teamspiel_gast_saetze_gewonnen, die ebenfalls passend gesetzt werden, wenn auch noch nicht verwendet fuer die Auswertungen." Die Zahl steht damit dort, wo sie draufsteht: teamspiel_*_punkte ist polymorph (Tore bei "Einer" und im Race, gewonnene Saetze bei "Mehrere"), die neuen Spalten sind es nicht. NULL heisst wie bei den Toren "gibt es hier nicht": unter "Einer" und im Race kennt das Modell keine Saetze, dort tragen tore_gewonnen/-verloren. Geschrieben an denselben drei Stellen wie die Tore: Spielbericht speichern, begegnungenAktualisieren(), Teamstatistik. Gemessen: alle Modi und Begegnungen aller Pruefwettbewerbe vor und nach der Aenderung neu gespeichert und abgezogen — Datenbank und Frontend Byte fuer Byte identisch. --- .../components/com_sportsmanager/admin.php | 12 ++++++++--- .../com_sportsmanager/database/update.php | 20 +++++++++++++++++++ .../com_sportsmanager/sportsmanager.php | 13 ++++++++++-- .../components/com_sportsmanager/tools.php | 7 +++++++ src/structure/script.php | 4 ++++ 5 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 03391b7..bc7f33f 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -11300,6 +11300,10 @@ function adminSaveBegegnungSpielplan(): void $spiel_saetze_remis = saetzeRemisFuerSpiel( $teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0, $spiel_ergebnis_detailliert); + list($spiel_heim_saetze_gewonnen, $spiel_gast_saetze_gewonnen) = + saetzeGewonnenFuerSpiel($teamspiel_modus->punktetyp, + $spiel_heim_punkte, $spiel_gast_punkte); + if ($spiel_saetze_remis === null || $total_saetze_remis === null) { $total_saetze_remis = null; } else { @@ -11308,8 +11312,8 @@ function adminSaveBegegnungSpielplan(): void if (!$skip_spiel) { if (!isset($spiele_nummern[$spiel_nr])) { - $query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert, teamspiel_heim_tore, teamspiel_gast_tore, teamspiel_saetze_remis)" - . "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ", " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ");"; + $query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert, teamspiel_heim_tore, teamspiel_gast_tore, teamspiel_saetze_remis, teamspiel_heim_saetze_gewonnen, teamspiel_gast_saetze_gewonnen)" + . "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ", " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ", " . ($spiel_heim_saetze_gewonnen === null ? "NULL, NULL" : "'$spiel_heim_saetze_gewonnen', '$spiel_gast_saetze_gewonnen'") . ");"; } else { $teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id; $query = "UPDATE #__sportsmanager_teamspiel" @@ -11324,7 +11328,9 @@ function adminSaveBegegnungSpielplan(): void . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . "," . "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . "," . "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'") . "," - . "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") + . "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . "," + . "\n teamspiel_heim_saetze_gewonnen = " . ($spiel_heim_saetze_gewonnen === null ? "NULL" : "'$spiel_heim_saetze_gewonnen'") . "," + . "\n teamspiel_gast_saetze_gewonnen = " . ($spiel_gast_saetze_gewonnen === null ? "NULL" : "'$spiel_gast_saetze_gewonnen'") . "\n WHERE teamspiel_id = $teamspiel_id"; } $db->setQuery($query); diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 0f328ab..b9e9bf3 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5872,6 +5872,16 @@ function updateDatabase(): void } } + if (!array_key_exists('teamspiel_heim_saetze_gewonnen', $columns)) { + $query = "ALTER TABLE `#__sportsmanager_teamspiel`" + . "\n ADD `teamspiel_heim_saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `teamspiel_saetze_remis`," + . "\n ADD `teamspiel_gast_saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `teamspiel_heim_saetze_gewonnen`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + $columns = $db->getTableColumns('#__sportsmanager_begegnung'); if (!array_key_exists('heim_tore', $columns)) { $query = "ALTER TABLE `#__sportsmanager_begegnung`" @@ -5914,6 +5924,16 @@ function updateDatabase(): void } } + if (!array_key_exists('saetze_gewonnen', $columns)) { + $query = "ALTER TABLE `#__sportsmanager_team`" + . "\n ADD `saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `saetze_remis`," + . "\n ADD `saetze_verloren` SMALLINT(6) NULL DEFAULT NULL AFTER `saetze_gewonnen`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '123'" . "\n WHERE name = 'datenbank_version'"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 7b7fd8f..19b3236 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -5625,12 +5625,13 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert foreach ($veranstaltungen as $veranstaltung) { if ($veranstaltung->tabellenwertung > 0) { - $query = "SELECT spielpunkte_wertung_einzel, spielpunkte_wertung_doppel" + $query = "SELECT spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, punktetyp" . "\n FROM #__sportsmanager_teamspiel_modus" . "\n WHERE teamspiel_modus_id = " . (int)($veranstaltung->modus_id ?? 0); $wertungen = loadObjectList($db, $query); $je_satz = count($wertungen) > 0 && jeSatzWertung($wertungen[0]->spielpunkte_wertung_einzel, $wertungen[0]->spielpunkte_wertung_doppel); + $saetze_bekannt = count($wertungen) > 0 && $wertungen[0]->punktetyp == 1; $ausgetragen = function ($alias) use ($je_satz) { return ausgetragenBedingung($je_satz, $alias); }; @@ -5668,6 +5669,8 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert . "\n #__sportsmanager_team.tore_differenz = werte.tore_gewonnen - werte.tore_verloren," . "\n #__sportsmanager_team.tore_quotient = IF(werte.tore_verloren = 0, -1, werte.tore_gewonnen / werte.tore_verloren)," . "\n #__sportsmanager_team.saetze_remis = werte.saetze_remis," + . "\n #__sportsmanager_team.saetze_gewonnen = " . ($saetze_bekannt ? "werte.punkte_gewonnen" : "NULL") . "," + . "\n #__sportsmanager_team.saetze_verloren = " . ($saetze_bekannt ? "werte.punkte_verloren" : "NULL") . "," . "\n #__sportsmanager_team.buchholz1 = 0," . "\n #__sportsmanager_team.buchholz2 = 0" . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; @@ -6254,6 +6257,10 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo $spiel_saetze_remis = saetzeRemisFuerSpiel( $teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0, $spiel->ergebnis_detailliert); + + list($spiel_heim_saetze_gewonnen, $spiel_gast_saetze_gewonnen) = + saetzeGewonnenFuerSpiel($teamspiel_modus->punktetyp, + $spiel->teamspiel_heim_punkte, $spiel->teamspiel_gast_punkte); if ($spiel_saetze_remis === null || $total_saetze_remis === null) { $total_saetze_remis = null; } else { @@ -6265,7 +6272,9 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'," . "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . "," . "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'") . "," - . "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") + . "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . "," + . "\n teamspiel_heim_saetze_gewonnen = " . ($spiel_heim_saetze_gewonnen === null ? "NULL" : "'$spiel_heim_saetze_gewonnen'") . "," + . "\n teamspiel_gast_saetze_gewonnen = " . ($spiel_gast_saetze_gewonnen === null ? "NULL" : "'$spiel_gast_saetze_gewonnen'") . "\n WHERE teamspiel_id = $spiel->teamspiel_id"; $db->setQuery($query); if (!$db->execute()) { diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php index 5126a71..203afc7 100644 --- a/src/structure/components/com_sportsmanager/tools.php +++ b/src/structure/components/com_sportsmanager/tools.php @@ -679,6 +679,13 @@ function ergebnisVorhanden($je_satz, $heim_punkte, $gast_punkte, $heim_tore): bo return $heim_punkte != null || $gast_punkte != null || ($je_satz && $heim_tore !== null); } +function saetzeGewonnenFuerSpiel($punktetyp, $heim_punkte, $gast_punkte): array +{ + if ($punktetyp != 1) + return array(null, null); + return array((int)$heim_punkte, (int)$gast_punkte); +} + function saetzeRemisFuerSpiel($punktetyp, $satzergebnisse, $ergebnis_detailliert): ?int { if ($punktetyp == 0 || empty($satzergebnisse) || empty($ergebnis_detailliert)) diff --git a/src/structure/script.php b/src/structure/script.php index 5f2591e..3e46404 100644 --- a/src/structure/script.php +++ b/src/structure/script.php @@ -727,6 +727,8 @@ return new class () implements InstallerScriptInterface . "\n `tore_differenz` smallint(6) DEFAULT NULL," . "\n `tore_quotient` float(8,2) DEFAULT NULL," . "\n `saetze_remis` smallint(6) DEFAULT NULL," + . "\n `saetze_gewonnen` smallint(6) DEFAULT NULL," + . "\n `saetze_verloren` smallint(6) DEFAULT NULL," . "\n `buchholz1` smallint(6) DEFAULT NULL," . "\n `buchholz2` smallint(6) DEFAULT NULL," . "\n PRIMARY KEY (`team_id`)," @@ -787,6 +789,8 @@ return new class () implements InstallerScriptInterface . "\n `teamspiel_heim_tore` smallint(6) DEFAULT NULL," . "\n `teamspiel_gast_tore` smallint(6) DEFAULT NULL," . "\n `teamspiel_saetze_remis` smallint(6) DEFAULT NULL," + . "\n `teamspiel_heim_saetze_gewonnen` smallint(6) DEFAULT NULL," + . "\n `teamspiel_gast_saetze_gewonnen` smallint(6) DEFAULT NULL," . "\n PRIMARY KEY (`teamspiel_id`)," . "\n KEY `begegnung_id` (`begegnung_id`)," . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`),"