1878: modification du modèle OffreEmploi
[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
43198a9f 8import datamaster_modeles.models as ref
e1c666fe 9from auf.django.emploi import models as emploi
f77f4b9b 10from auf.django.emploi import forms as emploiForms
b8b74dee
NBV
11from project.recrutement.models import Evaluateur, CandidatEvaluation, \
12 CourrielTemplate
11f7b571 13from project.recrutement.views import send_templated_email
e1c666fe
NBV
14
15STATUS_OK = 200
16
17STATUS_ERROR = 400
18STATUS_ERROR_NOT_FOUND = 404
19STATUS_ERROR_PERMISSIONS = 403
20STATUS_ERROR_BADMETHOD = 405
21
43198a9f 22def api(request, method, offre_id=None):
f77f4b9b
NBV
23 # TODO: Sécurité :
24 # L'échange d'information doit être possible qu'avec les HOST désirés.
25
26 #if request.method != 'POST':
27 # return api_return(STATUS_ERROR_BADMETHOD)
43198a9f 28
f77f4b9b
NBV
29 api = API(request)
30 if hasattr(api, 'api_%s' % method):
43198a9f
NBV
31 if offre_id is None:
32 return getattr(api, 'api_%s' % method)()
33 else:
34 return api.api_candidat_add(offre_id)
14e06ff6 35
f77f4b9b
NBV
36 return api_return(STATUS_ERROR)
37
e1c666fe 38def api_return(status, text='', json=False):
d46075cb 39 content_type = 'text/html'
e1c666fe
NBV
40 if status == STATUS_OK and json:
41 content_type = 'text/json'
e1c666fe
NBV
42 if text is None:
43 if status == STATUS_ERROR:
44 text = 'Error'
45 elif status == STATUS_ERROR_NOT_FOUND:
46 text = 'Resource Not Found'
47 elif status == STATUS_ERROR_PERMISSIONS:
48 text = 'Invalid username or password'
49 elif status == STATUS_ERROR_BADMETHOD:
50 text = 'Invalid request method'
51 elif status == STATUS_OK:
52 text = 'OK'
53
54 r = HttpResponse(status=status, content=text, content_type=content_type)
55
56 if status == STATUS_ERROR_BADMETHOD:
57 r.Allow = 'POST'
58
59 return r
60
61
62class API:
e1c666fe
NBV
63 def __init__(self, request):
64 self.request = request
65
43198a9f 66 def api_candidat_add(self, offre_id):
f77f4b9b 67 vars = dict()
43198a9f 68 offre = emploi.OffreEmploi.objects.get(id=offre_id)
f77f4b9b 69 if self.request.method == "POST":
43198a9f
NBV
70 try:
71
72 candidat = emploi.Candidat()
73 candidat.offre_emploi = offre
74 candidat.nom = self.request.POST['nom']
75 candidat.prenom = self.request.POST['prenom']
76 candidat.genre = self.request.POST['genre']
77 candidat.nationalite = ref.Pays.objects.get(id=self.request.POST['nationalite'])
78 candidat.situation_famille = self.request.POST['situation_famille']
79 candidat.nombre_dependant = self.request.POST['nombre_dependant']
80 candidat.niveau_diplome = self.request.POST['niveau_diplome']
81 candidat.employeur_actuel = self.request.POST['employeur_actuel']
82 candidat.poste_actuel = self.request.POST['poste_actuel']
83 candidat.domaine_professionnel = self.request.POST['domaine_professionnel']
84 candidat.telephone = self.request.POST['telephone']
85 candidat.email = self.request.POST['email']
86 candidat.adresse = self.request.POST['adresse']
87 candidat.ville = self.request.POST['ville']
88 candidat.etat_province = self.request.POST['etat_province']
89 candidat.code_postal = self.request.POST['code_postal']
90 candidat.pays = ref.Pays.objects.get(id=self.request.POST['pays'])
91 candidat.save()
92
93 evaluateurs = candidat.offre_emploi.evaluateurs.all()
b8b74dee
NBV
94 for evaluateur in evaluateurs:
95 candidat_evaluation = CandidatEvaluation()
43198a9f 96 candidat_evaluation.candidat = candidat
b8b74dee
NBV
97 candidat_evaluation.evaluateur = evaluateur
98 candidat_evaluation.save()
99
43198a9f
NBV
100 try:
101 courriel_template = CourrielTemplate.objects.get(id=1)
102 send_templated_email(candidat, courriel_template)
103 except:
104 return api_return(STATUS_OK)
105 except:
106 return api_return(STATUS_ERROR)
107 return api_return(STATUS_OK)
108 return api_return(STATUS_ERROR_BADMETHOD)
109
f77f4b9b
NBV
110
111 def api_offre_emploi_liste(self):
112 return api_return(STATUS_OK, simplejson.dumps(
e1c666fe 113 [{"id": "%s" % offre.id,
50fe3590
NBV
114 "est_affiche": "%s" % offre.est_affiche,
115 "statut": "%s" % offre.statut,
e1c666fe
NBV
116 "nom": "%s" % offre.nom,
117 "resume": "%s" % offre.resume,
118 "description": "%s" % offre.description,
e2968e84 119 "poste_nom": "%s" % offre.poste_nom,
d46075cb
NBV
120 "region": "%s" % offre.region.id,
121 "bureau": "%s" % offre.bureau.id,
e1c666fe
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}
e1c666fe 127 for offre in emploi.OffreEmploi.objects.all()]), json=True)
f77f4b9b
NBV
128
129 def api_offre_emploi(self):
130 try:
131 offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
132 except emploi.OffreEmploi.DoesNotExist:
133 return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
134 return api_return(STATUS_OK, simplejson.dumps(
50fe3590
NBV
135 {"id": "%s" % offre.id,
136 "est_affiche": "%s" % offre.est_affiche,
137 "statut": "%s" % offre.statut,
f77f4b9b
NBV
138 "nom": "%s" % offre.nom,
139 "resume": "%s" % offre.resume,
140 "description": "%s" % offre.description,
e2968e84 141 "poste_nom": "%s" % offre.poste_nom,
d46075cb
NBV
142 "region": "%s" % offre.region.id,
143 "bureau": "%s" % offre.bureau.id,
f77f4b9b
NBV
144 "date_limite": "%s" % offre.date_limite,
145 "duree_affectation": "%s" % offre.duree_affectation,
146 "renumeration": "%s" % offre.renumeration,
147 "debut_affectation": "%s" % offre.debut_affectation,
d46075cb 148 "lieu_affectation": "%s" % offre.lieu_affectation.id} ), json=True)
e1c666fe 149