diff --git a/README.md b/README.md index 5ec61d5df..49b3dcc18 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub last commit](https://img.shields.io/github/last-commit/softwaremagico/KendoTournamentManager)](https://github.com/softwaremagico/KendoTournamentManager) [![Issues](https://img.shields.io/github/issues/softwaremagico/KendoTournamentManager.svg)](https://github.com/softwaremagico/KendoTournamentManager/issues) [![CircleCI](https://circleci.com/gh/softwaremagico/KendoTournamentManager.svg?style=shield)](https://circleci.com/gh/softwaremagico/KendoTournamentManager) -[![Time](https://img.shields.io/badge/development-708.5h-blueviolet.svg)]() +[![Time](https://img.shields.io/badge/development-710h-blueviolet.svg)]() [![Powered by](https://img.shields.io/badge/powered%20by%20java-orange.svg?logo=OpenJDK&logoColor=white)]() [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=kendo-tournament-backend&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=kendo-tournament-backend) diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfCompetitorDTO.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfCompetitorDTO.java index b1ca3bdac..499a44d27 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfCompetitorDTO.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfCompetitorDTO.java @@ -34,6 +34,7 @@ public class ScoreOfCompetitorDTO { private Integer drawDuels = null; private Integer untieDuels = null; private Integer hits = null; + private Integer hitsLost = null; private Integer untieHits = null; private Integer duelsDone = null; private Integer wonFights = null; @@ -92,6 +93,14 @@ public void setHits(Integer hits) { this.hits = hits; } + public Integer getHitsLost() { + return hitsLost; + } + + public void setHitsLost(Integer hitsLost) { + this.hitsLost = hitsLost; + } + public Integer getUntieHits() { return untieHits; } diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfTeamDTO.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfTeamDTO.java index 786d08927..030841b5e 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfTeamDTO.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfTeamDTO.java @@ -47,6 +47,7 @@ public class ScoreOfTeamDTO extends ElementDTO { private Integer drawDuels = null; private Integer untieDuels = null; private Integer hits = null; + private Integer hitsLost = null; private Integer level = null; private Integer sortingIndex = null; @@ -213,6 +214,14 @@ public void setHits(Integer hits) { this.hits = hits; } + public Integer getHitsLost() { + return hitsLost; + } + + public void setHitsLost(Integer hitsLost) { + this.hitsLost = hitsLost; + } + public Integer getLevel() { return level; } diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitor.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitor.java index 41a77fa3c..349bbbb61 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitor.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitor.java @@ -42,6 +42,7 @@ public class ScoreOfCompetitor { private Integer drawDuels = null; private Integer untieDuels = null; private Integer hits = null; + private Integer hitsLost = null; private Integer untieHits = null; private Integer duelsDone = null; private Integer wonFights = null; @@ -84,6 +85,7 @@ public void update() { wonDuels = null; drawDuels = null; hits = null; + hitsLost = null; totalFights = null; setDuelsWon(); setDuelsDraw(); @@ -93,6 +95,7 @@ public void update() { setUntieDuels(); setUntieHits(); setHits(); + setHitsLost(); setTotalFights(); } @@ -170,6 +173,15 @@ public void setHits() { } } + public void setHitsLost() { + hitsLost = 0; + for (final Fight fight : fights) { + if (fight != null) { + hitsLost += fight.getScoreAgainst(competitor); + } + } + } + public void setUntieDuels() { untieDuels = 0; unties.forEach(duel -> { @@ -215,6 +227,14 @@ public void setHits(Integer hits) { this.hits = hits; } + public Integer getHitsLost() { + return hitsLost; + } + + public void setHitsLost(Integer hitsLost) { + this.hitsLost = hitsLost; + } + public Integer getDuelsDone() { return duelsDone; } @@ -273,7 +293,8 @@ public void setTotalFights(Integer totalFights) { @Override public String toString() { - return "{" + NameUtils.getLastnameName(competitor) + " D:" + getWonDuels() + "/" + getDrawDuels() + ", H:" + getHits() + "}"; + return "{" + NameUtils.getLastnameName(competitor) + " D:" + getWonDuels() + "/" + + getDrawDuels() + ", H:" + getHits() + ", HL:" + getHitsLost() + "}"; } } diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitorEuropean.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitorEuropean.java index ce4aae38f..2380cebbe 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitorEuropean.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitorEuropean.java @@ -43,6 +43,11 @@ public int compare(ScoreOfCompetitor scoreOfCompetitor1, ScoreOfCompetitor score return scoreOfCompetitor2.getHits().compareTo(scoreOfCompetitor1.getHits()); } + // Fewer hits lost + if (!Objects.equals(scoreOfCompetitor1.getHitsLost(), scoreOfCompetitor2.getHitsLost())) { + return scoreOfCompetitor1.getDuelsDone().compareTo(scoreOfCompetitor2.getDuelsDone()); + } + // More duels done with same score is negative. if (!Objects.equals(scoreOfCompetitor1.getDuelsDone(), scoreOfCompetitor2.getDuelsDone())) { return scoreOfCompetitor1.getDuelsDone().compareTo(scoreOfCompetitor2.getDuelsDone()); diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeam.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeam.java index 087b044dd..2aacf90b3 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeam.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeam.java @@ -45,6 +45,7 @@ public class ScoreOfTeam { private Integer drawDuels = null; private Integer untieDuels = null; private Integer hits = null; + private Integer hitsLost = null; private Integer level = null; private Integer sortingIndex = null; @@ -81,6 +82,7 @@ public void update() { drawDuels = null; untieDuels = null; hits = null; + hitsLost = null; level = null; fightsDone = null; setLevel(); @@ -91,6 +93,7 @@ public void update() { setFightsDone(); setUntieDuels(); setHits(); + setHitsLost(); } public void setLevel() { @@ -129,6 +132,10 @@ public void setHits() { hits = fights.stream().mapToInt(fight -> fight.getScore(team)).sum(); } + public void setHitsLost() { + hitsLost = fights.stream().mapToInt(fight -> fight.getScoreAgainst(team)).sum(); + } + public void setUntieDuels() { untieDuels = 0; unties.forEach(duel -> { @@ -211,6 +218,14 @@ public void setHits(Integer hits) { this.hits = hits; } + public Integer getHitsLost() { + return hitsLost; + } + + public void setHitsLost(Integer hitsLost) { + this.hitsLost = hitsLost; + } + public Integer getLevel() { return level; } @@ -230,6 +245,7 @@ public void setSortingIndex(Integer sortingIndex) { @Override public String toString() { return "{" + team.getName() + ": Fights:" + getWonFights() + "/" + getDrawFights() + ", Duels: " - + getWonDuels() + "/" + getDrawDuels() + ", hits:" + getHits() + "*".repeat(Math.max(0, getUntieDuels())) + "}"; + + getWonDuels() + "/" + getDrawDuels() + ", hits:" + getHits() + "*".repeat(Math.max(0, getUntieDuels())) + + ", hits lost:" + getHitsLost() + "}"; } } diff --git a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeamEuropean.java b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeamEuropean.java index 4cf95622f..2ff878d32 100644 --- a/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeamEuropean.java +++ b/backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeamEuropean.java @@ -59,6 +59,11 @@ public int compare(ScoreOfTeam scoreOfTeam1, ScoreOfTeam scoreOfTeam2) { return scoreOfTeam2.getHits().compareTo(scoreOfTeam1.getHits()); } + // Fewer hits lost + if (!Objects.equals(scoreOfTeam1.getHitsLost(), scoreOfTeam2.getHitsLost())) { + return scoreOfTeam1.getHitsLost().compareTo(scoreOfTeam2.getHitsLost()); + } + return scoreOfTeam2.getUntieDuels().compareTo(scoreOfTeam1.getUntieDuels()); } } diff --git a/backend/kendo-tournament-core/src/test/java/com/softwaremagico/kt/core/tests/ScoreTest.java b/backend/kendo-tournament-core/src/test/java/com/softwaremagico/kt/core/tests/ScoreTest.java index 46ac27fc5..df21befbf 100644 --- a/backend/kendo-tournament-core/src/test/java/com/softwaremagico/kt/core/tests/ScoreTest.java +++ b/backend/kendo-tournament-core/src/test/java/com/softwaremagico/kt/core/tests/ScoreTest.java @@ -105,12 +105,6 @@ public class ScoreTest extends AbstractTestNGSpringContextTests { @Autowired private DuelProvider duelProvider; - @Autowired - private GroupConverter groupConverter; - - @Autowired - private TeamConverter teamConverter; - @Autowired private RankingProvider rankingProvider; @@ -270,6 +264,57 @@ public void testEuropeanScore() { resetGroup(groupProvider.getGroups(tournament).get(0), null); } + @Test(dependsOnMethods = {"createFights"}) + public void testEuropeanScoreHitLost() { + tournament.setTournamentScore(new TournamentScore(ScoreType.EUROPEAN)); + tournament = tournamentProvider.save(tournament); + + final Group groupTest = groupProvider.getGroups(tournament).get(0); + + // Team1 vs Team2 + groupTest.getFights().get(0).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(0).getDuels().get(0).addCompetitor2Score(Score.MEN); + groupTest.getFights().get(0).getDuels().get(0).addCompetitor2Score(Score.MEN); + // Team3 vs Team2 + groupTest.getFights().get(1).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(1).getDuels().get(0).addCompetitor2Score(Score.MEN); + groupTest.getFights().get(1).getDuels().get(1).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(1).getDuels().get(1).addCompetitor2Score(Score.MEN); + // Team3 vs Team4 + groupTest.getFights().get(2).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(2).getDuels().get(0).addCompetitor2Score(Score.MEN); + // Team1 vs Team4 + groupTest.getFights().get(3).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(3).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(3).getDuels().get(0).addCompetitor2Score(Score.MEN); + // Team1 vs Team3 + groupTest.getFights().get(4).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(4).getDuels().get(0).addCompetitor2Score(Score.MEN); + // Team4 vs Team2 + groupTest.getFights().get(5).getDuels().get(0).addCompetitor1Score(Score.MEN); + groupTest.getFights().get(5).getDuels().get(0).addCompetitor1Score(Score.MEN); + + // Total Team1 1/1F 1/7D 4H 4HL + // Total Team2 1/1F 1/7D 4H 5HL + // Total Team3 0/3F 0/9D 4H 4HL + // Total Team4 1/1F 1/7D 4H 3HL + + // finish fights. + groupTest.getFights().forEach(fight -> { + fight.getDuels().forEach(duel -> duel.setFinished(true)); + fightProvider.save(fight); + }); + + // Team04 has fewer hits lost. + List scores = rankingProvider.getTeamsScoreRanking(tournament); + Assert.assertEquals(scores.get(0).getTeam(), teamProvider.get(tournament, "Team04").get()); + Assert.assertEquals(scores.get(1).getTeam(), teamProvider.get(tournament, "Team01").get()); + Assert.assertEquals(scores.get(2).getTeam(), teamProvider.get(tournament, "Team02").get()); + Assert.assertEquals(scores.get(3).getTeam(), teamProvider.get(tournament, "Team03").get()); + + resetGroup(groupProvider.getGroups(tournament).get(0), null); + } + @Test(dependsOnMethods = {"createFights"}) public void testInternationalScore() { tournament.setTournamentScore(new TournamentScore(ScoreType.INTERNATIONAL)); diff --git a/backend/kendo-tournament-persistence/src/main/java/com/softwaremagico/kt/persistence/entities/Fight.java b/backend/kendo-tournament-persistence/src/main/java/com/softwaremagico/kt/persistence/entities/Fight.java index 7065b1a97..76b45af35 100644 --- a/backend/kendo-tournament-persistence/src/main/java/com/softwaremagico/kt/persistence/entities/Fight.java +++ b/backend/kendo-tournament-persistence/src/main/java/com/softwaremagico/kt/persistence/entities/Fight.java @@ -215,6 +215,15 @@ public Integer getScore(Participant competitor) { return score; } + public Integer getScoreAgainst(Participant competitor) { + int score = 0; + score += getDuels().stream().filter(duel -> + (Objects.equals(duel.getCompetitor1(), competitor))).mapToInt(Duel::getCompetitor2ScoreValue).sum(); + score += getDuels().stream().filter(duel -> + (Objects.equals(duel.getCompetitor2(), competitor))).mapToInt(Duel::getCompetitor1ScoreValue).sum(); + return score; + } + public Integer getDrawDuels(Participant competitor) { return (int) getDuels().stream().filter(duel -> duel.getWinner() == 0 && (Objects.equals(duel.getCompetitor1(), competitor) || Objects.equals(duel.getCompetitor2(), competitor))).count(); @@ -271,6 +280,16 @@ public Integer getScore(Team team) { return 0; } + public Integer getScoreAgainst(Team team) { + if (Objects.equals(team1, team)) { + return getScoreTeam2(); + } + if (Objects.equals(team2, team)) { + return getScoreTeam1(); + } + return 0; + } + public Integer getScoreTeam1() { return getDuels().stream().mapToInt(Duel::getCompetitor1ScoreValue).sum(); } diff --git a/backend/kendo-tournament-rest/src/test/java/com/softwaremagico/kt/websockets/BasicWebsocketsTests.java b/backend/kendo-tournament-rest/src/test/java/com/softwaremagico/kt/websockets/BasicWebsocketsTests.java index 10b2cd22c..7c210ac0f 100644 --- a/backend/kendo-tournament-rest/src/test/java/com/softwaremagico/kt/websockets/BasicWebsocketsTests.java +++ b/backend/kendo-tournament-rest/src/test/java/com/softwaremagico/kt/websockets/BasicWebsocketsTests.java @@ -24,7 +24,6 @@ import com.softwaremagico.kt.EchoWebSocketController; import com.softwaremagico.kt.core.providers.AuthenticatedUserProvider; import com.softwaremagico.kt.persistence.entities.AuthenticatedUser; -import com.softwaremagico.kt.persistence.entities.IAuthenticatedUser; import com.softwaremagico.kt.rest.controllers.AuthenticatedUserController; import com.softwaremagico.kt.rest.security.JwtTokenUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -103,7 +102,7 @@ public void authentication() { authenticatedUser = authenticatedUserController.createUser(null, USER_NAME, USER_FIRST_NAME, USER_LAST_NAME, USER_PASSWORD, USER_ROLES); headers = new WebSocketHttpHeaders(); - headers.set("Authorization", "Bearer " + jwtTokenUtil.generateAccessToken((IAuthenticatedUser) authenticatedUser, "127.0.0.1")); + headers.set("Authorization", "Bearer " + jwtTokenUtil.generateAccessToken(authenticatedUser, "127.0.0.1")); } diff --git a/frontend/src/app/components/competitors-ranking/competitors-ranking.component.html b/frontend/src/app/components/competitors-ranking/competitors-ranking.component.html index 36e94268a..f8744ad45 100644 --- a/frontend/src/app/components/competitors-ranking/competitors-ranking.component.html +++ b/frontend/src/app/components/competitors-ranking/competitors-ranking.component.html @@ -16,7 +16,8 @@ {{ 'competitor' | translate }} {{ 'duelsWon' | translate }} {{ 'duelsDraw' | translate }} - {{ 'histsWon' | translate }} + {{ 'hitsWon' | translate }} + {{ 'hitsLost' | translate }} {{ 'totalFights' | translate }} @@ -36,6 +37,9 @@ {{ scoreOfCompetitor.hits }}{{ (scoreOfCompetitor.untieHits ? "*" : "") }} + {{ scoreOfCompetitor.hitsLost }} + {{ scoreOfCompetitor.totalFights }} diff --git a/frontend/src/app/components/competitors-ranking/competitors-ranking.component.ts b/frontend/src/app/components/competitors-ranking/competitors-ranking.component.ts index 0b6f94f54..6bfd846fa 100644 --- a/frontend/src/app/components/competitors-ranking/competitors-ranking.component.ts +++ b/frontend/src/app/components/competitors-ranking/competitors-ranking.component.ts @@ -9,6 +9,7 @@ import {RbacService} from "../../services/rbac/rbac.service"; import {Participant} from "../../models/participant"; import {DOCUMENT} from "@angular/common"; import {Club} from "../../models/club"; +import {ScoreType} from "../../models/score-type"; @Component({ selector: 'app-competitors-ranking', @@ -111,4 +112,6 @@ export class CompetitorsRankingComponent extends RbacBasedComponent implements O daysChanged(): void { this.getRanking(); } + + protected readonly ScoreType = ScoreType; } diff --git a/frontend/src/app/components/team-ranking/team-ranking.component.html b/frontend/src/app/components/team-ranking/team-ranking.component.html index 28e30eb88..039806329 100644 --- a/frontend/src/app/components/team-ranking/team-ranking.component.html +++ b/frontend/src/app/components/team-ranking/team-ranking.component.html @@ -9,7 +9,8 @@ {{ 'fightsDraw' | translate }} {{ 'duelsWon' | translate }} {{ 'duelsDraw' | translate }} - {{ 'histsWon' | translate }} + {{ 'hitsWon' | translate }} + {{ 'hitsLost' | translate }} @@ -30,6 +31,7 @@ {{ teamScore.wonDuels }} {{ teamScore.drawDuels }} {{ teamScore.hits }}{{ (teamScore.untieDuels ? "*" : "") }} + {{ teamScore.hitsLost }} diff --git a/frontend/src/app/components/team-ranking/team-ranking.component.ts b/frontend/src/app/components/team-ranking/team-ranking.component.ts index 26180e3d8..6ac1e9f6b 100644 --- a/frontend/src/app/components/team-ranking/team-ranking.component.ts +++ b/frontend/src/app/components/team-ranking/team-ranking.component.ts @@ -18,6 +18,7 @@ import {TournamentExtendedProperty} from "../../models/tournament-extended-prope import {MessageService} from "../../services/message.service"; import {Router} from "@angular/router"; import {NameUtilsService} from "../../services/name-utils.service"; +import {ScoreType} from "../../models/score-type"; @Component({ selector: 'app-team-ranking', @@ -166,4 +167,6 @@ export class TeamRankingComponent extends RbacBasedComponent implements OnInit { } return teamMembers; } + + protected readonly ScoreType = ScoreType; } diff --git a/frontend/src/app/models/score-of-competitor.ts b/frontend/src/app/models/score-of-competitor.ts index 9756a1a93..d19ad72ca 100644 --- a/frontend/src/app/models/score-of-competitor.ts +++ b/frontend/src/app/models/score-of-competitor.ts @@ -5,6 +5,7 @@ export class ScoreOfCompetitor { public wonDuels: number; public drawDuels: number; public hits: number; + public hitsLost: number; public duelsDone: number; public wonFights: number; public drawFights: number; @@ -16,6 +17,7 @@ export class ScoreOfCompetitor { target.wonDuels = source.wonDuels; target.drawDuels = source.drawDuels; target.hits = source.hits; + target.hitsLost = source.hitsLost; target.duelsDone = source.duelsDone; target.wonFights = source.wonFights; target.drawFights = source.drawFights; diff --git a/frontend/src/app/models/score-of-team.ts b/frontend/src/app/models/score-of-team.ts index e9abdb8e3..e4c2f157d 100644 --- a/frontend/src/app/models/score-of-team.ts +++ b/frontend/src/app/models/score-of-team.ts @@ -8,6 +8,7 @@ export class ScoreOfTeam { public drawDuels: number; public untieDuels: number; public hits: number; + public hitsLost: number; public sortingIndex: number; public static copy(source: ScoreOfTeam, target: ScoreOfTeam): void { @@ -16,6 +17,7 @@ export class ScoreOfTeam { target.wonDuels = source.wonDuels; target.drawDuels = source.drawDuels; target.hits = source.hits; + target.hitsLost = source.hitsLost; target.untieDuels = source.untieDuels; if (source.team !== undefined) { target.team = Team.clone(source.team); diff --git a/frontend/src/assets/i18n/ca.json b/frontend/src/assets/i18n/ca.json index 79f360e6b..32d876dd0 100644 --- a/frontend/src/assets/i18n/ca.json +++ b/frontend/src/assets/i18n/ca.json @@ -93,7 +93,8 @@ "fightsDraw": "Partits empatats", "duelsWon": "Combats guanyats", "duelsDraw": "Combats empatats", - "histsWon": "Punts realitzats", + "hitsWon": "Punts realitzats", + "hitsLost": "Punts rebuts", "totalFights": "Partits totals", "all": "Tots", "winnerNumber": "Nombre de guanyadors", @@ -113,9 +114,9 @@ "classic": "Classificació", "classicHint": "El guanyador s'obté mitjançant la suma de partits guanyats, i si hi ha empat es sumen els combats guanyats. En cas que hi haja un altre empat, es tenen en compte els cops. Els empats o els duels s'ignoren.", "european": "Europeu", - "europeanHint": "El guanyador s'obté per partits guanyats. Si hi ha empat, se compten els partits empatats. Si a més hi ha un empat fem servir el mateix procediment amb els duels. Si la puntuació dels partits i duels també és un empat, es compten els cops.", + "europeanHint": "El guanyador s'obté per partits guanyats. Si hi ha empat, se compten els partits empatats. Si a més hi ha un empat fem servir el mateix procediment amb els duels. Si la puntuació dels partits i duels també és un empat, es compten els cops. Si també hi ha empat, gana el que tingui el menor nombre de cops perduts.", "international": "Internacional", - "internationalHint": "El guanyador s'obté per partits guanyats. Si hi ha empat, es compten els partits empatats. Si a més hi ha un empat es compten els combats guanyats. Si encara hi ha empat, es compten el nombre de colps. Tingueu en compte que la diferència amb el format europeu és que els duels d'empat s'ignoren.", + "internationalHint": "El guanyador s'obté per partits guanyats. Si hi ha empat, es compten els partits empatats. Si a més hi ha un empat es compten els combats guanyats. Si encara hi ha empat, es compten el nombre de colps. Tingueu en compte que la diferència amb el format europeu és que els duels d'empat s'ignoren. Els cops perduts tampoc no es comptabilitzen.", "custom": "Personalitzat", "customHint": "Us permet definir valors personalitzats per al vostre torneig.", "win_over_draws": "Victòria sobre l'empat", diff --git a/frontend/src/assets/i18n/de.json b/frontend/src/assets/i18n/de.json index 98ee83524..6d91783d1 100644 --- a/frontend/src/assets/i18n/de.json +++ b/frontend/src/assets/i18n/de.json @@ -89,7 +89,8 @@ "fault": "Hansoku", "fightsWon": "Gewonnene Kämpfe", "duelsWon": "Gewonnene Duelle", - "histsWon": "Treffer", + "hitsWon": "Treffer", + "hitsLost": "Erhaltene Punkte", "totalFights": "Gesamtzahl der Übereinstimmungen", "all": "Alle", "winnerNumber": "Anzahl Gewinne", @@ -109,9 +110,9 @@ "classic": "Klassik", "classicHint": "Der Sieger ergibt sich aus der Addition der gewonnenen Spiele, bei Gleichstand werden die gewonnenen Duelle gezählt. Bei erneutem Gleichstand werden Treffer gewertet. Unentschieden oder Duelle werden ignoriert.", "european": "Europäisch", - "europeanHint": "Der Gewinner wird durch gewonnene Matches ermittelt. Bei Gleichstand werden die unentschiedenen Spiele gezählt. Gibt es auch ein Unentschieden, wenden wir das gleiche Verfahren mit Zweikämpfen an. Stehen auch die Matches und Duelle unentschieden, werden die Treffer gezählt.", + "europeanHint": "Der Gewinner wird durch gewonnene Matches ermittelt. Bei Gleichstand werden die unentschiedenen Spiele gezählt. Gibt es auch ein Unentschieden, wenden wir das gleiche Verfahren mit Zweikämpfen an. Stehen auch die Matches und Duelle unentschieden, werden die Treffer gezählt. Wenn Sie auch noch empört sind, müssen Sie die geringere Zahl der verlorenen Menschen erreichen.", "international": "Internationale", - "internationalHint": "Der Sieger wird anhand der gewonnenen Spiele ermittelt. Bei Gleichstand zählt die Anzahl der unentschiedenen Spiele. Besteht weiterhin Gleichstand, zählt die Anzahl der gewonnenen Spiele. Sollte auch dann noch Gleichstand herrschen, zählt die Anzahl der Treffer. Im Gegensatz zum europäischen Format werden unentschiedene Spiele nicht gewertet.", + "internationalHint": "Der Sieger wird anhand der gewonnenen Spiele ermittelt. Bei Gleichstand zählt die Anzahl der unentschiedenen Spiele. Besteht weiterhin Gleichstand, zählt die Anzahl der gewonnenen Spiele. Sollte auch dann noch Gleichstand herrschen, zählt die Anzahl der Treffer. Im Gegensatz zum europäischen Format werden unentschiedene Spiele nicht gewertet. Die erlittenen Schläge werden ebenfalls nicht gezählt.", "custom": "Angepasst", "customHint": "Es ermöglicht Ihnen, benutzerdefinierte Werte für Ihr Turnier zu definieren.", "win_over_draws": "Sieg über Unentschieden", diff --git a/frontend/src/assets/i18n/en.json b/frontend/src/assets/i18n/en.json index 675b0d634..5b7d933be 100644 --- a/frontend/src/assets/i18n/en.json +++ b/frontend/src/assets/i18n/en.json @@ -61,7 +61,8 @@ "duelsWon": "Won fights", "duelsDraw": "Draw fights", "duelsLost": "Lost fights", - "histsWon": "Hits", + "hitsWon": "Hits", + "hitsLost": "Hits Lost", "totalFights": "Total matches", "all": "All", "winnerNumber": "Number of winners", @@ -316,9 +317,9 @@ "classic": "Classic", "classicHint": "Winner is obtained by won matches, and if there is a tie on the number of matches, by the won fights. Also if there is another tie, hits are taken into account. Draw matches or fights are ignored.", "european": "European", - "europeanHint": "Winner is obtained by won matches. If there is a tie, then draw matches are counted. If there is also a tie we use the same procedure with duels. If matches and duels won are also a tie, hits are counted.", + "europeanHint": "Winner is obtained by won matches. If there is a tie, then draw matches are counted. If there is also a tie we use the same procedure with duels. If matches and duels won are also a tie, hits are counted. If there is also a tie, the lower number of hits lost wins.", "international": "International", - "internationalHint": "Winner is obtained by won matches. If there is a tie, then draw matches are counted. If there is also a tie we count the won fights. If still there is a tie, count the number of hits. Please note that, unlike the European format, draw fights are not considered.", + "internationalHint": "Winner is obtained by won matches. If there is a tie, then draw matches are counted. If there is also a tie we count the won fights. If still there is a tie, count the number of hits. Please note that, unlike the European format, draw fights are not considered, neither lost hits are counted.", "custom": "Custom", "customHint": "You can define custom values for your tournament", "scoreRules": "Score Rules", diff --git a/frontend/src/assets/i18n/es.json b/frontend/src/assets/i18n/es.json index 4b7a302e2..0d2e4d709 100644 --- a/frontend/src/assets/i18n/es.json +++ b/frontend/src/assets/i18n/es.json @@ -87,7 +87,8 @@ "fightsDraw": "Partidos empatados", "duelsWon": "Combates ganados", "duelsDraw": "Combates empatados", - "histsWon": "Puntos realizados", + "hitsWon": "Puntos realizados", + "hitsLost": "Puntos recibidos", "totalFights": "Partidos totales", "all": "Todos", "winnerNumber": "Numero de ganadores", @@ -107,9 +108,9 @@ "classic": "Clásico", "classicHint": "El ganador se obtiene por combates ganados, y si hay empate en el número de combates, por los combates ganados. Además, si hay otro empate, se tienen en cuenta los golpes. No se tienen en cuenta los combates empatados.", "european": "Europeo", - "europeanHint": "El ganador se obtiene por partidos ganados. Si hay empate, se cuentan los partidos empatados. Si también hay empate, se utiliza el mismo procedimiento con los duelos. Si los partidos y duelos ganados también son un empate, se cuentan los golpes.", + "europeanHint": "El ganador se obtiene por partidos ganados. Si hay empate, se cuentan los partidos empatados. Si también hay empate, se utiliza el mismo procedimiento con los duelos. Si los partidos y duelos ganados también son un empate, se cuentan los golpes. Si también hay empate, gana el que tenga el menor número de golpes perdidos.", "international": "Internacional", - "internationalHint": "El ganador se obtiene por partidos ganados. Si hay empate, se cuentan los combates empatados. Si también hay empate se cuentan los combates ganados. Si sigue habiendo empate, se cuenta el número de golpes. Tenga en cuenta que la diferencia con el formato europeo es que los duelos con empates se ignoran.", + "internationalHint": "El ganador se obtiene por partidos ganados. Si hay empate, se cuentan los combates empatados. Si también hay empate se cuentan los combates ganados. Si sigue habiendo empate, se cuenta el número de golpes. Tenga en cuenta que la diferencia con el formato europeo es que los duelos con empates se ignoran. Los golpes recibidos tampoco se contabilizan.", "custom": "Personalizado", "customHint": "Te permite definir valores personalizados para tu torneo.", "win_over_draws": "Victoria sobre el empate", diff --git a/frontend/src/assets/i18n/it.json b/frontend/src/assets/i18n/it.json index 1e81b57ad..dff5ae90c 100644 --- a/frontend/src/assets/i18n/it.json +++ b/frontend/src/assets/i18n/it.json @@ -91,7 +91,8 @@ "fightsDraw": "Incontri pari", "duelsWon": "Combatti vinti", "duelsDraw": "Combatti pari", - "histsWon": "Punti realizzati", + "hitsWon": "Punti realizzati", + "hitsLost": "Punti ricevuti", "totalFights": "Incontri totali", "all": "Tutti", "winnerNumber": "Numero di vincitori", @@ -111,9 +112,9 @@ "classic": "Classico", "classicHint": "Il vincitore si ottiene sommando le partite vinte e, in caso di parità, vengono conteggiati i duelli vinti. In caso di ulteriore parità, vengono presi in considerazione i colpi. I pareggi oi duelli vengono ignorati.", "european": "Europeo", - "europeanHint": "Il vincitore si ottiene dalle partite vinte. Se c'è un pareggio, le partite in parità vengono conteggiate. Se c'è anche un pareggio, utilizziamo la stessa procedura con i duelli. Se anche il punteggio delle partite e dei duelli è un pareggio, i colpi vengono conteggiati.", + "europeanHint": "Il vincitore si ottiene dalle partite vinte. Se c'è un pareggio, le partite in parità vengono conteggiate. Se c'è anche un pareggio, utilizziamo la stessa procedura con i duelli. Se anche il punteggio delle partite e dei duelli è un pareggio, i colpi vengono conteggiati. Se hai anche un pareggio, guadagna quello che hai il meno numero di colpi perditi.", "international": "Internazionale", - "internationalHint": "Il vincitore si ottiene dalle partite vinte. Se c'è un pareggio, le partite in parità vengono conteggiate. In caso di nueva parità vengono conteggiati i duelli vinti. Se c'è ancora un pareggio, viene contato il numero di colpi. Da notare che la differenza con il formato europeo è che i duelli in parità vengono ignorati.", + "internationalHint": "Il vincitore si ottiene dalle partite vinte. Se c'è un pareggio, le partite in parità vengono conteggiate. In caso di nueva parità vengono conteggiati i duelli vinti. Se c'è ancora un pareggio, viene contato il numero di colpi. Da notare che la differenza con il formato europeo è che i duelli in parità vengono ignorati. Anche i colpi ricevuti non vengono conteggiati.", "custom": "Personalizzato", "customHint": "Ti permette di definire valori personalizzati per il tuo torneo.", "win_over_draws": "Vittoria sul pareggio", diff --git a/frontend/src/assets/i18n/nl.json b/frontend/src/assets/i18n/nl.json index 958dbf74a..e83c3b901 100644 --- a/frontend/src/assets/i18n/nl.json +++ b/frontend/src/assets/i18n/nl.json @@ -89,7 +89,8 @@ "fault": "Straf", "fightsWon": "Wedstrijd gewonnen door", "duelsWon": "Aantal wedstrijden gewonnen", - "histsWon": "Behaalde punten", + "hitsWon": "Behaalde punten", + "hitsLost": "Punten ontvangenn", "totalFights": "Totaal aantal wedstrijden", "all": "Totaal", "winnerNumber": "Aantal gewonnen", @@ -109,9 +110,9 @@ "classic": "Classikaal", "classicHint": "De winnaar wordt verkregen door de gewonnen games bij elkaar op te tellen, en als er een gelijkspel is, worden de gewonnen duels geteld. Bij nog een gelijke stand worden treffers in aanmerking genomen. Gelijkspel of duels worden genegeerd.", "european": "Europeaan", - "europeanHint": "De winnaar wordt verkregen door gewonnen wedstrijden. Als er een gelijke stand is, worden de gelijk gespeelde wedstrijden geteld. Als er ook een gelijkspel is, hanteren we dezelfde procedure bij duels. Als de stand van de wedstrijden en duels ook gelijk is, worden de treffers geteld.", + "europeanHint": "De winnaar wordt verkregen door gewonnen wedstrijden. Als er een gelijke stand is, worden de gelijk gespeelde wedstrijden geteld. Als er ook een gelijkspel is, hanteren we dezelfde procedure bij duels. Als de stand van de wedstrijden en duels ook gelijk is, worden de treffers geteld. Als je hooi eet, ga dan naar het aantal grote aantallen mensen.", "international": "Internationaal", - "internationalHint": "De winnaar wordt bepaald door gewonnen wedstrijden. Bij een gelijkspel wordt het aantal gelijkspelende wedstrijden geteld. Is er dan nog steeds een gelijkspel, dan wordt het aantal gewonnen wedstrijden geteld. Is er dan nog steeds een gelijkspel, dan wordt het aantal treffers geteld. Het verschil met het Europese format is dat wedstrijden die in een gelijkspel eindigen, worden genegeerd.", + "internationalHint": "De winnaar wordt bepaald door gewonnen wedstrijden. Bij een gelijkspel wordt het aantal gelijkspelende wedstrijden geteld. Is er dan nog steeds een gelijkspel, dan wordt het aantal gewonnen wedstrijden geteld. Is er dan nog steeds een gelijkspel, dan wordt het aantal treffers geteld. Het verschil met het Europese format is dat wedstrijden die in een gelijkspel eindigen, worden genegeerd. Ook de klappen die je krijgt, tellen niet mee.", "custom": "Aangepaste", "customHint": "Hiermee kunt u aangepaste waarden voor uw toernooi definiëren.", "win_over_draws": "Overwinning op gelijkspel",