From: davin baragiotta Date: Tue, 2 Aug 2011 19:35:30 +0000 (-0400) Subject: refact ergo + page perso (vide) X-Git-Tag: DAE+RH~281 X-Git-Url: http://git.auf.org/?p=auf_rh_dae.git;a=commitdiff_plain;h=6dde70dbf009e455c2148ec72f202053824d0294;hp=98bab6d56c8f8cd23357ae4141b4baa487d82fac refact ergo + page perso (vide) --- diff --git a/project/context_processors.py b/project/context_processors.py index 566b745..58db668 100644 --- a/project/context_processors.py +++ b/project/context_processors.py @@ -1,4 +1,6 @@ # -*- encoding: utf-8 -*- + +from lib import get_employe_from_user from permissions import is_admin # Ajout de variables accessibles dans les templates (pour tester permissions dans templates) @@ -6,6 +8,11 @@ from permissions import is_admin def utilisateur(request): return {'utilisateur': request.user} +def this_employe(request): + user = request.user + employe = get_employe_from_user(user) + return {'this_employe': employe} + def user_is_admin(request): return {'user_is_admin': not request.user.is_anonymous() and is_admin(request.user)} diff --git a/project/dae/context_processors.py b/project/dae/context_processors.py new file mode 100644 index 0000000..40dce68 --- /dev/null +++ b/project/dae/context_processors.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +from dae.decorators import user_in_dae_groupes as in_dae_groupes + +# Ajout de variables accessibles dans les templates (pour tester permissions dans templates) + +def user_in_dae_groupes(request): + return {'user_in_dae_groupes': in_dae_groupes(request.user)} + diff --git a/project/dae/templates/dae/embauche.html b/project/dae/templates/dae/embauche.html index 0a3cd4f..f743dda 100644 --- a/project/dae/templates/dae/embauche.html +++ b/project/dae/templates/dae/embauche.html @@ -2,7 +2,6 @@ {% load adminmedia %} {% block title %}RH - DAE - Embauche{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %} {% block extrahead %} diff --git a/project/dae/templates/dae/embauche_consulter.html b/project/dae/templates/dae/embauche_consulter.html index 6fc81c8..7884878 100644 --- a/project/dae/templates/dae/embauche_consulter.html +++ b/project/dae/templates/dae/embauche_consulter.html @@ -2,7 +2,6 @@ {% load adminmedia dae %} {% block title %}RH - DAE - Embauche{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %} {% block extrahead %} diff --git a/project/dae/templates/dae/embauches_liste.html b/project/dae/templates/dae/embauches_liste.html index acaa134..1cc7d8b 100644 --- a/project/dae/templates/dae/embauches_liste.html +++ b/project/dae/templates/dae/embauches_liste.html @@ -1,7 +1,6 @@ {% extends 'base.html' %} {% block title %}RH - DAE - Embauches{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %} {% block main %} diff --git a/project/dae/templates/dae/index.html b/project/dae/templates/dae/index.html index c2ac8d2..1d6bc8b 100644 --- a/project/dae/templates/dae/index.html +++ b/project/dae/templates/dae/index.html @@ -2,7 +2,6 @@ {% load dae %} {% block title %}RH - DAE{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %} {% block main %} diff --git a/project/dae/templates/dae/poste.html b/project/dae/templates/dae/poste.html index 789d173..4a40e79 100644 --- a/project/dae/templates/dae/poste.html +++ b/project/dae/templates/dae/poste.html @@ -2,7 +2,6 @@ {% load adminmedia %} {% block title %}RH - DAE - Poste{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %} Demande d'autorisation d'embauche {% endblock %} diff --git a/project/dae/templates/dae/poste_consulter.html b/project/dae/templates/dae/poste_consulter.html index b200fe3..e720fb6 100644 --- a/project/dae/templates/dae/poste_consulter.html +++ b/project/dae/templates/dae/poste_consulter.html @@ -2,7 +2,6 @@ {% load adminmedia dae %} {% block title %}RH - DAE - Poste{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %} Demande d'autorisation d'embauche {% endblock %} diff --git a/project/dae/templates/dae/postes_liste.html b/project/dae/templates/dae/postes_liste.html index f9703ac..c010b90 100644 --- a/project/dae/templates/dae/postes_liste.html +++ b/project/dae/templates/dae/postes_liste.html @@ -1,7 +1,6 @@ {% extends 'base.html' %} {% block title %}RH - DAE - Postes{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %} {% block main %} diff --git a/project/dae/utils.py b/project/dae/utils.py index d8f765b..c0f2c05 100644 --- a/project/dae/utils.py +++ b/project/dae/utils.py @@ -3,14 +3,15 @@ import datamaster_modeles.models as ref def get_employe_from_user(user): - """ - Retourne un employé AUF à partir de son user Django. - """ - try: - employe = ref.Authentification.objects.get(courriel=user.email).id - except: - raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email) - return employe + """ + Retourne un employé AUF à partir de son user Django. + """ + # TODO : Refactoring : utiliser project.lib.get_employe_from_user + try: + employe = ref.Authentification.objects.get(courriel=user.email).id + except: + raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email) + return employe def is_user_dans_services_centraux(user): employe = get_employe_from_user(user) diff --git a/project/dae/workflow.py b/project/dae/workflow.py index bb1c55f..fc2b5f4 100644 --- a/project/dae/workflow.py +++ b/project/dae/workflow.py @@ -10,6 +10,7 @@ def safe_create_groupe(name): ne peut se faire. (C'est le cas au syncdb, quand la table de groupe n'a pas été crée encore). """ + # TODO : Refactoring : utiliser project.lib.safe_create_groupe try: grp, created = Group.objects.get_or_create(name=name) except: diff --git a/project/decorators.py b/project/decorators.py index 03430bf..2c543c8 100644 --- a/project/decorators.py +++ b/project/decorators.py @@ -2,11 +2,17 @@ """ Décorateurs AUF """ -from django.contrib.auth.decorators import user_passes_test -from django.core.urlresolvers import reverse +#from django.contrib.auth.decorators import user_passes_test +#from django.core.exceptions import PermissionDenied +#from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect +from django.shortcuts import redirect from permissions import is_employe, is_admin +#from datamaster_modeles import models as ref +from dae.utils import get_employe_from_user +from rh import models as rh + # Décorateurs des fonctions dans views (pour tester permissions dans views) def admin_required(fn): @@ -23,3 +29,19 @@ def admin_required(fn): tup = login_url, REDIRECT_FIELD_NAME, path return HttpResponseRedirect('%s?%s=%s' % tup) return inner + +def user_is_this_employe(fn): + """ + Décorateur qui vérifie si le user est l'employé demandé. + Succes = execution de la vue. + Echec = page d'erreur de permission + """ + def inner(request, id, *args, **kwargs): + id = int(id) + user = request.user + employe = get_employe_from_user(user) + if user.is_authenticated() and employe and id==employe.id: + return fn(request, id, *args, **kwargs) +# raise PermissionDenied + return redirect('550') + return inner diff --git a/project/lib.py b/project/lib.py new file mode 100644 index 0000000..2c90073 --- /dev/null +++ b/project/lib.py @@ -0,0 +1,28 @@ +# -*- encoding: utf-8 -*- + +import datamaster_modeles.models as ref +import rh.models as rh + +def get_employe_from_user(user): + """ + Retourne un employé AUF (rh.Employe) à partir de son user Django. + """ + try: + ref_employe = ref.Authentification.objects.get(courriel=user.email).id + employe = rh.Employe.objects.get(id=ref_employe.id) + except: + #raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email) + employe = rh.Employe.objects.none() + return employe + +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 diff --git a/project/recrutement/context_processors.py b/project/recrutement/context_processors.py new file mode 100644 index 0000000..69b8c6e --- /dev/null +++ b/project/recrutement/context_processors.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +from recrutement.permissions import user_in_recrutement_groupes as in_recrutement_groupes + +# Ajout de variables accessibles dans les templates (pour tester permissions dans templates) + +def user_in_recrutement_groupes(request): + return {'user_in_recrutement_groupes': in_recrutement_groupes(request.user)} + diff --git a/project/recrutement/permissions.py b/project/recrutement/permissions.py new file mode 100644 index 0000000..c8d12fd --- /dev/null +++ b/project/recrutement/permissions.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +from django.contrib.auth.models import Group + +from project.lib import safe_create_groupe + +# Logique AUF des permissions + +grp_drh = safe_create_groupe(name='DRH') +grp_evaluateurs = safe_create_groupe(name='Évaluateurs') + +recrutement_groupes = ( + grp_drh, + grp_evaluateurs, +) + +def user_in_recrutement_groupes(user): + """ + Teste si un user Django fait parti des groupes prédéfinis de DAE. + """ + if user.is_superuser: + return True + for g in user.groups.all(): + if g in recrutement_groupes: + return True + return False diff --git a/project/recrutement/templates/recrutement/affecter_evaluateurs.html b/project/recrutement/templates/recrutement/affecter_evaluateurs.html index 926d3bc..17af613 100644 --- a/project/recrutement/templates/recrutement/affecter_evaluateurs.html +++ b/project/recrutement/templates/recrutement/affecter_evaluateurs.html @@ -2,7 +2,6 @@ {% load i18n adminmedia form_utils_tags %} {% block title %}RH - Recrutement{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Affecter évaluateur{% endblock %} {% block content %} diff --git a/project/recrutement/templates/recrutement/envoyer_courriel_candidats.html b/project/recrutement/templates/recrutement/envoyer_courriel_candidats.html index 7fa5696..2ffe957 100644 --- a/project/recrutement/templates/recrutement/envoyer_courriel_candidats.html +++ b/project/recrutement/templates/recrutement/envoyer_courriel_candidats.html @@ -2,7 +2,6 @@ {% load i18n adminmedia form_utils_tags %} {% block title %}RH - Recrutement{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Envoyer courriel aux candidats{% endblock %} {% block extrahead %} diff --git a/project/recrutement/templates/recrutement/index.html b/project/recrutement/templates/recrutement/index.html index 452d7a0..5ca20a9 100644 --- a/project/recrutement/templates/recrutement/index.html +++ b/project/recrutement/templates/recrutement/index.html @@ -1,14 +1,13 @@ {% extends 'base.html' %} -{% block title %}RH{% endblock %} -{% block titre %}Ressources humaines{% endblock %} -{% block sous_titre %}Accueil{% endblock %} +{% block title %}RH - Recrutement{% endblock %} +{% block sous_titre %}Recrutement{% endblock %} {% block main %}

