auf.django.emploi
===================
+0.3
+---
+
+* merge de la branche recrutement
+
0.2
---
from django.utils import simplejson
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
+from poster.encode import MultipartParam
+from poster.encode import multipart_encode
+import urllib2
+import settings
+
+
+STATUS_OK = '200 OK'
class API:
def __init__(self, request):
self.request = request
- def offre_emploi_liste(self):
- url = "http://127.0.0.1:8000/api/offre_emploi_liste/"
+ def offre_emploi_liste(self, env):
+
+ if hasattr(settings, "RECRUTEMENT_URL"):
+ url = getattr(settings, "RECRUTEMENT_URL")[env] + "offre_emploi_liste/"
+ else:
+ raise ImportError, "Could not import settings RECRUTEMENT_PATH"
r = req(url)
liste_json = r.body_string()
- liste_offres = simplejson.loads(liste_json)
+ try:
+ liste_offres = simplejson.loads(liste_json)
+ except:
+ return []
obj_offres_emploi = []
for offre_dict in liste_offres:
obj_offres_emploi.append(offre)
return obj_offres_emploi
- def offre_emploi(self, offre_id):
- url = "http://127.0.0.1:8000/api/offre_emploi/?id=%s"
- r = req(url % (offre_id))
+ def offre_emploi(self, offre_id, env):
+ if hasattr(settings, "RECRUTEMENT_URL"):
+ url = getattr(settings, "RECRUTEMENT_URL")[env] + "offre_emploi/?id=%s"
+ else:
+ raise ImportError, "Could not import settings RECRUTEMENT_PATH"
+ r = req(url % offre_id)
offre_json = r.body_string()
- offre_dict = simplejson.loads(offre_json)
+
+ try:
+ offre_dict = simplejson.loads(offre_json)
+ except:
+ return []
obj_offres_emploi = []
offre = emploi.OffreEmploi()
obj_offres_emploi.append(offre)
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)
-
+ def candidat_add(self, offre_id, env):
+ if hasattr(settings, "RECRUTEMENT_URL"):
+ url = getattr(settings, "RECRUTEMENT_URL")[env] + "candidat_add/%s"
+ else:
+ raise ImportError, "Could not import settings RECRUTEMENT_PATH"
+ r = Resource(url % offre_id)
+ mp = MultipartParam.from_file('cv', self.request.POST.get('candidat_piece-0-nom'))
+ datagen, headers = multipart_encode([image_param])
+ resp = r.post(payload=self.request.FILES, params_dict=self.request.POST)
+ if resp.status == STATUS_OK:
+ candidat_id = simplejson.loads(resp.body_string())['candidat_id']
+ return candidat_id
+ return None
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)
+ def __init__(self, *args, **kwargs):
+ super(CandidatPieceForm, self).__init__(*args, **kwargs)
+
+ def save(self, *args, **kwargs):
+ super(CandidatPieceForm, self).save(*args, **kwargs)
+
+
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',
{{ offre_emploi }}. Ces champs seront \
automatiquement remplacés par les informations de \
chaque candidat."
-
+HELP_TEXT_EN_AFFICHAGE = "En cochant cette case, l'offre d'emploi sera affichée\
+ sur le site institutionnel dès qu'elle aura le statut \
+ 'En diffusion' et ce, jusqu'à la date limite."
STATUT_OFFRE_EMPLOI_CHOICES = (
('NOUV', 'Nouveau'),
- ('AFFI', 'Offre d\'emploi en affichage'),
+ ('AFFI', 'En diffusion'),
('EVAL', 'En évaluation des candidatures'),
('ENTR', 'En entrevue'),
('TERM', 'Terminé'),
class OffreEmploi(Metadata):
est_affiche = models.BooleanField(default=False,
- verbose_name="En affichage sur le site")
+ verbose_name="À afficher sur le site institutionnel",
+ help_text=HELP_TEXT_EN_AFFICHAGE)
statut = models.CharField(max_length=4, choices=STATUT_OFFRE_EMPLOI_CHOICES,
default='NOUV')
+ date_limite = models.DateField(verbose_name="Date limite",
+ help_text=HELP_TEXT_FORMAT_DATE,)
nom = models.CharField(max_length=255)
- resume = models.TextField(verbose_name="Résumé")
+ resume = models.TextField(verbose_name="Résumé", blank=True)
description = models.TextField()
poste = models.CharField(max_length=255)
poste_nom = models.CharField(max_length=255)
- date_limite = models.DateField(verbose_name="Date limite",
- help_text=HELP_TEXT_FORMAT_DATE,)
region = models.ForeignKey(ref.Region, db_column='region',
verbose_name="Région")
bureau = models.ForeignKey(ref.Bureau, db_column='bureau', )
adresse = models.CharField(max_length=255)
ville = models.CharField(max_length=255)
etat_province = models.CharField(max_length=255,
- verbose_name="État/Province")
+ verbose_name="État/Province", blank=True)
code_postal = models.CharField(max_length=255, blank=True)
pays = models.ForeignKey(ref.Pays, db_column='pays',
related_name='+')
base_url=settings.PRIVE_MEDIA_URL)
def candidat_piece_dispatch(instance, filename):
- path = u'%s/%s/%s_%s_%s/%s/%s' % ('emplois', instance.candidat.offre_emploi.id,
- instance.candidat.nom, instance.candidat.prenom, instance.candidat.id,
- instance.nom, filename)
+ path = u'%s/%s_%s_%s/%s/%s' % ('emplois', instance.candidat.nom,
+ instance.candidat.prenom, instance.candidat.id, instance.nom, filename)
return path
class CandidatPiece(models.Model):
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = '/media/'
PRIVE_MEDIA_URL = '/prive/'
+
+RECRUTEMENT_URL = {'DEV':'http://127.0.0.1:8000/api/',
+ 'TEST':'http://test.ressources-humaines.auf.org/api/',
+ 'PROD':'http://ressources-humaines.auf.org/api/',}
--- /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 %}
import sys, os
name = 'auf.django.emploi'
-version = '0.2'
+version = '0.3'
setup(name=name,
version=version,