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`),"