From f77f4b9b6a5b7000ed0c585a70bf05e968c368e5 Mon Sep 17 00:00:00 2001 From: Nilovna Bascunan-Vasquez Date: Fri, 22 Jul 2011 10:58:00 -0400 Subject: [PATCH] =?utf8?q?1733:=20auf.django.emploi=20cr=C3=A9er=20l'API=20u?= =?utf8?q?tilis=C3=A9e=20par=20le=20site=20institutionnel?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/recrutement/api.py | 129 ++++++++++++++---------- project/urls.py | 2 + src/auf.django.emploi/auf/django/emploi/api.py | 60 +++++++++++ 3 files changed, 139 insertions(+), 52 deletions(-) create mode 100644 src/auf.django.emploi/auf/django/emploi/api.py diff --git a/project/recrutement/api.py b/project/recrutement/api.py index bd8b678..69587b5 100644 --- a/project/recrutement/api.py +++ b/project/recrutement/api.py @@ -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) diff --git a/project/urls.py b/project/urls.py index 1e7c852..b218a9a 100644 --- a/project/urls.py +++ b/project/urls.py @@ -32,6 +32,8 @@ urlpatterns = patterns( name='selectionner_template'), url(r'^recrutement/pieces/$', 'recrutement.views.postuler_appel_offre', name='pieces'), + url(r'^call/(?P[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 index 0000000..acc9d82 --- /dev/null +++ b/src/auf.django.emploi/auf/django/emploi/api.py @@ -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 + -- 1.7.10.4