Corrections aux urls
[auf_rh_dae.git] / project / recrutement / api.py
CommitLineData
f77f4b9b 1# -*- encoding: utf-8 -*
e1c666fe 2from django.http import HttpResponse
d46075cb 3from django.template import RequestContext, Template
f77f4b9b 4from django.shortcuts import render_to_response, redirect, get_object_or_404
e1c666fe 5from django.utils import simplejson
f77f4b9b
NBV
6from django.contrib import messages
7
e1c666fe 8from auf.django.emploi import models as emploi
f77f4b9b 9from auf.django.emploi import forms as emploiForms
e1c666fe
NBV
10
11STATUS_OK = 200
12
13STATUS_ERROR = 400
14STATUS_ERROR_NOT_FOUND = 404
15STATUS_ERROR_PERMISSIONS = 403
16STATUS_ERROR_BADMETHOD = 405
17
f77f4b9b
NBV
18def api(request, method):
19 # TODO: Sécurité :
20 # L'échange d'information doit être possible qu'avec les HOST désirés.
21
22 #if request.method != 'POST':
23 # return api_return(STATUS_ERROR_BADMETHOD)
14e06ff6 24
f77f4b9b
NBV
25 api = API(request)
26 if hasattr(api, 'api_%s' % method):
27 return getattr(api, 'api_%s' % method)()
14e06ff6 28
f77f4b9b
NBV
29 return api_return(STATUS_ERROR)
30
e1c666fe 31def api_return(status, text='', json=False):
d46075cb 32 content_type = 'text/html'
e1c666fe
NBV
33 if status == STATUS_OK and json:
34 content_type = 'text/json'
e1c666fe
NBV
35 if text is None:
36 if status == STATUS_ERROR:
37 text = 'Error'
38 elif status == STATUS_ERROR_NOT_FOUND:
39 text = 'Resource Not Found'
40 elif status == STATUS_ERROR_PERMISSIONS:
41 text = 'Invalid username or password'
42 elif status == STATUS_ERROR_BADMETHOD:
43 text = 'Invalid request method'
44 elif status == STATUS_OK:
45 text = 'OK'
46
47 r = HttpResponse(status=status, content=text, content_type=content_type)
48
49 if status == STATUS_ERROR_BADMETHOD:
50 r.Allow = 'POST'
51
52 return r
53
54
55class API:
e1c666fe
NBV
56 def __init__(self, request):
57 self.request = request
58
f77f4b9b
NBV
59 def api_candidat_add(self):
60 vars = dict()
61 offre_emploi = get_object_or_404(emploi.OffreEmploi, id=self.request.GET.get('id'))
62 cand = emploi.Candidat()
63 cand.offre_emploi = offre_emploi
64
65 if self.request.method == "POST":
f77f4b9b
NBV
66 form = emploiForms.PostulerOffreEmploiForm(self.request.POST,
67 instance=cand, offre_emploi=offre_emploi)
8e0d552d
NBV
68 piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES,
69 instance=cand)
70 if form.is_valid() and piecesForm.is_valid():
f77f4b9b 71 offre = form.save()
8e0d552d
NBV
72 piecesForm.instance = offre
73 piecesForm.save()
f77f4b9b
NBV
74
75 """courriel_template = CourrielTemplate.objects.\
76 get(nom_modele='Confirmation postulation (automatique)')
77 send_templated_email(candidat, courriel_template)
78 """
f77f4b9b
NBV
79 return api_return(STATUS_OK)
80 else:
81 messages.add_message(self.request, messages.ERROR,
82 'Il y a des erreurs dans le formulaire.')
83 else:
f77f4b9b
NBV
84 form = emploiForms.PostulerOffreEmploiForm(instance=cand,
85 offre_emploi=offre_emploi)
8e0d552d 86 piecesForm = emploiForms.CandidatPieceForm(instance=cand)
f77f4b9b 87
8e0d552d 88 vars.update(dict(form=form, candidat=cand, piecesForm=piecesForm, ))
f77f4b9b
NBV
89
90 return render_to_response('recrutement/postuler_appel_offre.html', vars,
91 RequestContext(self.request))
92
93
94 def api_offre_emploi_liste(self):
95 return api_return(STATUS_OK, simplejson.dumps(
e1c666fe
NBV
96 [{"id": "%s" % offre.id,
97 "nom": "%s" % offre.nom,
98 "resume": "%s" % offre.resume,
99 "description": "%s" % offre.description,
a029f641 100 # "poste": "%s [%s]" %
d46075cb
NBV
101 "region": "%s" % offre.region.id,
102 "bureau": "%s" % offre.bureau.id,
e1c666fe
NBV
103 "date_limite": "%s" % offre.date_limite,
104 "duree_affectation": "%s" % offre.duree_affectation,
105 "renumeration": "%s" % offre.renumeration,
106 "debut_affectation": "%s" % offre.debut_affectation,
d46075cb 107 "lieu_affectation": "%s" % offre.lieu_affectation.id}
e1c666fe 108 for offre in emploi.OffreEmploi.objects.all()]), json=True)
f77f4b9b
NBV
109
110 def api_offre_emploi(self):
111 try:
112 offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
113 except emploi.OffreEmploi.DoesNotExist:
114 return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
115 return api_return(STATUS_OK, simplejson.dumps(
116 {"id": "%s" % offre.id,
117 "nom": "%s" % offre.nom,
118 "resume": "%s" % offre.resume,
119 "description": "%s" % offre.description,
d46075cb
NBV
120 "region": "%s" % offre.region.id,
121 "bureau": "%s" % offre.bureau.id,
f77f4b9b
NBV
122 "date_limite": "%s" % offre.date_limite,
123 "duree_affectation": "%s" % offre.duree_affectation,
124 "renumeration": "%s" % offre.renumeration,
125 "debut_affectation": "%s" % offre.debut_affectation,
d46075cb 126 "lieu_affectation": "%s" % offre.lieu_affectation.id} ), json=True)
e1c666fe 127