fixup
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 19 Mar 2012 18:24:15 +0000 (14:24 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 19 Mar 2012 18:24:15 +0000 (14:24 -0400)
14 files changed:
buildout.cfg
project/recrutement/admin.py
project/recrutement/forms.py
project/recrutement/models.py
project/recrutement/templates/recrutement/affecter_evaluateurs.html
project/recrutement/views.py
project/recrutement/workflow.py
project/rh/groups.py
project/urls.py
src/auf.django.emploi/CHANGES
src/auf.django.emploi/auf/__init__.py
src/auf.django.emploi/auf/django/__init__.py
src/auf.django.emploi/auf/django/emploi/models.py
src/auf.django.emploi/setup.py

index 29f61b4..635c775 100644 (file)
@@ -50,7 +50,7 @@ django = 1.3.1
 south = 0.7
 auf.django.skin = 1.5
 auf.django.auth = 0.5.5dev
-auf.django.emploi = 0.7dev
+auf.django.emploi = 1.0dev
 auf.django.metadata = 0.6dev
 auf.django.permissions = 0.1
 auf.django.references = 0.7
index 83018c9..74e9c7e 100644 (file)
@@ -13,26 +13,13 @@ from project.dae.utils import get_employe_from_user as get_emp
 from recrutement.models import *
 from recrutement.workflow import grp_evaluateurs_recrutement, \
                     grp_drh_recrutement, grp_directeurs_bureau_recrutement, \
-                    grp_administrateurs_recrutement
+                    grp_administrateurs_recrutement, \
+                    grp_correspondants_rh_recrutement
 from recrutement.forms import *
 
 ### CONSTANTES
 IMPLANTATIONS_CENTRALES = [15, 19]
 
-class ProxyEvaluateur(Evaluateur.offres_emploi.through):
-    """
-    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
-    plus ergonomique.
-    """
-    class Meta:
-        proxy = True
-        verbose_name = "évaluateur"
-
-class EvaluateurInline(admin.TabularInline):
-    model = ProxyEvaluateur
-    fields = ('evaluateur',)
-    extra = 1
-
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'date_limite', 'region',  'statut', 
@@ -41,7 +28,6 @@ class OffreEmploiAdmin(VersionAdmin):
     list_filter = ('statut',)
     actions = ['affecter_evaluateurs_offre_emploi', ]
     form = OffreEmploiForm
-    inlines = [EvaluateurInline, ]
 
     ### Actions à afficher
     def get_actions(self, request):
@@ -112,25 +98,23 @@ class OffreEmploiAdmin(VersionAdmin):
         
     ### Queryset
     def queryset(self, request):
-        qs = self.model._default_manager.get_query_set()
+        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes:
-            return qs.select_related('offre_emploi')
+            return qs
 
         if grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_correspondants_rh_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
             employe = get_emp(request.user)
-            return qs.select_related('offre_emploi').\
-                                    filter(region=employe.implantation.region)
+            return qs.filter(region=employe.implantation.region)
 
         if grp_evaluateurs_recrutement in user_groupes:
-            try:
-                user = Evaluateur.objects.get(user=request.user)               
-            except Evaluateur.DoesNotExist:       
-                return qs.none()       
-                     
-            ids = [o.id for o in user.offres_emploi.all()]
-            return qs.select_related('offre_emploi').filter(id__in=ids)            
+            evaluateur = Evaluateur.objects.get(user=request.user)
+            offre_ids = [e.candidat.offre_emploi_id for e in
+                    CandidatEvaluation.objects.select_related('candidat').filter(evaluateur=evaluateur)]
+            return qs.filter(id__in=offre_ids)
+
         return qs.none()
 
     ### Permission add, delete, change
@@ -184,15 +168,9 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
     )        
     inlines = []
 
-    ### Actions à afficher
-    def get_actions(self, request):
-        actions = super(ProxyOffreEmploiAdmin, self).get_actions(request)
-        del actions['affecter_evaluateurs_offre_emploi']
-        return actions
 
     ### Lieu de redirection après le change 
     def response_change(self, request, obj):
-        response = super(ProxyOffreEmploiAdmin,self).response_change(request,obj)
         return HttpResponseRedirect(reverse\
                             ('admin:recrutement_proxyoffreemploi_changelist'))
 
@@ -250,11 +228,11 @@ class CandidatEvaluationInline(admin.TabularInline):
 
 class CandidatAdmin(VersionAdmin):
     exclude = ('actif', )
