1733: auf.django.emploi créer l'API utilisée par le site institutionnel
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 22 Jul 2011 14:58:00 +0000 (10:58 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 22 Jul 2011 14:58:00 +0000 (10:58 -0400)
project/recrutement/api.py
project/urls.py
src/auf.django.emploi/auf/django/emploi/api.py [new file with mode: 0644]

index bd8b678..69587b5 100644 (file)
@@ -1,13 +1,12 @@
-from datetime import datetime
-
-from django import forms
-from django.contrib.auth import authenticate
-from django.contrib.auth.models import User
+# -*- encoding: utf-8 -*
 from django.http import HttpResponse
-from django.shortcuts import render_to_response
-from django.template import loader, Context
+from django.template import Context, RequestContext, Template
+from django.shortcuts import render_to_response, redirect, get_object_or_404
 from django.utils import simplejson
+from django.contrib import messages
+
 from auf.django.emploi import models as emploi
+from auf.django.emploi import forms as emploiForms
 
 STATUS_OK = 200
 
@@ -16,6 +15,19 @@ STATUS_ERROR_NOT_FOUND = 404
 STATUS_ERROR_PERMISSIONS = 403
 STATUS_ERROR_BADMETHOD = 405
 
+def api(request, method):
+    # 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)()
+
+    return api_return(STATUS_ERROR)
+
 def api_return(status, text='', json=False):
     content_type = 'text/plain'
     if status == STATUS_OK and json:
@@ -42,42 +54,51 @@ def api_return(status, text='', json=False):
 
 
 class API:
-    # TODO: Sécurité : 
-    #       L'échange d'information doit être possible qu'avec les HOST désirés.
     def __init__(self, request):
         self.request = request
 
-    def candidat_add(self, candidat):
-        try:
-            candidat_dict = simplejson.loads(candidat)
-            cand = emploi.Candidat()
-            cand.offre_emploi = candidat_dict('offre_emploi')
-            cand.prenom = candidat_dict('prenom')
-            cand.nom = candidat_dict('nom')
-            cand.genre = candidat_dict('genre')
-            cand.nationalite = candidat_dict('nationalite')
-            cand.situation_famille = candidat_dict('situation_famille')
-            cand.nombre_dependant = candidat_dict('nombre_dependant')
-            cand.niveau_diplome = candidat_dict('niveau_diplome')
-            cand.employeur_actuel = candidat_dict('employeur_actuel')
-            cand.poste_actuel = candidat_dict('poste_actuel')
-            cand.domaine_professionnel = candidat_dict('domaine_professionnel')
-            cand.telephone = candidat_dict('telephone')
-            cand.email = candidat_dict('email')
-            cand.adresse = candidat_dict('adresse')
-            cand.ville = candidat_dict('ville')
-            cand.etat_province = candidat_dict('etat_province')
-            cand.code_postal = candidat_dict('code_postal')
-            cand.pays = candidat_dict('pays')
-            cand.save()
-        except:
-            return api_return(STATUS_ERROR)
-        return api_return(STATUS_OK)
-
-
-    def offre_emploi(self, id_offre_emploi=None):
-        if id_offre_emploi is None:
-            return api_return(STATUS_OK, simplejson.dumps(
+    def api_candidat_add(self):
+        vars = dict()
+        offre_emploi = get_object_or_404(emploi.OffreEmploi, id=self.request.GET.get('id'))
+        cand = emploi.Candidat()
+        cand.offre_emploi = offre_emploi
+
+        if self.request.method == "POST":
+            #import pdb;pdb.set_trace()
+            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(nom_modele='Confirmation postulation (automatique)')
+                send_templated_email(candidat, courriel_template)
+                """
+                messages.add_message(self.request, messages.SUCCESS, 
+                                "Votre application à l'appel d'offre d'emploi a \
+                                été effectuée.")       
+                return api_return(STATUS_OK)
+            else:
+                messages.add_message(self.request, messages.ERROR,
+                            'Il y a des erreurs dans le formulaire.')
+        else:
+            #import pdb;pdb.set_trace()
+            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))
+
+
+    def api_offre_emploi_liste(self):
+        return api_return(STATUS_OK, simplejson.dumps(
                             [{"id": "%s" % offre.id, 
                             "nom": "%s" % offre.nom, 
                             "resume": "%s" % offre.resume,
@@ -88,16 +109,20 @@ class API:
                             "debut_affectation": "%s" % offre.debut_affectation,
                             "lieu_affectation": "%s" % offre.lieu_affectation} 
                             for offre in emploi.OffreEmploi.objects.all()]), json=True)
-        else:
-            offre = emploi.OffreEmploi.objects.get(id=id_offre_emploi)
-            return api_return(STATUS_OK, simplejson.dumps(
-                {"id": "%s" % offre.id, 
-                "nom": "%s" % offre.nom, 
-                "resume": "%s" % offre.resume,
-                "description": "%s" % offre.description,
-                "date_limite": "%s" % offre.date_limite,
-                "duree_affectation": "%s" % offre.duree_affectation,
-                "renumeration": "%s" % offre.renumeration,
-                "debut_affectation": "%s" % offre.debut_affectation,
-                "lieu_affectation": "%s" % offre.lieu_affectation}), json=True)
+        
+    def api_offre_emploi(self):
+        try:
+            offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
+        except emploi.OffreEmploi.DoesNotExist:
+            return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
+        return api_return(STATUS_OK, simplejson.dumps(
+            {"id": "%s" % offre.id, 
+            "nom": "%s" % offre.nom, 
+            "resume": "%s" % offre.resume,
+            "description": "%s" % offre.description,
+            "date_limite": "%s" % offre.date_limite,
+            "duree_affectation": "%s" % offre.duree_affectation,
+            "renumeration": "%s" % offre.renumeration,
+            "debut_affectation": "%s" % offre.debut_affectation,
+            "lieu_affectation": "%s" % offre.lieu_affectation}), json=True)
 
index 1e7c852..b218a9a 100644 (file)
@@ -32,6 +32,8 @@ urlpatterns = patterns(
         name='selectionner_template'),
     url(r'^recrutement/pieces/$', 'recrutement.views.postuler_appel_offre', 
         name='pieces'),
+    url(r'^call/(?P<method>[a-z_-]+)/$', 
+        'recrutement.api.api', name='recrutement_api'),
     url(r'^recrutement/postuler_appel_offre/$', 
         'recrutement.views.postuler_appel_offre', name='postuler_appel_offre'),
     (r'^tinymce/', include('tinymce.urls')),    
diff --git a/src/auf.django.emploi/auf/django/emploi/api.py b/src/auf.django.emploi/auf/django/emploi/api.py
new file mode 100644 (file)
index 0000000..acc9d82
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- encoding: utf-8 -*
+from django.shortcuts import render_to_response, redirect, get_object_or_404
+
+from django.utils import simplejson
+from auf.django.emploi import models as emploi
+from auf.django.emploi import forms as emploiForms
+from recrutement.api import API as api
+from restkit import request 
+
+class API:
+    def __init__(self, request):
+        self.request = request
+
+    def offre_emploi_liste(self):
+        url = "/call/offre_emploi_liste/"
+        r = request(url)
+        liste_json = r.body_string()
+        liste_offres = simplejson.loads(liste_json)
+        obj_offres_emploi = []
+
+        for offre_dict in liste_offres:
+            offre = emploi.OffreEmploi()
+            offre.est_affiche = offre_dict['est_affiche']
+            offre.statut = offre_dict['statut']
+            offre.nom = offre_dict['nom']
+            offre.resume = offre_dict['resume']
+            offre.description = offre_dict['description']
+            offre.poste = offre_dict['poste']
+            offre.date_limite = offre_dict['date_limite']
+            offre.region = offre_dict['region']
+            offre.bureau = offre_dict['bureau']
+            offre.duree_affectation = offre_dict['duree_affectation']
+            offre.renumeration = offre_dict['renumeration']
+            offre.debut_affectation = offre_dict['debut_affectation']
+            offre.lieu_affectation = offre_dict['lieu_affectation']        
+            obj_offres_emploi.append(offre)  
+        return obj_offres_emploi
+
+    def offre_emploi(self, offre_id):
+        url = "/call/offre_emploi/%s"
+        r = request(url % (offre_id))
+        offre_json = r.body_string()
+        offre_dict = simplejson.loads(offre_json)
+
+        obj_offre = emploi.OffreEmploi()
+        obj_offre.est_affiche = offre_dict('est_affiche')
+        obj_offre.statut = offre_dict('statut')
+        obj_offre.nom = offre_dict('nom')
+        obj_offre.resume = offre_dict('resume')
+        obj_offre.description = offre_dict('description')
+        obj_offre.poste = offre_dict('poste')
+        obj_offre.date_limite = offre_dict('date_limite')
+        obj_offre.region = offre_dict('region')
+        obj_offre.bureau = offre_dict('bureau')
+        obj_offre.duree_affectation = offre_dict('duree_affectation')
+        obj_offre.renumeration = offre_dict('renumeration')
+        obj_offre.debut_affectation = offre_dict('debut_affectation')
+        obj_offre.lieu_affectation = offre_dict('lieu_affectation')
+        return obj_offre
+