diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1c5d84e49f244191cf28eef3e8a4fe48c651f621..f07e1be13705a187d9d70cc35e3c4fad891850de 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -26,6 +26,7 @@ Fixed * Search course groups not only by parent groups and subject, but also take the teachers (group owners) into account +* Don't recreate lesson periods if they change, but just update them. `2.1.3`_ - 2022-02-06 --------------------- diff --git a/aleksis/apps/untis/util/mysql/importers/lessons.py b/aleksis/apps/untis/util/mysql/importers/lessons.py index eae5812fb69dbd38c01da1022581a13e30b37014..dc7aa154c85b4ca21c05030c53e7a49f9d25a81b 100644 --- a/aleksis/apps/untis/util/mysql/importers/lessons.py +++ b/aleksis/apps/untis/util/mysql/importers/lessons.py @@ -268,10 +268,7 @@ def import_lessons( # All times for this course old_lesson_periods_qs = chronos_models.LessonPeriod.objects.filter(lesson=lesson) - # If length has changed, delete all lesson periods - if old_lesson_periods_qs.count() != len(time_periods): - old_lesson_periods_qs.delete() - logger.info(" Lesson periods deleted") + existing_lesson_period_pks = [] # Sync time periods for j, time_period in enumerate(time_periods): @@ -285,24 +282,29 @@ def import_lessons( room = None # Check if an old lesson period is provided - old_lesson_period_qs = old_lesson_periods_qs.filter(element_id_untis=j) + old_lesson_period_qs = old_lesson_periods_qs.filter(period=time_period) if old_lesson_period_qs.exists(): # Update old lesson period - old_lesson_period = old_lesson_period_qs[0] - if old_lesson_period.period != time_period or old_lesson_period.room != room: - old_lesson_period.period = time_period - old_lesson_period.room = room - old_lesson_period.save() - logger.info(" Time period and room updated") + lesson_period = old_lesson_period_qs[0] + if lesson_period.room != room or lesson_period.element_id_untis != j: + lesson_period.element_id_untis = j + lesson_period.room = room + lesson_period.save() + logger.info(" Untis reference and room updated") else: # Create new lesson period - chronos_models.LessonPeriod.objects.create( + lesson_period = chronos_models.LessonPeriod.objects.create( lesson=lesson, period=time_period, room=room, element_id_untis=j ) - logger.info(" New time period added") + logger.info(" New lesson period added") + existing_lesson_period_pks.append(lesson_period.pk) + + # delete all no-longer existing lesson periods + old_lesson_periods_qs.exclude(pk__in=existing_lesson_period_pks).delete() + logger.info(" Old lesson periods deleted") current_teacher_id = teacher_id for lesson in chronos_models.Lesson.objects.filter(validity=validity_range):