05a334042b7067deed36fff2bd21f6e09a9b5068
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 '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(),
31 appel
=forms
.RadioSelect(),
32 nom
=forms
.TextInput(attrs
={'size': 60}),
35 responsable
= forms
.ModelChoiceField(
36 queryset
=rh
.Poste
.objects
.select_related(depth
=1))
38 # La liste des choix est laissée vide. Voir __init__ pour la raison.
39 poste
= forms
.ChoiceField(label
="Nouveau poste ou évolution du poste",
40 choices
=(), required
=False)
42 def __init__(self
, *args
, **kwargs
):
43 """ Mise à jour dynamique du contenu du menu des postes.
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,
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).
54 super(PosteForm
, self
).__init__(*args
, **kwargs
)
55 self
.fields
['poste'].choices
= self
._poste_choices()
57 def _poste_choices(self
):
58 """ Menu déroulant pour les postes.
60 Constitué des postes de dae et des postes de rh_v1 qui n'ont pas
61 d'équivalent dans dae.
64 dae_
= dae
.Poste
.objects
.filter(actif
=True, id_rh__isnull
=True)
65 copies
= dae
.Poste
.objects
.exclude(id_rh__isnull
=True)
66 id_copies
= [p
.id_rh_id
for p
in copies
.all()]
67 rhv1
= rh
.Poste
.objects
.filter(actif
=True).exclude(id__in
=id_copies
)
68 # Optimisation de la requête
69 rhv1
= rhv1
.select_related(depth
=1)
71 return [('', 'Nouveau poste')] + \
72 sorted([('dae-%s' % p
.id, unicode(p
)) for p
in dae_ | copies
] +
73 [('rh-%s' % p
.id, unicode(p
)) for p
in rhv1
],
76 def save(self
, *args
, **kwargs
):
77 kwargs2
= kwargs
.copy()
78 kwargs2
['commit'] = False
79 poste
= super(PosteForm
, self
).save(*args
, **kwargs2
)
81 if 'commit' not in kwargs
or kwargs
['commit']:
86 class ChoosePosteForm(forms
.ModelForm
):
91 # La liste des choix est laissée vide. Voir PosteForm.__init__.
92 poste
= forms
.ChoiceField(choices
=(), required
=False)
94 def __init__(self
, *args
, **kwargs
):
95 super(ChoosePosteForm
, self
).__init__(*args
, **kwargs
)
96 self
.fields
['poste'].choices
= self
._poste_choices()
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()]
104 return [('', '----------')] + \
105 sorted([('dae-%s' % p
.id, unicode(p
)) for p
in dae_ | copies
],
109 class PosteFinancementForm(forms
.ModelForm
):
110 """ Formulaire des sources de financement pour un poste. """
112 model
= dae
.PosteFinancement
113 fields
= ('type', 'montant', 'pourcentage', 'commentaire')
116 class EmployeForm(forms
.ModelForm
):
117 """ Formulaire des employés. """
120 fields
= ('employe', 'nom', 'prenom', 'genre')
122 # La liste des choix est laissée vide. Voir Poste.__init__ pour la raison.
123 employe
= forms
.ChoiceField(choices
=(), required
=False)
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()
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
)
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
],
143 class DossierForm(forms
.ModelForm
):
144 """ Formulaire des dossiers. """