From dd4ac879958920e1e485e32c97c78788826b92dd Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Tue, 13 Aug 2024 14:29:47 +0200 Subject: [PATCH] Fix registration page and display MMS of preliminary players --- .../src/main/kotlin/org/jeudego/pairgoth/api/ApiTools.kt | 5 +++-- .../main/kotlin/org/jeudego/pairgoth/api/StandingsHandler.kt | 3 ++- view-webapp/src/main/webapp/tour-registration.inc.html | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/ApiTools.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/ApiTools.kt index fa49500..635910f 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/ApiTools.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/ApiTools.kt @@ -20,7 +20,7 @@ import kotlin.math.roundToInt // TODO CB avoid code redundancy with solvers -fun Tournament<*>.getSortedPairables(round: Int): List { +fun Tournament<*>.getSortedPairables(round: Int, includePreliminary: Boolean = false): List { fun Pairable.mmBase(): Double { if (pairing !is MacMahon) throw Error("invalid call: tournament is not Mac Mahon") @@ -66,6 +66,7 @@ fun Tournament<*>.getSortedPairables(round: Int): List { val neededCriteria = ArrayList(pairing.placementParams.criteria) if (!neededCriteria.contains(Criterion.NBW)) neededCriteria.add(Criterion.NBW) if (!neededCriteria.contains(Criterion.RATING)) neededCriteria.add(Criterion.RATING) + if (type == Tournament.Type.INDIVIDUAL && pairing.type == PairingType.MAC_MAHON && !neededCriteria.contains(Criterion.MMS)) neededCriteria.add(Criterion.MMS) val criteria = neededCriteria.map { crit -> crit.name to when (crit) { Criterion.NONE -> StandingsHandler.nullMap @@ -100,7 +101,7 @@ fun Tournament<*>.getSortedPairables(round: Int): List { Criterion.DC -> StandingsHandler.nullMap } } - val pairables = pairables.values.filter { it.final }.map { it.toDetailedJson() } + val pairables = pairables.values.filter { includePreliminary || it.final }.map { it.toDetailedJson() } pairables.forEach { player -> for (crit in criteria) { player[crit.first] = (crit.second[player.getID()] ?: 0.0).toInt() diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/StandingsHandler.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/StandingsHandler.kt index ead26c6..f7f69fc 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/StandingsHandler.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/api/StandingsHandler.kt @@ -32,8 +32,9 @@ object StandingsHandler: PairgothApiHandler { override fun get(request: HttpServletRequest, response: HttpServletResponse): Json? { val tournament = getTournament(request) val round = getSubSelector(request)?.toIntOrNull() ?: ApiHandler.badRequest("invalid round number") + val includePreliminary = request.getParameter("include_preliminary")?.let { it.toBoolean() } ?: false - val sortedPairables = tournament.getSortedPairables(round) + val sortedPairables = tournament.getSortedPairables(round, includePreliminary) val sortedMap = sortedPairables.associateBy { it.getID()!! } diff --git a/view-webapp/src/main/webapp/tour-registration.inc.html b/view-webapp/src/main/webapp/tour-registration.inc.html index 131e840..53eb509 100644 --- a/view-webapp/src/main/webapp/tour-registration.inc.html +++ b/view-webapp/src/main/webapp/tour-registration.inc.html @@ -8,7 +8,7 @@ ## Team players do not have an individual MMS #if($tour.type == 'INDIVIDUAL' && $tour.pairing.type == 'MAC_MAHON') - #set($mmbase = $api.get("tour/${params.id}/standings/0")) + #set($mmbase = $api.get("tour/${params.id}/standings/0?include_preliminary=true")) #if($mmbase.isObject() && ($mmbase.error || $mmbase.message)) #if($mmbase.error) #set($error = $mmbase.error) @@ -86,7 +86,7 @@ #rank($part.rank)#if($part.mmsCorrection) (#if($part.mmsCorrection > 0)+#end$part.mmsCorrection)#end $part.rating #if($tour.type == 'INDIVIDUAL' && $tour.pairing.type == 'MAC_MAHON') - $mmsPlayersMap[$part.id] + $!mmsPlayersMap[$part.id] #end