Commit | Line | Data |
---|---|---|
6f2d5d58 | 1 | # -*- encoding: utf-8 -*- |
89e948de | 2 | |
362a3534 | 3 | from django.contrib import messages |
f083eee0 | 4 | from django.contrib.auth.models import User |
89e948de | 5 | from django.core.mail import send_mail |
32834000 NBV |
6 | from django.core.urlresolvers import reverse |
7 | from django.http import HttpResponse, HttpResponseRedirect | |
89e948de | 8 | from django.shortcuts import render_to_response, redirect, get_object_or_404 |
32834000 NBV |
9 | from django.template import Context, RequestContext, Template |
10 | from django.core.mail import EmailMultiAlternatives | |
6f2d5d58 | 11 | |
362a3534 | 12 | from forms import * |
13 | from models import * | |
6f2d5d58 | 14 | from project.recrutement import models as recr |
f6724c20 | 15 | from recrutement.workflow import grp_evaluateurs_recrutement |
6f2d5d58 | 16 | |
17 | def index(request): | |
362a3534 | 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(',') | |
2adf9e0c | 23 | candidats = Candidat.objects.filter(id__in=candidat_ids) |
362a3534 | 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} | |
8ea41642 | 35 | return render_to_response("recrutement/affecter_evaluateurs.html", |
36 | Context(c), context_instance = RequestContext(request)) | |
37 | ||
32834000 NBV |
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')+ | |
dc7faf2b | 47 | "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id)) |
32834000 NBV |
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 | ||
d84c3a68 | 55 | def envoyer_courriel_candidats(request): |
32834000 | 56 | candidat_ids = request.GET.get('ids_cand').split(',') |
d84c3a68 | 57 | candidats = Candidat.objects.filter(id__in=candidat_ids) |
32834000 NBV |
58 | template_id = request.GET.get('id_temp') |
59 | template = CourrielTemplate.objects.get(id=template_id) | |
4e8340cf | 60 | |
d84c3a68 | 61 | if request.method == "POST": |
32834000 NBV |
62 | form = CandidatCourrielForm(request.POST, instance=template, |
63 | candidats=candidats, template=template) | |
64 | ||
d84c3a68 | 65 | if form.is_valid(): |
66 | form.save() | |
32834000 NBV |
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: | |
32834000 | 73 | send_templated_email(cand, courriel_template) |
d84c3a68 | 74 | messages.add_message(request, messages.SUCCESS, |
32834000 | 75 | "Le email a été envoyé aux candidats.") |
d84c3a68 | 76 | return redirect("admin:recrutement_candidat_changelist") |
77 | else: | |
32834000 NBV |
78 | form = CandidatCourrielForm(candidats=candidats, template=template, |
79 | initial={'sujet': template.sujet, | |
80 | 'plain_text': template.plain_text, | |
81 | 'html': template.html}) | |
d84c3a68 | 82 | |
83 | c = {'form' : form} | |
84 | return render_to_response("recrutement/envoyer_courriel_candidats.html", | |
85 | Context(c), context_instance = RequestContext(request)) | |
86 | ||
8ea41642 | 87 | def postuler_appel_offre(request): |
2b3edf33 | 88 | vars = dict() |
8ea41642 | 89 | offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id')) |
90 | candidat = Candidat() | |
91 | candidat.offre_emploi = offre_emploi | |
2b3edf33 | 92 | |
8ea41642 | 93 | if request.method == "POST": |
f6749f29 | 94 | form = PostulerOffreEmploiForm(request.POST, |
2adf9e0c | 95 | instance=candidat, offre_emploi=offre_emploi) |
96 | piecesForm = CandidatPieceForm(request.POST, request.FILES, | |
97 | instance=candidat) | |
2b3edf33 | 98 | if form.is_valid() and piecesForm.is_valid(): |
f6749f29 | 99 | offre = form.save() |
100 | piecesForm.instance = offre | |
89e948de | 101 | piecesForm.save() |
32834000 NBV |
102 | |
103 | courriel_template = CourrielTemplate.objects.\ | |
104 | get(nom_modele='Confirmation postulation (automatique)') | |
105 | send_templated_email(candidat, courriel_template) | |
106 | ||
8ea41642 | 107 | messages.add_message(request, messages.SUCCESS, |
108 | "Votre application à l'appel d'offre d'emploi a \ | |
32834000 | 109 | été effectuée.") |
8ea41642 | 110 | return redirect("admin:recrutement_offreemploi_changelist") |
f6749f29 | 111 | else: |
112 | messages.add_message(request, messages.ERROR, | |
113 | 'Il y a des erreurs dans le formulaire.') | |
8ea41642 | 114 | else: |
2adf9e0c | 115 | form = PostulerOffreEmploiForm(instance=candidat, |
116 | offre_emploi=offre_emploi) | |
2b3edf33 | 117 | piecesForm = CandidatPieceForm(instance=candidat) |
8ea41642 | 118 | |
2b3edf33 | 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)) | |
b903198b | 123 | |
514db699 NBV |
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) | |
514db699 NBV |
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)) | |
32834000 NBV |
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, | |
ec02ae0f NBV |
151 | "offre_emploi": candidat.offre_emploi.nom, |
152 | "genre_candidat": "Monsieur" if candidat.genre == "M" \ | |
153 | else "Madame", | |
154 | } | |
32834000 NBV |
155 | texte = Context(dict_texte) |
156 | # HTML text | |
157 | html_template = Template(template.html) | |
158 | texte_html = Context(dict_texte) | |
159 | msg = EmailMultiAlternatives(sujet_template.render(sujet), | |
160 | texte_template.render(texte), | |
161 | 'recrutement@auf.org', | |
162 | [candidat.email]) | |
163 | msg.attach_alternative(texte_template.render(texte_html), "text/html") | |
164 | msg.send() |