Recrutement

-Recrutement +Application de gestion du recrutement.

{% endblock %} diff --git a/project/recrutement/templates/recrutement/postuler_appel_offre.html b/project/recrutement/templates/recrutement/postuler_appel_offre.html index 53569f0..5227c79 100644 --- a/project/recrutement/templates/recrutement/postuler_appel_offre.html +++ b/project/recrutement/templates/recrutement/postuler_appel_offre.html @@ -2,7 +2,6 @@ {% load adminmedia %} {% block title %}RH{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Accueil{% endblock %} {% block main %} diff --git a/project/recrutement/templates/recrutement/selectionner_template.html b/project/recrutement/templates/recrutement/selectionner_template.html index fe32d40..038387c 100644 --- a/project/recrutement/templates/recrutement/selectionner_template.html +++ b/project/recrutement/templates/recrutement/selectionner_template.html @@ -2,7 +2,6 @@ {% load i18n adminmedia form_utils_tags %} {% block title %}RH - Recrutement{% endblock %} -{% block titre %}Ressources humaines{% endblock %} {% block sous_titre %}Envoyer courriel aux candidats{% endblock %} {% block extrahead %} {{ form.media }} diff --git a/project/rh/templates/rh/employe.html b/project/rh/templates/rh/employe.html new file mode 100644 index 0000000..35917f3 --- /dev/null +++ b/project/rh/templates/rh/employe.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} + +{% block title %}RH - {{ employe }}{% endblock %} +{% block sous_titre %}Employés{% endblock %} + +{% block main %} +