-    date_hierarchy = 'date_creation'
-    list_display = ('nom', 'prenom', 'offre_emploi','statut',
-                    'voir_offre_emploi', 'calculer_moyenne', 
-                    'afficher_candidat',)
-    list_filter = ('offre_emploi', )
+    list_editable = ('statut', )
+    list_display = ('nom', 'prenom', 'offre_emploi',
+                    'voir_offre_emploi', 'calculer_moyenne',
+                    'afficher_candidat', '_date_creation', 'statut', )
+    list_filter = ('offre_emploi', 'offre_emploi__region', 'statut', )
 
     fieldsets = (
         ("Offre d'emploi", {
@@ -283,6 +261,11 @@ class CandidatAdmin(VersionAdmin):
 
     actions = ['envoyer_courriel_candidats']
 
+    def _date_creation(self, obj):
+        return obj.date_creation
+    _date_creation.order_field = "date_creation"
+    _date_creation.short_description = "Date de création"
+
     ### Actions à afficher
     def get_actions(self, request):
         actions = super(CandidatAdmin, self).get_actions(request)
@@ -323,18 +306,31 @@ class CandidatAdmin(VersionAdmin):
     ### Calculer la moyenne des notes
     def calculer_moyenne(self, obj):
         evaluations = CandidatEvaluation.objects.filter(candidat=obj)
-        offre_emploi = obj.offre_emploi
 
-        notes = [evaluation.note for evaluation in evaluations.all() \
+        notes = [evaluation.note for evaluation in evaluations \
                     if evaluation.note is not None]
  
         if len(notes) > 0:
             moyenne_votes = float(sum(notes)) / len(notes)
         else:
             moyenne_votes = "Non disponible"
-        return moyenne_votes
+
+        totales = len(evaluations)
+        faites = len(notes)
+
+        if obj.statut  == 'REC':
+            if totales == faites:
+                color = "green"
+            elif faites > 0 and float(totales) / float(faites) >= 2:
+                color = "orange"
+            else:
+                color = "red"
+        else:
+            color = "black"
+
+        return """<span style="color: %s;">%s (%s/%s)</span>""" % (color, moyenne_votes, faites, totales)
     calculer_moyenne.allow_tags = True
-    calculer_moyenne.short_description = "Moyenne des notes"
+    calculer_moyenne.short_description = "Notation"
 
     ### Permissions add, delete, change
     def has_add_permission(self, request):
@@ -358,6 +354,7 @@ class CandidatAdmin(VersionAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
+            grp_correspondants_rh_recrutement in user_groupes or \
             grp_drh_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
@@ -380,24 +377,22 @@ class CandidatAdmin(VersionAdmin):
             return qs.select_related('candidats')   
 
         if grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_correspondants_rh_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
             employe = get_emp(request.user)
             return qs.select_related('candidats').\
-                        filter(offre_emploi__region=employe.implantation.region)            
+                        filter(offre_emploi__region=employe.implantation.region)
 
         if grp_evaluateurs_recrutement in user_groupes:
-            try:
-                user = Evaluateur.objects.get(user=request.user)
-            except Evaluateur.DoesNotExist:       
-                return qs.none()   
-
-            offres_emploi = [o for o in user.offres_emploi.all()]
-            candidat_ids = [o.candidat.id for o in offres_emploi]
+            evaluateur = Evaluateur.objects.get(user=request.user)
+            candidat_ids = [e.candidat.id for e in
+                    CandidatEvaluation.objects.filter(evaluateur=evaluateur)]
             return qs.select_related('candidats').filter(id__in=candidat_ids)            
         return qs.none()    
 
 
 class ProxyCandidatAdmin(CandidatAdmin):
+    list_editable = ()
     readonly_fields = ('statut', 'offre_emploi', 'prenom', 'nom',
                         'genre', 'nationalite', 'situation_famille', 
                         'nombre_dependant', 'telephone', 'email', 'adresse', 
@@ -469,9 +464,6 @@ class EvaluateurAdmin(VersionAdmin):
         ("Utilisateur", {
             'fields': ('user',)
         }),
-        ("Offres d'emploi à évaluer", {
-            'fields': ('offres_emploi',)
-        }),
     )
 
     ### Actions à afficher
@@ -508,10 +500,12 @@ class EvaluateurAdmin(VersionAdmin):
             return True
         return False   
 
-class CandidatEvaluationAdmin(VersionAdmin):
-    list_display = ('_candidat', '_offre_emploi', 'evaluateur', '_note', 
+class CandidatEvaluationAdmin(admin.ModelAdmin):
+    search_fields = ('candidat__nom', 'candidat__prenom' )
+    list_display = ('_candidat', '_statut', '_offre_emploi', 'evaluateur', '_note', 
                     '_commentaire', )
-    _readonly_fields = ('candidat', 'evaluateur') # voir fonctions de permissions
+    readonly_fields = ('candidat', 'evaluateur')
+    list_filter = ('candidat__statut', 'candidat__offre_emploi',)
     fieldsets = (
         ('Évaluation du candidat', {
             'fields': ('candidat', 'evaluateur', 'note', 'commentaire', )        
@@ -542,6 +536,12 @@ class CandidatEvaluationAdmin(VersionAdmin):
     _note.short_description = "Note"    
     _note.admin_order_field = 'note'    
 
+    def _statut(self, obj):
+        return obj.candidat.get_statut_display()
+    _statut.order_field = 'candidat__statut'
+    _statut.short_description = 'Statut'
+
+
     ### Lien en lecture seule vers le candidat
     def _candidat(self, obj):
         return "<a href='%s'>%s</a>" \
@@ -571,17 +571,11 @@ class CandidatEvaluationAdmin(VersionAdmin):
     _offre_emploi.allow_tags = True
     _offre_emploi.short_description = "Voir offre d'emploi"
     
-    ### Permissions add, delete, change
     def has_add_permission(self, request):
-        user_groupes = request.user.groups.all()
-        if request.user.is_superuser is True or \
-            grp_drh_recrutement in user_groupes or \
-            grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
-            self.readonly_fields = ()
-            return True
-        self.readonly_fields = self._readonly_fields
-        return False   
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return False
 
     def has_change_permission(self, request, obj=None):
         """
@@ -589,14 +583,13 @@ class CandidatEvaluationAdmin(VersionAdmin):
         mais interdire l'accès à modifier l'objet si l'évaluateur n'est pas
         le request.user
         """
+        if obj is None:
+            return True
+        
         if request.user.is_superuser is True:
             return True
-        self.readonly_fields = self._readonly_fields
-        grant = self.has_add_permission(request)
-        if obj is None:
-            return grant
-        else:
-            return grant and request.user == obj.evaluateur.user
+
+        return request.user == obj.evaluateur.user
 
     ### Queryset
     def queryset(self, request):
@@ -604,24 +597,21 @@ class CandidatEvaluationAdmin(VersionAdmin):
         Afficher uniquement les évaluations de l'évaluateur, sauf si 
         l'utilisateur est dans les groupes suivants.
         """
-        qs = self.model._default_manager.get_query_set()
+        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
         user_groupes = request.user.groups.all()
+
         if grp_drh_recrutement in user_groupes or \
+            grp_correspondants_rh_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
-            return qs.select_related('offre_emploi')
-
-        try:
-            evaluateur = Evaluateur.objects.get(user=request.user) 
-        except Evaluateur.DoesNotExist:       
-            return qs.none()     
-        
-        candidats_evaluations = CandidatEvaluation.objects.\
-                                filter(evaluateur=evaluateur)
-        candidats_evaluations_ids = [ce.id for ce in \
-                                        candidats_evaluations.all()]
-        return qs.select_related('offre_emploi').\
-                filter(id__in=candidats_evaluations_ids)
+            return qs
+
+        evaluateur = Evaluateur.objects.get(user=request.user) 
+        candidats_evaluations = \
+            CandidatEvaluation.objects.filter(evaluateur=evaluateur,
+                    candidat__statut__in=('REC', ))
+        candidats_evaluations_ids = [ce.id for ce in candidats_evaluations]
+        return qs.filter(id__in=candidats_evaluations_ids)
 
 class CourrielTemplateAdmin(VersionAdmin):
     ### Actions à afficher
index 6025a77..1f48fa1 100644 (file)
@@ -1,25 +1,9 @@
 # -*- encoding: utf-8 -*-
 
-import os
 from django import forms
-from django.contrib import admin
-from django.forms.models import inlineformset_factory
-from datetime import timedelta
-from django.forms.widgets import CheckboxSelectMultiple
-from django.contrib.admin import widgets as admin_widgets   
-from form_utils.forms import BetterModelForm
-from django.forms import ModelForm, ModelChoiceField, HiddenInput, CharField
-from django.forms.models import BaseInlineFormSet 
-from django.core.mail import send_mail
-
-from datamaster_modeles.models import Employe, Implantation, Region
-from tinymce.widgets import TinyMCE
-from captcha.fields import CaptchaField
-
+from django.forms import ModelForm
 from recrutement import models as recr
 from auf.django.emploi import forms as emploi
-from project.rh import models as rh
-from project.dae.utils import get_employe_from_user as get_emp
 
 ################################################################################
 # EVALUATION
@@ -39,21 +23,43 @@ class CandidatEvaluationForm(ModelForm):
 
 class EvaluateurForm(forms.Form):
     evaluateurs = forms.ModelMultipleChoiceField(queryset=
-                    recr.Evaluateur.objects.all())
+                    recr.Evaluateur.objects.all(), required=False)
+
 
     def __init__(self, *args, **kwargs):
         self.offres_emploi = kwargs.pop('offres_emploi')
+        evaluateurs = [e.id for e in self.get_evaluateurs()]
+        initial = getattr(kwargs, 'initial', {})
+        initial['evaluateurs'] = evaluateurs
+        kwargs['initial'] = initial
         super(EvaluateurForm, self).__init__(*args, **kwargs)
 
+
+    def get_evaluateurs(self):
+        return [e.evaluateur for e in \
+                recr.CandidatEvaluation.objects.filter(candidat__offre_emploi=self.offres_emploi)]
+
     def save(self):
         candidats = recr.Candidat.objects.\
-                            filter(offre_emploi__in=self.offres_emploi)
+                            filter(offre_emploi=self.offres_emploi)
+
+        anciens_evaluateurs = self.get_evaluateurs()
+        nouveaux__evaluateurs = self.cleaned_data.get('evaluateurs', [])
+
+        # suppression des évaluations du type
+        evaluations = recr.CandidatEvaluation.objects.filter(candidat__offre_emploi=self.offres_emploi)
+        for e in evaluations:
+            if e.evaluateur not in nouveaux__evaluateurs:
+                e.delete()
+
+        # on prépopulent les évaluations si elles ne l'ont pas déja été
         for candidat in candidats:
-            for evaluateur in self.cleaned_data.get('evaluateurs', []):                
-                candidat_evaluation = recr.CandidatEvaluation()
-                candidat_evaluation.candidat = candidat
-                candidat_evaluation.evaluateur = evaluateur
-                candidat_evaluation.save()
+            for evaluateur in self.cleaned_data.get('evaluateurs', []):
+                if evaluateur not in anciens_evaluateurs:
+                    candidat_evaluation = recr.CandidatEvaluation()
+                    candidat_evaluation.candidat = candidat
+                    candidat_evaluation.evaluateur = evaluateur
+                    candidat_evaluation.save()
         
 
 ################################################################################
index 1e793dc..7035fe1 100644 (file)
@@ -1,21 +1,14 @@
 # -=- encoding: utf-8 -=-
 
-import datetime
 from django.contrib.auth.models import User
-from django.core.files.storage import FileSystemStorage
 from tinymce import models as tinymce_models
 from django.db import models
-import settings
 
 from south.modelsinspector import add_introspection_rules
 add_introspection_rules([], ["^tinymce.models.HTMLField"])
-import datamaster_modeles.models as ref
 
-from recrutement.workflow import grp_evaluateurs_recrutement
 from auf.django.emploi import models as emploi
-from auf.django.emploi.models import TYPE_PIECE_CHOICES
 
-from recrutement.workflow import grp_evaluateurs_recrutement
 
 ### CONSTANTES
 #NOTES
@@ -95,17 +88,7 @@ class ProxyCandidat(emploi.Candidat):
 
 class Evaluateur(models.Model):
     user = models.ForeignKey(User, unique=True, verbose_name=u"Évaluateur")
-    offres_emploi = models.ManyToManyField(emploi.OffreEmploi, 
-                related_name="evaluateurs", blank=True)
-
-    def save(self, *args, **kwargs):
-        """
-        Assigner automatiquement l'évaluateurs d'une offre d'emploi à un 
-        nouveau candidat.
-        """
-        self.user.groups.add(grp_evaluateurs_recrutement)
-        super(Evaluateur, self).save(*args, **kwargs)
-    
+
     class Meta:
         verbose_name = u"évaluateur"
 
index 308ae8d..45db6fe 100644 (file)
@@ -1,6 +1,13 @@
 {% extends 'admin/base_site.html' %}
 {% load i18n adminmedia form_utils_tags %}
 
+
+{% block extrahead %}
+<style>
+    td {border-bottom: none;}
+</style>
+{% endblock %}
+
 {% block title %}RH - Recrutement{% endblock %}
 {% block sous_titre %}Affecter évaluateur{% endblock %}
 
 
     <div class="module">
         <h2>Affectation évaluateurs</h2>
+        <br />
+        <p>
+        Pour choisir plusieurs personnes, garder la touche CTRL enfoncée et
+        cliquer sur chacun des noms dans la liste, puis cliquer sur
+        Enregistrer.
+        </p>
+        <br />
 
         <form action="" method="post">
             <table>
index 5acfa7c..8c3ed30 100644 (file)
@@ -1,18 +1,16 @@
 # -*- encoding: utf-8 -*-
 
-from django.core.mail import send_mail
 from django.core.urlresolvers import reverse
 from django.contrib import messages
-from django.contrib.auth.models import User
 from django.views.static import serve
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render_to_response, redirect, get_object_or_404
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response, redirect
 from django.template import Context, RequestContext, Template
 from django.core.mail import EmailMultiAlternatives
 
 from forms import *
 from models import *
-from recrutement.workflow import grp_evaluateurs_recrutement, recrutement_groupes
+from recrutement.workflow import recrutement_groupes
 
 ################################################################################
 # MEDIA PRIVE
@@ -97,7 +95,7 @@ def affecter_evaluateurs_offre_emploi(request):
             form.save()
             messages.add_message(request, messages.SUCCESS, 
                         "Les évaluateurs ont été affectés aux offres d'emploi.")
-            return redirect("admin:recrutement_offreemploi_changelist")
+            return redirect("admin:recrutement_proxyoffreemploi_changelist")
     else:
         form = EvaluateurForm(offres_emploi=offres_emploi)
 
index ab8a409..ee9fda4 100644 (file)
@@ -1,26 +1,18 @@
 # -*- encoding: utf-8 -*-
 
-from django.contrib.auth.models import Group
-
-def safe_create_groupe(name):
-    """
-    Création d'un groupe prédéfini. Retourne None, quand la création
-    ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
-    n'a pas été crée encore).
-    """
-    try:
-        grp, created = Group.objects.get_or_create(name=name)
-    except:
-        return None
-    return grp
+from rh.groups import safe_create_groupe
+from  rh.groups import CORRESPONDANT_RH, DRH_NIVEAU_1, DIRECTEUR_DE_BUREAU, ADMINISTRATEURS
 
 grp_evaluateurs_recrutement = safe_create_groupe(name='Évaluateurs')
-grp_drh_recrutement = safe_create_groupe(name='DRH')
-grp_directeurs_bureau_recrutement = safe_create_groupe(name='Directeurs de bureau')
-grp_administrateurs_recrutement = safe_create_groupe(name='Administrateurs')
+grp_correspondants_rh_recrutement = safe_create_groupe(name=CORRESPONDANT_RH)
+grp_drh_recrutement = safe_create_groupe(name=DRH_NIVEAU_1)
+grp_directeurs_bureau_recrutement = \
+    safe_create_groupe(name=DIRECTEUR_DE_BUREAU)
+grp_administrateurs_recrutement = safe_create_groupe(name=ADMINISTRATEURS)
 
 recrutement_groupes = (
     grp_evaluateurs_recrutement,
+    grp_correspondants_rh_recrutement,
     grp_drh_recrutement,
     grp_directeurs_bureau_recrutement,
     grp_administrateurs_recrutement,
index 02dc367..ad589d0 100644 (file)
@@ -15,16 +15,26 @@ def safe_create_groupe(name):
         return None
     return grp
 
+CORRESPONDANT_RH = 'Correspondants RH'
+ADMINISTRATEURS ='Administrateurs' 
+DIRECTEUR_DE_BUREAU = 'Directeurs de bureau'
+DRH_NIVEAU_1 = 'DRH'
+DRH_NIVEAU_2 = 'DRH-2'
+ACCIOR = 'ACCIOR'
+ABF = 'ABF'
+HAUTE_DIRECTION = 'Haute direction'
+SERVICE_UTILISATEURS = 'Service utilisateurs'
+
 # Groupes impliqués dans le Worflow
-grp_correspondants_rh = safe_create_groupe(name='Correspondants RH')
-grp_administrateurs = safe_create_groupe(name='Administrateurs')
-grp_directeurs_bureau = safe_create_groupe(name='Directeurs de bureau')
-grp_drh = safe_create_groupe(name='DRH')
-grp_drh2 = safe_create_groupe(name='DRH-2')
-grp_accior = safe_create_groupe(name='ACCIOR')
-grp_abf = safe_create_groupe(name='ABF')
-grp_haute_direction = safe_create_groupe(name='Haute direction')
-grp_service_utilisateurs = safe_create_groupe(name='Service utilisateurs')
+grp_correspondants_rh = safe_create_groupe(name=CORRESPONDANT_RH)
+grp_administrateurs = safe_create_groupe(name=ADMINISTRATEURS)
+grp_directeurs_bureau = safe_create_groupe(name=DIRECTEUR_DE_BUREAU)
+grp_drh = safe_create_groupe(name=DRH_NIVEAU_1)
+grp_drh2 = safe_create_groupe(name=DRH_NIVEAU_2)
+grp_accior = safe_create_groupe(name=ACCIOR)
+grp_abf = safe_create_groupe(name=ABF)
+grp_haute_direction = safe_create_groupe(name=HAUTE_DIRECTION)
+grp_service_utilisateurs = safe_create_groupe(name=SERVICE_UTILISATEURS)
 
 dae_groupes = (
     grp_correspondants_rh,
index adf1144..1fd37e0 100644 (file)
@@ -1,8 +1,6 @@
 # -*- encoding: utf-8 -*
-from urldecorators.defaults import patterns, include, handler500, handler404, url
-from django.conf import settings
+from urldecorators.defaults import patterns, include, handler500, url
 from django.contrib import admin
-from auf.django.emploi import settings as sett
 
 from auf.django import permissions
 import monkey
@@ -16,6 +14,7 @@ urlpatterns = patterns(
     '',
     url(r'^$', 'project.views.index', name='index'),
     url(r'^admin_tools/', include('admin_tools.urls')),
+    url(r'^admin/recrutement/$', admin.site.app_index, {'app_label': 'recrutement'}),
     (r'^admin/', include(admin.site.urls)),
     url(r'^api/(?P<method>[a-z_-]+)/(?P<offre_id>\d+)/$', 'recrutement.api.api', 
             name='recrutement_api'),
index a424891..f470d3b 100644 (file)
@@ -1,6 +1,13 @@
 auf.django.emploi
 =================
 
+1.0
+---
+
+* changement statut
+* cleanup code
+* namespace fix
+
 0.9
 ---
 
index 35cf25b..de40ea7 100644 (file)
@@ -1,5 +1 @@
-try:
-    __import__('pkg_resources').declare_namespace(__name__)
-except:
-    # bootstrapping
-    pass
+__import__('pkg_resources').declare_namespace(__name__)
index 35cf25b..de40ea7 100644 (file)
@@ -1,5 +1 @@
-try:
-    __import__('pkg_resources').declare_namespace(__name__)
-except:
-    # bootstrapping
-    pass
+__import__('pkg_resources').declare_namespace(__name__)
index 9b97cc6..efa52c6 100644 (file)
@@ -1,8 +1,6 @@
 # -*- encoding: utf-8 -*
 
-import datetime
 from django.core.files.storage import FileSystemStorage
-from tinymce import models as tinymce_models
 from django.db import models
 import datamaster_modeles.models as ref
 import settings
@@ -43,9 +41,9 @@ SITUATION_CHOICES = (
 STATUT_CHOICES = (
     ('NOUV', 'Nouveau'),
     ('REC', 'Recevable'),
-    ('SEL', 'Sélectionné'),
-    ('REF', 'Refusé'),
-    ('ACC', 'Accepté'),
+    ('SEL', 'Sélectionné pour entrevue'),
+    ('REF', 'Non retenu'),
+    ('ACC', 'À recruter'),
 )
 
 # PIECE CANDIDAT
index 929d569..3d43851 100644 (file)
@@ -1,10 +1,9 @@
 # -*- encoding: utf-8 -*-
 
 from setuptools import setup, find_packages
-import sys, os
 
 name = 'auf.django.emploi'
-version = '0.9'
+version = '1.0'
 
 setup(name=name,
       version=version,
@@ -19,6 +18,7 @@ setup(name=name,
       author_email='contact@nilovna.com',
       url='http://pypi.auf.org/%s' % name,
       license='GPL',
+      namespace_packages = ['auf', 'auf.django', ],
       packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
       include_package_data=True,
       zip_safe=False,