From 7a09a92bde960a57f5454eb1fa7328739466ff78 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Thu, 11 Jan 2018 16:57:47 +0100 Subject: [PATCH] Import and send student PDF bulletins --- common/urls.py | 1 + stages/forms.py | 4 + stages/models.py | 2 +- stages/test_files/1ASEFEa.pdf | Bin 0 -> 11314 bytes stages/tests.py | 30 +++++++ stages/views.py | 115 +++++++++++++++++++++++- templates/admin/index.html | 1 + templates/email/bulletins_scolaires.txt | 11 +++ 8 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 stages/test_files/1ASEFEa.pdf create mode 100644 templates/email/bulletins_scolaires.txt diff --git a/common/urls.py b/common/urls.py index e0a6b33..c190a6c 100644 --- a/common/urls.py +++ b/common/urls.py @@ -11,6 +11,7 @@ urlpatterns = [ url(r'^import_students/', views.StudentImportView.as_view(), name='import-students'), url(r'^import_hp/', views.HPImportView.as_view(), name='import-hp'), url(r'^import_hp_contacts/', views.HPContactsImportView.as_view(), name='import-hp-contacts'), + url(r'^import_bulletins/', views.ImportBulletinView.as_view(), name='import-bulletins'), url(r'^attribution/$', views.AttributionView.as_view(), name='attribution'), url(r'^stages/export/(?Pall)?/?$', views.stages_export, name='stages_export'), diff --git a/stages/forms.py b/stages/forms.py index 2fd2a0f..f7317f1 100644 --- a/stages/forms.py +++ b/stages/forms.py @@ -34,3 +34,7 @@ class PeriodForm(forms.Form): class UploadHPFileForm(forms.Form): upload = forms.FileField(label='Fichier HyperPlanning') + + +class UploadBulletinForm(forms.Form): + upload = forms.FileField(label='Bulletins CLOEE (pdf)') diff --git a/stages/models.py b/stages/models.py index b293a5a..72eace4 100644 --- a/stages/models.py +++ b/stages/models.py @@ -189,7 +189,7 @@ class Student(models.Model): @property def civility(self): - return 'Monsieur' if self.gender == 'M' else 'Madame' + return {'M': 'Monsieur', 'F': 'Madame'}.get(self.gender, '') @property def full_name(self): diff --git a/stages/test_files/1ASEFEa.pdf b/stages/test_files/1ASEFEa.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcb581b35d6db83aaec9fc94f9cb0a3fb610099b GIT binary patch literal 11314 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 un fichier d'étudiants
  • Importer le fichier HP
  • Importer les formateurs (fichier HP)
  • +
  • Envoyer les bulletins (par classe)
  • Exporter les données de stages (récentes)
  • Exporter les données de stages (toutes)
  • Exporter les données comptables
  • diff --git a/templates/email/bulletins_scolaires.txt b/templates/email/bulletins_scolaires.txt new file mode 100644 index 0000000..db98d9e --- /dev/null +++ b/templates/email/bulletins_scolaires.txt @@ -0,0 +1,11 @@ +Madame, Monsieur, + +Vous trouverez en annexe le bulletin scolaire de {{ student_name }} pour le semestre écoulé. + +Nous vous souhaitons bonne réception de ce document et vous prions de recevoir, Madame, Monsieur, nos salutations les plus cordiales. + +Secrétariat de l'EPC +tél. 032 886 33 00 + +{{ sender_name }} +{{ sender_email }}