Parse attendance course data

This commit is contained in:
Daniel Egger 2023-05-31 17:35:37 +02:00
parent 73d44478db
commit e6c782fe5b
2 changed files with 43 additions and 5 deletions

View File

@ -2,6 +2,8 @@ from typing import Dict, Any
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.models import Course, CourseSession
from vbv_lernwelt.importer.utils import try_parse_datetime
from vbv_lernwelt.learnpath.models import LearningContentAttendanceCourse
def create_or_update_user(
@ -33,12 +35,15 @@ def create_or_update_user(
return user
def create_or_update_course_session(course: Course, data: Dict[str, Any]):
def create_or_update_course_session(course: Course, data: Dict[str, Any], circles=None):
"""
:param data: the following keys are required to process the data: Generation, Region, Klasse
:return:
"""
if circles is None:
circles = []
# TODO: validation
generation = str(data["Generation"]).strip()
region = data["Region"].strip()
@ -51,13 +56,15 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any]):
import_id=import_id, course=course
)
cs.additional_json_data["import_data"] = data
cs.save()
cs.title = title
cs.generation = generation
cs.region = region
cs.group = group
cs.import_id = import_id
cs.additional_json_data["import_data"] = data
cs.save()
"""
@ -70,5 +77,20 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any]):
("Fahrzeug Standort", None),
("Fahrzeug Adresse", None),
"""
for circle in circles:
attendance_course_lp_qs = LearningContentAttendanceCourse.objects.filter(
slug=f"{course.slug}-lp-circle-{circle.lower()}-lc-präsenzkurs-{circle.lower()}"
)
if attendance_course_lp_qs.exists():
cs.attendance_courses.append(
{
"learningContentId": attendance_course_lp_qs.first().id,
"start": try_parse_datetime(data[f"{circle} Start"])[1].isoformat(),
"end": try_parse_datetime(data[f"{circle} Ende"])[1].isoformat(),
"location": data[f"{circle} Raum"],
"trainer": "",
}
)
cs.save()
return cs

View File

@ -3,7 +3,7 @@ import os
from django.test import TestCase
from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.course.factories import CourseFactory
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.importer.services import create_or_update_course_session
test_dir = os.path.dirname(os.path.abspath(__file__))
@ -45,7 +45,7 @@ class ImportCourseSessionTestCase(TestCase):
class CreateOrUpdateCourseSessionTestCase(TestCase):
def setUp(self):
self.course = CourseFactory(title="myVBV Training")
self.course = create_test_course(include_vv=False)
def test_create_course_session(self):
row = [
@ -65,10 +65,26 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
data = dict(row)
cs = create_or_update_course_session(self.course, data)
cs = create_or_update_course_session(self.course, data, circles=["Fahrzeug"])
self.assertEqual(cs.import_id, "DE 2023")
self.assertEqual(cs.title, "Deutschschweiz 2023 A")
self.assertEqual(cs.generation, "2023")
self.assertEqual(cs.region, "Deutschschweiz")
self.assertEqual(cs.group, "A")
attendance_course = cs.attendance_courses[0]
attendance_course = {
k: v
for k, v in attendance_course.items()
if k not in ["learningContentId", "location"]
}
self.assertDictEqual(
attendance_course,
{
"start": "2023-06-06T13:30:00",
"end": "2023-06-06T15:00:00",
"trainer": "",
},
)