DAE poste modification
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 4 Jul 2012 15:20:05 +0000 (11:20 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 4 Jul 2012 15:20:05 +0000 (11:20 -0400)
project/dae/forms.py
project/dae/views.py

index e7f9408..dd78d6a 100644 (file)
@@ -184,22 +184,23 @@ def label_poste_display(poste):
     )
     return label
 
-PostePieceForm = inlineformset_factory(
-        dae.Poste,
-        dae.PostePiece,
-        #formset=BaseInlineFormSetWithInitial,
-        )
-
 
+PostePieceFormSet = inlineformset_factory(dae.Poste, dae.PostePiece,)
 DossierPieceForm = inlineformset_factory(dae.Dossier, dae.DossierPiece)
 
-
-FinancementForm = inlineformset_factory(
+# Ce formset est utilisé dans le cas de la création de poste prépopulé avec les
+# données de RH
+FinancementFormSetInitial = inlineformset_factory(
     dae.Poste,
     dae.PosteFinancement,
     formset=BaseInlineFormSetWithInitial,
     extra=2
 )
+FinancementFormSet = inlineformset_factory(
+    dae.Poste,
+    dae.PosteFinancement,
+    extra=2
+)
 
 
 class DossierComparaisonForm(forms.ModelForm):
@@ -226,15 +227,23 @@ class PosteComparaisonForm(forms.ModelForm):
         model = dae.PosteComparaison
         exclude = ('poste',)
 
-PosteComparaisonFormSet = inlineformset_factory(
+# Ce formset est utilisé dans le cas de la création de poste prépopulé avec les
+# données de RH
+PosteComparaisonFormSetInitial = inlineformset_factory(
     dae.Poste,
     dae.PosteComparaison,
     extra=3,
     max_num=3,
     form=PosteComparaisonForm,
-    #formset=BaseModelFormSetWithInitial,
     formset=BaseInlineFormSetWithInitial,
 )
+PosteComparaisonFormSet = inlineformset_factory(
+    dae.Poste,
+    dae.PosteComparaison,
+    extra=3,
+    max_num=3,
+    form=PosteComparaisonForm,
+)
 
 
 class FlexibleRemunForm(forms.ModelForm):
index d3346c9..3fb4a17 100644 (file)
@@ -26,9 +26,11 @@ from project.dae.decorators import \
         employe_dans_ma_region_ou_service, \
         dossier_est_modifiable, \
         poste_est_modifiable, get_contrat
+from project.dae.forms import FinancementFormSet, FinancementFormSetInitial
+from project.dae.forms import PosteComparaisonFormSet, PosteComparaisonFormSetInitial
 from project.dae.forms import \
-        PosteWorkflowForm, PosteForm, FinancementForm, PostePieceForm, \
-        PosteComparaisonFormSet, DossierWorkflowForm, ChoosePosteForm, \
+        PosteWorkflowForm, PosteForm, PostePieceFormSet, \
+        DossierWorkflowForm, ChoosePosteForm, \
         EmployeForm, DossierForm, DossierPieceForm, \
         DossierComparaisonFormSet, RemunForm, ContratForm, DAENumeriseeForm, \
         label_poste_display, DAEFinaliseesSearchForm
@@ -117,69 +119,70 @@ def poste(request, key=None):
     il est automatiquement copié dans dae.
 
     """
+
+    def _dupliquer_poste(poste_dae, poste_rh):
+        """
+        Recopie les fields d'un poste RH dans un poste DAE
+        avec ceux-ci précédemment crées
+        """
+        exclus = ('id', 'supprime', 'date_creation',
+                'user_creation', 'date_modification',
+                'user_modification', )
+        fields = [f for f in poste_rh._meta.fields if f.name not in exclus]
+        for field in fields:
+            setattr(poste_dae, field.name, getattr(poste_rh, field.name))
+        return poste_dae
+
     poste, data, vars = None, dict(), dict()
 
-    if key:
-        # Poste existant
+    # Sans key, c'est un nouveau poste
+    if key is None:
+        new = True
+    else:
+        new = False
+
+    # Poste existant
+    poste_rh = None
+    if not new:
         source, id = key.split('-')
 
         if source == 'dae':
             poste = get_object_or_404(dae.Poste, pk=id)
-            poste_rh = None
+            #data['poste'] = key
         elif source == 'rh':
             poste_rh = get_object_or_404(rh.Poste, pk=id)
-            # Initialisation avec les valeurs du poste de rh_v1
             poste = dae.Poste(id_rh=poste_rh)
-            exclus = ('id', 'supprime', 'date_creation',
-                    'user_creation', 'date_modification',
-                    'user_modification', )
-            fields = [f for f in poste_rh._meta.fields if f.name not in exclus]
-            for field in fields:
-                setattr(poste, field.name, getattr(poste_rh, field.name))
-
-        if poste.id_rh_id:
-            data['poste'] = 'rh-' + str(poste.id_rh_id)
-        else:
-            data['poste'] = key
-    else:
-        # Nouveau poste
-        vars['new'] = True
+            # Initialisation avec les valeurs du poste de rh_v1
+            poste = _dupliquer_poste(poste, poste_rh)
+            #data['poste'] = 'rh-' + str(poste.id_rh_id)
 
     # prépopuler pour la modification de poste
+    if poste_rh is not None:
+        FinancementForm = FinancementFormSetInitial
+        PosteComparaisonForm = PosteComparaisonFormSetInitial
 
-    if poste_rh is None: # poste RH n'est pas un modele
-        qs_financements = poste.dae_financements.all()
-        qs_comparaisons = poste.dae_comparaisons_internes.all()
-    else:
         qs_financements = poste_rh.rh_financements.all()
         qs_comparaisons = poste_rh.rh_comparaisons_internes.all()
-
-    financements = [{'type': f.type, 'pourcentage': f.pourcentage,
-        'commentaire': f.commentaire} for f in qs_financements]
-    comparaisons = [{'implantation': c.implantation, 'nom': c.nom,
-        'montant': c.montant, 'devise': c.devise} for c in qs_comparaisons]
+        financements = [{'type': f.type, 'pourcentage': f.pourcentage,
+            'commentaire': f.commentaire} for f in qs_financements]
+        comparaisons = [{'implantation': c.implantation, 'nom': c.nom,
+            'montant': c.montant, 'devise': c.devise} for c in qs_comparaisons]
+    # formulaires normaux, avec modifications des objects FK
+    else:
+        FinancementForm = FinancementFormSet
+        PosteComparaisonForm = PosteComparaisonFormSet
+        financements = []
+        comparaisons = []
 
 
     if request.POST:
         data.update(dict(request.POST.items()))
         form = PosteForm(data, instance=poste, request=request)
-        financementForm = FinancementForm(request.POST, instance=poste,
-                )
-        piecesForm = PostePieceForm(
-            request.POST, request.FILES, instance=poste,
-        )
-        if isinstance(poste, dae.Poste):
-            comparaisons_formset = PosteComparaisonFormSet(
+        financementForm = FinancementForm(request.POST, instance=poste, )
+        piecesForm = PostePieceFormSet(request.POST, request.FILES, instance=poste, )
+        comparaisons_formset = PosteComparaisonForm(
                 request.POST,
-                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
-                    request.user,
-                )
-            )
-        else:
-            comparaisons_formset = PosteComparaisonFormSet(
-                request.POST,
-                initial=comparaisons,
-                queryset=dae.PosteComparaison.objects.none(),
+                instance=poste,
             )
         if form.is_valid() and piecesForm.is_valid() and \
            financementForm.is_valid() and comparaisons_formset.is_valid():
@@ -219,24 +222,18 @@ def poste(request, key=None):
         # 'initial' évite la validation prémature lors d'une copie de poste de
         # rh_v1 vers dae.
         form = PosteForm(initial=data, instance=poste, request=request)
+        piecesForm = PostePieceFormSet(instance=poste)
 
-        piecesForm = PostePieceForm(
-                #initial=pieces,
-                instance=poste)
-        financementForm = FinancementForm(initial=financements, instance=poste)
-        
-        if isinstance(poste, dae.Poste):
-            comparaisons_formset = PosteComparaisonFormSet(
+        if poste_rh is not None:
+            financementForm = FinancementForm(initial=financements, instance=poste)
+            comparaisons_formset = PosteComparaisonForm(
                 initial=comparaisons,
-                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
-                    request.user
-                )
+                instance=poste,
             )
+        # cas de la création d'un nouveau poste
         else:
-            comparaisons_formset = PosteComparaisonFormSet(
-                initial=comparaisons,
-                queryset=dae.PosteComparaison.objects.none()
-            )
+            financementForm = FinancementForm(instance=poste)
+            comparaisons_formset = PosteComparaisonForm(instance=poste)
 
     vars.update(dict(
         form=form, poste=poste, poste_key=key, piecesForm=piecesForm,