epcstages/candidats/admin.py

119 lines
4.6 KiB
Python
Raw Normal View History

2017-10-19 09:29:08 +02:00
from collections import OrderedDict
2017-10-18 18:52:59 +02:00
from django.contrib import admin
2017-10-19 09:29:08 +02:00
from django.db.models import BooleanField
2018-01-26 18:19:16 +01:00
from django.urls import reverse
from django.utils.html import format_html
2017-10-19 09:29:08 +02:00
from stages.exports import OpenXMLExport
2018-02-01 14:55:03 +01:00
from .forms import CandidateForm
2018-01-25 15:51:51 +01:00
from .models import Candidate, Interview, GENDER_CHOICES
2017-10-19 09:29:08 +02:00
def export_candidates(modeladmin, request, queryset):
"""
Export all candidates fields.
"""
2018-02-02 10:07:24 +01:00
export_fields = OrderedDict([
(getattr(f, 'verbose_name', f.name), f.name)
for f in Candidate._meta.get_fields() if f.name != 'ID'
])
2017-10-19 09:29:08 +02:00
boolean_fields = [f.name for f in Candidate._meta.get_fields() if isinstance(f, BooleanField)]
export_fields['Employeur'] = 'corporation__name'
export_fields['Employeur_localite'] = 'corporation__city'
export_fields['FEE/FPP'] = 'instructor__last_name'
export = OpenXMLExport('Exportation')
export.write_line(export_fields.keys(), bold=True)
for cand in queryset.values_list(*export_fields.values()):
values = []
for value, field_name in zip(cand, export_fields.values()):
if field_name == 'gender':
value = dict(GENDER_CHOICES)[value]
if field_name in boolean_fields:
value = 'Oui' if value else ''
values.append(value)
export.write_line(values)
return export.get_http_response('candidats_export')
2017-10-18 18:52:59 +02:00
2017-10-19 09:29:08 +02:00
export_candidates.short_description = "Exporter les candidats sélectionnés"
2017-10-18 18:52:59 +02:00
class CandidateAdmin(admin.ModelAdmin):
2018-02-01 14:55:03 +01:00
form = CandidateForm
list_display = ('last_name', 'first_name', 'section', 'confirm_mail', 'validation_mail', 'convocation_mail')
2017-10-18 18:52:59 +02:00
list_filter = ('section', 'option')
search_fields = ('last_name', 'city')
readonly_fields = (
'total_result_points', 'total_result_mark', 'confirmation_date',
'convocation_date', 'candidate_actions',
)
actions = [export_candidates]
2017-10-18 18:52:59 +02:00
fieldsets = (
(None, {
'fields': (('first_name', 'last_name', 'gender'),
('street', 'pcode', 'city', 'district'),
('mobile', 'email'),
('birth_date', 'avs', 'handicap'),
2017-10-18 18:52:59 +02:00
('section', 'option'),
('corporation', 'instructor'),
('deposite_date', 'confirmation_date', 'canceled_file'),
2017-10-18 18:52:59 +02:00
'comment',
),
}),
("FE", {
'classes': ('collapse',),
'fields': (('exemption_ecg', 'integration_second_year', 'validation_sfpo'),),
}),
("EDE/EDS", {
'classes': ('collapse',),
2018-01-26 16:14:00 +01:00
'fields': (('diploma', 'diploma_detail', 'diploma_status'),
('registration_form', 'has_photo', 'certificate_of_payement', 'cv', 'police_record', 'reflexive_text',
2018-01-26 16:14:00 +01:00
'marks_certificate', 'residence_permits', 'aes_accords'),
2018-02-01 10:09:18 +01:00
('certif_of_800_childhood', 'certif_of_800_general', 'work_certificate'),
2018-01-26 16:14:00 +01:00
('promise', 'contract', 'activity_rate'),
('interview',),
('examination_result', 'interview_result', 'file_result', 'total_result_points',
'total_result_mark'),
('confirmation_date', 'validation_date', 'convocation_date'),
2018-01-26 16:14:00 +01:00
),
2017-10-18 18:52:59 +02:00
}),
(None, {
'fields': (('candidate_actions',)),
}),
2017-10-18 18:52:59 +02:00
)
2017-11-23 18:09:59 +01:00
def confirm_mail(self, obj):
return obj.confirmation_date is not None
2017-11-23 18:09:59 +01:00
confirm_mail.boolean = True
2017-10-18 18:52:59 +02:00
def validation_mail(self, obj):
return obj.validation_date is not None
validation_mail.boolean = True
def convocation_mail(self, obj):
return obj.convocation_date is not None
convocation_mail.boolean = True
2018-01-26 18:19:16 +01:00
def candidate_actions(self, obj):
return format_html(
'<a class="button" href="{}">Confirmation de réception</a>&nbsp;'
'<a class="button" href="{}">Validation enseignants EDE</a>&nbsp;'
'<a class="button" href="{}">Convocation aux examens EDE</a>&nbsp;'
'<a class="button" href="{}">Impression du résumé du dossier EDE</a>',
reverse('candidate-confirmation', args=[obj.pk]),
reverse('candidate-validation', args=[obj.pk]),
reverse('candidate-convocation', args=[obj.pk]),
reverse('candidate-summary', args=[obj.pk]),
)
candidate_actions.short_description = 'Actions pour candidats'
candidate_actions.allow_tags = True
2018-01-25 15:51:51 +01:00
class InterviewAdmin(admin.ModelAdmin):
pass
2017-10-18 18:52:59 +02:00
admin.site.register(Candidate, CandidateAdmin)
2018-01-25 15:51:51 +01:00
admin.site.register(Interview, InterviewAdmin)