From c86128250e9568f9339b9b3decb36a875bd47c11 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Mon, 28 Aug 2017 15:48:01 +0200 Subject: [PATCH] Report error when NoSIRET column is empty in HPContactsImportView --- stages/test_files/Export_HP_Formateurs.xlsx | Bin 7288 -> 5732 bytes stages/tests.py | 5 +++++ stages/views.py | 7 ++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/stages/test_files/Export_HP_Formateurs.xlsx b/stages/test_files/Export_HP_Formateurs.xlsx index 93a9b6e5a2eb5142f838d64d61f47645aba9e62f..d14ea9be23dd758b49271c695049242b99f695e9 100644 GIT binary patch delta 2577 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 delta 4142 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 Qvs(%J;);9&l52_o0ww)#BLDyZ diff --git a/stages/tests.py b/stages/tests.py index 30c2cf8..85efa2b 100644 --- a/stages/tests.py +++ b/stages/tests.py @@ -326,10 +326,15 @@ class ImportTests(TestCase): st1 = Student.objects.create( ext_id=164718, first_name='Margot', last_name='Fellmann', birth_date="1994-05-12", pcode="2300", city="La Chaux-de-Fonds", corporation=corp) + Student.objects.create( + ext_id=53476, first_name='Jojo', last_name='Semaine', birth_date="1997-01-03", + pcode="2300", city="La Chaux-de-Fonds", corporation=None) path = os.path.join(os.path.dirname(__file__), 'test_files', 'Export_HP_Formateurs.xlsx') self.client.login(username='me', password='mepassword') with open(path, 'rb') as fh: response = self.client.post(reverse('import-hp-contacts'), {'upload': fh}, follow=True) + self.assertContains(response, "Impossible de trouver l'étudiant avec le numéro 10") + self.assertContains(response, "NoSIRET est vide à ligne 4. Ligne ignorée") st1.refresh_from_db() self.assertEqual(st1.instructor.last_name, 'Geiser') diff --git a/stages/views.py b/stages/views.py index aef6eee..2857d99 100644 --- a/stages/views.py +++ b/stages/views.py @@ -457,7 +457,7 @@ class HPContactsImportView(ImportViewBase): def import_data(self, up_file): obj_modified = 0 errors = [] - for line in up_file: + for idx, line in enumerate(up_file, start=2): try: student = Student.objects.get(ext_id=int(line['UID_ETU'])) except Student.DoesNotExist: @@ -465,6 +465,11 @@ class HPContactsImportView(ImportViewBase): "Impossible de trouver l'étudiant avec le numéro %s" % int(line['UID_ETU']) ) continue + if not line['NoSIRET']: + errors.append( + "NoSIRET est vide à ligne %d. Ligne ignorée" % idx + ) + continue try: corp = Corporation.objects.get(ext_id=int(line['NoSIRET'])) except Corporation.DoesNotExist: