0.3
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 12 Aug 2011 19:02:00 +0000 (15:02 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 12 Aug 2011 19:02:00 +0000 (15:02 -0400)
CHANGES
auf/django/emploi/api.py
auf/django/emploi/forms.py
auf/django/emploi/models.py
auf/django/emploi/settings.py
auf/django/emploi/templates/emploi/pieces.html [new file with mode: 0644]
auf/django/emploi/templates/emploi/postuler_appel_offre.html [new file with mode: 0644]
auf/django/emploi/templates/recrutement/pieces.html [deleted file]
auf/django/emploi/templates/recrutement/postuler_appel_offre.html [deleted file]
setup.py

diff --git a/CHANGES b/CHANGES
index 69ab264..15bc7b9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,11 @@
 auf.django.emploi
 ===================
 
+0.3
+---
+
+* merge de la branche recrutement
+
 0.2
 ---
 
index 5a7e778..9e9d815 100644 (file)
@@ -4,19 +4,35 @@ from django.template import Context, RequestContext
 
 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:
@@ -37,11 +53,18 @@ class API:
             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()
@@ -61,8 +84,17 @@ class API:
         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
         
index 7f963cc..7a4a9e3 100644 (file)
@@ -7,21 +7,29 @@ from django.forms import ModelForm
 
 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): 
@@ -33,7 +41,7 @@ class PostulerOffreEmploiForm(ModelForm):
         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', 
index 8fa2e92..35a0851 100755 (executable)
@@ -17,11 +17,13 @@ HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
                             {{ 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é'),
@@ -69,16 +71,17 @@ class Metadata(models.Model):
 
 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', )
@@ -127,7 +130,7 @@ class Candidat(Metadata):
     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='+')
@@ -148,9 +151,8 @@ storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
                             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):
index 101b2a1..0772d21 100644 (file)
@@ -15,3 +15,7 @@ PRIVE_MEDIA_ROOT = getattr(settings, 'OE_PRIV_MEDIA_ROOT',
 # 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/',}
diff --git a/auf/django/emploi/templates/emploi/pieces.html b/auf/django/emploi/templates/emploi/pieces.html
new file mode 100644 (file)
index 0000000..d8587d7
--- /dev/null
@@ -0,0 +1,30 @@
+<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>
diff --git a/auf/django/emploi/templates/emploi/postuler_appel_offre.html b/auf/django/emploi/templates/emploi/postuler_appel_offre.html
new file mode 100644 (file)
index 0000000..f6931be
--- /dev/null
@@ -0,0 +1,123 @@
+{% 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 %}
diff --git a/auf/django/emploi/templates/recrutement/pieces.html b/auf/django/emploi/templates/recrutement/pieces.html
deleted file mode 100644 (file)
index d8587d7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<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>
diff --git a/auf/django/emploi/templates/recrutement/postuler_appel_offre.html b/auf/django/emploi/templates/recrutement/postuler_appel_offre.html
deleted file mode 100644 (file)
index 53569f0..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-{% 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 %}
index 07cd12a..0298bbb 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
 import sys, os
 
 name = 'auf.django.emploi'
-version = '0.2'
+version = '0.3'
 
 setup(name=name,
       version=version,