X-Git-Url: http://git.auf.org/?p=auf_rh_dae.git;a=blobdiff_plain;f=project%2Frh%2Flib.py;h=e832a89988692283cd107c7670b80b33d1d0bb7a;hp=627fb86a2e0242f2409e1eb0ad5f967a5dedc0da;hb=aff1a4c621002e358c68b575e641a7bec1223d86;hpb=4dd4ea39bab3cfb8955353a1dbbc8433b748826d diff --git a/project/rh/lib.py b/project/rh/lib.py index 627fb86..e832a89 100644 --- a/project/rh/lib.py +++ b/project/rh/lib.py @@ -2,8 +2,41 @@ from django.db import models from django.contrib import admin +from django.conf import settings +from django.db.models import Q from auf.django.metadata.admin import AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, AUF_METADATA_READONLY_FIELDS from project.rh import models as rh +from forms import DossierForm, ContratForm +from dae.utils import get_employe_from_user + + +class ProtectRegionMixin(object): + + def queryset(self, request): + qs = super(ProtectRegionMixin, self).queryset(request) + + if request.user.is_superuser: + return qs + + employe = get_employe_from_user(request.user) + + q = Q(**{self.model.prefix_implantation: employe.implantation.region}) + qs = qs.filter(q).distinct() + return qs + + def has_change_permission(self, request, obj=None): + if request.user.is_superuser: + return True + + if obj: + employe = get_employe_from_user(request.user) + if employe.implantation.region in obj.get_regions(): + return True + else: + return False + + return True + # Inlines @@ -12,9 +45,9 @@ class ReadOnlyInlineMixin(object): return [f.name for f in self.model._meta.fields if f.name not in AUF_METADATA_READONLY_FIELDS] -class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.TabularInline): +class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.StackedInline): model = models.Model # à remplacer dans admin.py - extra = 1 + extra = 0 class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline): @@ -24,6 +57,7 @@ class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInli class ContratInline(AUFMetadataInlineAdminMixin, admin.TabularInline): + form = ContratForm model = models.Model # à remplacer dans admin.py extra = 1 @@ -41,6 +75,7 @@ class DossierCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline) class DossierPieceInline(admin.TabularInline): model = models.Model # à remplacer dans admin.py + extra = 4 class EmployeInline(admin.TabularInline): @@ -54,6 +89,7 @@ class EmployeCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline) class EmployePieceInline(admin.TabularInline): model = models.Model # à remplacer dans admin.py + extra = 4 class EvenementInline(AUFMetadataInlineAdminMixin, admin.TabularInline): @@ -95,7 +131,7 @@ class TypePosteInline(AUFMetadataInlineAdminMixin, admin.TabularInline): # Admins -class AyantDroitAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class AyantDroitAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): """ L'ajout d'un nouvel ayantdroit se fait dans l'admin de l'employé. """ @@ -144,29 +180,36 @@ class ClassementAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) - class CommentaireAdmin(admin.ModelAdmin): pass -class ContratAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): - alphabet_filter = 'dossier__employe__nom' - search_fields = ('dossier__employe__nom', 'dossier__employe__prenom', 'dossier__poste__nom', 'dossier__poste__nom_feminin', ) - list_display = ('id', 'dossier', '_poste', ) - fieldsets = AUFMetadataAdminMixin.fieldsets + ( - (None, { - 'fields': ('dossier', 'type_contrat', 'date_debut', 'date_fin', ) - }), - ) - - def lookup_allowed(self, key, value): - if key in ('dossier__employe__nom__istartswith', ): - return True - - def _poste(self, obj): - return obj.dossier.poste - _poste.short_description = "Poste" - +#class ContratAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +# form = ContratForm +# alphabet_filter = 'dossier__employe__nom' +# search_fields = ('dossier__employe__nom', 'dossier__employe__prenom', 'dossier__poste__nom', 'dossier__poste__nom_feminin', ) +# list_display = ('id', '_employe', '_poste', 'date_debut', 'date_fin', '_implantation', ) +# fieldsets = AUFMetadataAdminMixin.fieldsets + ( +# (None, { +# 'fields': ('dossier', 'type_contrat', 'date_debut', 'date_fin', ) +# }), +# ) +# +# def lookup_allowed(self, key, value): +# if key in ('dossier__employe__nom__istartswith', ): +# return True +# +# def _employe(self, obj): +# return unicode(obj.dossier.employe) +# _employe.short_description = "Employé" +# +# def _poste(self, obj): +# return obj.dossier.poste.nom +# _poste.short_description = "Poste" +# +# def _implantation(self, obj): +# return obj.dossier.poste.implantation +# _poste.short_description = "Implantation" class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): fieldsets = AUFMetadataAdminMixin.fieldsets + ( @@ -176,10 +219,11 @@ class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class DossierAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,): +class DossierAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin,): + form = DossierForm alphabet_filter = 'employe__nom' search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', 'poste__nom_feminin') - list_display = ('_employe', '_poste', 'date_debut', 'date_fin', ) + list_display = ('_employe', '_poste', 'date_debut', 'date_fin', '_actif') inlines = (DossierPieceInline, ContratInline, RemunerationInline, #EvenementInline, @@ -201,18 +245,29 @@ class DossierAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,): ) def lookup_allowed(self, key, value): - if key in ('employe__nom__istartswith', ): + if key in ('employe__nom__istartswith', 'actif__exact', ): return True + def _actif(self, dossier): + if dossier.employe.actif: + html = """True""" + else: + html = """False""" + return html % settings.ADMIN_MEDIA_PREFIX + _actif.allow_tags = u'Employé actif' + _actif.short_description = u'Employé actif' + _actif.admin_order_field = 'employe__actif' def _poste(self, dossier): return unicode(dossier.poste.nom) _poste.short_description = u'Poste' + _poste.admin_order_field = 'poste__nom' def _employe(self, dossier): return unicode(dossier.employe) _employe.short_description = u'Employé' - + _employe.admin_order_field = 'employe__nom' + def save_formset(self, request, form, formset, change): instances = formset.save(commit=False) for instance in instances: @@ -228,9 +283,13 @@ class DossierCommentaireAdmin(admin.ModelAdmin): pass -class EmployeAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class EmployeAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): alphabet_filter = 'nom' - search_fields = ('id', 'nom', 'prenom', 'nom_affichage', ) + search_fields = ('id', 'nom', 'prenom', 'nom_affichage', 'actif', ) + list_filter = ('actif', ) + ordering = ('nom', ) + actions = ('desactiver', ) + list_display = ('nom', 'prenom', 'actif', ) inlines = (AyantDroitInline, DossierROInline, EmployePieceInline, @@ -279,7 +338,7 @@ class FamilleEmploiAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class OrganismeBstgAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class OrganismeBstgAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): search_fields = ('nom', ) list_display = ('nom', 'type', 'pays', ) inlines = (DossierROInline,) @@ -290,7 +349,7 @@ class OrganismeBstgAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class PosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class PosteAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): alphabet_filter = 'nom' search_fields = ('nom', 'implantation__code', 'implantation__nom', 'implantation__region__code', 'implantation__region__nom', ) list_display = ('nom', 'implantation', 'service', 'type_poste', 'date_debut', 'date_fin', ) @@ -339,6 +398,7 @@ class PosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): instance.save() formset.save_m2m() + class PosteCommentaireAdmin(admin.ModelAdmin): pass