{{ employe }}

+ +{{ employe }}­ +{% endblock %} + diff --git a/project/rh/templates/rh/employes_liste.html b/project/rh/templates/rh/employes_liste.html new file mode 100644 index 0000000..80dd7f1 --- /dev/null +++ b/project/rh/templates/rh/employes_liste.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} + +{% block title %}RH - Employés{% endblock %} +{% block sous_titre %}Employés{% endblock %} + +{% block main %} +

Employés

+ + + +{% endblock %} + diff --git a/project/rh/templates/rh/index.html b/project/rh/templates/rh/index.html deleted file mode 100644 index d1cccdd..0000000 --- a/project/rh/templates/rh/index.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}RH{% endblock %} -{% block titre %}Ressources humaines{% endblock %} -{% block sous_titre %}Accueil{% endblock %} - -{% block main %} -

Ressources humaines

- -

-L'ensemble des applications RH sera regroupé dans ce système de gestion des ressources humaines (SGRH). -

-

-Voici les modules actuellement disponibles : -

- -{% endblock %} - diff --git a/project/rh/templates/rh/perso.html b/project/rh/templates/rh/perso.html new file mode 100644 index 0000000..e9e7e0e --- /dev/null +++ b/project/rh/templates/rh/perso.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} + +{% block title %}RH - {{ employe }}{% endblock %} +{% block sous_titre %}Espace personnel{% endblock %} + +{% block main %} +

{{ employe }}

