Ajouté les sources de financement des postes
[auf_rh_dae.git] / project / dae / forms.py
1 # -*- encoding: utf-8 -*-
2 from django import forms
3
4 from datamaster_modeles import models as ref
5
6 from dae import models as dae
7 from rh_v1 import models as rh
8
9
10 class 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])
61
62
63 class PosteFinancementForm(forms.ModelForm):
64 """ Formulaire des sources de financement pour un poste. """
65 class Meta:
66 model = dae.PosteFinancement
67 fields = ('type', 'montant', 'pourcentage', 'commentaire')