fix for test group Évaluateur unicode
[auf_rh_dae.git] / project / recrutement / forms.py
1 # -*- encoding: utf-8 -*-
2
3 from django import forms
4 from django.forms import ModelForm
5
6 from auf.django.emploi import forms as emploi
7 from auf.django.emploi import models as emploi_models
8
9 from project.recrutement import models as recr
10
11 ########################################################################
12 # EVALUATION
13 ########################################################################
14 class CandidatEvaluationForm(ModelForm):
15 def __init__(self, *args, **kwargs):
16 self.candidat = kwargs.pop('candidat')
17 self.evaluateur = kwargs.pop('evaluateur')
18 super(CandidatEvaluationForm, self).__init__(*args, **kwargs)
19
20 def save(self):
21 super(CandidatEvaluationForm, self).save()
22
23 class Meta:
24 fields = ('note', 'commentaire')
25 model = recr.CandidatEvaluation
26
27 class EvaluateurForm(forms.Form):
28 evaluateurs = forms.ModelMultipleChoiceField(queryset=
29 recr.Evaluateur.objects.all(), required=False)
30
31
32 def __init__(self, *args, **kwargs):
33 self.offres_emploi = kwargs.pop('offres_emploi')
34 evaluateurs = [e.id for e in self.get_evaluateurs()]
35 initial = getattr(kwargs, 'initial', {})
36 initial['evaluateurs'] = evaluateurs
37 kwargs['initial'] = initial
38 super(EvaluateurForm, self).__init__(*args, **kwargs)
39
40
41 def get_evaluateurs(self):
42 return [e.evaluateur for e in \
43 recr.CandidatEvaluation.objects.filter(candidat__offre_emploi=self.offres_emploi)]
44
45 def save(self):
46 candidats = recr.Candidat.objects.\
47 filter(offre_emploi=self.offres_emploi)
48
49 anciens_evaluateurs = self.get_evaluateurs()
50 nouveaux__evaluateurs = self.cleaned_data.get('evaluateurs', [])
51
52 # suppression des évaluations du type
53 evaluations = recr.CandidatEvaluation.objects.filter(candidat__offre_emploi=self.offres_emploi)
54 for e in evaluations:
55 if e.evaluateur not in nouveaux__evaluateurs:
56 e.delete()
57
58 # on prépopulent les évaluations si elles ne l'ont pas déja été
59 for candidat in candidats:
60 for evaluateur in self.cleaned_data.get('evaluateurs', []):
61 if evaluateur not in anciens_evaluateurs:
62 candidat_evaluation = recr.CandidatEvaluation()
63 candidat_evaluation.candidat = candidat
64 candidat_evaluation.evaluateur = evaluateur
65 candidat_evaluation.save()
66
67
68 ########################################################################
69 # OFFRE EMPLOI
70 ########################################################################
71 class CandidatPieceForm(emploi.CandidatPieceForm):
72 pass
73
74 class PostulerOffreEmploiForm(emploi.PostulerOffreEmploiForm):
75 pass
76
77 class OffreEmploiForm(ModelForm):
78 nom = forms.CharField(label='Intitulé du poste')
79
80 class Meta:
81 model = emploi_models.OffreEmploi
82
83 def clean(self):
84 cleaned_data = self.cleaned_data
85 date_limite = cleaned_data.get("date_limite")
86 debut_affectation = cleaned_data.get("debut_affectation")
87
88 if date_limite and debut_affectation:
89 if date_limite > debut_affectation:
90 raise forms.ValidationError("La date limite ne peut pas être \
91 supérieure à la date d'affection.")
92 return cleaned_data
93
94 ########################################################################
95 # TEMPLATE COURRIEL
96 ########################################################################
97 class CandidatCourrielTemplateForm(ModelForm):
98 def get_template(self):
99 return self.data['template']
100
101 class Meta:
102 model = recr.CandidatCourriel
103 fields = ('template', )
104
105 class CandidatCourrielForm(ModelForm):
106 def __init__(self, *args, **kwargs):
107 self.candidats = kwargs.pop('candidats')
108 self.template = kwargs.pop('template')
109 super(CandidatCourrielForm, self).__init__(*args, **kwargs)
110
111 def save(self):
112 super(CandidatCourrielForm, self).save()
113
114 class Meta:
115 model = recr.CandidatCourriel
116 fields = ('sujet', 'plain_text', )
117