API: Permettre la postulation a partir du site institutionnel
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 5 Aug 2011 21:19:43 +0000 (17:19 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 5 Aug 2011 21:19:43 +0000 (17:19 -0400)
project/recrutement/api.py
project/recrutement/forms.py
project/recrutement/views.py
project/urls.py
src/auf.django.emploi/auf/django/emploi/api.py
src/auf.django.emploi/auf/django/emploi/forms.py
src/auf.django.emploi/auf/django/emploi/templates/emploi/pieces.html [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/templates/emploi/postuler_appel_offre.html [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html [deleted file]
src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html [deleted file]

index 0bd6cdf..0a194b3 100644 (file)
@@ -5,6 +5,7 @@ from django.shortcuts import render_to_response, redirect, get_object_or_404
 from django.utils import simplejson
 from django.contrib import messages
 
+import datamaster_modeles.models as ref
 from auf.django.emploi import models as emploi
 from auf.django.emploi import forms as emploiForms
 from project.recrutement.models import Evaluateur, CandidatEvaluation, \
@@ -18,16 +19,19 @@ STATUS_ERROR_NOT_FOUND = 404
 STATUS_ERROR_PERMISSIONS = 403
 STATUS_ERROR_BADMETHOD = 405
 
-def api(request, method):
+def api(request, method, offre_id=None):
     # TODO: Sécurité : 
     #       L'échange d'information doit être possible qu'avec les HOST désirés.
 
     #if request.method != 'POST':
     #    return api_return(STATUS_ERROR_BADMETHOD)
-    
+
     api = API(request)
     if hasattr(api, 'api_%s' % method):
-        return getattr(api, 'api_%s' % method)()
+        if offre_id is None:
+            return getattr(api, 'api_%s' % method)()
+        else:
+            return api.api_candidat_add(offre_id)
     
     return api_return(STATUS_ERROR)
 
@@ -59,47 +63,50 @@ class API:
     def __init__(self, request):
         self.request = request
 
-    def api_candidat_add(self):
+    def api_candidat_add(self, offre_id):
         vars = dict()
-        offre_emploi = get_object_or_404(emploi.OffreEmploi, id=self.request.GET.get('id'))
-        cand = emploi.Candidat()
-        cand.offre_emploi = offre_emploi
-
+        offre = emploi.OffreEmploi.objects.get(id=offre_id)
         if self.request.method == "POST":
-            form = emploiForms.PostulerOffreEmploiForm(self.request.POST,
-                     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(id=1)
-                send_templated_email(cand, courriel_template)
-                
-                evaluateurs = offre_emploi.evaluateurs.all()
+            try:
+
+                candidat = emploi.Candidat()
+                candidat.offre_emploi = offre
+                candidat.nom = self.request.POST['nom']
+                candidat.prenom = self.request.POST['prenom']
+                candidat.genre = self.request.POST['genre']
+                candidat.nationalite = ref.Pays.objects.get(id=self.request.POST['nationalite'])
+                candidat.situation_famille = self.request.POST['situation_famille']
+                candidat.nombre_dependant = self.request.POST['nombre_dependant']
+                candidat.niveau_diplome = self.request.POST['niveau_diplome']
+                candidat.employeur_actuel = self.request.POST['employeur_actuel']
+                candidat.poste_actuel = self.request.POST['poste_actuel']
+                candidat.domaine_professionnel = self.request.POST['domaine_professionnel']
+                candidat.telephone = self.request.POST['telephone']
+                candidat.email = self.request.POST['email']
+                candidat.adresse = self.request.POST['adresse']
+                candidat.ville = self.request.POST['ville']
+                candidat.etat_province = self.request.POST['etat_province']
+                candidat.code_postal = self.request.POST['code_postal']
+                candidat.pays = ref.Pays.objects.get(id=self.request.POST['pays'])
+                candidat.save()
+
+                evaluateurs = candidat.offre_emploi.evaluateurs.all()
                 for evaluateur in evaluateurs:                
                     candidat_evaluation = CandidatEvaluation()
-                    candidat_evaluation.candidat = cand
+                    candidat_evaluation.candidat = candidat
                     candidat_evaluation.evaluateur = evaluateur
                     candidat_evaluation.save()
 
-                return api_return(STATUS_OK)
-            else:
-                messages.add_message(self.request, messages.ERROR,
-                            'Il y a des erreurs dans le formulaire.')
-        else:
-            form = emploiForms.PostulerOffreEmploiForm(instance=cand,
-                    offre_emploi=offre_emploi)
-            piecesForm = emploiForms.CandidatPieceForm(instance=cand)
-
-        vars.update(dict(form=form, candidat=cand, piecesForm=piecesForm, ))
-     
-        return render_to_response('recrutement/postuler_appel_offre.html', vars, 
-                RequestContext(self.request))
-
+                try:
+                    courriel_template = CourrielTemplate.objects.get(id=1)
+                    send_templated_email(candidat, courriel_template)
+                except:
+                    return api_return(STATUS_OK)               
+            except:
+                return api_return(STATUS_ERROR)
+            return api_return(STATUS_OK)
+        return api_return(STATUS_ERROR_BADMETHOD)
+        
 
     def api_offre_emploi_liste(self):
         return api_return(STATUS_OK, simplejson.dumps(
index 2c54120..294013e 100644 (file)
@@ -73,7 +73,7 @@ class OffreEmploiForm(ModelForm):
         kwargs2 = kwargs.copy()
         kwargs2['commit'] = False
         offre = super(OffreEmploiForm, self).save(*args, **kwargs2)
-        offre.poste = self.cleaned_data.get("poste")
+        offre.poste = self.cleaned_data.get("poste").id
         offre.poste_nom = self.cleaned_data.get("poste").nom
         if 'commit' not in kwargs or kwargs['commit']:
             offre.save()
index e982b1b..bc52ef8 100755 (executable)
@@ -66,43 +66,6 @@ def envoyer_courriel_candidats(request):
     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(id=1)
-            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)
index bdff2f5..27e3ca2 100644 (file)
@@ -14,6 +14,8 @@ urlpatterns = patterns(
     url(r'^captcha/', include('captcha.urls')),
     url(r'^admin_tools/', include('admin_tools.urls')),
     (r'^admin/', include(admin.site.urls)),
+    url(r'^api/(?P<method>[a-z_-]+)/(?P<offre_id>\d+)$', 'recrutement.api.api', 
+            name='recrutement_api'),
     url(r'^api/(?P<method>[a-z_-]+)/$', 'recrutement.api.api', 
             name='recrutement_api'),
     (r'^connexion/$', 'django.contrib.auth.views.login'),
index 5a7e778..4304f5b 100644 (file)
@@ -6,6 +6,9 @@ from django.utils import simplejson
 from auf.django.emploi import models as emploi
 from auf.django.emploi import forms as emploiForms
 from restkit import request as req
+from restkit import Resource
+from httplib2 import Http
+from urllib import urlencode
 import datamaster_modeles.models as ref
 
 class API:
@@ -62,7 +65,11 @@ class API:
         return obj_offres_emploi
 
     def candidat_add(self, offre_id):
-        url = "http://127.0.0.1:8000/api/candidat_add/?id=%s" % (offre_id)
-        return redirect(url)
+        url = "http://127.0.0.1:8000/api/candidat_add/%s" % offre_id
+        r = Resource(url)
+        import pdb;pdb.set_trace()
+        resp = r.post(payload=self.request.POST)
+
+        return resp.status    
 
         
index 7f963cc..79338eb 100644 (file)
@@ -7,21 +7,22 @@ from django.forms import ModelForm
 
 from captcha.fields import CaptchaField
 
-from auf.django.emploi import models as emploi
+from models import *
 
 ################################################################################
 # OFFRE EMPLOI
 ################################################################################
-class CandidatPieceForm(inlineformset_factory(emploi.Candidat,
-                        emploi.CandidatPiece)):
-    nom = forms.MultipleChoiceField(choices=emploi.TYPE_PIECE_CHOICES,
+class CandidatPieceForm(inlineformset_factory(Candidat,
+                        CandidatPiece)):
+    nom = forms.MultipleChoiceField(choices=TYPE_PIECE_CHOICES,
             widget=CheckboxSelectMultiple)
 
 class PostulerOffreEmploiForm(ModelForm):
     captcha = CaptchaField()
+    action = "http://127.0.0.1:8000/api/candidat_add/"
 
     def __init__(self, *args, **kwargs):
-        self.offre_emploi = kwargs.pop('offre_emploi')     
+        self.offre_emploi = kwargs.pop('offre_id')
         super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
 
     def save(self, *args, **kwargs): 
@@ -33,7 +34,7 @@ class PostulerOffreEmploiForm(ModelForm):
         return postulation
 
     class Meta:
-        model = emploi.Candidat   
+        model = Candidat   
         exclude = ('actif', 'offre_emploi',)
         fields = ('nom', 'prenom', 'genre', 'nationalite', 'situation_famille', 
                     'nombre_dependant', 'niveau_diplome', 'employeur_actuel', 
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/emploi/pieces.html b/src/auf.django.emploi/auf/django/emploi/templates/emploi/pieces.html
new file mode 100644 (file)
index 0000000..d8587d7
--- /dev/null
@@ -0,0 +1,30 @@
+<table>
+    {% for f in piecesForm.management_form %}
+        {{ f }}
+    {% endfor %}
+    <tr>  
+        <th></th> 
+        {% for field in piecesForm.forms.0 %}
+            {% if not field.is_hidden %}
+                <th>{{ field.label }}</th>
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% for f in piecesForm.forms %}
+    <tr>
+        <td>
+            {{ f.errors }}
+            {% if f.initial.fichier %}
+                <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
+            {% endif %}
+        </td>
+        {% for field in f %} 
+            {% if not field.is_hidden %}
+                <td>{{ field }}</td>
+            {% else %}
+                {{ field }}
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% endfor %}
+</table>
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/emploi/postuler_appel_offre.html b/src/auf.django.emploi/auf/django/emploi/templates/emploi/postuler_appel_offre.html
new file mode 100644 (file)
index 0000000..f6931be
--- /dev/null
@@ -0,0 +1,123 @@
+{% extends "base.html" %}
+{% block Contenu%}
+
+<div id="content-main">
+    {% block object-tools %}{% endblock %}
+
+    <h1>Poster pour un appel d'offre d'emploi</h1>
+
+    <form action="" method="post" enctype="multipart/form-data">
+        <fieldset>
+            <h2>Informations personnelles</h2>
+            <table id="informations_personnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.prenom.label }}</td>
+                    <td>{{ form.prenom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nom.label }}</td>
+                    <td>{{ form.nom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.genre.label }}</td>
+                    <td>{{ form.genre }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nationalite.label }}</td>
+                    <td>{{ form.nationalite }}</td>
+                <tr>
+                    <td>{{ form.situation_famille.label }}</td>
+                    <td>{{ form.situation_famille }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nombre_dependant.label }}</td>
+                    <td>{{ form.nombre_dependant }}<br />
+                        <span class="info">{{ form.nombre_dependant.help_text }}</span>
+                    </td>
+                </tr>
+                </tbody>
+            </table>            
+        </fieldset>
+        <fieldset>
+            <h2>Coordonnées</h2>
+            <table id="coordonnees">
+                <tbody>
+                <tr>
+                    <td>{{ form.telephone.label }}</td>
+                    <td>{{ form.telephone }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.email.label }}</td>
+                    <td>{{ form.email }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.adresse.label }}</td>
+                    <td>{{ form.adresse }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.ville.label }}</td>
+                    <td>{{ form.ville }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.etat_province.label }}</td>
+                    <td>{{ form.etat_province }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.code_postal.label }}</td>
+                    <td>{{ form.code_postal }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.pays.label }}</td>
+                    <td>{{ form.pays }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Informations professionnelles</h2>
+            <table id="informations_professionnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.niveau_diplome.label }}</td>
+                    <td>{{ form.niveau_diplome }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.employeur_actuel.label }}</td>
+                    <td>{{ form.employeur_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.poste_actuel.label }}</td>
+                    <td>{{ form.poste_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.domaine_professionnel.label }}</td>
+                    <td>{{ form.domaine_professionnel }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Pièces jointes</h2>
+            <p class="info">CV, lettre de motivation...</p>
+            {% include "recrutement/pieces.html" %}
+        </fieldset>
+        <fieldset>
+            <h2>Vérification CAPTCHA</h2>
+            <p class="info">Entrez les caractères figurant dans l'image ci-dessous.</p>
+                <tr>
+                    <td>
+                        {{ form.captcha }}
+                        {{ form.captcha.errors }}
+                    </td>
+                </tr>
+        </fieldset>
+        <div class="submit-row">
+            <input type="submit" name="save" value="Enregistrer" />
+        </div>
+    </form>
+
+
+</div>
+
+{% endblock %}
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html b/src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html
deleted file mode 100644 (file)
index d8587d7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<table>
-    {% for f in piecesForm.management_form %}
-        {{ f }}
-    {% endfor %}
-    <tr>  
-        <th></th> 
-        {% for field in piecesForm.forms.0 %}
-            {% if not field.is_hidden %}
-                <th>{{ field.label }}</th>
-            {% endif %}
-        {% endfor %}
-    </tr>
-    {% for f in piecesForm.forms %}
-    <tr>
-        <td>
-            {{ f.errors }}
-            {% if f.initial.fichier %}
-                <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
-            {% endif %}
-        </td>
-        {% for field in f %} 
-            {% if not field.is_hidden %}
-                <td>{{ field }}</td>
-            {% else %}
-                {{ field }}
-            {% endif %}
-        {% endfor %}
-    </tr>
-    {% endfor %}
-</table>
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html b/src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html
deleted file mode 100644 (file)
index 53569f0..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-{% extends 'base.html' %}
-{% load adminmedia %}
-
-{% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Accueil{% endblock %}
-
-{% block main %}
-<div id="content-main">
-    {% block object-tools %}{% endblock %}
-
-
-
-
-    <div class="module">
-    <h2>Poster pour un appel d'offre d'emploi</h2>
-    </div>
-       
-    <form action="" method="post" enctype="multipart/form-data">
-        <fieldset>
-            <h2>Informations personnelles</h2>
-            <table id="informations_personnelles">
-                <tbody>
-                <tr>
-                    <td>{{ form.prenom.label }}</td>
-                    <td>{{ form.prenom }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.nom.label }}</td>
-                    <td>{{ form.nom }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.genre.label }}</td>
-                    <td>{{ form.genre }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.nationalite.label }}</td>
-                    <td>{{ form.nationalite }}</td>
-                <tr>
-                    <td>{{ form.situation_famille.label }}</td>
-                    <td>{{ form.situation_famille }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.nombre_dependant.label }}</td>
-                    <td>{{ form.nombre_dependant }}<br />
-                        <span class="info">{{ form.nombre_dependant.help_text }}
-                        </span>
-                    </td>
-                </tr>
-                </tbody>
-            </table>            
-        </fieldset>
-        <fieldset>
-            <h2>Coordonnées</h2>
-            <table id="coordonnees">
-                <tbody>
-                <tr>
-                    <td>{{ form.telephone.label }}</td>
-                    <td>{{ form.telephone }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.email.label }}</td>
-                    <td>{{ form.email }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.adresse.label }}</td>
-                    <td>{{ form.adresse }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.ville.label }}</td>
-                    <td>{{ form.ville }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.etat_province.label }}</td>
-                    <td>{{ form.etat_province }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.code_postal.label }}</td>
-                    <td>{{ form.code_postal }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.pays.label }}</td>
-                    <td>{{ form.pays }}</td>
-                </tr>
-                </tbody>
-            </table>
-        </fieldset>
-        <fieldset>
-            <h2>Informations professionnelles</h2>
-            <table id="informations_professionnelles">
-                <tbody>
-                <tr>
-                    <td>{{ form.niveau_diplome.label }}</td>
-                    <td>{{ form.niveau_diplome }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.employeur_actuel.label }}</td>
-                    <td>{{ form.employeur_actuel }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.poste_actuel.label }}</td>
-                    <td>{{ form.poste_actuel }}</td>
-                </tr>
-                <tr>
-                    <td>{{ form.domaine_professionnel.label }}</td>
-                    <td>{{ form.domaine_professionnel }}</td>
-                </tr>
-                </tbody>
-            </table>
-        </fieldset>
-        <fieldset>
-            <h2>Pièces jointes</h2>
-            <p class="info">CV, lettre de motivation...</p>
-            {% include "recrutement/pieces.html" %}
-        </fieldset>
-        <fieldset>
-            <h2>Vérification CAPTCHA</h2>
-            <p class="info">Entrez les caractères figurant dans l'image ci-dessous.</p>
-                <tr>
-                    <td>
-                        {{ form.captcha }}
-                        {{ form.captcha.errors }}
-                    </td>
-                </tr>
-        </fieldset>
-        <div class="submit-row">
-            <input type="submit" name="save" value="Enregistrer" />
-        </div>
-    </form>
-
-
-
-</div>
-
-{% endblock %}