Parse attendance course data
This commit is contained in:
parent
73d44478db
commit
e6c782fe5b
|
|
@ -2,6 +2,8 @@ from typing import Dict, Any
|
||||||
|
|
||||||
from vbv_lernwelt.core.models import User
|
from vbv_lernwelt.core.models import User
|
||||||
from vbv_lernwelt.course.models import Course, CourseSession
|
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(
|
def create_or_update_user(
|
||||||
|
|
@ -33,12 +35,15 @@ def create_or_update_user(
|
||||||
return 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
|
:param data: the following keys are required to process the data: Generation, Region, Klasse
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if circles is None:
|
||||||
|
circles = []
|
||||||
|
|
||||||
# TODO: validation
|
# TODO: validation
|
||||||
generation = str(data["Generation"]).strip()
|
generation = str(data["Generation"]).strip()
|
||||||
region = data["Region"].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
|
import_id=import_id, course=course
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cs.additional_json_data["import_data"] = data
|
||||||
|
cs.save()
|
||||||
|
|
||||||
cs.title = title
|
cs.title = title
|
||||||
cs.generation = generation
|
cs.generation = generation
|
||||||
cs.region = region
|
cs.region = region
|
||||||
cs.group = group
|
cs.group = group
|
||||||
cs.import_id = import_id
|
cs.import_id = import_id
|
||||||
|
|
||||||
cs.additional_json_data["import_data"] = data
|
|
||||||
cs.save()
|
cs.save()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
@ -70,5 +77,20 @@ def create_or_update_course_session(course: Course, data: Dict[str, Any]):
|
||||||
("Fahrzeug Standort", None),
|
("Fahrzeug Standort", None),
|
||||||
("Fahrzeug Adresse", 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
|
return cs
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import os
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from openpyxl.reader.excel import load_workbook
|
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
|
from vbv_lernwelt.importer.services import create_or_update_course_session
|
||||||
|
|
||||||
test_dir = os.path.dirname(os.path.abspath(__file__))
|
test_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
@ -45,7 +45,7 @@ class ImportCourseSessionTestCase(TestCase):
|
||||||
|
|
||||||
class CreateOrUpdateCourseSessionTestCase(TestCase):
|
class CreateOrUpdateCourseSessionTestCase(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.course = CourseFactory(title="myVBV Training")
|
self.course = create_test_course(include_vv=False)
|
||||||
|
|
||||||
def test_create_course_session(self):
|
def test_create_course_session(self):
|
||||||
row = [
|
row = [
|
||||||
|
|
@ -65,10 +65,26 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
|
||||||
|
|
||||||
data = dict(row)
|
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.import_id, "DE 2023")
|
||||||
self.assertEqual(cs.title, "Deutschschweiz 2023 A")
|
self.assertEqual(cs.title, "Deutschschweiz 2023 A")
|
||||||
self.assertEqual(cs.generation, "2023")
|
self.assertEqual(cs.generation, "2023")
|
||||||
self.assertEqual(cs.region, "Deutschschweiz")
|
self.assertEqual(cs.region, "Deutschschweiz")
|
||||||
self.assertEqual(cs.group, "A")
|
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": "",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue