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.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
|
||||
|
|
|
|||
|
|
@ -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": "",
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue