Skip to content
Snippets Groups Projects
Verified Commit bd9a1004 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Add import code for events

parent e665f1f2
No related branches found
No related tags found
1 merge request!13Resolve "Support import from MySQL"
......@@ -82,3 +82,8 @@ chronos_models.Absence.field(
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
)
chronos_models.Event.field(
import_ref_untis=IntegerField(
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
)
import logging
from aleksis.apps.chronos import models as chronos_models
from .... import models as mysql_models
from ..util import (
run_default_filter,
get_term,
untis_date_to_date,
move_weekday_to_range,
get_first_period,
get_last_period,
connect_untis_fields, sync_m2m,
)
logger = logging.getLogger(__name__)
def import_events(time_periods_ref, teachers_ref, classes_ref, rooms_ref):
ref = {}
# Get term
term = get_term()
term_date_start = untis_date_to_date(term.datefrom)
term_date_end = untis_date_to_date(term.dateto)
# Get absences
events = (
run_default_filter(mysql_models.Event.objects, filter_term=False)
.filter(datefrom__lte=term.dateto, dateto__gte=term.datefrom)
.order_by("event_id")
)
existing_events = []
for event in events:
import_ref = event.event_id
logger.info("Import event {}".format(import_ref))
# Build values
comment = event.text
date_from = untis_date_to_date(event.datefrom)
date_to = untis_date_to_date(event.dateto)
period_from = event.lessonfrom
period_to = event.lessonto
weekday_from = date_from.weekday()
weekday_to = date_to.weekday()
# Check min/max weekdays
weekday_from = move_weekday_to_range(time_periods_ref, weekday_from)
weekday_to = move_weekday_to_range(time_periods_ref, weekday_to)
# Check min/max periods
first_period = get_first_period(time_periods_ref, weekday_from)
last_period = get_last_period(time_periods_ref, weekday_from)
if period_from == 0:
period_from = first_period
if period_to == 0:
period_to = last_period
time_period_from = time_periods_ref[weekday_from][period_from]
time_period_to = time_periods_ref[weekday_to][period_to]
groups = []
teachers = []
rooms = []
# Get groups, teachers and rooms
raw_events = connect_untis_fields(event, "eventelement", 10)
for raw_event in raw_events:
el = raw_event.split("~")
# Group
if el[0] != "0" and el[0] != "":
group = classes_ref[int(el[0])]
groups.append(group)
# Teacher
if el[2] != "0" and el[2] != "":
teacher = teachers_ref[int(el[2])]
teachers.append(teacher)
# Room
if el[3] != "0" and el[3] != "":
room = rooms_ref[int(el[3])]
rooms.append(room)
new_event, created = chronos_models.Event.objects.get_or_create(
import_ref_untis=import_ref,
defaults={
"date_start": date_from,
"date_end": date_to,
"period_from": time_period_from,
"period_to": time_period_to,
"title": comment,
},
)
if created:
logger.info(" New event created")
# Sync simple fields
if (
new_event.date_start != date_from
or new_event.date_end != date_to
or new_event.period_from != time_period_from
or new_event.period_to != time_period_to
or new_event.title != comment
):
new_event.date_start = date_from
new_event.date_end = date_to
new_event.period_from = time_period_from
new_event.period_to = time_period_to
new_event.title = comment
new_event.save()
logger.info(" Time range and title updated")
# Sync m2m-fields
sync_m2m(groups, new_event.groups)
sync_m2m(teachers, new_event.teachers)
sync_m2m(rooms, new_event.rooms)
existing_events.append(import_ref)
ref[import_ref] = new_event
# Delete all no longer existing events
for e in chronos_models.Event.objects.filter(
date_start__lte=term_date_start, date_end__gte=term_date_end
):
if e.import_ref_untis and e.import_ref_untis not in existing_events:
logger.info("Event {} deleted".format(e.id))
e.delete()
......@@ -9,6 +9,7 @@ from .importers.common_data import (
import_breaks,
import_absence_reasons,
)
from .importers.events import import_events
from .importers.lessons import import_lessons
from .importers.substitutions import import_substitutions
......@@ -36,3 +37,6 @@ def untis_import_mysql():
# Substitutions
import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref)
import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref)
# Events
import_events(time_periods_ref, teachers_ref, classes_ref, rooms_ref)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment