Premier jet pour le formulaire de poste (manque le financement)
[auf_rh_dae.git] / project / dae / forms.py
CommitLineData
5d680e84
NC
1# -*- encoding: utf-8 -*-
2from django import forms
3
4from datamaster_modeles import models as ref
5
6from dae import models as dae
7from rh_v1 import models as rh
8
9
10class PosteForm(forms.ModelForm):
11 """ Formulaire des postes. """
12 class Meta:
13 model = dae.Poste
14 fields = ('poste', 'implantation', 'type_poste', 'service', 'nom',
15 'responsable', 'statut_residence', 'mise_a_disposition',
16 'appel', 'date_debut', 'date_fin', 'actif',
17 'regime_travail', 'regime_travail_nb_heure_semaine',
18 'classement_min', 'classement_max',
19 'valeur_point_min', 'valeur_point_max',
20 'salaire_min', 'salaire_max', 'indemn_min', 'indemn_max',
21 'autre_min', 'autre_max', 'devise_comparaison',
22 'comp_locale_min', 'comp_locale_max',
23 'comp_universite_min', 'comp_universite_max',
24 'comp_fonctionpub_min', 'comp_fonctionpub_max',
25 'comp_ong_min', 'comp_ong_max',
26 'comp_autre_min', 'comp_autre_max',)
27 widgets = dict(statut_residence=forms.RadioSelect(),
28 appel=forms.RadioSelect())
29
30 # La liste des choix est laissée vide. Voir __init__ pour la raison.
31 poste = forms.ChoiceField(choices=(), required=False)
32
33 def __init__(self, *args, **kwargs):
34 """ Mise à jour dynamique du contenu du menu des postes.
35
36 Si on ne met le menu à jour de cette façon, à chaque instantiation du
37 formulaire, son contenu est mis en cache par le système et il ne
38 reflète pas les changements apportés par les ajouts, modifications,
39 etc...
40
41 """
42 super(PosteForm, self).__init__(*args, **kwargs)
43 self.fields['poste'].choices = self._poste_choices()
44
45 def _poste_choices(self):
46 """ Menu déroulant pour les postes.
47
48 Constitué des postes de dae et des postes de rh_v1 qui n'ont pas
49 d'équivalent dans dae.
50
51 """
52 dae_ = dae.Poste.objects.filter(id_rh__isnull=True)
53 copies = dae.Poste.objects.exclude(id_rh__isnull=True)
54 id_copies = [p.id_rh_id for p in copies.all()]
55 rhv1 = rh.Poste.objects.exclude(id__in=id_copies)
56
57 return [('', 'Nouveau poste')] + \
58 sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies] +
59 [('rh-%s' % p.id, unicode(p)) for p in rhv1],
60 key=lambda t: t[1])