From e4a4ea46dc20c5914f8396f40afd0ee096be600c Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Wed, 30 Aug 2017 18:46:52 +0200 Subject: [PATCH] Import LIB_BRANCHE_OPTION when importing student file --- common/settings.py | 1 + stages/test_files/EXPORT_GAN.xlsx | Bin 5931 -> 5986 bytes stages/tests.py | 9 +++++++-- stages/views.py | 7 ++++++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/common/settings.py b/common/settings.py index 5096813..4f098d8 100644 --- a/common/settings.py +++ b/common/settings.py @@ -130,6 +130,7 @@ STUDENT_IMPORT_MAPPING = { 'NAVS13': 'avs', 'SEXE': 'gender', 'CLASSE_ACTUELLE': 'klass', + 'LIB_BRANCHE_OPTION': 'option_ase', } CORPORATION_IMPORT_MAPPING = { diff --git a/stages/test_files/EXPORT_GAN.xlsx b/stages/test_files/EXPORT_GAN.xlsx index 9e2217380c2915ce283f69b4392b6b4289de0e18..b2276344ac6143b08880c676048f7542a9ade209 100644 GIT binary patch delta 3181 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 diff --git a/stages/tests.py b/stages/tests.py index 31a7616..010bd97 100644 --- a/stages/tests.py +++ b/stages/tests.py @@ -9,7 +9,7 @@ from django.urls import reverse from django.utils.html import escape from .models import ( - Level, Domain, Section, Klass, Period, Student, Corporation, Availability, + Level, Domain, Section, Klass, Option, Period, Student, Corporation, Availability, CorpContact, Teacher, Training, Course, ) from .utils import school_year @@ -282,7 +282,10 @@ class ImportTests(TestCase): def setUp(self): User.objects.create_user('me', 'me@example.org', 'mepassword') - def test_import_gan(self): + def test_import_students(self): + """ + Import of the main students file. + """ path = os.path.join(os.path.dirname(__file__), 'test_files', 'EXPORT_GAN.xlsx') self.client.login(username='me', password='mepassword') with open(path, 'rb') as fh: @@ -301,12 +304,14 @@ class ImportTests(TestCase): section=Section.objects.create(name='EDE'), level=lev1, ) + Option.objects.create(name='Accompagnement des enfants') with open(path, 'rb') as fh: # , override_settings(DEBUG=True): response = self.client.post(reverse('import-students'), {'upload': fh}, follow=True) msg = "\n".join(str(m) for m in response.context['messages']) self.assertIn("Objets créés : 2", msg) student1 = Student.objects.get(last_name='Fellmann') self.assertEqual(student1.corporation.name, "Crèche Les Mousaillons") + self.assertEqual(student1.option_ase.name, "Accompagnement des enfants") # Instructor not set through this import self.assertIsNone(student1.instructor) diff --git a/stages/views.py b/stages/views.py index 7c14ccf..69b5305 100644 --- a/stages/views.py +++ b/stages/views.py @@ -23,7 +23,7 @@ from django.views.generic import DetailView, FormView, TemplateView, ListView from .forms import PeriodForm, StudentImportForm, UploadHPFileForm from .models import ( - Klass, Section, Student, Teacher, Corporation, CorpContact, Course, Period, + Klass, Section, Option, Student, Teacher, Corporation, CorpContact, Course, Period, Training, Availability, ) from .pdf import UpdateDataFormPDF @@ -342,6 +342,11 @@ class StudentImportView(ImportViewBase): seen_students_ids.add(student_defaults['ext_id']) if isinstance(student_defaults['birth_date'], str): student_defaults['birth_date'] = datetime.strptime(student_defaults['birth_date'], '%d.%m.%Y').date() + if student_defaults['option_ase']: + try: + student_defaults['option_ase'] = Option.objects.get(name=student_defaults['option_ase']) + except Option.DoesNotExist: + del student_defaults['option_ase'] corporation_defaults = { val: strip(line[key]) for key, val in corporation_mapping.items()