From 3f5e6e65a4d30bf6a99e9d4e6a0e8055be22082d Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Tue, 16 Jul 2019 14:56:35 +0200
Subject: [PATCH] Add import code for lessons.

---
 biscuit/apps/untis/util.py | 46 +++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/biscuit/apps/untis/util.py b/biscuit/apps/untis/util.py
index 486bac3..cec59d4 100644
--- a/biscuit/apps/untis/util.py
+++ b/biscuit/apps/untis/util.py
@@ -1,9 +1,9 @@
-from datetime import time
+from datetime import date, time
 from xml.dom import minidom
 
 from biscuit.apps.cambro.models import Room
-from biscuit.apps.chronos.models import Subject, TimePeriod
-from biscuit.core.models import Group
+from biscuit.apps.chronos.models import Subject, TimePeriod, Lesson
+from biscuit.core.models import Group, Person
 
 
 def get_child_node_text(node, tag):
@@ -15,6 +15,15 @@ def get_child_node_text(node, tag):
         return None
 
 
+def get_child_node_id(node, tag):
+    tag_nodes = node.getElementsByTagName(tag)
+
+    if len(tag_nodes) == 1:
+        return tag_nodes[0].attributes['id'].value
+    else:
+        return None
+
+
 def untis_import_xml(request, untis_xml):
     dom = minidom.parse(untis_xml)
 
@@ -48,3 +57,34 @@ def untis_import_xml(request, untis_xml):
 
         room, created = Room.objects.get_or_create(short_name=short_name, defaults={
             'name': name})
+
+    lessons = dom.getElementsByTagName('lesson')
+    for lesson_node in lessons:
+        subject_abbrev = get_child_node_id(lesson_node, 'lesson_subject')[3:]
+        teacher_short_name = get_child_node_id(
+            lesson_node, 'lesson_teacher')[3:]
+        group_short_names = [v[:3] for v in get_child_node_id(
+            lesson_node, 'lesson_classes').split(' ')]
+        effectivebegindate = get_child_node_text(
+            lesson_node, 'effectivebegindate')
+        effectiveenddate = get_child_node_text(lesson_node, 'effectiveenddate')
+
+        times = lesson_node.getElementsByTagName('time')
+        time_periods = []
+        for time_node in times:
+            day = get_child_node_text(time_node, 'assigned_day')
+            period = get_child_node_text(time_node, 'assigned_period')
+            time_periods.append((day, period))
+
+        subject = Subject.objects.get(abbrev=subject_abbrev)
+        teachers = [Person.objects.get(short_name=teacher_short_name)]
+        groups = [Group.objects.get(short_name=v) for v in group_short_names]
+        periods = [TimePeriod.objects.get(
+            weekday=v[0], period=v[1]) for v in time_periods]
+        date_start = date(int(effectivebegindate[:4]), int(effectivebegindate[4:6]), int(
+            effectivebegindate[6:])) if effectivebegindate else None
+        date_end = date(int(effectiveenddate[:4]), int(effectiveenddate[4:6]), int(
+            effectiveenddate[6:])) if effectiveenddate else None
+
+        lesson, created = Lesson.objects.get_or_create(groups=groups, periods=periods, defaults={
+                                                       'subject': subject, 'teachers': teachers, 'date_start': date_start, 'date_end': date_end})
-- 
GitLab