[#2658] Intégré django-reversion à l'app rh
authorEric Mc Sween <eric.mcsween@auf.org>
Fri, 25 May 2012 19:28:03 +0000 (15:28 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Mon, 18 Jun 2012 22:09:27 +0000 (18:09 -0400)
project/dae/admin.py
project/dae/workflow.py
project/recrutement/admin.py
project/recrutement/views.py
project/rh/admin.py
project/rh/masse_salariale.py
project/rh/models.py
project/rh/views.py
versions.cfg

index 32576e9..6ad2d96 100644 (file)
@@ -95,7 +95,7 @@ class StatutPosteForm(StatutForm):
         fields = ('etat', )
 
 
-class StatutAdmin(BaseAdmin, VersionAdmin):
+class StatutAdmin(BaseAdmin):
     action = None
 
     def has_delete_permission(self, request, obj=None):
index bb3fb44..0296206 100644 (file)
@@ -9,6 +9,18 @@ from project.groups import \
 from project.groups import \
         is_user_dans_services_centraux, is_user_dans_region
 
+dae_groupes = (
+    grp_correspondants_rh,
+    grp_administrateurs,
+    grp_directeurs_bureau,
+    grp_drh,
+    grp_drh2,
+    grp_accior,
+    grp_abf,
+    grp_haute_direction,
+    grp_service_utilisateurs,
+)
+
 # codes états
 POSTE_ETAT_BROUILLON = 'BROUILLON'
 POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
index 1524e16..3281c57 100644 (file)
@@ -2,6 +2,8 @@
 
 import textwrap
 
+from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
+from auf.django.references.models import Region, Bureau
 from django.conf import settings
 from django.contrib import admin
 from django.core.urlresolvers import reverse
@@ -11,12 +13,8 @@ from django.http import HttpResponseRedirect
 from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
 
-from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
-from auf.django.references.models import Region, Bureau
-
 from project.groups import get_employe_from_user as get_emp
 from project.rh import models as rh
-
 from project.recrutement.forms import OffreEmploiForm
 from project.recrutement.groups import \
         grp_drh, grp_drh2, \
@@ -28,7 +26,6 @@ from project.recrutement.models import \
         Evaluateur, CandidatEvaluation, \
         ProxyOffreEmploi, ProxyCandidat, MesCandidatEvaluation, \
         CourrielTemplate
-        
 
 ### CONSTANTES
 IMPLANTATIONS_CENTRALES = [15, 19]
@@ -57,7 +54,7 @@ class OrderedChangeList(admin.views.main.ChangeList):
         return qs
 
 
-class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
+class OffreEmploiAdminMixin(BaseAdmin):
     date_hierarchy = 'date_creation'
     list_display = (
         'nom', 'date_limite', 'region',  'statut', 'est_affiche',
@@ -208,7 +205,11 @@ class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
         return False
 
 
-class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
+class OffreEmploiAdmin(VersionAdmin, OffreEmploiAdminMixin):
+    pass
+
+
+class ProxyOffreEmploiAdmin(OffreEmploiAdminMixin):
     list_display = (
         'nom', 'date_limite', 'region', 'statut', 'est_affiche'
     )
@@ -306,7 +307,7 @@ class CandidatEvaluationInline(admin.TabularInline):
         return self.readonly_fields
 
 
-class CandidatAdmin(BaseAdmin, VersionAdmin):
+class CandidatAdminMixin(BaseAdmin):
     search_fields = ('nom', 'prenom')
     exclude = ('actif', )
     list_editable = ('statut', )
@@ -510,7 +511,11 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
         return qs.none()
 
 
-class ProxyCandidatAdmin(CandidatAdmin):
+class CandidatAdmin(VersionAdmin, CandidatAdminMixin):
+    pass
+
+
+class ProxyCandidatAdmin(CandidatAdminMixin):
     list_editable = ()
     readonly_fields = (
         'statut', 'offre_emploi', 'prenom', 'nom', 'genre', 'nationalite',
index e751c55..d9755cb 100644 (file)
@@ -1,5 +1,6 @@
 # -*- encoding: utf-8 -*-
 
+from auf.django.emploi import models as emploi
 from django.contrib import messages
 from django.core.mail import EmailMultiAlternatives
 from django.core.urlresolvers import reverse
@@ -8,10 +9,7 @@ from django.shortcuts import render, redirect
 from django.template import Context, Template
 from django.views.static import serve
 
-from auf.django.emploi import models as emploi
-
 from project.decorators import redirect_interdiction
-
 from project.recrutement import forms
 from project.recrutement import models
 from project.recrutement.groups import recrutement_groupes
@@ -37,8 +35,7 @@ def mediaserve(request, path, document_root=None, show_indexes=False):
 
 
 def index(request):
-    c = {}
-    return render(request, 'recrutement/index.html', c)
+    return render(request, 'recrutement/index.html')
 
 
 def selectionner_template(request):
@@ -57,10 +54,9 @@ def selectionner_template(request):
     else:
         form = forms.CandidatCourrielTemplateForm()
 
-    c = {
-        'form': form,
-    }
-    return render(request, "recrutement/selectionner_template.html", c)
+    return render(request, "recrutement/selectionner_template.html", {
+        'form': form
+    })
 
 
 def envoyer_courriel_candidats(request):
@@ -96,10 +92,9 @@ def envoyer_courriel_candidats(request):
                 'plain_text': template.plain_text
             }
         )
-    c = {
-        'form': form,
-    }
-    return render(request, "recrutement/envoyer_courriel_candidats.html", c)
+    return render(request, "recrutement/envoyer_courriel_candidats.html", {
+        'form': form
+    })
 
 
 def affecter_evaluateurs_offre_emploi(request):
@@ -116,10 +111,9 @@ def affecter_evaluateurs_offre_emploi(request):
             return redirect("admin:recrutement_proxyoffreemploi_changelist")
     else:
         form = forms.EvaluateurForm(offres_emploi=offres_emploi)
-    c = {
-        'form': form,
-    }
-    return render(request, "recrutement/affecter_evaluateurs.html", c)
+    return render(request, "recrutement/affecter_evaluateurs.html", {
+        'form': form
+    })
 
 
 def send_templated_email(candidat, template):
@@ -151,7 +145,6 @@ def send_templated_email(candidat, template):
 def candidat_pdf(request):
     candidat_id = request.GET.get('id')
     candidat = models.Candidat.objects.get(id=candidat_id)
-    c = {
-        'candidat': candidat,
-    }
-    return render(request, "recrutement/candidat_pdf.html", c)
+    return render(request, "recrutement/candidat_pdf.html", {
+        'candidat': candidat
+    })
index df95a20..8e10643 100644 (file)
@@ -2,27 +2,24 @@
 
 import datetime
 
+import reversion
+from ajax_select import make_ajax_form
+from auf.django.metadata.admin import \
+        AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, \
+        AUF_METADATA_READONLY_FIELDS
+from auf.django.references import models as ref
 from django.core.urlresolvers import reverse
 from django.contrib import admin
 from django.conf import settings
 from django.db.models import Q, Count
 from django.template.defaultfilters import date
 
-from ajax_select import make_ajax_form
-
-from auf.django.metadata.admin import \
-        AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, \
-        AUF_METADATA_READONLY_FIELDS
-import auf.django.references.models as ref
-
 from project.decorators import in_drh_or_admin
 from project.groups import grp_correspondants_rh
 from project.groups import get_employe_from_user
-
-import project.rh.models as rh
 from project.rh.forms import ContratForm, AyantDroitForm, EmployeAdminForm, \
           AjaxSelect, DossierForm, ResponsableInlineForm
-        
+from project.rh import models as rh
 from project.rh.change_list import ChangeList
 
 
@@ -273,7 +270,8 @@ class PosteComparaisonInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
     model = rh.PosteComparaison
 
 
-class ClassementAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class ClassementAdmin(AUFMetadataAdminMixin, BaseAdmin,
+                      reversion.VersionAdmin):
     list_display = ('_classement', '_date_modification', 'user_modification', )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
@@ -291,7 +289,12 @@ class ClassementAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class DeviseAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
+class CommentaireAdmin(reversion.VersionAdmin, BaseAdmin):
+    pass
+
+
+class DeviseAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                  ArchiveMixin, BaseAdmin):
     list_display = (
             'code',
             'nom',
@@ -314,7 +317,8 @@ class DeviseAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
 
 
 class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
-                   ProtectRegionMixin, BaseAdmin, AjaxSelect):
+                   ProtectRegionMixin, BaseAdmin, AjaxSelect,
+                   reversion.VersionAdmin):
     alphabet_filter = 'employe__nom'
     search_fields = (
         'id',
@@ -493,8 +497,8 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
             instance.save()
 
 
-class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
-                   ProtectRegionMixin, BaseAdmin):
+class EmployeAdminMixin(DateRangeMixin, AUFMetadataAdminMixin,
+                        ProtectRegionMixin, BaseAdmin):
     prefixe_recherche_temporelle = "rh_dossiers__"
     alphabet_filter = 'nom'
     DEFAULT_ALPHABET = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
