From cf1b97a56f6e1b06cf4c2d03fa07bd1bb8629f3d Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Fri, 13 Jul 2018 12:43:27 +0200 Subject: [PATCH] Student import file headers have changed in 2018 --- stages/test_files/CLOEE2_Export_FE_2018.xlsx | Bin 0 -> 8463 bytes stages/test_files/EXPORT_GAN.xlsx | Bin 6055 -> 0 bytes stages/tests.py | 28 +++++++------ stages/views/imports.py | 39 ++++++++++--------- 4 files changed, 37 insertions(+), 30 deletions(-) create mode 100644 stages/test_files/CLOEE2_Export_FE_2018.xlsx delete mode 100644 stages/test_files/EXPORT_GAN.xlsx diff --git a/stages/test_files/CLOEE2_Export_FE_2018.xlsx b/stages/test_files/CLOEE2_Export_FE_2018.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3de75484a1923c1b651ae05d18cfcce5105c4293 GIT binary patch literal 8463 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 RXM_p=yoEn{JF2^@{{pBjCUgJ* literal 0 HcmV?d00001 diff --git a/stages/test_files/EXPORT_GAN.xlsx b/stages/test_files/EXPORT_GAN.xlsx deleted file mode 100644 index 8c90ca5aae872f9d98e8d8e11ecc9e06f7000950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6055 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 Qn=s)Y5qP9jN$y7f1%$I*PXGV_ diff --git a/stages/tests.py b/stages/tests.py index 6f7cf22..ef342da 100644 --- a/stages/tests.py +++ b/stages/tests.py @@ -441,34 +441,40 @@ class ImportTests(TestCase): """ Import of the main students file. """ - path = os.path.join(os.path.dirname(__file__), 'test_files', 'EXPORT_GAN.xlsx') + path = os.path.join(os.path.dirname(__file__), 'test_files', 'CLOEE2_Export_FE_2018.xlsx') self.client.login(username='me', password='mepassword') with open(path, 'rb') as fh: response = self.client.post(reverse('import-students'), {'upload': fh}, follow=True) msg = "\n".join(str(m) for m in response.context['messages']) - self.assertIn("La classe '1ASEFEa' n'existe pas encore", msg) + self.assertIn("La classe '1ASSCFEa' n'existe pas encore", msg) lev1 = Level.objects.create(name='1') + lev2 = Level.objects.create(name='2') Klass.objects.create( - name='1ASEFEa', - section=Section.objects.create(name='ASE'), + name='1ASSCFEa', + section=Section.objects.create(name='ASSC'), level=lev1, ) Klass.objects.create( - name='1EDS', + name='2EDEpe', section=Section.objects.create(name='EDE'), + level=lev2, + ) + Klass.objects.create( + name='1EDS18-20', + section=Section.objects.create(name='EDS'), level=lev1, ) - Option.objects.create(name='Accompagnement des enfants') - with open(path, 'rb') as fh: # , override_settings(DEBUG=True): + with open(path, 'rb') as fh: 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 : 3", 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") + + student = Student.objects.get(ext_id=22222) + self.assertEqual(student.corporation.name, 'Accueil Haut les mains') + self.assertFalse(student.dispense_eps) # Instructor not set through this import - self.assertIsNone(student1.instructor) + self.assertIsNone(student.instructor) def test_import_hp(self): teacher = Teacher.objects.create( diff --git a/stages/views/imports.py b/stages/views/imports.py index 7b63d95..66fa4a1 100644 --- a/stages/views/imports.py +++ b/stages/views/imports.py @@ -68,27 +68,28 @@ class StudentImportView(ImportViewBase): form_class = StudentImportForm # Mapping between column names of a tabular file and Student field names student_mapping = { - 'NOCLOEE': 'ext_id', - 'NOM': 'last_name', - 'PRENOM': 'first_name', - 'RUE': 'street', - 'LOCALITE': 'city', # pcode is separated from city in prepare_import - 'TEL_PRIVE': 'tel', - 'TEL_MOBILE': 'mobile', - 'EMAIL_RPN': 'email', - 'DATENAI': 'birth_date', - 'NAVS13': 'avs', - 'SEXE': 'gender', - 'CLASSE_ACTUELLE': 'klass', - 'LIB_BRANCHE_OPTION': 'option_ase', + 'ELE_NUMERO': 'ext_id', + 'ELE_NOM': 'last_name', + 'ELE_PRENOM': 'first_name', + 'ELE_RUE': 'street', + 'ELE_NPA_LOCALITE': 'city', # pcode is separated from city in prepare_import + 'ELE_TEL_PRIVE': 'tel', + 'ELE_TEL_MOBILE': 'mobile', + 'ELE_EMAIL_RPN': 'email', + 'ELE_DATE_NAISSANCE': 'birth_date', + 'ELE_AVS': 'avs', + 'ELE_SEXE': 'gender', + 'INS_CLASSE': 'klass', + 'PROF_DOMAINE_SPEC': 'option_ase', } corporation_mapping = { - 'NO_EMPLOYEUR' : 'ext_id', - 'EMPLOYEUR' : 'name', - 'RUE_EMPLOYEUR': 'street', - 'LOCALITE_EMPLOYEUR': 'city', - 'TEL_EMPLOYEUR': 'tel', - 'CANTON_EMPLOYEUR' : 'district', + 'ENT_NUMERO' : 'ext_id', + 'ENT_NOM' : 'name', + 'ENT_RUE': 'street', + 'ENT_NPA': 'pcode', + 'ENT_LOCALITE': 'city', + 'ENT_TEL': 'tel', + 'ENT_CODE_CANTON' : 'district', } def get_form_kwargs(self):