From a52beb29d26445799d24da456fc32af327af01cf Mon Sep 17 00:00:00 2001 From: alazo Date: Tue, 29 Aug 2017 17:08:17 +0200 Subject: [PATCH] Add a general student export --- common/urls.py | 1 + stages/tests.py | 6 +++- stages/views.py | 69 ++++++++++++++++++++++++++++++++++++++ templates/admin/index.html | 1 + 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/common/urls.py b/common/urls.py index 3265871..bd2a1ce 100644 --- a/common/urls.py +++ b/common/urls.py @@ -22,6 +22,7 @@ urlpatterns = [ url(r'^imputations/export/$', views.imputations_export, name='imputations_export'), url(r'^print/update_form/$', views.print_update_form, name='print_update_form'), + url(r'^general_export/$', views.general_export, name='general-export'), # AJAX/JSON urls url(r'^section/(?P\d+)/periods/', views.section_periods, name='section_periods'), diff --git a/stages/tests.py b/stages/tests.py index 85efa2b..e1e2f7d 100644 --- a/stages/tests.py +++ b/stages/tests.py @@ -80,7 +80,7 @@ class StagesTest(TestCase): def setUp(self): self.client.login(username='me', password='mepassword') - def test_export(self): + def test_export_stages(self): response1 = self.client.get(reverse('stages_export', args=['all'])) self.assertEqual(response1.status_code, 200) @@ -91,6 +91,10 @@ class StagesTest(TestCase): response3 = self.client.get(reverse('stages_export'), {'period': '1', 'non_attr': '1'}) self.assertEqual(response2.status_code, 200) + def test_export_students(self): + response = self.client.get(reverse('general-export')) + self.assertEqual(response.status_code, 200) + def test_attribution_view(self): response = self.client.get(reverse('attribution')) # Section select diff --git a/stages/views.py b/stages/views.py index 69689b5..6fe04fb 100644 --- a/stages/views.py +++ b/stages/views.py @@ -687,3 +687,72 @@ def print_update_form(request): response = HttpResponse(fh.read(), content_type='application/zip') response['Content-Disposition'] = 'attachment; filename="modification.zip"' return response + + +GENERAL_EXPORT_FIELDS = [ + ('Num_Ele', 'ext_id'), + ('Nom_Ele', 'last_name'), + ('Prenom_Ele', 'first_name'), + ('Genre_Ele', 'gender'), + ('Rue_Ele', 'street'), + ('NPA_Ele', 'pcode'), + ('Ville_Ele', 'city'), + ('DateNaissance_Ele', 'birth_date'), + ('NOAVS_Ele', 'avs'), + ('Canton_Ele', 'district'), + ('Email_Ele', 'email'), + ('Mobile_Ele', 'mobile'), + ('DispenseCG_Ele', 'dispense_ecg'), + ('DispenseEPS_Ele', 'dispense_eps'), + ('SoutienDYS_Ele', 'soutien_dys'), + + ('Classe_Ele', 'klass__name'), + ('Filiere_Ele', 'klass__section__name'), + ('MaitreDeClasse_Ele', 'klass__teacher'), + + ('Num_Emp', 'corporation__ext_id'), + ('Nom_Emp', 'corporation__name'), + ('Rue_Emp', 'corporation__street'), + ('NPA_Emp', 'corporation__pcode'), + ('Ville_Emp', 'corporation__city'), + ('Canton_Emp', 'corporation__district'), + ('Secteur_Emp', 'corporation__sector'), + ('Type_EMP', 'corporation__typ'), + ('Tel_Emp', 'corporation__tel'), + + ('Num_Form', 'instructor__ext_id'), + ('Titre_Form', 'instructor__title'), + ('Prenom_Form', 'instructor__first_name'), + ('Nom_Form', 'instructor__last_name'), + ('Tel_Form', 'instructor__tel'), + ('Email_Form', 'instructor__email'), + ('EmailCopie_Form', None), +] + + +def general_export(request): + """ + Export all current students data + """ + export_fields = OrderedDict(GENERAL_EXPORT_FIELDS) + wb = Workbook() + ws = wb.get_active_sheet() + ws.title = 'Exportation' + bold = Style(font=Font(bold=True)) + for col_idx, header in enumerate(export_fields.keys(), start=1): + cell = ws.cell(row=1, column=col_idx) + cell.value = header + cell.style = bold + # Data + query_keys = [f for f in export_fields.values() if f is not None] + query = Student.objects.filter(archived=False).order_by('klass__name', 'last_name', 'first_name') + for row_idx, tr in enumerate(query.values(*query_keys), start=2): + for col_idx, field in enumerate(query_keys, start=1): + if field == 'gender': + tr[field] = ('Madame', 'Monsieur')[tr[field] == 'M'] + ws.cell(row=row_idx, column=col_idx).value = tr[field] + + response = HttpResponse(save_virtual_workbook(wb), content_type=openxml_contenttype) + response['Content-Disposition'] = 'attachment; filename=%s%s.xlsx' % ( + 'general_export_', date.strftime(date.today(), '%Y-%m-%d')) + return response diff --git a/templates/admin/index.html b/templates/admin/index.html index bd14bca..f86a996 100644 --- a/templates/admin/index.html +++ b/templates/admin/index.html @@ -80,6 +80,7 @@
  • Exporter les données de stages (toutes)
  • Exporter les données comptables
  • Imprimer les formulaires de MAJ
  • +
  • Exportation générale des élèves