+ +Infos personnelles. +{% endblock %} + diff --git a/project/rh/urls.py b/project/rh/urls.py index 9430adc..76f1b89 100644 --- a/project/rh/urls.py +++ b/project/rh/urls.py @@ -3,6 +3,7 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns( 'project.rh.views', - url(r'^$', 'index', name='index'), - #url(r'^employes$', 'employes', name='employes'), + url(r'^employes/$', 'employes_liste', name='rh_employes'), + url(r'^employes/(?P\d+)/perso$', 'perso', name='rh_perso'), + url(r'^employes/(?P\d+)$', 'employe', name='rh_employe'), ) diff --git a/project/rh/views.py b/project/rh/views.py index 566f922..17530fb 100644 --- a/project/rh/views.py +++ b/project/rh/views.py @@ -1,8 +1,47 @@ # -*- encoding: utf-8 -*- +from django.contrib.auth.decorators import login_required from django.shortcuts import redirect, render_to_response, get_object_or_404 from django.template import RequestContext +#from datamaster_modeles import models as ref from project.rh import models as rh +from project.decorators import user_is_this_employe -def index(request): - return render_to_response('rh/index.html', {}, RequestContext(request)) + +# homes +@user_is_this_employe +def perso(request, id): + """Espace personnel de l'employé.""" + try: + employe = rh.Employe.objects.get(pk=id) + except: + employe = rh.Employe.none() + c = { + 'user':request.user, + 'employe':employe, + } + return render_to_response('rh/perso.html', c, RequestContext(request)) + +# employes +@login_required +def employes_liste(request): + """Liste des employés.""" + employes = rh.Employe.objects.all() + c = { + 'user':request.user, + 'employes':employes, + } + return render_to_response('rh/employes_liste.html', c, RequestContext(request)) + +@login_required +def employe(request, id): + """Information publique sur un employé.""" + try: + employe = rh.Employe.objects.get(pk=id) + except: + employe = rh.Employe.objects.none() + c = { + 'user':request.user, + 'employe':employe, + } + return render_to_response('rh/employe.html', c, RequestContext(request)) diff --git a/project/settings.py b/project/settings.py index a2985e8..8f46b73 100644 --- a/project/settings.py +++ b/project/settings.py @@ -5,7 +5,7 @@ import socket from conf import * -PROJET_TITRE = "SGRH" +PROJET_TITRE = "Ressources humaines" # Rapports d'erreurs EMAIL_SUBJECT_PREFIX = '[auf_rh_dae - %s] ' % socket.gethostname() @@ -88,7 +88,10 @@ TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.request', 'auf.django.skin.context_processors.auf', 'project.context_processors.utilisateur', + 'project.context_processors.this_employe', 'project.context_processors.user_is_admin', + 'dae.context_processors.user_in_dae_groupes', + 'recrutement.context_processors.user_in_recrutement_groupes', ) AUTHENTICATION_BACKENDS = ( diff --git a/project/templates/404.html b/project/templates/404.html new file mode 100644 index 0000000..9653978 --- /dev/null +++ b/project/templates/404.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} + +{% block title %}RH - Erreur 404{% endblock %} +{% block sous_titre %}Erreur 404{% endblock %} + +{% block main %} +

Page non trouvée

+ +

+La page demandée n'a pas été trouvée dans le système. +

+{% endblock %} diff --git a/project/templates/500.html b/project/templates/500.html new file mode 100644 index 0000000..09ea99e --- /dev/null +++ b/project/templates/500.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} + +{% block title %}RH - Erreur 500{% endblock %} +{% block sous_titre %}Erreur 500{% endblock %} + +{% block main %} +

Erreur interne du système

+ +

+Le système a rencontré une erreur interne et n'a pas pu traiter votre demande. +

+{% endblock %} diff --git a/project/templates/550.html b/project/templates/550.html new file mode 100644 index 0000000..a70bec5 --- /dev/null +++ b/project/templates/550.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} + +{% block title %}RH - Erreur 550{% endblock %} +{% block sous_titre %}Erreur 550{% endblock %} + +{% block main %} +

Permission non accordée

+ +

+Vous n'avez pas les permissions nécessaires pour faire l'action demandée. +

+{% endblock %} diff --git a/project/templates/actions.html b/project/templates/actions.html new file mode 100644 index 0000000..7df2dad --- /dev/null +++ b/project/templates/actions.html @@ -0,0 +1,13 @@ + diff --git a/project/templates/autocompleteselect.html b/project/templates/autocompleteselect.html index d91ba4f..13e4ea2 100644 --- a/project/templates/autocompleteselect.html +++ b/project/templates/autocompleteselect.html @@ -1,10 +1,14 @@ {% load i18n %} {% if add_link %} - Add Another + + Add Another + {% endif %} {% block help %}{% endblock %} -
{{current_result|safe}}
+
+
{{current_result|safe}}
+