| 1 | # -*- encoding: utf-8 -*- |
| 2 | |
| 3 | from django.contrib import messages |
| 4 | from django.contrib.auth.models import User |
| 5 | from django.core.mail import send_mail |
| 6 | from django.core.urlresolvers import reverse |
| 7 | from django.http import HttpResponse, HttpResponseRedirect |
| 8 | from django.shortcuts import render_to_response, redirect, get_object_or_404 |
| 9 | from django.template import Context, RequestContext, Template |
| 10 | from django.core.mail import EmailMultiAlternatives |
| 11 | |
| 12 | from forms import * |
| 13 | from models import * |
| 14 | from project.recrutement import models as recr |
| 15 | from recrutement.workflow import grp_evaluateurs_recrutement |
| 16 | |
| 17 | def index(request): |
| 18 | return render_to_response('recrutement/index.html', {}, |
| 19 | RequestContext(request)) |
| 20 | |
| 21 | def affecter_evaluateurs_candidats(request): |
| 22 | candidat_ids = request.GET.get('ids').split(',') |
| 23 | candidats = Candidat.objects.filter(id__in=candidat_ids) |
| 24 | if request.method == "POST": |
| 25 | form = EvaluateurForm(request.POST, candidats=candidats) |
| 26 | if form.is_valid(): |
| 27 | form.save() |
| 28 | messages.add_message(request, messages.SUCCESS, |
| 29 | "Les évaluateurs ont été affectés aux candidats.") |
| 30 | return redirect("admin:recrutement_candidat_changelist") |
| 31 | else: |
| 32 | form = EvaluateurForm(candidats=candidats) |
| 33 | |
| 34 | c = {'form' : form} |
| 35 | return render_to_response("recrutement/affecter_evaluateurs.html", |
| 36 | Context(c), context_instance = RequestContext(request)) |
| 37 | |
| 38 | def selectionner_template(request): |
| 39 | candidat_ids = request.GET.get('ids') |
| 40 | if request.method == "POST": |
| 41 | form = CandidatCourrielTemplateForm(request.POST) |
| 42 | if form.is_valid(): |
| 43 | form.save() |
| 44 | courriel_template_id = form.get_template() |
| 45 | |
| 46 | return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+ |
| 47 | "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id)) |
| 48 | else: |
| 49 | form = CandidatCourrielTemplateForm() |
| 50 | |
| 51 | c = {'form' : form} |
| 52 | return render_to_response("recrutement/selectionner_template.html", |
| 53 | Context(c), context_instance = RequestContext(request)) |
| 54 | |
| 55 | def envoyer_courriel_candidats(request): |
| 56 | candidat_ids = request.GET.get('ids_cand').split(',') |
| 57 | candidats = Candidat.objects.filter(id__in=candidat_ids) |
| 58 | template_id = request.GET.get('id_temp') |
| 59 | template = CourrielTemplate.objects.get(id=template_id) |
| 60 | |
| 61 | if request.method == "POST": |
| 62 | form = CandidatCourrielForm(request.POST, instance=template, |
| 63 | candidats=candidats, template=template) |
| 64 | |
| 65 | if form.is_valid(): |
| 66 | form.save() |
| 67 | courriel_template = CourrielTemplate() |
| 68 | courriel_template.nom_modele = template.nom_modele |
| 69 | courriel_template.sujet = form.data['sujet'] |
| 70 | courriel_template.plain_text = form.data['plain_text'] |
| 71 | courriel_template.html = form.data['html'] |
| 72 | for cand in candidats: |
| 73 | send_templated_email(cand, courriel_template) |
| 74 | messages.add_message(request, messages.SUCCESS, |
| 75 | "Le email a été envoyé aux candidats.") |
| 76 | return redirect("admin:recrutement_candidat_changelist") |
| 77 | else: |
| 78 | form = CandidatCourrielForm(candidats=candidats, template=template, |
| 79 | initial={'sujet': template.sujet, |
| 80 | 'plain_text': template.plain_text, |
| 81 | 'html': template.html}) |
| 82 | |
| 83 | c = {'form' : form} |
| 84 | return render_to_response("recrutement/envoyer_courriel_candidats.html", |
| 85 | Context(c), context_instance = RequestContext(request)) |
| 86 | |
| 87 | def postuler_appel_offre(request): |
| 88 | vars = dict() |
| 89 | offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id')) |
| 90 | candidat = Candidat() |
| 91 | candidat.offre_emploi = offre_emploi |
| 92 | |
| 93 | if request.method == "POST": |
| 94 | form = PostulerOffreEmploiForm(request.POST, |
| 95 | instance=candidat, offre_emploi=offre_emploi) |
| 96 | piecesForm = CandidatPieceForm(request.POST, request.FILES, |
| 97 | instance=candidat) |
| 98 | if form.is_valid() and piecesForm.is_valid(): |
| 99 | offre = form.save() |
| 100 | piecesForm.instance = offre |
| 101 | piecesForm.save() |
| 102 | |
| 103 | courriel_template = CourrielTemplate.objects.\ |
| 104 | get(nom_modele='Confirmation postulation (automatique)') |
| 105 | send_templated_email(candidat, courriel_template) |
| 106 | |
| 107 | messages.add_message(request, messages.SUCCESS, |
| 108 | "Votre application à l'appel d'offre d'emploi a \ |
| 109 | été effectuée.") |
| 110 | return redirect("admin:recrutement_offreemploi_changelist") |
| 111 | else: |
| 112 | messages.add_message(request, messages.ERROR, |
| 113 | 'Il y a des erreurs dans le formulaire.') |
| 114 | else: |
| 115 | form = PostulerOffreEmploiForm(instance=candidat, |
| 116 | offre_emploi=offre_emploi) |
| 117 | piecesForm = CandidatPieceForm(instance=candidat) |
| 118 | |
| 119 | vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, )) |
| 120 | |
| 121 | return render_to_response('recrutement/postuler_appel_offre.html', vars, |
| 122 | RequestContext(request)) |
| 123 | |
| 124 | def affecter_evaluateurs_offre_emploi(request): |
| 125 | offre_emploi_ids = request.GET.get('ids').split(',') |
| 126 | offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids) |
| 127 | candidats = Candidat.objects.filter(offre_emploi__in=offres_emploi) |
| 128 | if request.method == "POST": |
| 129 | form = EvaluateurForm(request.POST, candidats=candidats) |
| 130 | if form.is_valid(): |
| 131 | form.save() |
| 132 | messages.add_message(request, messages.SUCCESS, |
| 133 | "Les évaluateurs ont été affectés aux candidats.") |
| 134 | return redirect("admin:recrutement_offreemploi_changelist") |
| 135 | else: |
| 136 | form = EvaluateurForm(candidats=candidats) |
| 137 | |
| 138 | c = {'form' : form} |
| 139 | return render_to_response("recrutement/affecter_evaluateurs.html", |
| 140 | Context(c), context_instance = RequestContext(request)) |
| 141 | |
| 142 | def send_templated_email(candidat, template): |
| 143 | # Sujet |
| 144 | sujet_template = Template(template.sujet) |
| 145 | dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,} |
| 146 | sujet = Context(dict_sujet) |
| 147 | # Plain text |
| 148 | texte_template = Template(template.plain_text) |
| 149 | dict_texte = {"nom_candidat": candidat.nom, |
| 150 | "prenom_candidat": candidat.prenom, |
| 151 | "offre_emploi": candidat.offre_emploi.nom,} |
| 152 | texte = Context(dict_texte) |
| 153 | # HTML text |
| 154 | html_template = Template(template.html) |
| 155 | texte_html = Context(dict_texte) |
| 156 | msg = EmailMultiAlternatives(sujet_template.render(sujet), |
| 157 | texte_template.render(texte), |
| 158 | 'recrutement@auf.org', |
| 159 | [candidat.email]) |
| 160 | msg.attach_alternative(texte_template.render(texte_html), "text/html") |
| 161 | msg.send() |