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