diff --git a/agenda/types.py b/agenda/types.py index d150db6..b1bca73 100644 --- a/agenda/types.py +++ b/agenda/types.py @@ -2,6 +2,7 @@ import datetime import typing +from collections import Counter from dataclasses import dataclass, field from pycountry.db import Country @@ -141,6 +142,25 @@ class Trip: else None ) + def distances_by_transport_type(self) -> list[tuple[str, float]]: + """Calculate the total distance travelled for each type of transport. + + Any travel item with a missing or None 'distance' field is ignored. + """ + transport_distances: Counter[float] = Counter() + + for item in self.travel: + distance = item.get("distance") + if distance: + transport_type = item.get("type", "unknown") + transport_distances[transport_type] += distance + + return list(transport_distances.items()) + + +# Example usage: +# You would call the function with your travel list here to get the results. + @dataclass class Holiday: diff --git a/templates/trip_page.html b/templates/trip_page.html index da05843..afe8321 100644 --- a/templates/trip_page.html +++ b/templates/trip_page.html @@ -61,6 +61,7 @@ {% set end = trip.end %} {% set total_distance = trip.total_distance() %} +{% set distances_by_transport_type = trip.distances_by_transport_type() %} {% block content %}