Scheduling Matches

Schedule Planner

The Schedule Planner (Rounds → Schedule, scoped to one stage) generates matches for a stage automatically from a schedule template. Templates are bundled with the installation and fall into exactly two generation types:

  • round-robin — every entry plays every other entry, using pre-computed pairing tables (Berger-table style) keyed by entry count.
  • race — all entries compete together in the same round (used for non-head-to-head contests, e.g. timed or ranked events); each "round" is a single event containing every entry.

There is no automatic knockout/bracket generation. A template whose type is anything other than round-robin or race is listed but shown disabled with a "planned" label — it cannot actually be run. Knockout brackets are built by hand, using the regular Rounds/Matches screens.

Only templates matching the stage's/project's contest type are usable: round-robin templates apply to head_to_head contests, race templates apply to race contests.

Options

  • template_id — which schedule template to use.
  • start_date / start_time — when the first round is scheduled, in the project's (or match's) effective timezone.
  • round_interval_days — days between successive rounds (1–365).
  • match_interval_minutes — minutes between matches within the same round (0–1440; 0 schedules them all at the same time).
  • first_match_number — starting value for match_number (auto-incremented per generated match).
  • race_rounds — number of rounds to generate for a race-type template (1–200; not used for round-robin).
  • return_legs — when enabled (round-robin only), also generates the mirrored return-leg fixtures (home/away reversed) for a double round-robin.
  • assign_home_venues — automatically assigns each match's venue from the home entry's default venue, where available.
  • published — whether generated matches are created published or unpublished.
  • allow_conflicts — allows applying a schedule even if conflicts were detected (see below); without it, error-severity conflicts block applying.

Preview and apply

Changing options and clicking Preview runs the generator without saving anything: it shows the resulting rounds, each round's date, the matches with their participants and computed local time, any bye (an entry with no match in that round, round-robin only with an odd entry count), and a checksum of the generation.

The preview also runs conflict detection and lists each conflict with its severity:

  • error (blocking unless allow_conflicts is on) — a participant or venue double-booked at the same time, or a head-to-head match with no venue assigned.
  • warning (non-blocking) — for example a match falling after the project's or stage's end date.

Once a preview looks correct, Apply Schedule creates the matches. Applying is idempotent: the checksum is computed from the stage, template, entry seeds and options, so re-applying the same options again does not create duplicate matches — it reuses the existing generation. Applying requires the joomleague.project.edit.schedule permission on the project.

Entries are pulled either from an explicit stage-entry assignment (if the stage uses explicit entry selection) or from all published project entries, ordered by seed/ordering.

Project Schedule

The Project Schedule screen (Project → Schedule) is a read-only, filterable list of every match across all stages and rounds of a project — the place to review the full fixture list after generating and/or hand-building schedules, rather than working stage-by-stage.

Filters include:

  • search — free text against match code, number, and contest type; or an exact match by id using id:<number> syntax.
  • published status.
  • status_code.
  • stage_id / round_id.
  • date_from / date_to.

Each row shows the participant names, the match's date/time converted to its effective timezone for display, and — once a match is finalized — its formatted result. Users with edit permission on the project can export the filtered list to CSV from the toolbar.