epcstages/candidats/views.py

95 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django import forms
from django.conf import settings
from django.contrib import messages
from django.core.mail import EmailMessage
from django.template import loader
from django.urls import reverse_lazy
from django.utils import timezone
from django.views.generic import FormView
from candidats.models import Candidate
class ConvocationForm(forms.Form):
id_candidate = forms.CharField(widget=forms.HiddenInput())
sender = forms.CharField(widget=forms.HiddenInput())
to = forms.CharField(widget=forms.TextInput(attrs={'size': '60'}))
cci = forms.CharField(widget=forms.TextInput(attrs={'size': '60'}))
subject = forms.CharField(widget=forms.TextInput(attrs={'size': '60'}))
message = forms.CharField(widget=forms.Textarea(attrs={'rows': 25, 'cols': 120}))
class SendConvocationView(FormView):
template_name = 'candidats/convocation.html'
form_class = ConvocationForm
success_url = reverse_lazy('admin:candidats_candidate_changelist')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
candidate = Candidate.objects.get(pk=self.kwargs['pk'])
# Define required documents depending on candidate diploma
common_docs = [
'registration_form', 'certificate_of_payement', 'police_record', 'cv', 'reflexive_text',
'has_photo', 'marks_certificate',
]
dipl_docs = {
0: [],
1: ['work_certificate'], # CFC ASE
2: ['certif_of_800_childhood', 'work_certificate'],
3: ['certif_of_800_general', 'certif_of_800_childhood', 'work_certificate'],
4: ['certif_of_800_general', 'certif_of_800_childhood', 'work_certificate'],
}[candidate.diploma]
docs_required = dipl_docs + common_docs
missing_documents = {'documents': ', '.join([
Candidate._meta.get_field(doc).verbose_name for doc in docs_required
if not getattr(candidate, doc)
])}
msg_context = {
'candidate_name': " ".join([candidate.civility, candidate.first_name, candidate.last_name]),
'candidate_civility': candidate.civility,
'option': candidate.get_option_display(),
'date_lieu_examen': settings.DATE_LIEU_EXAMEN_EDE,
'date_entretien': candidate.interview.date_formatted,
'salle_entretien': candidate.interview.room,
'rappel': loader.render_to_string('email/rappel_document_EDE.txt', missing_documents),
'sender_name': " ".join([self.request.user.first_name, self.request.user.last_name]),
'sender_email': self.request.user.email,
}
form = ConvocationForm(initial={
'id_candidate': candidate.pk,
'cci': self.request.user.email,
'to': candidate.email,
'subject': "Procédure de qualification",
'message': loader.render_to_string('email/candidate_convocation_EDE.txt', msg_context),
'sender': self.request.user.email,
})
context.update({
'candidat': candidate,
'form': form,
})
return context
def form_valid(self, form):
email = EmailMessage(
subject=form.cleaned_data['subject'],
body=form.cleaned_data['message'],
from_email=form.cleaned_data['sender'],
to=form.cleaned_data['to'].split(';'),
bcc=form.cleaned_data['cci'].split(';'),
)
candidate = Candidate.objects.get(pk=self.kwargs['pk'])
try:
email.send()
except Exception as err:
messages.error(self.request, "Échec denvoi pour le candidat {0} ({1})".format(candidate, err))
else:
candidate.convocation_date = timezone.now()
candidate.save()
messages.success(self.request,
"Le message de convocation a été envoyé pour le candidat {0}".format(candidate)
)
return super().form_valid(form)