feat(series): add series/cup championships with points tables and standings

Group any number of races in freely chosen classes into a series with a
points table (ÖRC/100-80-70/F1/custom), best-N or drop-X counting, a
club filter that re-ranks members without guests, tie-breaks, rounds
created from a date list, and per-class standings with print and PDF.

Also fixes PDF export of wide tables: they are compacted and switched
to landscape instead of truncating names and dropping columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
larssand
2026-10-10 19:49:23 +02:00
parent f65e526948
commit 9a9379aa83
18 changed files with 848 additions and 20 deletions

View File

@@ -1,3 +1,4 @@
import { normalizeSeries } from "./series_logic.js";
import { speakWithPiper, isPiperSpeaking } from "./piper_speech.js";
export function createDefaultAmmcConfigHelper() {
return {
@@ -113,6 +114,7 @@ export function applyPersistedStateHelper(persisted, deps) {
state.training = normalizeTrainingState(persisted.training);
state.activeSessionId = persisted.activeSessionId || null;
state.trackLayouts = normalizeTrackLayouts(persisted.trackLayouts);
state.series = (Array.isArray(persisted.series) ? persisted.series : []).map((series) => normalizeSeries(series)).filter((series) => series.id);
state.settings = {
wsUrl: persisted.settings?.wsUrl || state.settings.wsUrl || "ws://127.0.0.1:9000",
splitDecoderEnabled: persisted.settings?.splitDecoderEnabled === true,