1 # -*- encoding: utf-8 -*-
3 from django
import forms
5 from datamaster_modeles
import models
as ref
7 from dae
import models
as dae
8 from rh_v1
import models
as rh
11 class PosteForm(forms
.ModelForm
):
12 """ Formulaire des postes. """
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 'coefficient_min', 'coefficient_max',
22 'valeur_point_min', 'valeur_point_max',
23 'devise_min', 'devise_max',
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(),
32 appel
=forms
.RadioSelect(),
33 nom
=forms
.TextInput(attrs
={'size': 60},),
34 #devise_min=forms.Select(attrs={'disabled':'disabled'}),
35 #devise_max=forms.Select(attrs={'disabled':'disabled'}),
38 responsable
= forms
.ModelChoiceField(
39 queryset
=rh
.Poste
.objects
.select_related(depth
=1))
41 # La liste des choix est laissée vide. Voir __init__ pour la raison.
42 poste
= forms
.ChoiceField(label
="Nouveau poste ou évolution du poste",
43 choices
=(), required
=False)
45 valeur_point_min
= forms
.ModelChoiceField(queryset
=rh
.ValeurPoint
.actuelles
.all())
46 valeur_point_max
= forms
.ModelChoiceField(queryset
=rh
.ValeurPoint
.actuelles
.all())
48 def __init__(self
, *args
, **kwargs
):
49 """ Mise à jour dynamique du contenu du menu des postes.
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,
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).
60 super(PosteForm
, self
).__init__(*args
, **kwargs
)
61 self
.fields
['poste'].choices
= self
._poste_choices()
63 # Quand le dae.Poste n'existe pas, on recherche dans les dossiers rhv1
64 if self
.instance
and self
.instance
.id is None:
65 dossiers
= self
.instance
.get_dossiers()
67 self
.initial
['service'] = dossiers
[0].service_id
69 def _poste_choices(self
):
70 """ Menu déroulant pour les postes.
72 Constitué des postes de dae et des postes de rh_v1 qui n'ont pas
73 d'équivalent dans dae.
76 dae_
= dae
.Poste
.objects
.filter(actif
=True, id_rh__isnull
=True)
77 copies
= dae
.Poste
.objects
.exclude(id_rh__isnull
=True)
78 id_copies
= [p
.id_rh_id
for p
in copies
.all()]
79 rhv1
= rh
.Poste
.objects
.filter(actif
=True).exclude(id__in
=id_copies
)
80 # Optimisation de la requête
81 rhv1
= rhv1
.select_related(depth
=1)
83 return [('', 'Nouveau poste')] + \
84 sorted([('dae-%s' % p
.id, unicode(p
)) for p
in dae_ | copies
] +
85 [('rh-%s' % p
.id, unicode(p
)) for p
in rhv1
],
88 def save(self
, *args
, **kwargs
):
89 kwargs2
= kwargs
.copy()
90 kwargs2
['commit'] = False
91 poste
= super(PosteForm
, self
).save(*args
, **kwargs2
)
93 if 'commit' not in kwargs
or kwargs
['commit']:
98 class ChoosePosteForm(forms
.ModelForm
):
103 # La liste des choix est laissée vide. Voir PosteForm.__init__.
104 poste
= forms
.ChoiceField(choices
=(), required
=False)
106 def __init__(self
, *args
, **kwargs
):
107 super(ChoosePosteForm
, self
).__init__(*args
, **kwargs
)
108 self
.fields
['poste'].choices
= self
._poste_choices()
110 def _poste_choices(self
):
111 """ Menu déroulant pour les postes. """
112 dae_
= dae
.Poste
.objects
.filter(id_rh__isnull
=True)
113 copies
= dae
.Poste
.objects
.exclude(id_rh__isnull
=True)
114 id_copies
= [p
.id_rh_id
for p
in copies
.all()]
116 return [('', '----------')] + \
117 sorted([('dae-%s' % p
.id, unicode(p
)) for p
in dae_ | copies
],
121 class PosteFinancementForm(forms
.ModelForm
):
122 """ Formulaire des sources de financement pour un poste. """
124 model
= dae
.PosteFinancement
125 fields
= ('type', 'montant', 'pourcentage', 'commentaire')
128 class EmployeForm(forms
.ModelForm
):
129 """ Formulaire des employés. """
132 fields
= ('employe', 'nom', 'prenom', 'genre')
134 # La liste des choix est laissée vide. Voir Poste.__init__ pour la raison.
135 employe
= forms
.ChoiceField(choices
=(), required
=False)
137 def __init__(self
, *args
, **kwargs
):
138 """ Mise à jour dynamique du contenu du menu des employés. """
139 super(EmployeForm
, self
).__init__(*args
, **kwargs
)
140 self
.fields
['employe'].choices
= self
._employe_choices()
142 def _employe_choices(self
):
143 """ Menu déroulant pour les employés. """
144 dae_
= dae
.Employe
.objects
.filter(id_rh__isnull
=True)
145 copies
= dae
.Employe
.objects
.exclude(id_rh__isnull
=True)
146 id_copies
= [p
.id_rh_id
for p
in copies
.all()]
147 rhv1
= rh
.Employe
.objects
.exclude(id__in
=id_copies
)
149 return [('', 'Nouvel employé')] + \
150 sorted([('dae-%s' % p
.id, unicode(p
)) for p
in dae_ | copies
] +
151 [('rh-%s' % p
.id, unicode(p
)) for p
in rhv1
],
155 class DossierForm(forms
.ModelForm
):
156 """ Formulaire des dossiers. """