1838: Le modèle de template, confirmation de postulation - Modèle par défaut (tjs...
[auf_rh_dae.git] / project / recrutement / views.py
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 recrutement.workflow import grp_evaluateurs_recrutement
15
16 def index(request):
17 return render_to_response('recrutement/index.html', {},
18 RequestContext(request))
19
20 def selectionner_template(request):
21 candidat_ids = request.GET.get('ids')
22 if request.method == "POST":
23 form = CandidatCourrielTemplateForm(request.POST)
24 if form.is_valid():
25 form.save()
26 courriel_template_id = form.get_template()
27
28 return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+
29 "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id))
30 else:
31 form = CandidatCourrielTemplateForm()
32
33 c = {'form' : form}
34 return render_to_response("recrutement/selectionner_template.html",
35 Context(c), context_instance = RequestContext(request))
36
37 def envoyer_courriel_candidats(request):
38 candidat_ids = request.GET.get('ids_cand').split(',')
39 candidats = Candidat.objects.filter(id__in=candidat_ids)
40 template_id = request.GET.get('id_temp')
41 template = CourrielTemplate.objects.get(id=template_id)
42
43 if request.method == "POST":
44 form = CandidatCourrielForm(request.POST, instance=template,
45 candidats=candidats, template=template)
46
47 if form.is_valid():
48 form.save()
49 courriel_template = CourrielTemplate()
50 courriel_template.nom_modele = template.nom_modele
51 courriel_template.sujet = form.data['sujet']
52 courriel_template.plain_text = form.data['plain_text']
53 courriel_template.html = form.data['html']
54 for cand in candidats:
55 send_templated_email(cand, courriel_template)
56 messages.add_message(request, messages.SUCCESS,
57 "Le email a été envoyé aux candidats.")
58 return redirect("admin:recrutement_candidat_changelist")
59 else:
60 form = CandidatCourrielForm(candidats=candidats, template=template,
61 initial={'sujet': template.sujet,
62 'plain_text': template.plain_text,
63 'html': template.html})
64
65 c = {'form' : form}
66 return render_to_response("recrutement/envoyer_courriel_candidats.html",
67 Context(c), context_instance = RequestContext(request))
68
69 """def postuler_appel_offre(request):
70 vars = dict()
71 offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
72 candidat = Candidat()
73 candidat.offre_emploi = offre_emploi
74
75 if request.method == "POST":
76 form = PostulerOffreEmploiForm(request.POST,
77 instance=candidat, offre_emploi=offre_emploi)
78 piecesForm = CandidatPieceForm(request.POST, request.FILES,
79 instance=candidat)
80 if form.is_valid() and piecesForm.is_valid():
81 offre = form.save()
82 piecesForm.instance = offre
83 piecesForm.save()
84
85 courriel_template = CourrielTemplate.objects.get(id=1)
86 send_templated_email(candidat, courriel_template)
87
88 messages.add_message(request, messages.SUCCESS,
89 "Votre application à l'appel d'offre d'emploi a \
90 été effectuée.")
91 return redirect("admin:recrutement_offreemploi_changelist")
92 else:
93 messages.add_message(request, messages.ERROR,
94 'Il y a des erreurs dans le formulaire.')
95 else:
96 form = PostulerOffreEmploiForm(instance=candidat,
97 offre_emploi=offre_emploi)
98 piecesForm = CandidatPieceForm(instance=candidat)
99
100 vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, ))
101
102 return render_to_response('recrutement/postuler_appel_offre.html', vars,
103 RequestContext(request))
104 """
105
106 def affecter_evaluateurs_offre_emploi(request):
107 offre_emploi_ids = request.GET.get('ids').split(',')
108 offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids)
109 if request.method == "POST":
110 form = EvaluateurForm(request.POST, offres_emploi=offres_emploi)
111 if form.is_valid():
112 form.save()
113 messages.add_message(request, messages.SUCCESS,
114 "Les évaluateurs ont été affectés aux offres d'emploi.")
115 return redirect("admin:recrutement_offreemploi_changelist")
116 else:
117 form = EvaluateurForm(offres_emploi=offres_emploi)
118
119 c = {'form' : form}
120 return render_to_response("recrutement/affecter_evaluateurs.html",
121 Context(c), context_instance = RequestContext(request))
122
123 def send_templated_email(candidat, template):
124 # Sujet
125 sujet_template = Template(template.sujet)
126 dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,}
127 sujet = Context(dict_sujet)
128 # Plain text
129 texte_template = Template(template.plain_text)
130 dict_texte = {"nom_candidat": candidat.nom,
131 "prenom_candidat": candidat.prenom,
132 "offre_emploi": candidat.offre_emploi.nom,
133 "genre_candidat": "Monsieur" if candidat.genre == "M" \
134 else "Madame",
135 }
136 texte = Context(dict_texte)
137 # HTML text
138 html_template = Template(template.html)
139 texte_html = Context(dict_texte)
140 msg = EmailMultiAlternatives(sujet_template.render(sujet),
141 texte_template.render(texte),
142 'recrutement@auf.org',
143 [candidat.email])
144 msg.attach_alternative(texte_template.render(texte_html), "text/html")
145 msg.send()