From b8b74deecc19496a4875cba101f8110f7b353593 Mon Sep 17 00:00:00 2001 From: Nilovna Bascunan-Vasquez Date: Mon, 1 Aug 2011 14:53:01 -0400 Subject: [PATCH] =?utf8?q?1835:=20Un=20CandidatEvaluation=20doit=20se=20cr=C3?= =?utf8?q?=A9er=20si=20l'=C3=A9valuateur=20a=20d=C3=A9j=C3=A0=20=C3=A9t=C3=A9?= =?utf8?q?=20assign=C3=A9=20=C3=A0=20une=20offre=20d'emploi?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/recrutement/admin.py | 26 +++++--- project/recrutement/api.py | 15 ++++- project/recrutement/models.py | 5 +- project/recrutement/views.py | 28 ++++++++- src/auf.django.emploi/auf/django/emploi/api.py | 6 +- src/auf.django.emploi/auf/django/emploi/models.py | 15 ----- src/auf.django.emploi/auf/django/emploi/views.py | 70 --------------------- 7 files changed, 60 insertions(+), 105 deletions(-) delete mode 100755 src/auf.django.emploi/auf/django/emploi/views.py diff --git a/project/recrutement/admin.py b/project/recrutement/admin.py index aabc4f3..e0e435f 100644 --- a/project/recrutement/admin.py +++ b/project/recrutement/admin.py @@ -21,6 +21,21 @@ class MetaAdmin(VersionAdmin): Pour refactoring """ + +class ProxyEvaluateur(Evaluateur.offres_emploi.through): + """ + Ce proxy sert uniquement dans l'admin à disposer d'un libellé + plus ergonomique. + """ + class Meta: + proxy = True + verbose_name = "évaluateur" + +class EvaluateurInline(admin.TabularInline): + model = ProxyEvaluateur + fields = ('evaluateur',) + extra = 1 + class OffreEmploiAdmin(VersionAdmin): date_hierarchy = 'date_creation' list_display = ('nom', 'resume', 'date_limite', 'region', 'statut', @@ -28,6 +43,7 @@ class OffreEmploiAdmin(VersionAdmin): list_filter = ('statut', 'est_affiche', ) actions = ['affecter_evaluateurs_offre_emploi', ] form = OffreEmploiForm + inlines = [EvaluateurInline, ] def get_actions(self, request): actions = super(OffreEmploiAdmin, self).get_actions(request) @@ -144,15 +160,6 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin): return True return False - """class ProxyEvaluateur(Evaluateur.candidats.through): - - Ce proxy sert uniquement dans l'admin à disposer d'un libellé - plus ergonomique. - - class Meta: - proxy = True - verbose_name = "évaluateur" - """ class CandidatPieceInline(admin.TabularInline): model = CandidatPiece fields = ('candidat', 'nom', 'path',) @@ -182,7 +189,6 @@ class CandidatEvaluationInline(admin.TabularInline): return self.readonly_fields+('evaluateur', 'note', 'commentaire') return self.readonly_fields - class CandidatAdmin(VersionAdmin): date_hierarchy = 'date_creation' list_display = ('nom', 'prenom', 'offre_emploi','statut', diff --git a/project/recrutement/api.py b/project/recrutement/api.py index 041beaa..631f710 100644 --- a/project/recrutement/api.py +++ b/project/recrutement/api.py @@ -7,6 +7,9 @@ from django.contrib import messages from auf.django.emploi import models as emploi from auf.django.emploi import forms as emploiForms +from project.recrutement.models import Evaluateur, CandidatEvaluation, \ + CourrielTemplate +from project.recrutement.views import * STATUS_OK = 200 @@ -67,15 +70,23 @@ class API: instance=cand, offre_emploi=offre_emploi) piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES, instance=cand) + if form.is_valid() and piecesForm.is_valid(): offre = form.save() piecesForm.instance = offre piecesForm.save() """courriel_template = CourrielTemplate.objects.\ - get(nom_modele='Confirmation postulation (automatique)') - send_templated_email(candidat, courriel_template) + get(id=1) + send_templated_email(cand, courriel_template) """ + evaluateurs = offre_emploi.evaluateurs.all() + for evaluateur in evaluateurs: + candidat_evaluation = CandidatEvaluation() + candidat_evaluation.candidat = cand + candidat_evaluation.evaluateur = evaluateur + candidat_evaluation.save() + return api_return(STATUS_OK) else: messages.add_message(self.request, messages.ERROR, diff --git a/project/recrutement/models.py b/project/recrutement/models.py index 734f4a8..898197d 100755 --- a/project/recrutement/models.py +++ b/project/recrutement/models.py @@ -79,7 +79,7 @@ class ProxyOffreEmploi(emploi.OffreEmploi): def __unicode__(self): return '%s [%s] - View' % (self.nom, self.id) -class ProxyCandidat(Candidat): +class ProxyCandidat(emploi.Candidat): class Meta: proxy = True verbose_name = "Candidat (visualisation)" @@ -88,7 +88,6 @@ class ProxyCandidat(Candidat): def __unicode__(self): return '%s %s [%s]' % (self.prenom, self.nom, self.id) - class Evaluateur(models.Model): user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur") offres_emploi = models.ManyToManyField(emploi.OffreEmploi, @@ -122,7 +121,7 @@ class AdministrateurRegional(models.Model): return '%s %s' % (self.user.first_name, self.user.last_name) class CandidatEvaluation(models.Model): - candidat = models.ForeignKey(Candidat, db_column='candidat', + candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', related_name='+',) evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', related_name='+', verbose_name='Évaluateur') diff --git a/project/recrutement/views.py b/project/recrutement/views.py index f940572..90f577b 100755 --- a/project/recrutement/views.py +++ b/project/recrutement/views.py @@ -12,7 +12,7 @@ from django.core.mail import EmailMultiAlternatives from forms import * from models import * from recrutement.workflow import grp_evaluateurs_recrutement -from auf.django.emploi import views as emp +from views import * def index(request): return render_to_response('recrutement/index.html', {}, @@ -85,7 +85,7 @@ def postuler_appel_offre(request): courriel_template = CourrielTemplate.objects.\ get(nom_modele='Confirmation postulation (automatique)') - send_templated_email(candidat, courriel_template) + emp.send_templated_email(candidat, courriel_template) messages.add_message(request, messages.SUCCESS, "Votre application à l'appel d'offre d'emploi a \ @@ -120,3 +120,27 @@ def affecter_evaluateurs_offre_emploi(request): c = {'form' : form} return render_to_response("recrutement/affecter_evaluateurs.html", Context(c), context_instance = RequestContext(request)) + +def send_templated_email(candidat, template): + # Sujet + sujet_template = Template(template.sujet) + dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,} + sujet = Context(dict_sujet) + # Plain text + texte_template = Template(template.plain_text) + dict_texte = {"nom_candidat": candidat.nom, + "prenom_candidat": candidat.prenom, + "offre_emploi": candidat.offre_emploi.nom, + "genre_candidat": "Monsieur" if candidat.genre == "M" \ + else "Madame", + } + texte = Context(dict_texte) + # HTML text + html_template = Template(template.html) + texte_html = Context(dict_texte) + msg = EmailMultiAlternatives(sujet_template.render(sujet), + texte_template.render(texte), + 'recrutement@auf.org', + [candidat.email]) + msg.attach_alternative(texte_template.render(texte_html), "text/html") + msg.send() diff --git a/src/auf.django.emploi/auf/django/emploi/api.py b/src/auf.django.emploi/auf/django/emploi/api.py index 0a51d2d..0f11e85 100644 --- a/src/auf.django.emploi/auf/django/emploi/api.py +++ b/src/auf.django.emploi/auf/django/emploi/api.py @@ -13,7 +13,7 @@ class API: self.request = request def offre_emploi_liste(self): - url = "http://127.0.0.1:8080/api/offre_emploi_liste/" + url = "http://127.0.0.1:8000/api/offre_emploi_liste/" r = req(url) liste_json = r.body_string() liste_offres = simplejson.loads(liste_json) @@ -38,7 +38,7 @@ class API: return obj_offres_emploi def offre_emploi(self, offre_id): - url = "http://127.0.0.1:8080/api/offre_emploi/?id=%s" + url = "http://127.0.0.1:8000/api/offre_emploi/?id=%s" r = req(url % (offre_id)) offre_json = r.body_string() offre_dict = simplejson.loads(offre_json) @@ -62,7 +62,7 @@ class API: return obj_offres_emploi def candidat_add(self, offre_id): - url = "http://127.0.0.1:8080/api/candidat_add/?id=%s" % (offre_id) + url = "http://127.0.0.1:8000/api/candidat_add/?id=%s" % (offre_id) return redirect(url) diff --git a/src/auf.django.emploi/auf/django/emploi/models.py b/src/auf.django.emploi/auf/django/emploi/models.py index ffda33d..6192aa9 100755 --- a/src/auf.django.emploi/auf/django/emploi/models.py +++ b/src/auf.django.emploi/auf/django/emploi/models.py @@ -136,21 +136,6 @@ class Candidat(Metadata): class Meta: db_table = 'emploi_candidat' - def save(self, *args, **kwargs): - """ - Créer automatiquement des CandidatEvaluation, si des évaluateurs sont - déjà assignés à des offres d'emploi - """ - evaluateurs = OffreEmploi.objects.filter(id=self.offre_emploi.id) - - for evaluateur in evaluateurs: - candidat_evaluation = CandidatEvaluation() - candidat_evaluation.candidat = self - candidat_evaluation.evaluateur = evaluateur - candidat_evaluation.save() - super(Candidat, self).save(*args, **kwargs) - - def pieces_jointes(self): return CandidatPiece.objects.filter(candidat=self) pieces_jointes.allow_tags = True diff --git a/src/auf.django.emploi/auf/django/emploi/views.py b/src/auf.django.emploi/auf/django/emploi/views.py deleted file mode 100755 index af80e24..0000000 --- a/src/auf.django.emploi/auf/django/emploi/views.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- encoding: utf-8 -*- - -from django.contrib import messages -from django.shortcuts import render_to_response, redirect, get_object_or_404 -from django.template import Context, RequestContext, Template -from django.core.mail import EmailMultiAlternatives - -from auf.django.emploi import models -from auf.django.emploi import forms - -def postuler_appel_offre(request): - vars = dict() - offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id')) - candidat = Candidat() - candidat.offre_emploi = offre_emploi - - if request.method == "POST": - form = PostulerOffreEmploiForm(request.POST, - instance=candidat, offre_emploi=offre_emploi) - piecesForm = CandidatPieceForm(request.POST, request.FILES, - instance=candidat) - if form.is_valid() and piecesForm.is_valid(): - offre = form.save() - piecesForm.instance = offre - piecesForm.save() - - courriel_template = CourrielTemplate.objects.\ - get(nom_modele='Confirmation postulation (automatique)') - send_templated_email(candidat, courriel_template) - - messages.add_message(request, messages.SUCCESS, - "Votre application à l'appel d'offre d'emploi a \ - été effectuée.") - return redirect("admin:recrutement_offreemploi_changelist") - else: - messages.add_message(request, messages.ERROR, - 'Il y a des erreurs dans le formulaire.') - else: - form = PostulerOffreEmploiForm(instance=candidat, - offre_emploi=offre_emploi) - piecesForm = CandidatPieceForm(instance=candidat) - - vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, )) - - return render_to_response('recrutement/postuler_appel_offre.html', vars, - RequestContext(request)) - -def send_templated_email(candidat, template): - # Sujet - sujet_template = Template(template.sujet) - dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,} - sujet = Context(dict_sujet) - # Plain text - texte_template = Template(template.plain_text) - dict_texte = {"nom_candidat": candidat.nom, - "prenom_candidat": candidat.prenom, - "offre_emploi": candidat.offre_emploi.nom, - "genre_candidat": "Monsieur" if candidat.genre == "M" \ - else "Madame", - } - texte = Context(dict_texte) - # HTML text - html_template = Template(template.html) - texte_html = Context(dict_texte) - msg = EmailMultiAlternatives(sujet_template.render(sujet), - texte_template.render(texte), - 'recrutement@auf.org', - [candidat.email]) - msg.attach_alternative(texte_template.render(texte_html), "text/html") - msg.send() -- 1.7.10.4