diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index 789d7e70..12a987f0 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -1,8 +1,8 @@ import json -import random -from datetime import datetime, timedelta +from datetime import datetime import wagtail_factories +from dateutil.relativedelta import relativedelta, TH, TU from django.conf import settings from django.utils import timezone from slugify import slugify @@ -41,7 +41,6 @@ from vbv_lernwelt.course_session.models import ( CourseSessionAssignment, CourseSessionAttendanceCourse, ) -from vbv_lernwelt.duedate.models import DueDate from vbv_lernwelt.learnpath.models import ( Circle, LearningContentAssignment, @@ -99,30 +98,44 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False): id=TEST_COURSE_SESSION_BERN_ID, start_date=now, ) - CourseSessionAttendanceCourse.objects.create( + csac = CourseSessionAttendanceCourse.objects.create( course_session=cs_bern, learning_content=LearningContentAttendanceCourse.objects.get( slug="test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug" ), - due_date=DueDate.objects.create( - course_session=cs_bern, - start=timezone.make_aware( - (datetime.now() + timedelta(days=15)).replace( - hour=10, minute=30, second=0, microsecond=0 - ) - ), - end=timezone.make_aware( - (datetime.now() + timedelta(days=15)).replace( - hour=17, minute=30, second=0, microsecond=0 - ) - ), - page=LearningContentAttendanceCourse.objects.get( - slug="test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug" - ), - ), location="Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", trainer="Roland Grossenbacher, roland.grossenbacher@helvetia.ch", ) + tuesday_in_two_weeks = ( + datetime.now() + relativedelta(weekday=TU(2)) + relativedelta(weeks=2) + ) + csac.due_date.start = timezone.make_aware( + tuesday_in_two_weeks.replace(hour=8, minute=30, second=0, microsecond=0) + ) + csac.due_date.end = timezone.make_aware( + tuesday_in_two_weeks.replace(hour=17, minute=0, second=0, microsecond=0) + ) + csac.due_date.save() + + csa = CourseSessionAssignment.objects.create( + course_session=cs_bern, + learning_content=LearningContentAssignment.objects.get( + slug=f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice" + ), + ) + next_thursday = datetime.now() + relativedelta(weekday=TH(2)) + csa.submission_deadline.start = timezone.make_aware( + (next_thursday + relativedelta(weeks=3)).replace( + hour=23, minute=59, second=59, microsecond=0 + ) + ) + csa.submission_deadline.save() + csa.evaluation_deadline.start = timezone.make_aware( + (next_thursday + relativedelta(weeks=5)).replace( + hour=23, minute=59, second=59, microsecond=0 + ) + ) + csa.evaluation_deadline.save() cs_zurich = CourseSession.objects.create( course_id=COURSE_TEST_ID, @@ -155,18 +168,6 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False): course_session=cs_zurich, user=student2, ) - course = Course.objects.get(id=COURSE_TEST_ID) - for cs in CourseSession.objects.filter(course_id=COURSE_TEST_ID): - for assignment in LearningContentAssignment.objects.descendant_of( - course.coursepage - ): - create_course_session_assignment(cs, assignment) - for ( - attendance_course - ) in LearningContentAttendanceCourse.objects.descendant_of( - course.coursepage - ): - create_course_session_attendance_course(cs, attendance_course) return course @@ -195,45 +196,6 @@ def create_test_assignment_submitted_data(assignment, course_session, user): ) -def create_course_session_assignment(course_session, assignment): - csa, created = CourseSessionAssignment.objects.get_or_create( - course_session=course_session, - learning_content=assignment, - ) - - if course_session.start_date is None: - course_session.start_date = datetime.now() + timedelta(days=12) - course_session.save() - submission_deadline = csa.submission_deadline - if submission_deadline: - submission_deadline.start = course_session.start_date + timedelta(days=14) - submission_deadline.save() - evaluation_deadline = csa.evaluation_deadline - if evaluation_deadline: - evaluation_deadline.start = course_session.start_date + timedelta(days=28) - evaluation_deadline.save() - return csa - - -def create_course_session_attendance_course(course_session, course): - casc = CourseSessionAttendanceCourse.objects.create( - course_session=course_session, - learning_content=course, - location="Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", - trainer="Roland Grossenbacher, roland.grossenbacher@helvetia.ch", - ) - random_week = random.randint(1, 26) - - casc.due_date.start = timezone.make_aware( - datetime(2023, 6, 14, 8, 30) + timedelta(weeks=random_week) - ) - casc.due_date.end = timezone.make_aware( - datetime(2023, 6, 14, 17, 0) + timedelta(weeks=random_week) - ) - casc.due_date.save() - return casc - - def create_test_course_with_categories(apps=None, schema_editor=None): if apps is not None: Course = apps.get_model("course", "Course") diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py index 52074a7e..f29fc41f 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -3,6 +3,7 @@ import random from datetime import datetime, timedelta import djclick as click +from dateutil.relativedelta import relativedelta, TH, TU from django.utils import timezone from vbv_lernwelt.assignment.creators.create_assignments import ( @@ -245,13 +246,6 @@ def create_course_uk_de(): title="Bern 2023 a", ) - for i, cs in enumerate(CourseSession.objects.filter(course_id=COURSE_UK_TRAINING)): - create_course_session_assignments( - cs, - f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice", - i=i, - ) - csac = CourseSessionAttendanceCourse.objects.create( course_session=cs, learning_content=LearningContentAttendanceCourse.objects.get( @@ -260,17 +254,37 @@ def create_course_uk_de(): location="Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", trainer="Roland Grossenbacher, roland.grossenbacher@helvetia.ch", ) - - # TODO: create dates schlauer - random_week = random.randint(1, 26) + tuesday_in_two_weeks = ( + datetime.now() + relativedelta(weekday=TU(2)) + relativedelta(weeks=2) + ) csac.due_date.start = timezone.make_aware( - datetime(2023, 6, 14, 8, 30) + timedelta(weeks=random_week) + tuesday_in_two_weeks.replace(hour=8, minute=30, second=0, microsecond=0) ) csac.due_date.end = timezone.make_aware( - datetime(2023, 6, 14, 17, 0) + timedelta(weeks=random_week) + tuesday_in_two_weeks.replace(hour=17, minute=0, second=0, microsecond=0) ) csac.due_date.save() + csa = CourseSessionAssignment.objects.create( + course_session=cs, + learning_content=LearningContentAssignment.objects.get( + slug=f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice" + ), + ) + next_thursday = datetime.now() + relativedelta(weekday=TH(2)) + csa.submission_deadline.start = timezone.make_aware( + (next_thursday + relativedelta(weeks=3)).replace( + hour=23, minute=59, second=59, microsecond=0 + ) + ) + csa.submission_deadline.save() + csa.evaluation_deadline.start = timezone.make_aware( + (next_thursday + relativedelta(weeks=5)).replace( + hour=23, minute=59, second=59, microsecond=0 + ) + ) + csa.evaluation_deadline.save() + # figma demo users and data csu = CourseSessionUser.objects.create( course_session=cs, @@ -587,6 +601,7 @@ def create_course_session_assignments(course_session, assignment_slug, i=1): if course_session.start_date is None: course_session.start_date = datetime.now() + timedelta(days=i * 12) course_session.save() + submission_deadline = csa.submission_deadline if submission_deadline: submission_deadline.start = course_session.start_date + timedelta(days=14) diff --git a/server/vbv_lernwelt/course/migrations/0007_merge_20230711_1108.py b/server/vbv_lernwelt/course/migrations/0007_merge_20230711_1108.py index 0e5c1726..1b1c6991 100644 --- a/server/vbv_lernwelt/course/migrations/0007_merge_20230711_1108.py +++ b/server/vbv_lernwelt/course/migrations/0007_merge_20230711_1108.py @@ -6,9 +6,8 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('course', '0006_auto_20230626_1724'), - ('course', '0006_remove_coursesession_assignment_details_list'), + ("course", "0006_auto_20230626_1724"), + ("course", "0006_remove_coursesession_assignment_details_list"), ] - operations = [ - ] + operations = [] diff --git a/server/vbv_lernwelt/course_session/migrations/0004_merge_20230711_1108.py b/server/vbv_lernwelt/course_session/migrations/0004_merge_20230711_1108.py index b5786fd6..f607ebe8 100644 --- a/server/vbv_lernwelt/course_session/migrations/0004_merge_20230711_1108.py +++ b/server/vbv_lernwelt/course_session/migrations/0004_merge_20230711_1108.py @@ -6,9 +6,8 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('course_session', '0002_coursesessionattendancecourse_attendance_user_list'), - ('course_session', '0003_auto_20230628_1321'), + ("course_session", "0002_coursesessionattendancecourse_attendance_user_list"), + ("course_session", "0003_auto_20230628_1321"), ] - operations = [ - ] + operations = [] diff --git a/server/vbv_lernwelt/learnpath/migrations/0010_merge_20230711_1108.py b/server/vbv_lernwelt/learnpath/migrations/0010_merge_20230711_1108.py index e85a13d9..0b85ed9c 100644 --- a/server/vbv_lernwelt/learnpath/migrations/0010_merge_20230711_1108.py +++ b/server/vbv_lernwelt/learnpath/migrations/0010_merge_20230711_1108.py @@ -6,9 +6,8 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('learnpath', '0008_alter_learningcontentassignment_content_assignment'), - ('learnpath', '0009_alter_learningcontentassignment_content_assignment'), + ("learnpath", "0008_alter_learningcontentassignment_content_assignment"), + ("learnpath", "0009_alter_learningcontentassignment_content_assignment"), ] - operations = [ - ] + operations = []