refact ergo + page perso (vide)
[auf_rh_dae.git] / project / recrutement / views.py
index 8d3d951..65753e5 100755 (executable)
@@ -3,93 +3,71 @@
 from django.contrib import messages
 from django.contrib.auth.models import User
 from django.core.mail import send_mail
-from django.http import HttpResponse
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render_to_response, redirect, get_object_or_404
-from django.template import Context, RequestContext
+from django.template import Context, RequestContext, Template
+from django.core.mail import EmailMultiAlternatives
 
 from forms import *
 from models import *
-from project.recrutement import models as recr
 from recrutement.workflow import grp_evaluateurs_recrutement
+from views import *
 
 def index(request):
     return render_to_response('recrutement/index.html', {}, 
                                 RequestContext(request))
 
-def afficher_candidat(request):
-    candidat = get_object_or_404(Candidat, id=request.GET.get('id'))
-    var = {'candidat': candidat,}
-    return render_to_response("recrutement/afficher_candidat.html", var,
-                                RequestContext(request))
-
-def evaluer_candidat(request):
-    candidat = get_object_or_404(Candidat, id=request.GET.get('id'))
-
-    try:
-        evaluateur = Evaluateur.objects.get(user=request.user)
-    except Evaluateur.DoesNotExist:
-        messages.add_message(request, messages.ERROR, 
-                        "Vous ne pouvez pas évaluer ce candidat.")
-        return redirect("admin:recrutement_candidat_changelist")
-
-    if request.method == "POST":
-        candidat_evaluation = CandidatEvaluation()
-        candidat_evaluation.candidat = candidat
-        candidat_evaluation.evaluateur = evaluateur
-        form = CandidatEvaluationForm(request.POST, 
-                instance=candidat_evaluation, candidat=candidat,
-                         evaluateur=evaluateur) 
-        if form.is_valid():             
-            form.save()                
-            messages.add_message(request, messages.SUCCESS, 
-                            "Le commentaire et la note ont été affectés \
-                                au candidat.")
-
-            return redirect("admin:recrutement_candidat_changelist")
-    else:      
-        form = CandidatEvaluationForm(candidat=candidat, evaluateur=evaluateur)
-
-    c = {'form' : form}   
-    return render_to_response("recrutement/evaluer_candidat.html", Context(c),
-                context_instance = RequestContext(request))
-
-def affecter_evaluateurs_candidats(request):
-    candidat_ids = request.GET.get('ids').split(',')
-    candidats = Candidat.objects.filter(id__in=candidat_ids)
+def selectionner_template(request):
+    candidat_ids = request.GET.get('ids')
     if request.method == "POST":
-        form = EvaluateurForm(request.POST, candidats=candidats)
+        form = CandidatCourrielTemplateForm(request.POST)
         if form.is_valid():
             form.save()
-            messages.add_message(request, messages.SUCCESS, 
-                            "Les évaluateurs ont été affectés aux candidats.")
-            return redirect("admin:recrutement_candidat_changelist")
+            courriel_template_id = form.get_template()
+            
+            return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+
+            "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id))
     else:
-        form = EvaluateurForm(candidats=candidats)
+        form = CandidatCourrielTemplateForm()
 
     c = {'form' : form}   
-    return render_to_response("recrutement/affecter_evaluateurs.html", 
+    return render_to_response("recrutement/selectionner_template.html", 
             Context(c), context_instance = RequestContext(request))
 
 def envoyer_courriel_candidats(request):
-    candidat_ids = request.GET.get('ids').split(',')
+    candidat_ids = request.GET.get('ids_cand').split(',')
     candidats = Candidat.objects.filter(id__in=candidat_ids)
+    template_id = request.GET.get('id_temp')
+    template = CourrielTemplate.objects.get(id=template_id) 
 
     if request.method == "POST":
-        form = CandidatCourrielForm(request.POST, candidats=candidats)
+        form = CandidatCourrielForm(request.POST, instance=template,
+                                    candidats=candidats, template=template)
+
         if form.is_valid():
             form.save()
+            courriel_template = CourrielTemplate()
+            courriel_template.nom_modele = template.nom_modele
+            courriel_template.sujet = form.data['sujet']
+            courriel_template.plain_text = form.data['plain_text']
+            courriel_template.html = form.data['html']
+            for cand in candidats:     
+                send_templated_email(cand, courriel_template)
             messages.add_message(request, messages.SUCCESS, 
-                            "Les évaluateurs ont été affectés aux candidats.")
+                            "Le email a été envoyé aux candidats.")
             return redirect("admin:recrutement_candidat_changelist")
     else:
