From 2e785579f3b0fb9e65e124ab6b6ad646264f6ed1 Mon Sep 17 00:00:00 2001
From: Edward Betts <edward@4angle.com>
Date: Sat, 21 Oct 2023 11:52:46 +0100
Subject: [PATCH] Show upcoming travel include travel and accommodation

Closes: #15
---
 agenda/__init__.py | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/agenda/__init__.py b/agenda/__init__.py
index 95dccd4..ffabfe2 100644
--- a/agenda/__init__.py
+++ b/agenda/__init__.py
@@ -325,6 +325,46 @@ def get_birthdays(from_date: date, config: configparser.ConfigParser) -> list[Ev
     return events
 
 
+def get_travel(from_date: date, config: configparser.ConfigParser) -> list[Event]:
+    """Get birthdays from config."""
+    filename = config["data"]["travel"]
+
+    events = []
+    with open(filename) as f:
+        items = yaml.safe_load(f)
+
+    for item in items:
+        if item["type"] == "accommodation":
+            title = (
+                f'{item["location"]} Airbnb'
+                if item["operator"] == "airbnb"
+                else item["name"]
+            )
+            from_date = item["from"]
+            to_date = item["to"]
+            nights = (to_date - from_date).days
+            night_str = f"{nights} nights" if nights != 1 else "1 night"
+            checkin = Event(
+                date=from_date,
+                name="accommodation",
+                title=f"check-in {title} ({night_str})",
+            )
+            checkout = Event(
+                date=to_date, name="accommodation", title="check-out " + title
+            )
+            events += [checkin, checkout]
+            continue
+        if item["type"] == "transport":
+            event = Event(
+                date=datetime.fromisoformat(item["depart"]).date(),
+                name="transport",
+                title=f'{item["transport_type"]} from {item["from"]} to {item["to"]}',
+            )
+            events.append(event)
+
+    return events
+
+
 def waste_collection_events() -> list[Event]:
     """Waste colllection events."""
     postcode = "BS48 3HG"
@@ -375,6 +415,7 @@ def get_data(now: datetime) -> dict[str, str | object]:
         events.append(Event(name=f"xmas_last_{key}", date=value))
 
     events += get_birthdays(today, config)
+    events += get_travel(today, config)
     events += get_conferences(today, "conferences.yaml")
     events += waste_collection_events()