## event: EventType ## view: str ## view_entries_list: list[dict[str, list[RankedEntryType]]] ## columns: set[str] <%! from typing import Optional from ooresults.otypes.entry_type import EntryType from ooresults.otypes.result_type import ResultStatus from ooresults.utils.globals import format_time from ooresults.utils.globals import MAP_STATUS from ooresults.utils.globals import minutes_seconds from ooresults.utils.rental_cards import format_card def format_rank_results(rank: Optional[int], not_competing: bool) -> str: if rank is not None: return str(rank) elif not_competing: return "NC" else: return "" def format_rank(rank: Optional[int], not_competing: bool) -> str: if rank is not None: return f"({rank})" elif not_competing: return "NC" else: return "" def format_club(name: Optional[str]) -> str: if name: if len(name) > 19: return name[:15] + " ..." else: return name else: return "" def format_factor(entry: EntryType) -> str: factor = entry.result.extensions.get("factor", None) if factor is not None and entry.result.status == ResultStatus.OK: return "{:1.4f}".format(factor) else: return "" def format_start_time(entry: EntryType) -> str: if entry.result.start_time is not None: return format_time(entry.result.start_time) else: return format_time(entry.start.start_time) def format_running_time(entry: EntryType, results: bool) -> str: if results and entry.result.status not in [ResultStatus.OK, ResultStatus.FINISHED]: return "" t = entry.result.extensions.get("running_time", None) if t is None: if entry.result.start_time is not None and entry.result.finish_time is not None: t = int((entry.result.finish_time - entry.result.start_time).total_seconds()) else: t = entry.result.time if entry.result.status == ResultStatus.FINISHED: return minutes_seconds(t) elif results and t == entry.result.time and len(entry.result.extensions) <= 1 and "score" not in entry.result.extensions: return "" else: return minutes_seconds(t) def format_score_or_penalties_controls(entry: EntryType) -> str: if entry.result.status != ResultStatus.OK: return "" if "score" in entry.result.extensions: p = entry.result.extensions.get("score_controls", None) return "{:.2f}".format(p) if p is not None else "" else: t = entry.result.extensions.get("penalties_controls", None) return minutes_seconds(t) def format_score_or_penalties_overtime(entry: EntryType) -> str: if entry.result.status != ResultStatus.OK: return "" if "score" in entry.result.extensions: p = entry.result.extensions.get("score_overtime", None) return "{:.2f}".format(p) if p is not None else "" else: t = entry.result.extensions.get("penalties_overtime", None) return minutes_seconds(t) def format_score_or_time_total(entry: EntryType) -> str: status = entry.result.status if status == ResultStatus.INACTIVE and entry.start.start_time is not None: return "Start at " + entry.start.start_time.strftime("%H:%M:%S") else: if "score" in entry.result.extensions: p = entry.result.extensions["score"] if status == ResultStatus.OK and p is not None: return "{:.2f}".format(p) else: t = entry.result.time if status == ResultStatus.OK and t is not None: return minutes_seconds(t) return MAP_STATUS[status] t = { "entries": "Entries", "classes": "Unassigned results", "clubs": "-- Not assigned to any club --", "results": "Unassigned results", "states": "Unassigned results", "competitors": "Unassigned results", } %>
| Event name: | ${event.name if event is not None else ""} |
|---|---|
| Event date: | ${event.date.isoformat() if event is not None else ""} |
| Rank | Name | Year | Chip | Club | % if "factor" in columns:Handicap | % endifRun time | % if "score" in columns:Sc. controls | % elif "penalties_controls" in columns:P. controls | % endif % if "score" in columns:Sc. overtime | % elif "penalties_overtime" in columns:P. overtime | % endif % if "score" in columns:Total score | % else:Total time | % endif % else:Rank | First name | Last name | Gender | Year | Chip | % if view != "clubs":Club | % endif % if view != "classes":Class | % endif % if event is not None: % for field in event.fields:${field} | % endfor % endifStart time | Run time | Status | % endif||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ${group_name if group_name is not None else t[view]} (${len(ranked_entries)}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ${format_rank_results(rank, entry.not_competing)} | % if entry.last_name:${entry.last_name}, ${entry.first_name} | % else:% endif | ${entry.year} | ${format_card(entry.chip)} | ${format_club(entry.club_name)} | % if "factor" in columns:${format_factor(entry)} | % endif${format_running_time(entry=entry, results=True)} | % if "score" in columns or "penalties_controls" in columns:${format_score_or_penalties_controls(entry=entry)} | % endif % if "score" in columns or "penalties_overtime" in columns:${format_score_or_penalties_overtime(entry=entry)} | % endif${format_score_or_time_total(entry=entry)} | % else:${format_rank(rank, entry.not_competing)} | ${entry.first_name} | ${entry.last_name} | ${entry.gender} | ${entry.year} | ${format_card(entry.chip)} | % if view != "clubs":${entry.club_name} | % endif % if view != "classes":${entry.class_name} | % endif % if event is not None: % for i in range(len(event.fields)):${entry.fields.get(i, "")} | % endfor % endif${format_start_time(entry=entry)} | ${format_running_time(entry=entry, results=False)} | ${MAP_STATUS[entry.result.status]} | % endif||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||