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