from django.utils import simplejson
from django.contrib import messages
+import datamaster_modeles.models as ref
from auf.django.emploi import models as emploi
from auf.django.emploi import forms as emploiForms
from project.recrutement.models import Evaluateur, CandidatEvaluation, \
STATUS_ERROR_PERMISSIONS = 403
STATUS_ERROR_BADMETHOD = 405
-def api(request, method):
+def api(request, method, offre_id=None):
# TODO: Sécurité :
# L'échange d'information doit être possible qu'avec les HOST désirés.
#if request.method != 'POST':
# return api_return(STATUS_ERROR_BADMETHOD)
-
+
api = API(request)
if hasattr(api, 'api_%s' % method):
- return getattr(api, 'api_%s' % method)()
+ if offre_id is None:
+ return getattr(api, 'api_%s' % method)()
+ else:
+ return api.api_candidat_add(offre_id)
return api_return(STATUS_ERROR)
def __init__(self, request):
self.request = request
- def api_candidat_add(self):
+ def api_candidat_add(self, offre_id):
vars = dict()
- offre_emploi = get_object_or_404(emploi.OffreEmploi, id=self.request.GET.get('id'))
- cand = emploi.Candidat()
- cand.offre_emploi = offre_emploi
-
+ offre = emploi.OffreEmploi.objects.get(id=offre_id)
if self.request.method == "POST":
- form = emploiForms.PostulerOffreEmploiForm(self.request.POST,
- instance=cand, offre_emploi=offre_emploi)
- piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES,
- instance=cand)
-
- if form.is_valid() and piecesForm.is_valid():
- offre = form.save()
- piecesForm.instance = offre
- piecesForm.save()
-
- courriel_template = CourrielTemplate.objects.get(id=1)
- send_templated_email(cand, courriel_template)
-
- evaluateurs = offre_emploi.evaluateurs.all()
+ try:
+
+ candidat = emploi.Candidat()
+ candidat.offre_emploi = offre
+ candidat.nom = self.request.POST['nom']
+ candidat.prenom = self.request.POST['prenom']
+ candidat.genre = self.request.POST['genre']
+ candidat.nationalite = ref.Pays.objects.get(id=self.request.POST['nationalite'])
+ candidat.situation_famille = self.request.POST['situation_famille']
+ candidat.nombre_dependant = self.request.POST['nombre_dependant']
+ candidat.niveau_diplome = self.request.POST['niveau_diplome']
+ candidat.employeur_actuel = self.request.POST['employeur_actuel']
+ candidat.poste_actuel = self.request.POST['poste_actuel']
+ candidat.domaine_professionnel = self.request.POST['domaine_professionnel']
+ candidat.telephone = self.request.POST['telephone']
+ candidat.email = self.request.POST['email']
+ candidat.adresse = self.request.POST['adresse']
+ candidat.ville = self.request.POST['ville']
+ candidat.etat_province = self.request.POST['etat_province']
+ candidat.code_postal = self.request.POST['code_postal']
+ candidat.pays = ref.Pays.objects.get(id=self.request.POST['pays'])
+ candidat.save()
+
+ evaluateurs = candidat.offre_emploi.evaluateurs.all()
for evaluateur in evaluateurs:
candidat_evaluation = CandidatEvaluation()
- candidat_evaluation.candidat = cand
+ candidat_evaluation.candidat = candidat
candidat_evaluation.evaluateur = evaluateur
candidat_evaluation.save()
- return api_return(STATUS_OK)
- else:
- messages.add_message(self.request, messages.ERROR,
- 'Il y a des erreurs dans le formulaire.')
- else:
- form = emploiForms.PostulerOffreEmploiForm(instance=cand,
- offre_emploi=offre_emploi)
- piecesForm = emploiForms.CandidatPieceForm(instance=cand)
-
- vars.update(dict(form=form, candidat=cand, piecesForm=piecesForm, ))
-
- return render_to_response('recrutement/postuler_appel_offre.html', vars,
- RequestContext(self.request))
-
+ try:
+ courriel_template = CourrielTemplate.objects.get(id=1)
+ send_templated_email(candidat, courriel_template)
+ except:
+ return api_return(STATUS_OK)
+ except:
+ return api_return(STATUS_ERROR)
+ return api_return(STATUS_OK)
+ return api_return(STATUS_ERROR_BADMETHOD)
+
def api_offre_emploi_liste(self):
return api_return(STATUS_OK, simplejson.dumps(
kwargs2 = kwargs.copy()
kwargs2['commit'] = False
offre = super(OffreEmploiForm, self).save(*args, **kwargs2)
- offre.poste = self.cleaned_data.get("poste")
+ offre.poste = self.cleaned_data.get("poste").id
offre.poste_nom = self.cleaned_data.get("poste").nom
if 'commit' not in kwargs or kwargs['commit']:
offre.save()
return render_to_response("recrutement/envoyer_courriel_candidats.html",
Context(c), context_instance = RequestContext(request))
-"""def postuler_appel_offre(request):
- vars = dict()
- offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
- candidat = Candidat()
- candidat.offre_emploi = offre_emploi
-
- if request.method == "POST":
- form = PostulerOffreEmploiForm(request.POST,
- instance=candidat, offre_emploi=offre_emploi)
- piecesForm = CandidatPieceForm(request.POST, request.FILES,
- instance=candidat)
- if form.is_valid() and piecesForm.is_valid():
- offre = form.save()
- piecesForm.instance = offre
- piecesForm.save()
-
- courriel_template = CourrielTemplate.objects.get(id=1)
- send_templated_email(candidat, courriel_template)
-
- messages.add_message(request, messages.SUCCESS,
- "Votre application à l'appel d'offre d'emploi a \
- été effectuée.")
- return redirect("admin:recrutement_offreemploi_changelist")
- else:
- messages.add_message(request, messages.ERROR,
- 'Il y a des erreurs dans le formulaire.')
- else:
- form = PostulerOffreEmploiForm(instance=candidat,
- offre_emploi=offre_emploi)
- piecesForm = CandidatPieceForm(instance=candidat)
-
- vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, ))
-
- return render_to_response('recrutement/postuler_appel_offre.html', vars,
- RequestContext(request))
-"""
-
def affecter_evaluateurs_offre_emploi(request):
offre_emploi_ids = request.GET.get('ids').split(',')
offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids)
url(r'^captcha/', include('captcha.urls')),
url(r'^admin_tools/', include('admin_tools.urls')),
(r'^admin/', include(admin.site.urls)),
+ url(r'^api/(?P<method>[a-z_-]+)/(?P<offre_id>\d+)$', 'recrutement.api.api',
+ name='recrutement_api'),
url(r'^api/(?P<method>[a-z_-]+)/$', 'recrutement.api.api',
name='recrutement_api'),
(r'^connexion/$', 'django.contrib.auth.views.login'),
from auf.django.emploi import models as emploi
from auf.django.emploi import forms as emploiForms
from restkit import request as req
+from restkit import Resource
+from httplib2 import Http
+from urllib import urlencode
import datamaster_modeles.models as ref
class API:
return obj_offres_emploi
def candidat_add(self, offre_id):
- url = "http://127.0.0.1:8000/api/candidat_add/?id=%s" % (offre_id)
- return redirect(url)
+ url = "http://127.0.0.1:8000/api/candidat_add/%s" % offre_id
+ r = Resource(url)
+ import pdb;pdb.set_trace()
+ resp = r.post(payload=self.request.POST)
+
+ return resp.status
from captcha.fields import CaptchaField
-from auf.django.emploi import models as emploi
+from models import *
################################################################################
# OFFRE EMPLOI
################################################################################
-class CandidatPieceForm(inlineformset_factory(emploi.Candidat,
- emploi.CandidatPiece)):
- nom = forms.MultipleChoiceField(choices=emploi.TYPE_PIECE_CHOICES,
+class CandidatPieceForm(inlineformset_factory(Candidat,
+ CandidatPiece)):
+ nom = forms.MultipleChoiceField(choices=TYPE_PIECE_CHOICES,
widget=CheckboxSelectMultiple)
class PostulerOffreEmploiForm(ModelForm):
captcha = CaptchaField()
+ action = "http://127.0.0.1:8000/api/candidat_add/"
def __init__(self, *args, **kwargs):
- self.offre_emploi = kwargs.pop('offre_emploi')
+ self.offre_emploi = kwargs.pop('offre_id')
super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
return postulation
class Meta:
- model = emploi.Candidat
+ model = Candidat
exclude = ('actif', 'offre_emploi',)
fields = ('nom', 'prenom', 'genre', 'nationalite', 'situation_famille',
'nombre_dependant', 'niveau_diplome', 'employeur_actuel',
--- /dev/null
+<table>
+ {% for f in piecesForm.management_form %}
+ {{ f }}
+ {% endfor %}
+ <tr>
+ <th></th>
+ {% for field in piecesForm.forms.0 %}
+ {% if not field.is_hidden %}
+ <th>{{ field.label }}</th>
+ {% endif %}
+ {% endfor %}
+ </tr>
+ {% for f in piecesForm.forms %}
+ <tr>
+ <td>
+ {{ f.errors }}
+ {% if f.initial.fichier %}
+ <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
+ {% endif %}
+ </td>
+ {% for field in f %}
+ {% if not field.is_hidden %}
+ <td>{{ field }}</td>
+ {% else %}
+ {{ field }}
+ {% endif %}
+ {% endfor %}
+ </tr>
+ {% endfor %}
+</table>
--- /dev/null
+{% extends "base.html" %}
+{% block Contenu%}
+
+<div id="content-main">
+ {% block object-tools %}{% endblock %}
+
+ <h1>Poster pour un appel d'offre d'emploi</h1>
+
+ <form action="" method="post" enctype="multipart/form-data">
+ <fieldset>
+ <h2>Informations personnelles</h2>
+ <table id="informations_personnelles">
+ <tbody>
+ <tr>
+ <td>{{ form.prenom.label }}</td>
+ <td>{{ form.prenom }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.nom.label }}</td>
+ <td>{{ form.nom }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.genre.label }}</td>
+ <td>{{ form.genre }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.nationalite.label }}</td>
+ <td>{{ form.nationalite }}</td>
+ <tr>
+ <td>{{ form.situation_famille.label }}</td>
+ <td>{{ form.situation_famille }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.nombre_dependant.label }}</td>
+ <td>{{ form.nombre_dependant }}<br />
+ <span class="info">{{ form.nombre_dependant.help_text }}</span>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </fieldset>
+ <fieldset>
+ <h2>Coordonnées</h2>
+ <table id="coordonnees">
+ <tbody>
+ <tr>
+ <td>{{ form.telephone.label }}</td>
+ <td>{{ form.telephone }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.email.label }}</td>
+ <td>{{ form.email }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.adresse.label }}</td>
+ <td>{{ form.adresse }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.ville.label }}</td>
+ <td>{{ form.ville }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.etat_province.label }}</td>
+ <td>{{ form.etat_province }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.code_postal.label }}</td>
+ <td>{{ form.code_postal }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.pays.label }}</td>
+ <td>{{ form.pays }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </fieldset>
+ <fieldset>
+ <h2>Informations professionnelles</h2>
+ <table id="informations_professionnelles">
+ <tbody>
+ <tr>
+ <td>{{ form.niveau_diplome.label }}</td>
+ <td>{{ form.niveau_diplome }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.employeur_actuel.label }}</td>
+ <td>{{ form.employeur_actuel }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.poste_actuel.label }}</td>
+ <td>{{ form.poste_actuel }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.domaine_professionnel.label }}</td>
+ <td>{{ form.domaine_professionnel }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </fieldset>
+ <fieldset>
+ <h2>Pièces jointes</h2>
+ <p class="info">CV, lettre de motivation...</p>
+ {% include "recrutement/pieces.html" %}
+ </fieldset>
+ <fieldset>
+ <h2>Vérification CAPTCHA</h2>
+ <p class="info">Entrez les caractères figurant dans l'image ci-dessous.</p>
+ <tr>
+ <td>
+ {{ form.captcha }}
+ {{ form.captcha.errors }}
+ </td>
+ </tr>
+ </fieldset>
+ <div class="submit-row">
+ <input type="submit" name="save" value="Enregistrer" />
+ </div>
+ </form>
+
+
+</div>
+
+{% endblock %}
+++ /dev/null
-<table>
- {% for f in piecesForm.management_form %}
- {{ f }}
- {% endfor %}
- <tr>
- <th></th>
- {% for field in piecesForm.forms.0 %}
- {% if not field.is_hidden %}
- <th>{{ field.label }}</th>
- {% endif %}
- {% endfor %}
- </tr>
- {% for f in piecesForm.forms %}
- <tr>
- <td>
- {{ f.errors }}
- {% if f.initial.fichier %}
- <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
- {% endif %}
- </td>
- {% for field in f %}
- {% if not field.is_hidden %}
- <td>{{ field }}</td>
- {% else %}
- {{ field }}
- {% endif %}
- {% endfor %}
- </tr>
- {% endfor %}
-</table>
+++ /dev/null
-{% extends 'base.html' %}
-{% load adminmedia %}
-
-{% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Accueil{% endblock %}
-
-{% block main %}
-<div id="content-main">
- {% block object-tools %}{% endblock %}
-
-
-
-
- <div class="module">
- <h2>Poster pour un appel d'offre d'emploi</h2>
- </div>
-
- <form action="" method="post" enctype="multipart/form-data">
- <fieldset>
- <h2>Informations personnelles</h2>
- <table id="informations_personnelles">
- <tbody>
- <tr>
- <td>{{ form.prenom.label }}</td>
- <td>{{ form.prenom }}</td>
- </tr>
- <tr>
- <td>{{ form.nom.label }}</td>
- <td>{{ form.nom }}</td>
- </tr>
- <tr>
- <td>{{ form.genre.label }}</td>
- <td>{{ form.genre }}</td>
- </tr>
- <tr>
- <td>{{ form.nationalite.label }}</td>
- <td>{{ form.nationalite }}</td>
- <tr>
- <td>{{ form.situation_famille.label }}</td>
- <td>{{ form.situation_famille }}</td>
- </tr>
- <tr>
- <td>{{ form.nombre_dependant.label }}</td>
- <td>{{ form.nombre_dependant }}<br />
- <span class="info">{{ form.nombre_dependant.help_text }}
- </span>
- </td>
- </tr>
- </tbody>
- </table>
- </fieldset>
- <fieldset>
- <h2>Coordonnées</h2>
- <table id="coordonnees">
- <tbody>
- <tr>
- <td>{{ form.telephone.label }}</td>
- <td>{{ form.telephone }}</td>
- </tr>
- <tr>
- <td>{{ form.email.label }}</td>
- <td>{{ form.email }}</td>
- </tr>
- <tr>
- <td>{{ form.adresse.label }}</td>
- <td>{{ form.adresse }}</td>
- </tr>
- <tr>
- <td>{{ form.ville.label }}</td>
- <td>{{ form.ville }}</td>
- </tr>
- <tr>
- <td>{{ form.etat_province.label }}</td>
- <td>{{ form.etat_province }}</td>
- </tr>
- <tr>
- <td>{{ form.code_postal.label }}</td>
- <td>{{ form.code_postal }}</td>
- </tr>
- <tr>
- <td>{{ form.pays.label }}</td>
- <td>{{ form.pays }}</td>
- </tr>
- </tbody>
- </table>
- </fieldset>
- <fieldset>
- <h2>Informations professionnelles</h2>
- <table id="informations_professionnelles">
- <tbody>
- <tr>
- <td>{{ form.niveau_diplome.label }}</td>
- <td>{{ form.niveau_diplome }}</td>
- </tr>
- <tr>
- <td>{{ form.employeur_actuel.label }}</td>
- <td>{{ form.employeur_actuel }}</td>
- </tr>
- <tr>
- <td>{{ form.poste_actuel.label }}</td>
- <td>{{ form.poste_actuel }}</td>
- </tr>
- <tr>
- <td>{{ form.domaine_professionnel.label }}</td>
- <td>{{ form.domaine_professionnel }}</td>
- </tr>
- </tbody>
- </table>
- </fieldset>
- <fieldset>
- <h2>Pièces jointes</h2>
- <p class="info">CV, lettre de motivation...</p>
- {% include "recrutement/pieces.html" %}
- </fieldset>
- <fieldset>
- <h2>Vérification CAPTCHA</h2>
- <p class="info">Entrez les caractères figurant dans l'image ci-dessous.</p>
- <tr>
- <td>
- {{ form.captcha }}
- {{ form.captcha.errors }}
- </td>
- </tr>
- </fieldset>
- <div class="submit-row">
- <input type="submit" name="save" value="Enregistrer" />
- </div>
- </form>
-
-
-
-</div>
-
-{% endblock %}