-        form = CandidatCourrielForm(candidats=candidats)
+        form = CandidatCourrielForm(candidats=candidats, template=template,
+                                    initial={'sujet': template.sujet,
+                                    'plain_text': template.plain_text,
+                                    'html': template.html})
 
     c = {'form' : form}   
     return render_to_response("recrutement/envoyer_courriel_candidats.html", 
             Context(c), context_instance = RequestContext(request))
 
 def postuler_appel_offre(request):
-
     vars = dict()
     offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
     candidat = Candidat()
@@ -100,27 +78,18 @@ def postuler_appel_offre(request):
                  instance=candidat, offre_emploi=offre_emploi)
         piecesForm = CandidatPieceForm(request.POST, request.FILES,
                     instance=candidat)
-        print form.errors
         if form.is_valid() and piecesForm.is_valid():
             offre = form.save()
             piecesForm.instance = offre
             piecesForm.save() 
+     
+            courriel_template = CourrielTemplate.objects.\
+                        get(nom_modele='Confirmation postulation (automatique)')
+            emp.send_templated_email(candidat, courriel_template)
+     
             messages.add_message(request, messages.SUCCESS, 
                             "Votre application à l'appel d'offre d'emploi a \
-                            été effectuée.")
-            
-            # Envoi d'un email de confirmation
-            send_mail(u"Confirmation de postulation pour le poste \
-                        de " + offre_emploi.nom, 
-                        u"Bonjour " + candidat.prenom + " " + candidat.nom +
-                        u", \nceci est un email pour vous confirmer que votre \
-                        postulation pour l'offre d'emploi: " +
-                        offre_emploi.nom + u" a été effectuée avec succès. Vous\
-                        devriez être contacté sous peu par l'AUF. \n\n Merci \
-                        pour votre intérêt envers l'AUF.",
-                        'test@auf.org',
-                        [candidat.email], fail_silently=False)            
-
+                            été effectuée.")       
             return redirect("admin:recrutement_offreemploi_changelist")
         else:
             messages.add_message(request, messages.ERROR,
@@ -134,3 +103,44 @@ def postuler_appel_offre(request):
  
     return render_to_response('recrutement/postuler_appel_offre.html', vars, 
             RequestContext(request))
+
+def affecter_evaluateurs_offre_emploi(request):
+    offre_emploi_ids = request.GET.get('ids').split(',')
+    offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids)
+    if request.method == "POST":
+        form = EvaluateurForm(request.POST, offres_emploi=offres_emploi)
+        if form.is_valid():
+            form.save()
+            messages.add_message(request, messages.SUCCESS, 
+                        "Les évaluateurs ont été affectés aux offres d'emploi.")
+            return redirect("admin:recrutement_offreemploi_changelist")
+    else:
+        form = EvaluateurForm(offres_emploi=offres_emploi)
+
+    c = {'form' : form}   
+    return render_to_response("recrutement/affecter_evaluateurs.html", 
+            Context(c), context_instance = RequestContext(request))
+
+def send_templated_email(candidat, template):
+    # Sujet
+    sujet_template = Template(template.sujet)
+    dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,}            
+    sujet = Context(dict_sujet)
+    # Plain text
+    texte_template = Template(template.plain_text)
+    dict_texte = {"nom_candidat": candidat.nom, 
+                    "prenom_candidat": candidat.prenom, 
+                    "offre_emploi": candidat.offre_emploi.nom,
+                    "genre_candidat": "Monsieur" if candidat.genre == "M" \
+                                     else "Madame",
+                    }
+    texte = Context(dict_texte)
+    # HTML text
+    html_template = Template(template.html)
+    texte_html = Context(dict_texte)
+    msg = EmailMultiAlternatives(sujet_template.render(sujet), 
+                                texte_template.render(texte),
+                                'recrutement@auf.org', 
+                                [candidat.email])
+    msg.attach_alternative(texte_template.render(texte_html), "text/html")
+    msg.send()