fix recrutement evaluateur en cours dappel
[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 ses_evaluateurs = [e.evaluateur for e in candidat.evaluations.all()]
61 for evaluateur in self.cleaned_data.get('evaluateurs', []):
62 if evaluateur not in anciens_evaluateurs or evaluateur not in ses_evaluateurs:
63 candidat_evaluation = recr.CandidatEvaluation()
64 candidat_evaluation.candidat = candidat
65 candidat_evaluation.evaluateur = evaluateur
66 candidat_evaluation.save()
67
68
69 ########################################################################
70 # OFFRE EMPLOI
71 ########################################################################
72 class CandidatPieceForm(emploi.CandidatPieceForm):
73 pass
74
75 class PostulerOffreEmploiForm(emploi.PostulerOffreEmploiForm):
76 pass
77
78 class OffreEmploiForm(ModelForm):
79 nom = forms.CharField(label='Intitulé du poste')
80
81 class Meta:
82 model = emploi_models.OffreEmploi
83
84 def clean(self):
85 cleaned_data = self.cleaned_data
86 date_limite = cleaned_data.get("date_limite")
87 debut_affectation = cleaned_data.get("debut_affectation")
88
89 if date_limite and debut_affectation:
90 if date_limite > debut_affectation:
91 raise forms.ValidationError("La date limite ne peut pas être \
92 supérieure à la date d'affection.")
93 return cleaned_data
94
95 ########################################################################
96 # TEMPLATE COURRIEL
97 ########################################################################
98 class CandidatCourrielTemplateForm(ModelForm):
99 def get_template(self):
100 return self.data['template']
101
102 class Meta:
103 model = recr.CandidatCourriel
104 fields = ('template', )
105
106 class CandidatCourrielForm(ModelForm):
107 def __init__(self, *args, **kwargs):
108 self.candidats = kwargs.pop('candidats')
109 self.template = kwargs.pop('template')
110 super(CandidatCourrielForm, self).__init__(*args, **kwargs)
111
112 def save(self):
113 super(CandidatCourrielForm, self).save()
114
115 class Meta:
116 model = recr.CandidatCourriel
117 fields = ('sujet', 'plain_text', )
118