diff --git a/aleksis/apps/untis/forms.py b/aleksis/apps/untis/forms.py index 81fc0a57ac0329a84b5bd8967fe5864b0ac16637..f642bbff839ce6b3f416a191a6703474d7360a0f 100644 --- a/aleksis/apps/untis/forms.py +++ b/aleksis/apps/untis/forms.py @@ -1,11 +1,11 @@ from django import forms from django.utils.translation import ugettext_lazy as _ -from constance import config from material import Fieldset from aleksis.core.forms import EditGroupForm from aleksis.core.models import Group +from aleksis.core.util.core_helpers import get_site_preferences class UntisUploadForm(forms.Form): @@ -33,8 +33,5 @@ GroupSubjectFormset = forms.modelformset_factory( Group, form=GroupSubjectForm, max_num=0, extra=0 ) - - - -if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS: +if get_site_preferences()["untis_mysql__use_course_groups"]: EditGroupForm.add_node_to_layout(Fieldset(_("UNTIS import"), "untis_subject")) diff --git a/aleksis/apps/untis/model_extensions.py b/aleksis/apps/untis/model_extensions.py index b9a3eef0f95f75276ae745cc3f59c96ead640126..36d947ab06e99c7bc5f11ba1b98774546fbd3f38 100644 --- a/aleksis/apps/untis/model_extensions.py +++ b/aleksis/apps/untis/model_extensions.py @@ -1,19 +1,20 @@ from django.utils.translation import gettext as _ -from constance import config from jsonstore import CharField, IntegerField from aleksis.apps.chronos import models as chronos_models from aleksis.core import models as core_models # Core models +from aleksis.core.util.core_helpers import get_site_preferences + core_models.Person.field( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True) ) core_models.Group.field( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True) ) -if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS: +if get_site_preferences()["untis_mysql__use_course_groups"]: core_models.Group.field( untis_subject=CharField( verbose_name=_("UNTIS subject"), diff --git a/aleksis/apps/untis/preferences.py b/aleksis/apps/untis/preferences.py new file mode 100644 index 0000000000000000000000000000000000000000..d2193253f623bdc0c30dd7800e7d830c9587793a --- /dev/null +++ b/aleksis/apps/untis/preferences.py @@ -0,0 +1,83 @@ +from django.utils.translation import gettext as _ +from dynamic_preferences.preferences import Section +from dynamic_preferences.types import BooleanPreference + +from aleksis.core.registries import site_preferences_registry + +untis_mysql = Section("untis_mysql", verbose_name=_("UNTIS: MySQL")) + + +@site_preferences_registry.register +class UpdateSubjects(BooleanPreference): + section = untis_mysql + name = "update_subjects" + default = True + verbose_name = _("Update values of existing subjects") + + +@site_preferences_registry.register +class UpdatePersonsShortName(BooleanPreference): + section = untis_mysql + name = "update_persons_short_name" + default = False + verbose_name = _("Update short name of existing persons") + + +@site_preferences_registry.register +class UpdatePersonsName(BooleanPreference): + section = untis_mysql + name = "update_persons_name" + default = False + verbose_name = _("Update name of existing persons") + + +@site_preferences_registry.register +class UpdateGroupsShortName(BooleanPreference): + section = untis_mysql + name = "update_groups_short_name" + default = False + verbose_name = _("Update short name of existing groups") + + +@site_preferences_registry.register +class UpdateGroupsName(BooleanPreference): + section = untis_mysql + name = "update_groups_name" + default = False + verbose_name = _("Update name of existing groups") + + +@site_preferences_registry.register +class OverwriteGroupOwners(BooleanPreference): + section = untis_mysql + name = "overwrite_group_owners" + verbose_name = _("Overwrite group owners") + default = True + + +@site_preferences_registry.register +class UpdateRoomsName(BooleanPreference): + section = untis_mysql + name = "update_rooms_name" + default = True + verbose_name = _("Update name of existing rooms") + + +@site_preferences_registry.register +class UpdateSupervisionAreas(BooleanPreference): + section = untis_mysql + name = "update_supervision_areas" + default = True + verbose_name = _("Update existing supervision areas") + + +@site_preferences_registry.register +class UseCourseGroups(BooleanPreference): + section = untis_mysql + name = "use_course_groups" + default = True + verbose_name = _("Use course groups") + help_text = _( + "Build or search course groups for every course" + " instead of setting classes as groups." + ) diff --git a/aleksis/apps/untis/settings.py b/aleksis/apps/untis/settings.py index 17fa5ad50490f8566069daa62ddf794aecee5682..0f05d5db30d3b988c7181ccaca9fda786116167b 100644 --- a/aleksis/apps/untis/settings.py +++ b/aleksis/apps/untis/settings.py @@ -1,5 +1,3 @@ -from django.utils.translation import gettext_lazy as _ - from aleksis.core.settings import _settings DATABASES = { @@ -12,51 +10,3 @@ DATABASES = { "PORT": _settings.get("untis.database.port", 3306), } } - -CONSTANCE_CONFIG = { - "UNTIS_IMPORT_MYSQL_UPDATE_SUBJECTS": (True, _("Update values of existing subjects?"), bool,), - "UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_SHORT_NAME": ( - False, - _("Update short name of existing persons?"), - bool, - ), - "UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_NAME": ( - False, - _("Update first and last name of existing persons?"), - bool, - ), - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_SHORT_NAME": ( - False, - _("Update short name of existing groups?"), - bool, - ), - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME": (False, _("Update name of existing groups?"), bool,), - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS": ( - False, - _("Overwrite existing owners?"), - bool, - ), - "UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME": (True, _("Update name of existing rooms?"), bool,), - "UNTIS_IMPORT_MYSQL_UPDATE_SUPERVISION_AREAS": ( - True, - _("Update values of existing supervision areas?"), - ), - "UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS": ( - True, - _("Build or search course groups for every course instead of setting classes as groups."), - ), -} - -CONSTANCE_CONFIG_FIELDSETS = { - "UNTIS import via MySQL: Common Settings": ( - "UNTIS_IMPORT_MYSQL_UPDATE_SUBJECTS", - "UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_SHORT_NAME", - "UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_NAME", - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_SHORT_NAME", - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME", - "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS", - "UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME", - "UNTIS_IMPORT_MYSQL_UPDATE_SUPERVISION_AREAS", - "UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS", - ), -} diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py index ddad5869aba520f903428451250c80a04ebabd90..9fa6fe9f40b541d8e7d7962f3929cfd6ba1cef77 100644 --- a/aleksis/apps/untis/util/mysql/importers/common_data.py +++ b/aleksis/apps/untis/util/mysql/importers/common_data.py @@ -3,11 +3,11 @@ from datetime import time from enum import Enum from typing import Dict, List -from constance import config from tqdm import tqdm from aleksis.apps.chronos import models as chronos_models from aleksis.core import models as core_models +from aleksis.core.util.core_helpers import get_site_preferences from .... import models as mysql_models from ..util import ( @@ -67,7 +67,7 @@ def import_subjects() -> Dict[int, chronos_models.Subject]: # Force sync changed = False - if config.UNTIS_IMPORT_MYSQL_UPDATE_SUBJECTS and ( + if get_site_preferences()["untis_mysql__update_subjects"] and ( new_subject.name != name or new_subject.colour_fg != colour_fg or new_subject.colour_bg != colour_bg @@ -131,7 +131,7 @@ def import_teachers() -> Dict[int, core_models.Person]: logger.info(" New person created") changed = False - if config.UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_NAME and ( + if get_site_preferences()["untis_mysql__update_persons_name"] and ( new_teacher.first_name != first_name or new_teacher.last_name != last_name ): new_teacher.first_name = first_name @@ -140,7 +140,7 @@ def import_teachers() -> Dict[int, core_models.Person]: logger.info(" First and last name updated") if ( - config.UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_SHORT_NAME + get_site_preferences()["untis_mysql__update_persons_short_name"] and new_teacher.short_name != short_name ): new_teacher.short_name = short_name @@ -194,14 +194,14 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor changed = False if ( - config.UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_SHORT_NAME + get_site_preferences()["untis_mysql__update_groups_short_name"] and new_group.short_name != short_name ): new_group.short_name = short_name changed = True logger.info(" Short name updated") - if config.UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME and new_group.name != name: + if get_site_preferences()["untis_mysql__update_groups_name"] and new_group.name != name: new_group.name = name changed = True logger.info(" Name updated") @@ -214,7 +214,7 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor if changed: new_group.save() - if config.UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS: + if get_site_preferences()["untis_mysql__overwrite_group_owners"]: new_group.owners.set(owners) logger.info(" Group owners set") else: @@ -256,7 +256,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]: changed = False - if config.UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME and new_room.name != name: + if get_site_preferences()["untis_mysql__update_rooms_name"] and new_room.name != name: new_room.name = name changed = True logger.info(" Name updated") @@ -313,7 +313,7 @@ def import_supervision_areas(breaks_ref, teachers_ref) -> Dict[int, chronos_mode changed = False - if config.UNTIS_IMPORT_MYSQL_UPDATE_SUPERVISION_AREAS and ( + if get_site_preferences()["untis_mysql__update_supervision_areas"] and ( new_area.name != new_area.name or new_area.colour_fg != colour_fg or new_area.colour_bg != colour_bg diff --git a/aleksis/apps/untis/util/mysql/importers/lessons.py b/aleksis/apps/untis/util/mysql/importers/lessons.py index d4afa14109b2a9b8fef5eae7ca60856d5e9d5bcb..296ced472f557819426934c9184d4d2f4974bb6e 100644 --- a/aleksis/apps/untis/util/mysql/importers/lessons.py +++ b/aleksis/apps/untis/util/mysql/importers/lessons.py @@ -3,11 +3,11 @@ from datetime import timedelta from django.utils.translation import gettext as _ -from constance import config from tqdm import tqdm from aleksis.apps.chronos import models as chronos_models from aleksis.core import models as core_models +from aleksis.core.util.core_helpers import get_site_preferences from .... import models as mysql_models from ..util import ( @@ -115,7 +115,7 @@ def import_lessons(time_periods_ref, rooms_ref, subjects_ref, teachers_ref, clas c = classes_ref[class_id] course_classes.append(c) - if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS: + if get_site_preferences()["untis_mysql__use_course_groups"]: # Negative import_ref denotes a course group group_import_ref = -int("{}{}".format(lesson_id, i)) subject_ref = subject.short_name