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