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.forms import EmailBaseForm from candidats.models import Candidate class SendConvocationView(FormView): template_name = 'email_base.html' form_class = EmailBaseForm success_url = reverse_lazy('admin:candidats_candidate_changelist') def get_initial(self): initial = super().get_initial() 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, } initial.update({ '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, }) return initial def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'candidat': Candidate.objects.get(pk=self.kwargs['pk']), 'title': "Convocation aux examens d'admission EDE", }) 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 d’envoi 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)