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