From c8954ef7fc8895d340d4cd4e4e5d1a47dcc01049 Mon Sep 17 00:00:00 2001 From: alazo Date: Tue, 18 Jul 2017 09:40:54 +0200 Subject: [PATCH] imputation_export --- common/urls.py | 1 + media/img/header.gif | Bin 0 -> 5430 bytes stages/admin.py | 7 +++- stages/pdf.py | 1 + stages/views.py | 80 +++++++++++++++++++++++++++---------- templates/admin/index.html | 1 + 6 files changed, 68 insertions(+), 22 deletions(-) create mode 100644 media/img/header.gif diff --git a/common/urls.py b/common/urls.py index 932e172..ee2feaa 100644 --- a/common/urls.py +++ b/common/urls.py @@ -13,6 +13,7 @@ urlpatterns = [ url(r'^attribution/$', views.AttributionView.as_view(), name='attribution'), url(r'^stages/export/(?Pall)?/?$', views.stages_export, name='stages_export'), + url(r'^imputations/export/$', views.imputations_export, name='imputations_export'), url(r'^institutions/$', views.CorporationListView.as_view(), name='corporations'), url(r'^institutions/(?P\d+)/$', views.CorporationView.as_view(), name='corporation'), diff --git a/media/img/header.gif b/media/img/header.gif new file mode 100644 index 0000000000000000000000000000000000000000..a02c592c075ad9b2815758633b8dd23d296fd0f1 GIT binary patch literal 5430 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 F{{TLc`9=T$ literal 0 HcmV?d00001 diff --git a/stages/admin.py b/stages/admin.py index 16a8aa1..f02845b 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -210,13 +210,18 @@ class TrainingAdmin(admin.ModelAdmin): raw_id_fields = ('availability',) +class CourseAdmin(admin.ModelAdmin): + list_display = ('teacher', 'public', 'subject', 'period', 'imputation') + + + admin.site.register(Section) admin.site.register(Level) admin.site.register(Klass, KlassAdmin) admin.site.register(Student, StudentAdmin) admin.site.register(Referent, ReferentAdmin) admin.site.register(Teacher, TeacherAdmin) -admin.site.register(Course) +admin.site.register(Course, CourseAdmin) admin.site.register(Corporation, CorporationAdmin) admin.site.register(CorpContact, CorpContactAdmin) admin.site.register(Domain) diff --git a/stages/pdf.py b/stages/pdf.py index 5370f40..98df29f 100644 --- a/stages/pdf.py +++ b/stages/pdf.py @@ -81,3 +81,4 @@ class ChargeSheetPDF(SimpleDocTemplate): self.story.append(Paragraph('la direction', style_normal)) self.story.append(PageBreak()) self.build(self.story) + diff --git a/stages/views.py b/stages/views.py index d568b86..d39558d 100644 --- a/stages/views.py +++ b/stages/views.py @@ -356,25 +356,9 @@ class HPImportView(ImportViewBase): mapping = { 'NOMPERSO_ENS': 'teacher', 'LIBELLE_MAT': 'subject', - 'NOMPERSO_DIP': 'klass', + 'NOMPERSO_DIP': 'public', 'TOTAL': 'period', } - # Mapping between klass field and imputation - account_categories = { - 'ASAFE': 'ASA', - 'ASEFE': 'ASE', - 'ASSCFE': 'ASSC', - 'MP': 'LEP', - 'EDEpe': 'EDEpe', - 'EDEps': 'EDEps', - 'EDE': 'EDE', - 'EDS': 'EDS', - 'CAS-FPP': 'CAS-FPP', - 'Mandat_ASSC': 'ASSC', - 'Mandat_ASE': 'ASE', - 'Mandat_EDE': 'EDE', - 'Mandat_EDS': 'EDA', - } def import_data(self, up_file): obj_created = obj_modified = 0 @@ -398,15 +382,15 @@ class HPImportView(ImportViewBase): obj, created = Course.objects.get_or_create( teacher = defaults['teacher'], subject = defaults['subject'], - klass = defaults['klass']) + public = defaults['public']) period = int(float(line['TOTAL'])) if created: obj.period = period obj_created += 1 - for k, v in self.account_categories.items(): - if k in obj.klass: - obj.imputation = v + for k in ['ASAFE', 'ASEFE', 'ASSCFE', 'MP', 'EDEpe', 'EDEps', 'EDS', 'CAS-FPP']: + if k in obj.public: + obj.imputation = k break else: obj.period += period @@ -442,6 +426,13 @@ EXPORT_FIELDS = [ ('Courriel contact - copie', None), ] +IMPUTATIONS_EXPORT_FIELDS = [ + 'Nom', 'Prénom', 'Report passé', 'Ens', 'Discipline', \ + 'Accomp.', 'Discipline', 'Total payé', 'Indice', 'Taux', 'Report futur', \ + 'ASA', 'ASSC', 'ASE', 'MP', 'EDEpe', 'EDEps', 'EDS', 'CAS-FPP', 'Direction' +] + + NON_ATTR_EXPORT_FIELDS = [ ('Filière', 'period__section__name'), ('Nom du stage', 'period__title'), @@ -542,3 +533,50 @@ def stages_export(request, scope=None): response['Content-Disposition'] = 'attachment; filename=%s%s.xlsx' % ( 'stages_export_', date.strftime(date.today(), '%Y-%m-%d')) return response + + +def imputations_export(request): + from openpyxl import Workbook + from openpyxl.styles import Font, Style + from openpyxl.writer.excel import save_virtual_workbook + + wb = Workbook() + ws = wb.get_active_sheet() + ws.title = 'Stages' + bold = Style(font=Font(bold=True)) + for col_idx, header in enumerate(IMPUTATIONS_EXPORT_FIELDS, start=1): + cell = ws.cell(row=1, column=col_idx) + cell.value = header + cell.style = bold + + for row_idx, teacher in enumerate(Teacher.objects.all(), start=2): + activities, imputations = teacher.calc_imputations() + ws.cell(row=row_idx, column=1).value = teacher.last_name + ws.cell(row=row_idx, column=2).value = teacher.first_name + ws.cell(row=row_idx, column=3).value = teacher.previous_report + ws.cell(row=row_idx, column=4).value = activities['tot_ens'] + ws.cell(row=row_idx, column=5).value = 'Ens. prof.' + ws.cell(row=row_idx, column=6).value = activities['tot_mandats'] + activities['tot_formation'] + ws.cell(row=row_idx, column=7).value = 'Accompagnement' + ws.cell(row=row_idx, column=8).value = activities['tot_paye'] + ws.cell(row=row_idx, column=9).value = 'Charge globale' + ws.cell(row=row_idx, column=10).value = '{0:.2f}'.format(activities['tot_paye']/21.50) + ws.cell(row=row_idx, column=11).value = teacher.next_report + col_idx=12 + for k, v in imputations.items(): + ws.cell(row=row_idx, column=col_idx).value = v + col_idx+=1 + + response = HttpResponse( + save_virtual_workbook(wb), + content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ) + response['Content-Disposition'] = 'attachment; filename=%s%s.xlsx' % ( + 'Imputations_export', date.strftime(date.today(), '%Y-%m-%d')) + return response + + + + + + diff --git a/templates/admin/index.html b/templates/admin/index.html index 59570bc..3c5b69d 100644 --- a/templates/admin/index.html +++ b/templates/admin/index.html @@ -77,6 +77,7 @@
  • Importer le fichier HP
  • Exporter les données de stages (récentes)
  • Exporter les données de stages (toutes)
  • +
  • Exporter les données comptables