diff --git a/common/urls.py b/common/urls.py index 2119e83..5598c31 100644 --- a/common/urls.py +++ b/common/urls.py @@ -44,6 +44,8 @@ urlpatterns = [ path('student//examination/mentor/', views.PrintCompensationForm.as_view(), {'typ': 'mentor'}, name='print-mentor-compens-form'), + path('student//examination/supervisor/', views.PrintCompensationForm.as_view(), {'typ': 'supervisor'}, + name='print-supervisor-compens-form'), path('exam//indemn//', views.PrintCompensationForm.as_view(), name='print-compens-form'), diff --git a/stages/admin.py b/stages/admin.py index f5e0722..483356b 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -163,7 +163,7 @@ class StudentAdmin(admin.ModelAdmin): list_filter = (('archived', ArchivedListFilter), ('klass', KlassRelatedListFilter)) search_fields = ('last_name', 'first_name', 'pcode', 'city', 'klass__name') autocomplete_fields = ('corporation', 'instructor', 'instructor2', 'supervisor', 'mentor') - readonly_fields = ('report_sem1_sent', 'report_sem2_sent', 'mentor_indemn') + readonly_fields = ('report_sem1_sent', 'report_sem2_sent', 'mentor_indemn', 'superv_indemn') fieldsets = [ (None, { 'fields': ( @@ -179,7 +179,7 @@ class StudentAdmin(admin.ModelAdmin): ("Procédure de qualification", { 'classes': ['collapse'], 'fields': ( - ('supervisor', 'supervision_attest_received'), + ('supervisor', 'supervision_attest_received', 'superv_indemn'), ('subject', 'title'), ('training_referent', 'referent'), ('mentor', 'mentor_indemn'), @@ -198,6 +198,15 @@ class StudentAdmin(admin.ModelAdmin): ) mentor_indemn.short_description = 'Indemnité' + def superv_indemn(self, obj): + if obj is None or not obj.supervisor: + return '-' + return format_html( + 'Indemnité au superviseur', + reverse('print-supervisor-compens-form', args=[obj.pk]), + ) + superv_indemn.short_description = 'Indemnité' + def get_inlines(self, request, obj=None): if obj is None: return [] diff --git a/stages/pdf.py b/stages/pdf.py index bc6c7f7..09a6ea9 100644 --- a/stages/pdf.py +++ b/stages/pdf.py @@ -570,6 +570,14 @@ class MentorCompensationPdfForm(CompensationPDFForm): super().__init__(out) +class SupervisorCompensationPdfForm(MentorCompensationPdfForm): + mandat_template = "Supevision de {student_civility} {student_fullname}, classe {klass}" + + def __init__(self, out, student): + super().__init__(out, student) + self.expert = student.supervisor + + class EntretienProfCompensationPdfForm(CompensationPDFForm): mandat_type = CompensationPDFForm.EXPERT_MANDAT mandat_template = "Expert·e aux examens finaux" diff --git a/stages/views/__init__.py b/stages/views/__init__.py index aaf3da0..ee96f57 100644 --- a/stages/views/__init__.py +++ b/stages/views/__init__.py @@ -541,26 +541,27 @@ class PrintCompensationForm(PDFBaseView): def pdf_class(self): return { 'mentor': pdf.MentorCompensationPdfForm, + 'supervisor': pdf.SupervisorCompensationPdfForm, 'ep': pdf.EntretienProfCompensationPdfForm, 'sout': pdf.SoutenanceCompensationPdfForm, }.get(self.typ) def filename(self, obj): - student = obj if self.typ == 'mentor' else obj.student + student = obj if self.typ in ('mentor', 'supervisor') else obj.student return slugify( '{0}_{1}'.format(student.last_name, student.first_name) ) + f'_Indemn_{self.typ}.pdf' def get_object(self): - model = Student if self.typ == 'mentor' else Examination + model = Student if self.typ in ('mentor', 'supervisor') else Examination return model.objects.get(pk=self.kwargs['pk']) def get(self, request, *args, **kwargs): self.typ = self.kwargs['typ'] - if self.typ == 'mentor': + if self.typ in ('mentor', 'supervisor'): student = self.get_object() if not student.mentor: - messages.error(request, "Aucun mentor n’est attribué à cet étudiant") + messages.error(request, "Aucun mentor/superviseur n’est attribué à cet étudiant") return redirect(reverse("admin:stages_student_change", args=(student.pk,))) else: exam = self.get_object()