Add a general student export

This commit is contained in:
alazo 2017-08-29 17:08:17 +02:00 committed by Claude Paroz
parent d7af54c57d
commit a52beb29d2
4 changed files with 76 additions and 1 deletions

View file

@ -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<pk>\d+)/periods/', views.section_periods, name='section_periods'),

View file

@ -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

View file

@ -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

View file

@ -80,6 +80,7 @@
<li><a href="{% url 'stages_export' 'all' %}">Exporter les données de stages</a> (toutes)</li>
<li><a href="{% url 'imputations_export' %}">Exporter les données comptables</a></li>
<li><a href="{% url 'print_update_form' %}">Imprimer les formulaires de MAJ</a></li>
<li><a href="{% url 'general-export' %}">Exportation générale des élèves</a></li>
</ul>
</div>
</div>