1734: Partie-1 - utilisation du package auf.django.emploi dans le site institutionnel
[auf_rh_dae.git] / project / recrutement / api.py
index bd8b678..655f22f 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,11 +15,24 @@ 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:
         content_type = 'text/json'
-
     if text is None:
         if status == STATUS_ERROR:
             text = 'Error'
@@ -42,42 +54,49 @@ 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":
+            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:
+            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 +107,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)