@@ -635,7 +639,11 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
             instance.save()
 
 
-class EmployeProxyAdmin(EmployeAdmin):
+class EmployeAdmin(reversion.VersionAdmin, EmployeAdminMixin):
+    pass
+
+
+class EmployeProxyAdmin(admin.ModelAdmin, EmployeAdminMixin):
     list_display = ('_id', '_apercu', '_nom', '_organigramme')
     actions = None
 
@@ -677,7 +685,8 @@ class EmployeProxyAdmin(EmployeAdmin):
     _organigramme.short_description = "Organigramme"
 
 
-class CategorieEmploiAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class CategorieEmploiAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                           BaseAdmin):
     list_display = ('nom', '_date_modification', 'user_modification', )
     inlines = (TypePosteInline,)
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
@@ -690,7 +699,8 @@ class CategorieEmploiAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class OrganismeBstgAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class OrganismeBstgAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                         BaseAdmin):
     search_fields = ('nom',)
     list_display = (
             'nom',
@@ -712,8 +722,8 @@ class OrganismeBstgAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin,
-                 ProtectRegionMixin, BaseAdmin, AjaxSelect):
+class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin,
+                 reversion.VersionAdmin, AjaxSelect, BaseAdmin):
     form = make_ajax_form(rh.Poste, {
         'implantation': 'implantations',
         'type_poste': 'typepostes',
@@ -876,7 +886,8 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin,
             responsable = ''
 
         try:
-            dossier = obj.responsable.rh_dossiers.all().order_by('-date_debut')[0]
+            dossier = obj.responsable.rh_dossiers.all() \
+                    .order_by('-date_debut')[0]
             employe_id = dossier.employe.id
             employe_html = u"""<br />
                     <a href="%s"
@@ -971,17 +982,17 @@ class ResponsableImplantationAdmin(BaseAdmin):
             'responsable__employe__prenom',
             )
     ordering = ('nom',)
-    
+
     def _region(self, obj):
         return obj.region.code
     _region.short_description = u"Région"
     _region.admin_order_field = 'region__code'
-    
+
     def _nom(self, obj):
         return obj.nom
     _nom.short_description = u"Implantation"
     _nom.admin_order_field = 'nom'
-    
+
     def _responsable(self, obj):
         try:
             employe = obj.responsable.employe
@@ -1011,7 +1022,7 @@ class ResponsableImplantationAdmin(BaseAdmin):
         return False
 
 
-class ServiceAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
+class ServiceAdminMixin(AUFMetadataAdminMixin, ArchiveMixin, BaseAdmin):
     list_display = (
             'nom',
             '_archive',
@@ -1032,7 +1043,11 @@ class ServiceAdmin(AUFMetadataAdminMixin, BaseAdmin, ArchiveMixin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class ServiceProxyAdmin(ServiceAdmin):
+class ServiceAdmin(reversion.VersionAdmin, ServiceAdminMixin):
+    pass
+
+
+class ServiceProxyAdmin(admin.ModelAdmin, ServiceAdminMixin):
     list_display = ('nom', '_organigramme', '_archive', )
     actions = None
 
@@ -1058,7 +1073,7 @@ class ServiceProxyAdmin(ServiceAdmin):
     _organigramme.short_description = "Organigramme"
 
 
-class StatutAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class StatutAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin, BaseAdmin):
     list_display = ('code', 'nom', '_date_modification', 'user_modification', )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
@@ -1073,7 +1088,7 @@ class StatutAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TauxChangeAdmin(BaseAdmin):
+class TauxChangeAdmin(reversion.VersionAdmin, BaseAdmin):
     list_display = (
             'taux',
             'devise',
@@ -1095,7 +1110,7 @@ class TauxChangeAdmin(BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TypeContratAdmin(BaseAdmin):
+class TypeContratAdmin(reversion.VersionAdmin, BaseAdmin):
     list_display = (
             'nom',
             'nom_long',
@@ -1115,7 +1130,8 @@ class TypeContratAdmin(BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TypePosteAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class TypePosteAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                     BaseAdmin):
     search_fields = ('nom', 'nom_feminin', )
     list_display = (
             'nom',
@@ -1143,8 +1159,8 @@ class TypePosteAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TypeRemunerationAdmin(AUFMetadataAdminMixin, BaseAdmin,
-                            ArchiveMixin):
+class TypeRemunerationAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                            ArchiveMixin, BaseAdmin):
     list_display = (
             'nom',
             'type_paiement',
@@ -1165,7 +1181,8 @@ class TypeRemunerationAdmin(AUFMetadataAdminMixin, BaseAdmin,
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TypeRevalorisationAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class TypeRevalorisationAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                              BaseAdmin):
     list_display = ('nom', '_date_modification', 'user_modification', )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {'fields': ('nom', )}),
@@ -1178,7 +1195,8 @@ class TypeRevalorisationAdmin(AUFMetadataAdminMixin, BaseAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class ValeurPointAdmin(AUFMetadataAdminMixin, BaseAdmin):
+class ValeurPointAdmin(AUFMetadataAdminMixin, reversion.VersionAdmin,
+                       BaseAdmin):
     list_display = (
             '_devise_code',
             '_devise_nom',
index cf91696..28434b6 100644 (file)
@@ -5,9 +5,8 @@ import itertools
 import StringIO
 import time
 
-from django.db.models import Q, Count
-
 from auf.django.references import models as ref
+from django.db.models import Q, Count
 
 from project.rh import ods
 from project.rh import models as rh
index f39e795..d2771ba 100644 (file)
@@ -4,16 +4,16 @@ import datetime
 from datetime import date
 from decimal import Decimal
 
-from django.core.files.storage import FileSystemStorage
-from django.db import models
-from django.db.models import Q
-from django.conf import settings
-
+import reversion
 from auf.django.emploi.models import \
         GENRE_CHOICES, SITUATION_CHOICES  # devrait plutot être dans references
 from auf.django.metadata.models import AUFMetadata
 from auf.django.metadata.managers import NoDeleteManager
 from auf.django.references import models as ref
+from django.core.files.storage import FileSystemStorage
+from django.db import models
+from django.db.models import Q
+from django.conf import settings
 
 from project.rh.change_list import \
         RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
@@ -222,22 +222,22 @@ class Poste_(AUFMetadata):
         'Devise', db_column='devise_max', null=True, related_name='+'
     )
     salaire_min = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
     salaire_max = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
     indemn_min = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
     indemn_max = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
     autre_min = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
     autre_max = models.DecimalField(
-        max_digits=12, decimal_places=2, null=True, default=0
+        max_digits=12, decimal_places=2, null=True, blank=True
     )
 
     # Comparatifs de rémunération
@@ -340,6 +340,11 @@ class Poste(Poste_):
             .exclude(date_fin__lt=date.today())
         ]
 
+reversion.register(Poste, format='xml', follow=[
+    'rh_financements', 'rh_pieces', 'rh_comparaisons_internes',
+    'commentaires', 'rh_dossiers'
+])
+
 
 POSTE_FINANCEMENT_CHOICES = (
     ('A', 'A - Frais de personnel'),
@@ -378,6 +383,8 @@ class PosteFinancement(PosteFinancement_):
         Poste, db_column='poste', related_name='rh_financements'
     )
 
+reversion.register(PosteFinancement, format='xml')
+
 
 class PostePiece_(models.Model):
     """
@@ -402,6 +409,8 @@ class PostePiece(PostePiece_):
         Poste, db_column='poste', related_name='rh_pieces'
     )
 
+reversion.register(PostePiece, format='xml')
+
 
 class PosteComparaison_(AUFMetadata, DevisableMixin):
     """
@@ -433,12 +442,15 @@ class PosteComparaison(PosteComparaison_):
 
     objects = NoDeleteManager()
 
+reversion.register(PosteComparaison, format='xml')
+
 
 class PosteCommentaire(Commentaire):
     poste = models.ForeignKey(
         Poste, db_column='poste', related_name='commentaires'
     )
 
+reversion.register(PosteCommentaire, format='xml')
 
 
 ### EMPLOYÉ/PERSONNE
@@ -453,7 +465,7 @@ class Employe(AUFMetadata):
     """
 
     objects = EmployeManager()
-    
+
     # Identification
     nom = models.CharField(max_length=255)
     prenom = models.CharField(u"prénom", max_length=255)
@@ -575,6 +587,10 @@ class Employe(AUFMetadata):
             regions.append(d.poste.implantation.region)
         return regions
 
+reversion.register(Employe, format='xml', follow=[
+    'pieces', 'commentaires', 'ayantdroits', 'rh_dossiers'
+])
+
 
 class EmployePiece(models.Model):
     """
@@ -598,16 +614,20 @@ class EmployePiece(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+reversion.register(EmployePiece, format='xml')
+
 
 class EmployeCommentaire(Commentaire):
     employe = models.ForeignKey(
-        'Employe', db_column='employe', related_name='+'
+        'Employe', db_column='employe', related_name='commentaires'
     )
 
     class Meta:
         verbose_name = u"Employé commentaire"
         verbose_name_plural = u"Employé commentaires"
 
+reversion.register(EmployeCommentaire, format='xml')
+
 
 LIEN_PARENTE_CHOICES = (
     ('Conjoint', 'Conjoint'),
@@ -664,12 +684,16 @@ class AyantDroit(AUFMetadata):
             regions.append(d.poste.implantation.region)
         return regions
 
+reversion.register(AyantDroit, format='xml', follow=['commentaires'])
+
 
 class AyantDroitCommentaire(Commentaire):
     ayant_droit = models.ForeignKey(
-        'AyantDroit', db_column='ayant_droit', related_name='+'
+        'AyantDroit', db_column='ayant_droit', related_name='commentaires'
     )
 
+reversion.register(AyantDroitCommentaire, format='xml')
+
 
 ### DOSSIER
 
@@ -976,6 +1000,11 @@ class Dossier(Dossier_):
         )
     )
 
+reversion.register(Dossier, format='xml', follow=[
+    'rh_dossierpieces', 'rh_comparaisons', 'rh_remunerations',
+    'rh_contrats', 'commentaires'
+])
+
 
 class DossierPiece_(models.Model):
     """
@@ -1000,6 +1029,7 @@ class DossierPiece(DossierPiece_):
         Dossier, db_column='dossier', related_name='rh_dossierpieces'
     )
 
