[#3162] Responsables implantation terminés
authorDavin Baragiotta <davin.baragiotta@auf.org>
Fri, 8 Jun 2012 21:59:58 +0000 (17:59 -0400)
committerDavin BARAGIOTTA <davin.baragiotta@auf.org>
Fri, 8 Jun 2012 21:59:58 +0000 (17:59 -0400)
project/dashboard.py
project/rh/admin.py
project/rh/forms.py
project/rh/managers.py
project/rh/models.py

index cad8b21..39b516b 100644 (file)
@@ -62,7 +62,7 @@ class CustomIndexDashboard(Dashboard):
         self.children.append(modules.AppList(
             _(u'Inter-systèmes'),
             models=(
-                'project.rh.models.ResponsableImplantation',
+                'project.rh.models.ResponsableImplantationProxy',
             ),
         ))
 
index 86b909e..8f10421 100644 (file)
@@ -1,7 +1,7 @@
 # -*- encoding: utf-8 -*-
 
 import datetime
-        
+
 from django.core.urlresolvers import reverse
 from django.contrib import admin
 from django.conf import settings
@@ -20,8 +20,9 @@ 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
+from project.rh.forms import ContratForm, AyantDroitForm, EmployeAdminForm, \
+          AjaxSelect, DossierForm, ResponsableInlineForm
+        
 from project.rh.change_list import ChangeList
 
 
@@ -945,15 +946,24 @@ class ResponsableInline(admin.TabularInline):
     model = rh.ResponsableImplantation
     extra = 0
     fk_name = "implantation"
+    form = ResponsableInlineForm
 
 
 class ResponsableImplantationAdmin(BaseAdmin):
     actions = None
+    fields = ('nom', )
+    inlines = (ResponsableInline, )
     list_filter = ('region', 'statut', )
     list_display = ('_region', '_nom', 'statut', '_responsable', )
+    list_display_links = ('_nom',)
     readonly_fields = ('nom', )
-    fields = ('nom', )
-    inlines = (ResponsableInline, )
+    search_fields = (
+            'nom',
+            'responsable__employe__id',
+            'responsable__employe__nom',
+            'responsable__employe__prenom',
+            )
+    ordering = ('nom',)
     
     def _region(self, obj):
         return obj.region.code
@@ -982,6 +992,7 @@ class ResponsableImplantationAdmin(BaseAdmin):
             return u"<span %s>Pas de responsable</span>" % css
     _responsable.allow_tags = True
     _responsable.short_description = u"Responsable"
+    _responsable.admin_order_field = 'responsable__employe__nom'
 
     def has_add_permission(self, request=None):
         return False
index 1b08bc1..2f3a361 100644 (file)
@@ -2,7 +2,8 @@
 
 from django import forms
 from ajax_select.fields import AutoCompleteSelectField
-from project.rh.models import Dossier, Contrat, AyantDroit, Employe
+from project.rh.models import Dossier, Contrat, AyantDroit, Employe, \
+        ResponsableImplantation
 
 
 class AjaxSelect(object):
@@ -62,3 +63,9 @@ class EmployeAdminForm(forms.ModelForm, AjaxSelect):
         self.fields['date_naissance'].widget = forms.widgets.DateInput()
 
 
+class ResponsableInlineForm(forms.ModelForm):
+    employes_actifs = Employe.objects.actifs()
+    employe = forms.ModelChoiceField(queryset=employes_actifs)
+
+    class Meta:
+        model = ResponsableImplantation
index 73f91e5..48feb1a 100644 (file)
@@ -1,11 +1,12 @@
 # -*- encoding: utf-8 -*-
 
 import datetime
+from datetime import date
 
 from django.db import models
 from django.db.models import Q
 
-from auf.django.metadata.managers import NoDeleteManager
+from auf.django.metadata.managers import NoDeleteManager, NoDeleteQuerySet
 
 from project.groups import get_employe_from_user
 from project.groups import grp_administrateurs, \
@@ -121,6 +122,34 @@ class DossierManager(SecurityManager, NoDeleteManager):
         return super(DossierManager, self).ma_region_ou_service(user)
 
 
+class EmployeQuerySet(NoDeleteQuerySet):
+    def actifs(self, date_min=None, date_max=None, annee=None):
+        qs = self
+        if annee:
+            janvier = date(annee, 1, 1)
+            decembre = date(annee, 12, 31)
+            date_min = max(janvier, date_min) if date_min else janvier
+            date_max = min(decembre, date_max) if date_max else decembre
+        if not date_min and not date_max:
+            date_min = date_max = date.today()
+        if date_min:
+            qs = qs.filter(
+                Q(rh_dossiers__date_fin__gte=date_min) | Q(rh_dossiers__date_fin=None)
+            )
+        if date_max:
+            qs = qs.filter(
+                Q(rh_dossiers__date_debut__lte=date_max) | Q(rh_dossiers__date_debut=None)
+            )
+        return qs
+
+class EmployeManager(NoDeleteManager):
+    def get_query_set(self):
+        return EmployeQuerySet(self.model) \
+                .filter(supprime=False)
+
+    def actifs(self, *args, **kwargs):
+        return self.get_query_set().actifs(*args, **kwargs)
+
 class PosteComparaisonManager(SecurityManager):
     use_for_related_fields = True
     prefixe_implantation = "implantation__region"
index 6c809d0..f39e795 100644 (file)
@@ -19,7 +19,8 @@ from project.rh.change_list import \
         RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
         STATUT_FUTUR
 from project.rh.managers import \
-        PosteManager, DossierManager, DossierComparaisonManager, \
+        PosteManager, DossierManager, EmployeManager, \
+        DossierComparaisonManager, \
         PosteComparaisonManager, DeviseManager, ServiceManager, \
         TypeRemunerationManager
 from project.rh.validators import validate_date_passee
@@ -450,6 +451,9 @@ class Employe(AUFMetadata):
     Cette classe aurait pu avantageusement s'appeler Personne car la notion
     d'employé n'a pas de sens si aucun Dossier n'existe pour une personne.
     """
+
+    objects = EmployeManager()
+    
     # Identification
     nom = models.CharField(max_length=255)
     prenom = models.CharField(u"prénom", max_length=255)
@@ -1510,6 +1514,9 @@ class TypeContrat(AUFMetadata):
 
 class ResponsableImplantationProxy(ref.Implantation):
 
+    def save(self):
+        pass
+
     class Meta:
         proxy = True
         verbose_name = u"Responsable d'implantation"