Pièces jointes et 1852:Changer les adresse hardcodé dans l'API
[auf_rh_dae.git] / project / recrutement / api.py
CommitLineData
f77f4b9b 1# -*- encoding: utf-8 -*
13b8a64e 2from datetime import date
e1c666fe 3from django.http import HttpResponse
d46075cb 4from django.template import RequestContext, Template
f77f4b9b 5from django.shortcuts import render_to_response, redirect, get_object_or_404
e1c666fe 6from django.utils import simplejson
f77f4b9b
NBV
7from django.contrib import messages
8
43198a9f 9import datamaster_modeles.models as ref
e1c666fe 10from auf.django.emploi import models as emploi
f77f4b9b 11from auf.django.emploi import forms as emploiForms
b8b74dee
NBV
12from project.recrutement.models import Evaluateur, CandidatEvaluation, \
13 CourrielTemplate
11f7b571 14from project.recrutement.views import send_templated_email
e1c666fe
NBV
15
16STATUS_OK = 200
17
18STATUS_ERROR = 400
19STATUS_ERROR_NOT_FOUND = 404
20STATUS_ERROR_PERMISSIONS = 403
21STATUS_ERROR_BADMETHOD = 405
22
43198a9f 23def api(request, method, offre_id=None):
f77f4b9b
NBV
24 # TODO: Sécurité :
25 # L'échange d'information doit être possible qu'avec les HOST désirés.
26
27 #if request.method != 'POST':
28 # return api_return(STATUS_ERROR_BADMETHOD)
43198a9f 29
f77f4b9b
NBV
30 api = API(request)
31 if hasattr(api, 'api_%s' % method):
43198a9f
NBV
32 if offre_id is None:
33 return getattr(api, 'api_%s' % method)()
34 else:
35 return api.api_candidat_add(offre_id)
14e06ff6 36
f77f4b9b
NBV
37 return api_return(STATUS_ERROR)
38
e1c666fe 39def api_return(status, text='', json=False):
d46075cb 40 content_type = 'text/html'
e1c666fe
NBV
41 if status == STATUS_OK and json:
42 content_type = 'text/json'
e1c666fe
NBV
43 if text is None:
44 if status == STATUS_ERROR:
45 text = 'Error'
46 elif status == STATUS_ERROR_NOT_FOUND:
47 text = 'Resource Not Found'
48 elif status == STATUS_ERROR_PERMISSIONS:
49 text = 'Invalid username or password'
50 elif status == STATUS_ERROR_BADMETHOD:
51 text = 'Invalid request method'
52 elif status == STATUS_OK:
53 text = 'OK'
54
55 r = HttpResponse(status=status, content=text, content_type=content_type)
56
57 if status == STATUS_ERROR_BADMETHOD:
58 r.Allow = 'POST'
59
60 return r
61
62
63class API:
e1c666fe
NBV
64 def __init__(self, request):
65 self.request = request
66
43198a9f 67 def api_candidat_add(self, offre_id):
f77f4b9b 68 vars = dict()
43198a9f 69 offre = emploi.OffreEmploi.objects.get(id=offre_id)
3a542b85 70
f77f4b9b 71 if self.request.method == "POST":
43198a9f 72 try:
43198a9f
NBV
73 candidat = emploi.Candidat()
74 candidat.offre_emploi = offre
75 candidat.nom = self.request.POST['nom']
76 candidat.prenom = self.request.POST['prenom']
77 candidat.genre = self.request.POST['genre']
464e5825
NBV
78 candidat.nationalite = ref.Pays.objects.get\
79 (id=self.request.POST['nationalite'])
43198a9f
NBV
80 candidat.situation_famille = self.request.POST['situation_famille']
81 candidat.nombre_dependant = self.request.POST['nombre_dependant']
82 candidat.niveau_diplome = self.request.POST['niveau_diplome']
83 candidat.employeur_actuel = self.request.POST['employeur_actuel']
84 candidat.poste_actuel = self.request.POST['poste_actuel']
464e5825
NBV
85 candidat.domaine_professionnel = self.request.\
86 POST['domaine_professionnel']
43198a9f
NBV
87 candidat.telephone = self.request.POST['telephone']
88 candidat.email = self.request.POST['email']
89 candidat.adresse = self.request.POST['adresse']
90 candidat.ville = self.request.POST['ville']
91 candidat.etat_province = self.request.POST['etat_province']
92 candidat.code_postal = self.request.POST['code_postal']
93 candidat.pays = ref.Pays.objects.get(id=self.request.POST['pays'])
94 candidat.save()
95
3a542b85
NBV
96 for i in range(0, int(self.request.POST['candidat_piece-TOTAL_FORMS'])-1):
97 if self.request.POST['candidat_piece-' + str(i) + '-nom'] is not None:
98 piece = emploi.CandidatPiece()
99 piece.candidat = candidat
3a542b85 100 piece.nom = self.request.POST['candidat_piece-' + str(i) + '-nom']
3a542b85 101 piece.path = self.request.META['QUERY_STRING']
3a542b85
NBV
102 piece.save()
103
43198a9f 104 evaluateurs = candidat.offre_emploi.evaluateurs.all()
b8b74dee
NBV
105 for evaluateur in evaluateurs:
106 candidat_evaluation = CandidatEvaluation()
43198a9f 107 candidat_evaluation.candidat = candidat
b8b74dee
NBV
108 candidat_evaluation.evaluateur = evaluateur
109 candidat_evaluation.save()
110
43198a9f
NBV
111 try:
112 courriel_template = CourrielTemplate.objects.get(id=1)
113 send_templated_email(candidat, courriel_template)
114 except:
3a542b85
NBV
115 return api_return(STATUS_OK, simplejson.dumps(
116 {'candidat_id': candidat.id}), json=True)
43198a9f
NBV
117 except:
118 return api_return(STATUS_ERROR)
3a542b85
NBV
119 return api_return(STATUS_OK, simplejson.dumps(
120 {'candidat_id': candidat.id}), json=True)
43198a9f
NBV
121 return api_return(STATUS_ERROR_BADMETHOD)
122
f77f4b9b
NBV
123
124 def api_offre_emploi_liste(self):
13b8a64e
NBV
125 offres_emploi = []
126 for offre in emploi.OffreEmploi.objects.all():
127 if offre.est_affiche is True and \
128 offre.statut == "AFFI" and \
129 offre.date_limite >= date.today():
130 offres_emploi.append(offre)
131 if offres_emploi:
132 return api_return(STATUS_OK, simplejson.dumps(
464e5825
NBV
133 [{"id": "%s" % offre.id,
134 "est_affiche": "%s" % offre.est_affiche,
135 "statut": "%s" % offre.statut,
136 "nom": "%s" % offre.nom,
137 "resume": "%s" % offre.resume,
138 "description": "%s" % offre.description,
139 "poste_nom": "%s" % offre.poste_nom,
140 "region": "%s" % offre.region.id,
141 "bureau": "%s" % offre.bureau.id,
142 "date_limite": "%s" % offre.date_limite,
143 "duree_affectation": "%s" % offre.duree_affectation,
144 "renumeration": "%s" % offre.renumeration,
145 "debut_affectation": "%s" % offre.debut_affectation,
146 "lieu_affectation": "%s" % offre.lieu_affectation.id}
13b8a64e
NBV
147 for offre in offres_emploi]), json=True)
148 return api_return(STATUS_OK)
f77f4b9b
NBV
149
150 def api_offre_emploi(self):
151 try:
152 offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
153 except emploi.OffreEmploi.DoesNotExist:
154 return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
13b8a64e
NBV
155
156 if offre.est_affiche is True and \
157 offre.statut == "AFFI" and \
158 offre.date_limite >= date.today():
159 return api_return(STATUS_OK, simplejson.dumps(
160 {"id": "%s" % offre.id,
161 "est_affiche": "%s" % offre.est_affiche,
162 "statut": "%s" % offre.statut,
163 "nom": "%s" % offre.nom,
164 "resume": "%s" % offre.resume,
165 "description": "%s" % offre.description,
166 "poste_nom": "%s" % offre.poste_nom,
167 "region": "%s" % offre.region.id,
168 "bureau": "%s" % offre.bureau.id,
169 "date_limite": "%s" % offre.date_limite,
170 "duree_affectation": "%s" % offre.duree_affectation,
171 "renumeration": "%s" % offre.renumeration,
172 "debut_affectation": "%s" % offre.debut_affectation,
3a542b85 173 "lieu_affectation": "%s" % offre.lieu_affectation.id}),
464e5825 174 json=True)
13b8a64e 175 return api_return(STATUS_OK)
e1c666fe 176