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
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():
# '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,