Fixes classement issue
authorBenoit C. Sirois <benoit.clennett-sirois@auf.org>
Fri, 8 Mar 2013 19:14:48 +0000 (14:14 -0500)
committerBenoit C. Sirois <benoit.clennett-sirois@auf.org>
Fri, 8 Mar 2013 19:14:48 +0000 (14:14 -0500)
project/dae/forms.py
project/dae/widgets.py
project/rh/forms.py
project/rh/models.py

index 4302bc4..df6594a 100644 (file)
@@ -29,6 +29,20 @@ from .widgets import ReadOnlyChoiceWidget, ReadOnlyWidget
 from project.dae.workflow import POSTE_ETATS_BOUTONS, POSTE_ETAT_FINALISE
 
 
+def filtered_archived_fields_form_factory(*fields):
+    """
+    Retourne un model form 
+    """
+    class FilterArchivedFields(object):
+        def __init__(self, *a, **kw):
+            super(FilterArchivedFields, self).__init__(*a, **kw)
+            for f in fields:
+                self.fields[f].queryset = (
+                    self.fields[f]._queryset.filter(archive=False)
+                    )
+    return FilterArchivedFields
+
+
 class BaseInlineFormSetWithInitial(BaseInlineFormSet):
     """
     Cette classe permet de fournir l'option initial aux inlineformsets.
@@ -212,7 +226,11 @@ FinancementFormSet = inlineformset_factory(
 )
 
 
-class DossierComparaisonForm(forms.ModelForm):
+class DossierComparaisonForm(
+    filtered_archived_fields_form_factory(
+        'classement',
+        ),
+    forms.ModelForm):
 
     recherche = AutoCompleteSelectField('dossiers', required=False)
     poste = forms.CharField(
@@ -232,7 +250,9 @@ DossierComparaisonFormSet = modelformset_factory(
 )
 
 
-class PosteComparaisonForm(forms.ModelForm):
+class PosteComparaisonForm(
+    filtered_archived_fields_form_factory('classement'),
+    forms.ModelForm):
 
     recherche = AutoCompleteSelectField('dae_postes', required=False)
 
@@ -578,7 +598,10 @@ DossierCompReadOnlyRemunFormSet = remun_formset_factory_factory(
     )
 
 
-class PosteForm(forms.ModelForm):
+class PosteForm(filtered_archived_fields_form_factory(
+        'classement_min',
+        'classement_max',),
+                forms.ModelForm):
     """ Formulaire des postes. """
 
     # On ne propose que les services actifs
@@ -760,7 +783,13 @@ class EmployeForm(forms.ModelForm):
         self.fields['employe'].choices = _employe_choices(self, request)
 
 
-class DossierForm(forms.ModelForm):
+class DossierForm(
+    filtered_archived_fields_form_factory(
+        'classement',
+        'classement_anterieur',
+        'classement_titulaire_anterieur',
+        ),
+    forms.ModelForm):
     """ Formulaire des dossiers. """
     class Meta:
         exclude = ('etat', 'employe', 'poste', 'date_debut',)
index a9ffd7a..bba6f81 100644 (file)
@@ -13,7 +13,7 @@ class ReadOnlyChoiceWidget(TextInput):
         if isinstance(self.choices, QuerySet) and value:
             display = self.choices.get(id=value)
         elif value:
-            display = dict(self.choices)[value]
+            display = dict(self.choices)[int(value)]
         else:
             display = ''
         return mark_safe(
index 6330a4d..5f68066 100644 (file)
@@ -12,9 +12,6 @@ from project.rh import models as rh
 
 
 class ClassementHistoriqueForm(forms.ModelForm):
-    def __init__(self, *a, **kw):
-        super(ClassementHistoriqueForm, self).__init__(*a, **kw)
-        self.fields['classement'].queryset = rh.Classement.avec_archives.all()
 
     class Meta:
         model = rh.RHDossierClassementRecord
index 4f9bbca..146667b 100644 (file)
@@ -101,7 +101,6 @@ class Archivable(models.Model):
     archive = models.BooleanField(u'archivé', default=False)
 
     objects = ArchivableManager()
-    avec_archives = models.Manager()
 
     class Meta:
         abstract = True
@@ -1496,10 +1495,10 @@ TYPE_PAIEMENT_CHOICES = (
 )
 
 NATURE_REMUNERATION_CHOICES = (
-    (u'Traitement', u'Traitement'),
-    (u'Indemnité', u'Indemnité autre'),
+    (u'Traitement', u'Traitements'),
+    (u'Indemnité', u'Indemnités autres'),
     (u'Charges', u'Charges patronales'),
-    (u'Accessoire', u'Accessoire'),
+    (u'Accessoire', u'Accessoires'),
     (u'RAS', u'Rémunération autre source'),
 )
 
@@ -1634,12 +1633,12 @@ TYPE_CLASSEMENT_CHOICES = (
 )
 
 
-class ClassementManager(ArchivableManager):
+class ClassementManager(models.Manager):
     """
     Ordonner les spcéfiquement les classements.
     """
     def get_query_set(self):
-        qs = super(self.__class__, self).get_query_set()
+        qs = super(ClassementManager, self).get_query_set()
         qs = qs.extra(select={
             'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'
         })
@@ -1647,6 +1646,11 @@ class ClassementManager(ArchivableManager):
         return qs.all()
 
 
+class ClassementArchivableManager(ClassementManager,
+                                  ArchivableManager):
+    pass
+
+
 class Classement_(Archivable):
     """
     Éléments de classement de la
@@ -1658,6 +1662,7 @@ class Classement_(Archivable):
     salaire de base = coefficient * valeur du point de l'Implantation du Poste
     """
     objects = ClassementManager()
+    sans_archives = ClassementArchivableManager()
 
     # Identification
     type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)