+reversion.register(DossierPiece, format='xml')
 
 
 class DossierCommentaire(Commentaire):
@@ -1007,6 +1037,8 @@ class DossierCommentaire(Commentaire):
         Dossier, db_column='dossier', related_name='commentaires'
     )
 
+reversion.register(DossierCommentaire, format='xml')
+
 
 class DossierComparaison_(models.Model, DevisableMixin):
     """
@@ -1036,6 +1068,8 @@ class DossierComparaison(DossierComparaison_):
         Dossier, related_name='rh_comparaisons'
     )
 
+reversion.register(DossierComparaison, format='xml')
+
 
 ### RÉMUNÉRATION
 
@@ -1052,8 +1086,7 @@ class RemunerationMixin(AUFMetadata):
         null=True, blank=True
     )
     montant = models.DecimalField(
-        null=True, blank=True,
-        default=0, max_digits=12, decimal_places=2
+        null=True, blank=True, max_digits=12, decimal_places=2
     )  # Annuel (12 mois, 52 semaines, 364 jours?)
     devise = models.ForeignKey('Devise', db_column='devise', related_name='+')
 
@@ -1106,6 +1139,8 @@ class Remuneration(Remuneration_):
         Dossier, db_column='dossier', related_name='rh_remunerations'
     )
 
+reversion.register(Remuneration, format='xml')
+
 
 ### CONTRATS
 
@@ -1148,6 +1183,8 @@ class Contrat(Contrat_):
         Dossier, db_column='dossier', related_name='rh_contrats'
     )
 
+reversion.register(Contrat, format='xml')
+
 
 ### RÉFÉRENCES RH
 
@@ -1166,6 +1203,8 @@ class CategorieEmploi(AUFMetadata):
     def __unicode__(self):
         return self.nom
 
+reversion.register(CategorieEmploi, format='xml')
+
 
 class FamilleProfessionnelle(models.Model):
     """
