ajouter les codes de devises dans les valeurs de point, et filter celles-ci sur lanne...
[auf_rh_dae.git] / project / dae / forms.py
CommitLineData
5d680e84 1# -*- encoding: utf-8 -*-
ce110fb9 2
5d680e84
NC
3from django import forms
4
5from datamaster_modeles import models as ref
6
7from dae import models as dae
8from rh_v1 import models as rh
9
10
11class PosteForm(forms.ModelForm):
12 """ Formulaire des postes. """
13 class Meta:
14 model = dae.Poste
ce110fb9 15
5d680e84
NC
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',
96d32304 21 'coefficient_min', 'coefficient_max',
5d680e84 22 'valeur_point_min', 'valeur_point_max',
3d627bfd 23 'devise_min', 'devise_max',
5d680e84
NC
24 'salaire_min', 'salaire_max', 'indemn_min', 'indemn_max',
25 'autre_min', 'autre_max', 'devise_comparaison',
26 'comp_locale_min', 'comp_locale_max',
27 'comp_universite_min', 'comp_universite_max',
28 'comp_fonctionpub_min', 'comp_fonctionpub_max',
29 'comp_ong_min', 'comp_ong_max',
30 'comp_autre_min', 'comp_autre_max',)
31 widgets = dict(statut_residence=forms.RadioSelect(),
ce110fb9 32 appel=forms.RadioSelect(),
3d627bfd 33 nom=forms.TextInput(attrs={'size': 60},),
34 #devise_min=forms.Select(attrs={'disabled':'disabled'}),
35 #devise_max=forms.Select(attrs={'disabled':'disabled'}),
36 )
5d680e84 37
98d51b59 38 responsable = forms.ModelChoiceField(
139686f2
NC
39 queryset=rh.Poste.objects.select_related(depth=1))
40
5d680e84 41 # La liste des choix est laissée vide. Voir __init__ pour la raison.
5efcd48e 42 poste = forms.ChoiceField(label="Nouveau poste ou évolution du poste",
d949462d 43 choices=(), required=False)
5d680e84 44
6301bd59
OL
45 valeur_point_min = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all())
46 valeur_point_max = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all())
47
5d680e84
NC
48 def __init__(self, *args, **kwargs):
49 """ Mise à jour dynamique du contenu du menu des postes.
50
51 Si on ne met le menu à jour de cette façon, à chaque instantiation du
52 formulaire, son contenu est mis en cache par le système et il ne
53 reflète pas les changements apportés par les ajouts, modifications,
54 etc...
55
139686f2
NC
56 Aussi, dans ce cas-ci, on ne peut pas utiliser un ModelChoiceField
57 car le "id" de chaque choix est spécial (voir _poste_choices).
58
5d680e84
NC
59 """
60 super(PosteForm, self).__init__(*args, **kwargs)
61 self.fields['poste'].choices = self._poste_choices()
62
63 def _poste_choices(self):
64 """ Menu déroulant pour les postes.
65
66 Constitué des postes de dae et des postes de rh_v1 qui n'ont pas
67 d'équivalent dans dae.
68
69 """
6d704629 70 dae_ = dae.Poste.objects.filter(actif=True, id_rh__isnull=True)
5d680e84
NC
71 copies = dae.Poste.objects.exclude(id_rh__isnull=True)
72 id_copies = [p.id_rh_id for p in copies.all()]
6d704629 73 rhv1 = rh.Poste.objects.filter(actif=True).exclude(id__in=id_copies)
139686f2
NC
74 # Optimisation de la requête
75 rhv1 = rhv1.select_related(depth=1)
5d680e84 76
98d51b59 77 return [('', 'Nouveau poste')] + \
5d680e84
NC
78 sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies] +
79 [('rh-%s' % p.id, unicode(p)) for p in rhv1],
80 key=lambda t: t[1])
3ed49093 81
494ff2be
NC
82 def save(self, *args, **kwargs):
83 kwargs2 = kwargs.copy()
84 kwargs2['commit'] = False
85 poste = super(PosteForm, self).save(*args, **kwargs2)
86 # id_rh
87 if 'commit' not in kwargs or kwargs['commit']:
88 poste.save()
89 return poste
90
3ed49093 91
139686f2
NC
92class ChoosePosteForm(forms.ModelForm):
93 class Meta:
94 model = dae.Poste
95 fields = ('poste',)
96
97 # La liste des choix est laissée vide. Voir PosteForm.__init__.
98 poste = forms.ChoiceField(choices=(), required=False)
99
100 def __init__(self, *args, **kwargs):
101 super(ChoosePosteForm, self).__init__(*args, **kwargs)
102 self.fields['poste'].choices = self._poste_choices()
103
104 def _poste_choices(self):
105 """ Menu déroulant pour les postes. """
106 dae_ = dae.Poste.objects.filter(id_rh__isnull=True)
107 copies = dae.Poste.objects.exclude(id_rh__isnull=True)
108 id_copies = [p.id_rh_id for p in copies.all()]
109
98d51b59 110 return [('', '----------')] + \
139686f2
NC
111 sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies],
112 key=lambda t: t[1])
113
114
3ed49093
NC
115class PosteFinancementForm(forms.ModelForm):
116 """ Formulaire des sources de financement pour un poste. """
117 class Meta:
118 model = dae.PosteFinancement
119 fields = ('type', 'montant', 'pourcentage', 'commentaire')
139686f2
NC
120
121
122class EmployeForm(forms.ModelForm):
123 """ Formulaire des employés. """
124 class Meta:
125 model = dae.Employe
126 fields = ('employe', 'nom', 'prenom', 'genre')
127
128 # La liste des choix est laissée vide. Voir Poste.__init__ pour la raison.
129 employe = forms.ChoiceField(choices=(), required=False)
130
131 def __init__(self, *args, **kwargs):
132 """ Mise à jour dynamique du contenu du menu des employés. """
133 super(EmployeForm, self).__init__(*args, **kwargs)
134 self.fields['employe'].choices = self._employe_choices()
135
136 def _employe_choices(self):
137 """ Menu déroulant pour les employés. """
138 dae_ = dae.Employe.objects.filter(id_rh__isnull=True)
139 copies = dae.Employe.objects.exclude(id_rh__isnull=True)
140 id_copies = [p.id_rh_id for p in copies.all()]
141 rhv1 = rh.Employe.objects.exclude(id__in=id_copies)
142
143 return [('', 'Nouvel employé')] + \
144 sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies] +
145 [('rh-%s' % p.id, unicode(p)) for p in rhv1],
146 key=lambda t: t[1])
147
148
149class DossierForm(forms.ModelForm):
150 """ Formulaire des dossiers. """
151 class Meta:
152 model = dae.Dossier