refact ergo + page perso (vide)
[auf_rh_dae.git] / project / recrutement / views.py
index b5919be..65753e5 100755 (executable)
@@ -1,8 +1,146 @@
 # -*- encoding: utf-8 -*-
-from django.shortcuts import redirect, render_to_response, get_object_or_404
-from django.template import RequestContext
 
-from project.recrutement import models as recr
+from django.contrib import messages
+from django.contrib.auth.models import User
+from django.core.mail import send_mail
+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, Template
+from django.core.mail import EmailMultiAlternatives
+
+from forms import *
+from models import *
+from recrutement.workflow import grp_evaluateurs_recrutement
+from views import *
 
 def index(request):
-    return render_to_response('recrutement/index.html', {}, RequestContext(request))
+    return render_to_response('recrutement/index.html', {}, 
+                                RequestContext(request))
+
+def selectionner_template(request):
+    candidat_ids = request.GET.get('ids')
+    if request.method == "POST":
+        form = CandidatCourrielTemplateForm(request.POST)
+        if form.is_valid():
+            form.save()
+            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 = CandidatCourrielTemplateForm()
+
+    c = {'form' : form}   
+    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_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, 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, 
+                            "Le email a été envoyé aux candidats.")
+            return redirect("admin:recrutement_candidat_changelist")
+    else:
+        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()
+    candidat.offre_emploi = offre_emploi
+
+    if request.method == "POST":
+        form = PostulerOffreEmploiForm(request.POST,
+                 instance=candidat, offre_emploi=offre_emploi)
+        piecesForm = CandidatPieceForm(request.POST, request.FILES,
+                    instance=candidat)
+        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.")       
+            return redirect("admin:recrutement_offreemploi_changelist")
+        else:
+            messages.add_message(request, messages.ERROR,
+                        'Il y a des erreurs dans le formulaire.')
+    else:
+        form = PostulerOffreEmploiForm(instance=candidat,
+                offre_emploi=offre_emploi)
+        piecesForm = CandidatPieceForm(instance=candidat)
+
+    vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, ))
+    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()