diff --git a/stages/test_files/CLOEE2_Export_FE_2018.xlsx b/stages/test_files/CLOEE2_Export_FE_2018.xlsx index c3cdb38..f50e534 100644 Binary files a/stages/test_files/CLOEE2_Export_FE_2018.xlsx and b/stages/test_files/CLOEE2_Export_FE_2018.xlsx differ diff --git a/stages/tests.py b/stages/tests.py index 2bf562d..fee6641 100644 --- a/stages/tests.py +++ b/stages/tests.py @@ -465,6 +465,10 @@ class ImportTests(TestCase): assc = Section.objects.create(name='ASSC') Option.objects.create(name='Accompagnement des enfants') k1 = Klass.objects.create(name='1ASSCFEa', section=assc, level=lev1) + teacher = Teacher.objects.create( + first_name='Jeanne', last_name='Dupond', birth_date='1974-08-08' + ) + # Corporation without ext_id will have its ext_id added. corp = Corporation.objects.create(name='Centre Cantonal de peinture', city='Marin-Epagnier') inst = CorpContact.objects.create(first_name="Roberto", last_name="Rastapopoulos") @@ -483,8 +487,8 @@ class ImportTests(TestCase): msg = "\n".join(str(m) for m in response.context['messages']) self.assertIn("La classe '2ASSCFEa' n'existe pas encore", msg) - Klass.objects.create(name='2ASSCFEa', section=assc, level=lev2) - Klass.objects.create( + klass_assc = Klass.objects.create(name='2ASSCFEa', section=assc, level=lev2) + klass_epe = Klass.objects.create( name='2EDEpe', section=Section.objects.create(name='EDE'), level=lev2, @@ -513,6 +517,9 @@ class ImportTests(TestCase): # Tournesol was archived stud_arch = Student.objects.get(ext_id=44444) self.assertTrue(stud_arch.archived) + # Klass teachers have been set + klass_assc.teacher = teacher + klass_epe.teacher = teacher # Corporation.ext_id is updated corp.refresh_from_db() self.assertEqual(corp.ext_id, 100) diff --git a/stages/views/imports.py b/stages/views/imports.py index a95f1de..7c9311c 100644 --- a/stages/views/imports.py +++ b/stages/views/imports.py @@ -91,6 +91,7 @@ class StudentImportView(ImportViewBase): 'ELE_AVS': 'avs', 'ELE_SEXE': 'gender', 'INS_CLASSE': 'klass', + 'INS_MC': 'teacher', 'PROF_DOMAINE_SPEC': 'option_ase', } corporation_mapping = { @@ -179,6 +180,8 @@ class StudentImportView(ImportViewBase): existing_students_ids = set( self._existing_students.values_list('ext_id', flat=True) ) + seen_klasses = set() + prof_dict = {str(t): t for t in Teacher.objects.all()} for line in up_file: student_defaults = { @@ -203,6 +206,22 @@ class StudentImportView(ImportViewBase): student_defaults['option_ase'] = self.mapping_option_ase[student_defaults['option_ase']] defaults = self.clean_values(student_defaults) + + if defaults.get('teacher') and defaults['klass'] not in seen_klasses: + klass = defaults['klass'] + for full_name in defaults['teacher'].split(', '): + if 'Secrétariat' in full_name: + continue + # Set the teacher for this klass + try: + klass.teacher = prof_dict[full_name] + klass.save() + except KeyError: + err_msg.append( + "L'enseignant {0} n'existe pas dans la base de données".format(full_name) + ) + seen_klasses.add(klass) + try: student = Student.objects.get(ext_id=defaults['ext_id']) modified = False @@ -227,6 +246,7 @@ class StudentImportView(ImportViewBase): defaults['klass']) ) + del defaults['teacher'] Student.objects.create(**defaults) obj_created += 1