## event: EventType ## class_results: List[Tuple[ClassInfoType, List[RankedEntryType]]] <%! from typing import List from ooresults.otypes.entry_type import RankedEntryType from ooresults.otypes.result_type import ResultStatus from ooresults.utils.globals import build_columns from ooresults.utils.globals import MAP_STATUS from ooresults.utils.globals import minutes_seconds def format_rank(rank, not_competing: bool) -> str: if rank is not None: return str(rank) elif not_competing: return "NC" else: return "" def format_time(time: int, status: ResultStatus) -> str: if status == ResultStatus.OK and time is not None: return minutes_seconds(time) else: return "" def format_points(points: float, status: ResultStatus) -> str: if status == ResultStatus.OK and points is not None: return "{:.2f}".format(points) else: return "" def format_time_total(time: int, status: ResultStatus, start_time=None) -> str: if status == ResultStatus.OK and time is not None: return minutes_seconds(time) elif status == ResultStatus.INACTIVE and start_time is not None: return "Start at " + start_time.strftime("%H:%M:%S") else: return MAP_STATUS[status] def format_points_total(points: float, status: ResultStatus, start_time=None) -> str: if status == ResultStatus.OK: return "{:.2f}".format(points) elif status == ResultStatus.INACTIVE and start_time is not None: return "Start at " + start_time.strftime("%H:%M:%S") else: return MAP_STATUS[status] def voided_legs(ranked_results: List[RankedEntryType]) -> str: if ranked_results and ranked_results[0].entry.result is not None: voided_legs = ranked_results[0].entry.result.voided_legs() if voided_legs: return " (Voided legs: " + ", ".join(voided_legs) + ")" else: return "" return "" %>
| Event name: | ${event.name if event is not None else ""} |
|---|---|
| Event date: | ${event.date.isoformat() if event is not None else ""} |
${class_.name}${voided_legs(ranked_results)} | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rank | Name | Club | % if not columns:Time | % else: % if "factor" in columns:Handicap | % endif % if class_.params.otype == "score":Run time | Score controls | Score overtime | Total score | % else:Run time | % if "penalties_controls" in columns:Penalty controls | % endif % if "penalties_overtime" in columns:Penalty overtime | % endifTotal time | % endif % endif
| ${format_rank(ranked_result.rank, entry.not_competing)} | ${entry.first_name} ${entry.last_name} | ${entry.club_name} | % if not columns:${format_time_total(result.time, result.status, entry.start.start_time)} | % else: % if "factor" in columns:${"{:1.4f}".format(result.extensions.get("factor", 1))} | % endif % if class_.params.otype == "score":${format_time(result.time, result.status)} | ${format_points(result.extensions.get("score_controls", None), result.status)} | ${format_points(result.extensions.get("score_overtime", None), result.status)} | ${format_points_total(result.extensions.get("score", None), result.status, entry.start.start_time)} | % else:${format_time(result.extensions.get("running_time", None), result.status)} | % if "penalties_controls" in columns:${format_time(result.extensions.get("penalties_controls", None), result.status)} | % endif % if "penalties_overtime" in columns:${format_time(result.extensions.get("penalties_overtime", None), result.status)} | % endif${format_time_total(result.time, result.status, entry.start.start_time)} | % endif % endif