From 2c45ba3b3c7133e8dc268f3ca1fb2aacf9cfdc7f Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Mon, 13 May 2024 11:09:58 +0200
Subject: [PATCH] Factor out some field types from CSV import app

---
 aleksis/apps/cursus/model_extensions.py | 35 +++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 aleksis/apps/cursus/model_extensions.py

diff --git a/aleksis/apps/cursus/model_extensions.py b/aleksis/apps/cursus/model_extensions.py
new file mode 100644
index 0000000..e7a9bf5
--- /dev/null
+++ b/aleksis/apps/cursus/model_extensions.py
@@ -0,0 +1,35 @@
+from django.apps import apps
+from django.db.models import Model
+from django.utils.translation import gettext as _
+
+from .models import Course, Subject
+
+if apps.is_installed("aleksis.apps.csv_import"):
+    from aleksis.apps.csv_import.field_types import ProcessFieldType
+
+    class GroupSubjectByShortNameFieldType(ProcessFieldType):
+        name = "group_subject_short_name"
+        verbose_name = _("Short name of the subject")
+
+        def process(self, instance: Model, value):
+            subject, __ = Subject.objects.get_or_create(short_name=value, defaults={"name": value})
+            instance.subject = subject
+            instance.save()
+
+    class SubjectByShortNameFieldType(ProcessFieldType):
+        name = "subject_by_short_name"
+        verbose_name = _("Short name of the subject")
+        run_before_save = True
+
+        def process(self, instance: Model, value):
+            subject, __ = Subject.objects.get_or_create(short_name=value, defaults={"name": value})
+            instance.subject = subject
+
+    class CourseByUniqueReferenceFieldType(ProcessFieldType):
+        name = "course_by_unique_reference"
+        verbose_name = _("Short name of the subject")
+        run_before_save = True
+
+        def process(self, instance: Model, value):
+            course = Course.objects.get(extended_data__import_ref_csv=value)
+            instance.course = course
-- 
GitLab