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