Ajout des pièces jointes. 1763: Absence visualisation pièces jointes
[auf_rh_dae.git] / project / recrutement / api.py
1 # -*- encoding: utf-8 -*
2 from django.http import HttpResponse
3 from django.template import RequestContext, Template
4 from django.shortcuts import render_to_response, redirect, get_object_or_404
5 from django.utils import simplejson
6 from django.contrib import messages
7
8 from auf.django.emploi import models as emploi
9 from auf.django.emploi import forms as emploiForms
10
11 STATUS_OK = 200
12
13 STATUS_ERROR = 400
14 STATUS_ERROR_NOT_FOUND = 404
15 STATUS_ERROR_PERMISSIONS = 403
16 STATUS_ERROR_BADMETHOD = 405
17
18 def 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)
24
25 api = API(request)
26 if hasattr(api, 'api_%s' % method):
27 return getattr(api, 'api_%s' % method)()
28
29 return api_return(STATUS_ERROR)
30
31 def api_return(status, text='', json=False):
32 content_type = 'text/html'
33 if status == STATUS_OK and json:
34 content_type = 'text/json'
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
55 class API:
56 def __init__(self, request):
57 self.request = request
58
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":
66 form = emploiForms.PostulerOffreEmploiForm(self.request.POST,
67 instance=cand, offre_emploi=offre_emploi)
68 piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES,
69 instance=cand)
70 if form.is_valid() and piecesForm.is_valid():
71 offre = form.save()
72 piecesForm.instance = offre
73 piecesForm.save()
74
75 """courriel_template = CourrielTemplate.objects.\
76 get(nom_modele='Confirmation postulation (automatique)')
77 send_templated_email(candidat, courriel_template)
78 """
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:
84 form = emploiForms.PostulerOffreEmploiForm(instance=cand,
85 offre_emploi=offre_emploi)
86 piecesForm = emploiForms.CandidatPieceForm(instance=cand)
87
88 vars.update(dict(form=form, candidat=cand, piecesForm=piecesForm, ))
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(
96 [{"id": "%s" % offre.id,
97 "nom": "%s" % offre.nom,
98 "resume": "%s" % offre.resume,
99 "description": "%s" % offre.description,
100 "region": "%s" % offre.region.id,
101 "bureau": "%s" % offre.bureau.id,
102 "date_limite": "%s" % offre.date_limite,
103 "duree_affectation": "%s" % offre.duree_affectation,
104 "renumeration": "%s" % offre.renumeration,
105 "debut_affectation": "%s" % offre.debut_affectation,
106 "lieu_affectation": "%s" % offre.lieu_affectation.id}
107 for offre in emploi.OffreEmploi.objects.all()]), json=True)
108
109 def api_offre_emploi(self):
110 try:
111 offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
112 except emploi.OffreEmploi.DoesNotExist:
113 return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
114 return api_return(STATUS_OK, simplejson.dumps(
115 {"id": "%s" % offre.id,
116 "nom": "%s" % offre.nom,
117 "resume": "%s" % offre.resume,
118 "description": "%s" % offre.description,
119 "region": "%s" % offre.region.id,
120 "bureau": "%s" % offre.bureau.id,
121 "date_limite": "%s" % offre.date_limite,
122 "duree_affectation": "%s" % offre.duree_affectation,
123 "renumeration": "%s" % offre.renumeration,
124 "debut_affectation": "%s" % offre.debut_affectation,
125 "lieu_affectation": "%s" % offre.lieu_affectation.id} ), json=True)
126