1835: Un CandidatEvaluation doit se créer si l'évaluateur a déjà été assigné à une...
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Mon, 1 Aug 2011 18:53:01 +0000 (14:53 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Mon, 1 Aug 2011 18:53:01 +0000 (14:53 -0400)
project/recrutement/admin.py
project/recrutement/api.py
project/recrutement/models.py
project/recrutement/views.py
src/auf.django.emploi/auf/django/emploi/api.py
src/auf.django.emploi/auf/django/emploi/models.py
src/auf.django.emploi/auf/django/emploi/views.py [deleted file]

index aabc4f3..e0e435f 100644 (file)
@@ -21,6 +21,21 @@ class MetaAdmin(VersionAdmin):
     
 Pour refactoring
 """
+
+class ProxyEvaluateur(Evaluateur.offres_emploi.through):
+    """
+    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
+    plus ergonomique.
+    """
+    class Meta:
+        proxy = True
+        verbose_name = "évaluateur"
+
+class EvaluateurInline(admin.TabularInline):
+    model = ProxyEvaluateur
+    fields = ('evaluateur',)
+    extra = 1
+
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'resume', 'date_limite', 'region',  'statut', 
@@ -28,6 +43,7 @@ class OffreEmploiAdmin(VersionAdmin):
     list_filter = ('statut', 'est_affiche', )
     actions = ['affecter_evaluateurs_offre_emploi', ]
     form = OffreEmploiForm
+    inlines = [EvaluateurInline, ]
 
     def get_actions(self, request):
         actions = super(OffreEmploiAdmin, self).get_actions(request)
@@ -144,15 +160,6 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
             return True
         return False   
 
-    """class ProxyEvaluateur(Evaluateur.candidats.through):
-
-    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
-    plus ergonomique.
-
-    class Meta:
-        proxy = True
-        verbose_name = "évaluateur"
-    """
 class CandidatPieceInline(admin.TabularInline):
     model = CandidatPiece
     fields = ('candidat', 'nom', 'path',)
@@ -182,7 +189,6 @@ class CandidatEvaluationInline(admin.TabularInline):
             return self.readonly_fields+('evaluateur', 'note', 'commentaire')
         return self.readonly_fields
 
-
 class CandidatAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'prenom', 'offre_emploi','statut',
index 041beaa..631f710 100644 (file)
@@ -7,6 +7,9 @@ from django.contrib import messages
 
 from auf.django.emploi import models as emploi
 from auf.django.emploi import forms as emploiForms
+from project.recrutement.models import Evaluateur, CandidatEvaluation, \
+                                CourrielTemplate
+from project.recrutement.views import *
 
 STATUS_OK = 200
 
@@ -67,15 +70,23 @@ class API:
                      instance=cand, offre_emploi=offre_emploi)
             piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES,
                         instance=cand)
+            
             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)')
-                send_templated_email(candidat, courriel_template)
+                            get(id=1)
+                send_templated_email(cand, courriel_template)
                 """
+                evaluateurs = offre_emploi.evaluateurs.all()
+                for evaluateur in evaluateurs:                
+                    candidat_evaluation = CandidatEvaluation()
+                    candidat_evaluation.candidat = cand
+                    candidat_evaluation.evaluateur = evaluateur
+                    candidat_evaluation.save()
+
                 return api_return(STATUS_OK)
             else:
                 messages.add_message(self.request, messages.ERROR,
index 734f4a8..898197d 100755 (executable)
@@ -79,7 +79,7 @@ class ProxyOffreEmploi(emploi.OffreEmploi):
     def __unicode__(self):
         return '%s [%s] - View' % (self.nom, self.id)
 
-class ProxyCandidat(Candidat):
+class ProxyCandidat(emploi.Candidat):
     class Meta:
         proxy = True
         verbose_name = "Candidat (visualisation)"
@@ -88,7 +88,6 @@ class ProxyCandidat(Candidat):
     def __unicode__(self):
         return '%s %s [%s]' % (self.prenom, self.nom, self.id)
 
-
 class Evaluateur(models.Model):
     user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur")
     offres_emploi = models.ManyToManyField(emploi.OffreEmploi, 
@@ -122,7 +121,7 @@ class AdministrateurRegional(models.Model):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
 class CandidatEvaluation(models.Model):
-    candidat = models.ForeignKey(Candidat, db_column='candidat', 
+    candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', 
                 related_name='+',) 
     evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', 
                     related_name='+', verbose_name='Évaluateur') 
index f940572..90f577b 100755 (executable)
@@ -12,7 +12,7 @@ from django.core.mail import EmailMultiAlternatives
 from forms import *
 from models import *
 from recrutement.workflow import grp_evaluateurs_recrutement
-from auf.django.emploi import views as emp
+from views import *
 
 def index(request):
     return render_to_response('recrutement/index.html', {}, 
@@ -85,7 +85,7 @@ def postuler_appel_offre(request):
      
             courriel_template = CourrielTemplate.objects.\
                         get(nom_modele='Confirmation postulation (automatique)')
-            send_templated_email(candidat, courriel_template)
+            emp.send_templated_email(candidat, courriel_template)
      
             messages.add_message(request, messages.SUCCESS, 
                             "Votre application à l'appel d'offre d'emploi a \
@@ -120,3 +120,27 @@ def affecter_evaluateurs_offre_emploi(request):
     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()
index 0a51d2d..0f11e85 100644 (file)
@@ -13,7 +13,7 @@ class API:
         self.request = request
 
     def offre_emploi_liste(self):
-        url = "http://127.0.0.1:8080/api/offre_emploi_liste/"
+        url = "http://127.0.0.1:8000/api/offre_emploi_liste/"
         r = req(url)
         liste_json = r.body_string()
         liste_offres = simplejson.loads(liste_json)
@@ -38,7 +38,7 @@ class API:
         return obj_offres_emploi
 
     def offre_emploi(self, offre_id):
-        url = "http://127.0.0.1:8080/api/offre_emploi/?id=%s"
+        url = "http://127.0.0.1:8000/api/offre_emploi/?id=%s"
         r = req(url % (offre_id))
         offre_json = r.body_string()
         offre_dict = simplejson.loads(offre_json)
@@ -62,7 +62,7 @@ class API:
         return obj_offres_emploi
 
     def candidat_add(self, offre_id):
-        url = "http://127.0.0.1:8080/api/candidat_add/?id=%s" % (offre_id)
+        url = "http://127.0.0.1:8000/api/candidat_add/?id=%s" % (offre_id)
         return redirect(url)
 
         
index ffda33d..6192aa9 100755 (executable)
@@ -136,21 +136,6 @@ class Candidat(Metadata):
     class Meta:
         db_table = 'emploi_candidat'
 
-    def save(self, *args, **kwargs):
-        """
-        Créer automatiquement des CandidatEvaluation, si des évaluateurs sont
-        déjà assignés à des offres d'emploi
-        """
-        evaluateurs = OffreEmploi.objects.filter(id=self.offre_emploi.id)
-  
-        for evaluateur in evaluateurs:                
-            candidat_evaluation = CandidatEvaluation()
-            candidat_evaluation.candidat = self
-            candidat_evaluation.evaluateur = evaluateur
-            candidat_evaluation.save()
-        super(Candidat, self).save(*args, **kwargs)
-
-
     def pieces_jointes(self):
         return CandidatPiece.objects.filter(candidat=self) 
     pieces_jointes.allow_tags = True    
diff --git a/src/auf.django.emploi/auf/django/emploi/views.py b/src/auf.django.emploi/auf/django/emploi/views.py
deleted file mode 100755 (executable)
index af80e24..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from django.contrib import messages
-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 auf.django.emploi import models
-from auf.django.emploi import forms
-
-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)')
-            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 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()