@@ -1181,6 +1220,8 @@ class FamilleProfessionnelle(models.Model):
     def __unicode__(self):
         return self.nom
 
+reversion.register(FamilleProfessionnelle, format='xml')
+
 
 class TypePoste(AUFMetadata):
     """
@@ -1208,6 +1249,9 @@ class TypePoste(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+reversion.register(TypePoste, format='xml')
+
+
 TYPE_PAIEMENT_CHOICES = (
     (u'Régulier', u'Régulier'),
     (u'Ponctuel', u'Ponctuel'),
@@ -1250,6 +1294,8 @@ class TypeRemuneration(AUFMetadata):
             archive = ""
         return u'%s %s' % (self.nom, archive)
 
+reversion.register(TypeRemuneration, format='xml')
+
 
 class TypeRevalorisation(AUFMetadata):
     """
@@ -1266,6 +1312,8 @@ class TypeRevalorisation(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+reversion.register(TypeRevalorisation, format='xml')
+
 
 class Service(AUFMetadata):
     """
@@ -1288,6 +1336,8 @@ class Service(AUFMetadata):
             archive = ""
         return u'%s %s' % (self.nom, archive)
 
+reversion.register(Service, format='xml')
+
 
 TYPE_ORGANISME_CHOICES = (
     ('MAD', 'Mise à disposition'),
@@ -1322,6 +1372,8 @@ class OrganismeBstg(AUFMetadata):
     def get_regions(self):
         return [self.pays.region]
 
+reversion.register(OrganismeBstg, format='xml')
+
 
 class Statut(AUFMetadata):
     """
@@ -1347,6 +1399,8 @@ class Statut(AUFMetadata):
     def __unicode__(self):
         return u'%s : %s' % (self.code, self.nom)
 
+reversion.register(Statut, format='xml')
+
 
 TYPE_CLASSEMENT_CHOICES = (
     ('S', 'S -Soutien'),
@@ -1388,7 +1442,7 @@ class Classement_(AUFMetadata):
     type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
     echelon = models.IntegerField(u"échelon", blank=True, default=0)
     degre = models.IntegerField(u"degré", blank=True, default=0)
-    coefficient = models.FloatField(u"coefficient", default=0, null=True)
+    coefficient = models.FloatField(u"coefficient", blank=True, null=True)
 
     # Méta
     # annee # au lieu de date_debut et date_fin
@@ -1407,6 +1461,8 @@ class Classement_(AUFMetadata):
 class Classement(Classement_):
     __doc__ = Classement_.__doc__
 
+reversion.register(Classement, format='xml')
+
 
 class TauxChange_(AUFMetadata):
     """
@@ -1431,6 +1487,8 @@ class TauxChange_(AUFMetadata):
 class TauxChange(TauxChange_):
     __doc__ = TauxChange_.__doc__
 
+reversion.register(TauxChange, format='xml')
+
 
 class ValeurPointManager(NoDeleteManager):
 
@@ -1474,6 +1532,8 @@ class ValeurPoint_(AUFMetadata):
 class ValeurPoint(ValeurPoint_):
     __doc__ = ValeurPoint_.__doc__
 
+reversion.register(ValeurPoint, format='xml')
+
 
 class Devise(AUFMetadata):
     """
@@ -1493,6 +1553,8 @@ class Devise(AUFMetadata):
     def __unicode__(self):
         return u'%s - %s' % (self.code, self.nom)
 
+reversion.register(Devise, format='xml')
+
 
 class TypeContrat(AUFMetadata):
     """
@@ -1509,6 +1571,8 @@ class TypeContrat(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+reversion.register(TypeContrat, format='xml')
+
 
 ### AUTRES
 
@@ -1544,3 +1608,5 @@ class ResponsableImplantation(models.Model):
         ordering = ['implantation__nom']
         verbose_name = "Responsable d'implantation"
         verbose_name_plural = "Responsables d'implantation"
+
+reversion.register(ResponsableImplantation, format='xml')
index eb9bde6..9d2bf64 100644 (file)
@@ -2,11 +2,10 @@
 
 import urllib
 from datetime import date
-from itertools import izip
 import StringIO
 
 import pygraphviz as pgv
-
+from auf.django.references import models as ref
 from django import forms
 from django.conf import settings
 from django.contrib.auth.decorators import login_required
@@ -16,18 +15,14 @@ from django.db.models import Q
 from django.http import HttpResponse
 from django.shortcuts import render, get_object_or_404
 
-from auf.django.references import models as ref
-
-from project.decorators import redirect_interdiction
 from project.decorators import drh_or_admin_required
 from project.decorators import region_protected
 from project.groups import get_employe_from_user
 from project.groups import grp_drh, grp_correspondants_rh
-
 from project.rh import models as rh
 from project.rh import graph as rh_graph
 from project.rh.change_list import RechercheTemporelle
-from project.rh.lib import calc_remun, get_lookup_params
+from project.rh.lib import get_lookup_params
 from project.rh.masse_salariale import MasseSalariale
 from project.rh.templatetags.rapports import SortHeaders
 
@@ -35,7 +30,7 @@ from project.rh.templatetags.rapports import SortHeaders
 @login_required
 def profil(request):
     """Profil personnel de l'employé - éditable"""
-    employe = get_employe_from_user(user)
+    employe = get_employe_from_user(request.user)
     c = {
       'user': request.user,
       'employe': employe,
@@ -262,7 +257,7 @@ def rapports_employes_sans_contrat(request):
         ).filter(
             rh_contrats__in=contrats_echus
         )
-    
+
     # employés sans contrat
     employes = rh.Employe.objects.filter(
             rh_dossiers__in=dossiers_sans_contrat
@@ -282,13 +277,13 @@ def rapports_employes_sans_contrat(request):
     ]
     h = SortHeaders(
         request, headers, order_field_type="ot", order_field="o",
-        not_sortable=('dossier','dossier_date_debut','dossier_date_fin',)
+        not_sortable=('dossier', 'dossier_date_debut', 'dossier_date_fin',)
     )
 
     c = {
         'title': u'Rapport des employés sans contrat',
         'employes': employes,
-        'dossiers_sans_contrat':dossiers_sans_contrat,
+        'dossiers_sans_contrat': dossiers_sans_contrat,
         'headers': list(h.headers()),
     }
 
@@ -359,6 +354,7 @@ def rapports_postes_service(request):
     c['data'] = data
     return render(request, 'rh/rapports/postes_service.html', c)
 
+
 @region_protected(rh.Dossier)
 def dossier_apercu(request, dossier_id):
     d = get_object_or_404(rh.Dossier, pk=dossier_id)
@@ -429,7 +425,6 @@ def employe_apercu(request, employe_id):
 @login_required
 @drh_or_admin_required
 def organigrammes_employe(request, id, level="all"):
-
     poste = get_object_or_404(rh.Poste, pk=id)
     dossiers_by_poste = dict(
         (d.poste_id, d)
@@ -511,56 +506,39 @@ def organigrammes_employe(request, id, level="all"):
 @login_required
 @drh_or_admin_required
 def organigrammes_service(request, id):
-
     service = get_object_or_404(rh.Service, pk=id)
     svg = rh_graph.organigramme_postes_cluster( \
             cluster_filter={"service": service}, \
             titre=u"Organigramme du service %s" % service.nom,
             cluster_titre=service.nom)
 
-    c = {
+    return render(request, 'rh/organigrammes/vide.html', {
         'svg': svg
-    }
-
-    return render(request, 'rh/organigrammes/vide.html', c, 
-        content_type="image/svg+xml"
-    )
+    }, content_type="image/svg+xml")
 
 
 @login_required
 @drh_or_admin_required
 def organigrammes_implantation(request, id):
-
     implantation = get_object_or_404(ref.Implantation, pk=id)
     svg = rh_graph.organigramme_postes_cluster( \
             cluster_filter={"implantation": implantation}, \
             titre=u"Organigramme de l'implantation %s" % implantation.nom,
             cluster_titre=implantation.nom)
-
-    c = {
+    return render(request, 'rh/organigrammes/vide.html', {
         'svg': svg
-    }
-
-    return render(request, 'rh/organigrammes/vide.html', c, 
-        content_type="image/svg+xml"
-    )
+    }, content_type="image/svg+xml")
 
 
 @login_required
 @drh_or_admin_required
 def organigrammes_region(request, id):
-
     region = get_object_or_404(ref.Region, pk=id)
     svg = rh_graph.organigramme_postes_cluster( \
             cluster_filter={"implantation__region": region}, \
             titre=u"Organigramme du bureau de %s" % region.nom,
             cluster_titre=region.nom)
 
-    c = {
+    return render(request, 'rh/organigrammes/vide.html', {
         'svg': svg
-    }
-
-    return render(request, 
-        'rh/organigrammes/vide.html', c, 
-        content_type="image/svg+xml"
-    )
+    }, content_type="image/svg+xml")
index b4a5bfb..289fcff 100644 (file)
@@ -4,8 +4,7 @@ south = 0.7
 django-admin-tools = 0.4.1
 django-ajax-selects = 1.1.4
 django-alphafilter = 0.5.3auf4
-django-picklefield = 0.2.1
-django-reversion = 1.3.3
+django-reversion = 1.5.2
 django-sendfile = 0.2.1
 django-urldecorators = 0.3
 auf.django.auth = 0.5.5dev