Final reg status handling tweaks

This commit is contained in:
Claude Brisson
2024-01-20 11:35:59 +01:00
parent 5890ba6f41
commit 0fba3e065c
3 changed files with 11 additions and 3 deletions

View File

@@ -21,8 +21,8 @@ object PairingHandler: PairgothApiHandler {
val playing = tournament.games(round).values.flatMap {
listOf(it.black, it.white)
}.toSet()
val unpairables = tournament.pairables.values.filter { it.skip.contains(round) }.sortedByDescending { it.rating }.map { it.id }.toJsonArray()
val pairables = tournament.pairables.values.filter { !it.skip.contains(round) && !playing.contains(it.id) }.sortedByDescending { it.rating }.map { it.id }.toJsonArray()
val unpairables = tournament.pairables.values.filter { !it.final || it.skip.contains(round) }.sortedByDescending { it.rating }.map { it.id }.toJsonArray()
val pairables = tournament.pairables.values.filter { it.final && !it.skip.contains(round) && !playing.contains(it.id) }.sortedByDescending { it.rating }.map { it.id }.toJsonArray()
val games = tournament.games(round).values
return Json.Object(
"games" to games.map { it.toJson() }.toCollection(Json.MutableArray()),
@@ -44,12 +44,13 @@ object PairingHandler: PairgothApiHandler {
}.toSet()
val pairables =
if (allPlayers)
tournament.pairables.values.filter { !it.skip.contains(round) && !playing.contains(it.id) }
tournament.pairables.values.filter { it.final && !it.skip.contains(round) && !playing.contains(it.id) }
else payload.map {
// CB - because of the '["all"]' map, conversion to int lands here... Better API syntax for 'all players'?
if (it is Number) it.toID() else badRequest("invalid pairable id: #$it")
}.map { id ->
tournament.pairables[id]?.also {
if (!it.final) badRequest("pairable #$id registration status is not final")
if (it.skip.contains(round)) badRequest("pairable #$id does not play round $round")
if (playing.contains(it.id)) badRequest("pairable #$id already plays round $round")
} ?: badRequest("invalid pairable id: #$id")
@@ -79,6 +80,8 @@ object PairingHandler: PairgothApiHandler {
payload.getInt("dudd")?.let { game.drawnUpDown = it }
val black = tournament.pairables[game.black] ?: badRequest("invalid black player id")
val white = tournament.pairables[game.black] ?: badRequest("invalid white player id")
if (!black.final) badRequest("black registration status is not final")
if (!white.final) badRequest("white registration status is not final")
if (black.skip.contains(round)) badRequest("black is not playing this round")
if (white.skip.contains(round)) badRequest("white is not playing this round")
if (playing.contains(black.id)) badRequest("black is already in another game")

View File

@@ -288,6 +288,8 @@ onLoad(() => {
}).then(player => {
if (player !== 'error') {
cell.toggleClass('final');
standingsUpToDate = false;
pairablesUpToDate = false;
}
});
e.preventDefault();

View File

@@ -74,6 +74,7 @@
const tour_rounds = ${tour.rounds};
let activeRound = ${round};
let standingsUpToDate = true;
let pairablesUpToDate = true;
// $params
#end
#set($datepickerLocale = $translate.datepickerLocale($request.lang, $request.loc))
@@ -108,6 +109,8 @@
window.location.hash = `#${step}`;
if (step === 'standings' && !standingsUpToDate) {
window.location.reload();
} else if (step === 'pairing' && !pairablesUpToDate) {
window.location.reload();
}
}