Skip to content
Snippets Groups Projects
Commit a4693dc6 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '59-support-overlapping-periods' into 'master'

Resolve "Support overlapping terms"

Closes #59

See merge request !161
parents 255f9d0a 88b1c5f2
Branches
Tags
1 merge request!161Resolve "Support overlapping terms"
Pipeline #103704 canceled
...@@ -14,6 +14,7 @@ Fixed ...@@ -14,6 +14,7 @@ Fixed
* Importer failed sometimes on progressing absences. * Importer failed sometimes on progressing absences.
* Exam import failed sometimes when data provided through Untis were incomplete. * Exam import failed sometimes when data provided through Untis were incomplete.
* Importer now automatically fixes intersections of terms with previous terms.
`2.3.2`_ - 2022-09-01 `2.3.2`_ - 2022-09-01
--------------------- ---------------------
......
import logging import logging
from datetime import date from datetime import date, timedelta
from typing import Dict, Optional from typing import Dict, Optional
from django.db.models import Max, OuterRef, Q, QuerySet, Subquery from django.db.models import Max, OuterRef, Q, QuerySet, Subquery
...@@ -71,7 +71,7 @@ def import_terms( ...@@ -71,7 +71,7 @@ def import_terms(
if school_id is None: if school_id is None:
school_id = get_site_preferences()["untis_mysql__school_id"] school_id = get_site_preferences()["untis_mysql__school_id"]
qs = qs.filter(school_id=school_id) qs = qs.filter(school_id=school_id).order_by("datefrom")
if version is None: if version is None:
# Select newest version per term / validity range # Select newest version per term / validity range
...@@ -142,6 +142,7 @@ def import_terms( ...@@ -142,6 +142,7 @@ def import_terms(
school_term.date_start = date_start school_term.date_start = date_start
school_term.save() school_term.save()
school_terms[school_year_id] = school_term
try: try:
validity_range = chronos_models.ValidityRange.objects.get( validity_range = chronos_models.ValidityRange.objects.get(
...@@ -151,13 +152,24 @@ def import_terms( ...@@ -151,13 +152,24 @@ def import_terms(
except chronos_models.ValidityRange.DoesNotExist: except chronos_models.ValidityRange.DoesNotExist:
try: try:
validity_range = chronos_models.ValidityRange.objects.within_dates( validity_range = chronos_models.ValidityRange.objects.within_dates(
date_start, date_end date_start__gte=date_start, date_end__lte=date_end
).get() ).get()
logger.info(" Validity range found by time.") logger.info(" Validity range found by time.")
except chronos_models.ValidityRange.DoesNotExist: except chronos_models.ValidityRange.DoesNotExist:
validity_range = chronos_models.ValidityRange() validity_range = chronos_models.ValidityRange()
logger.info(" Validity range created newly.") logger.info(" Validity range created newly.")
# In Untis, you can set all the end dates of the terms to the same date
# and despite that, the terms still end if a new one starts.
# If this case occurs, we have to set the end date of the previous term
# to the start date of the next one.
validity_range_with_possible_intersection = chronos_models.ValidityRange.objects.filter(
date_end__gte=date_start, date_start__lt=date_start
).first()
if validity_range_with_possible_intersection:
validity_range_with_possible_intersection.date_end = date_start - timedelta(days=1)
validity_range_with_possible_intersection.save()
validity_range.import_ref_untis = term_id validity_range.import_ref_untis = term_id
validity_range.date_start = date_start validity_range.date_start = date_start
validity_range.date_end = date_end validity_range.date_end = date_end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment