def envoyer_courriel_candidats(modeladmin, obj, candidats):
selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
- return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+
+ return HttpResponseRedirect(reverse('selectionner_template')+
"?ids=%s" % (",".join(selected)))
envoyer_courriel_candidats.short_description = u'Envoyer courriel'
admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)
admin.site.register(Evaluateur, EvaluateurAdmin)
#admin.site.register(AdministrateurRegional, AdministrateurRegionalAdmin)
-#admin.site.register(CourrielTemplate, CourrielTemplateAdmin)
+admin.site.register(CourrielTemplate, CourrielTemplateAdmin)
from captcha.fields import CaptchaField
from recrutement import models as recr
+from django.core.mail import send_mail
#from recrutement.lib import send_templated_mail
################################################################################
################################################################################
# TEMPLATE COURRIEL
################################################################################
-class CandidatCourrielForm(ModelForm):
- #texte = forms.CharField(widget=TinyMCE())
+class CandidatCourrielTemplateForm(ModelForm):
+ def get_template(self):
+ return self.data['template']
+ class Meta:
+ model = recr.CandidatCourriel
+ fields = ('template', )
+
+class CandidatCourrielForm(ModelForm):
def __init__(self, *args, **kwargs):
self.candidats = kwargs.pop('candidats')
+ self.template = kwargs.pop('template')
super(CandidatCourrielForm, self).__init__(*args, **kwargs)
def save(self):
super(CandidatCourrielForm, self).save()
- #for cand in self.candidats:
- #send_templated_mail()
class Meta:
model = recr.CandidatCourriel
- fields = ('template','titre', 'texte')
+ fields = ('sujet', 'plain_text', 'html')
#HELP_TEXT
HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
+HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
+ {{ nom_candidat }} {{ prenom_candidat }} \
+ {{ offre_emploi }}. Ces champs seront \
+ automatiquement remplacés par les informations de \
+ chaque candidat."
# Abstracts
class Metadata(models.Model):
)
class CourrielTemplate(models.Model):
- nom_modele = models.CharField(max_length=100, verbose_name='Nom modèle', )
- sujet = models.CharField(max_length=100, )
- plain_text = models.TextField(verbose_name='Texte', )
- html = tinymce_models.HTMLField(verbose_name='Texte HTML', )
+ nom_modele = models.CharField(max_length=100, verbose_name='Nom du modèle',)
+ sujet = models.CharField(max_length=100, verbose_name='Sujet du courriel')
+ plain_text = models.TextField(verbose_name='Texte',
+ help_text=HELP_TEXT_TAGS_ACCEPTES, )
+ html = tinymce_models.HTMLField(verbose_name='Texte en HTML',
+ help_text=HELP_TEXT_TAGS_ACCEPTES, )
def __unicode__(self):
return u'%s' % self.nom_modele
ordering = ['nom_modele',]
class CandidatCourriel(models.Model):
- candidat = models.ForeignKey(Candidat, db_column='candidat',
- related_name='+', )
- template = models.ForeignKey(CourrielTemplate, db_column='nom',
+ candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", )
+ template = models.ForeignKey(CourrielTemplate, db_column='template',
related_name='+', verbose_name="Modèle de courriel", )
- titre = models.CharField(max_length=255, )
- texte = models.TextField(null=True, blank=True, )
+ sujet = models.CharField(max_length=255, blank=True,
+ help_text=HELP_TEXT_TAGS_ACCEPTES, )
+ plain_text = models.TextField(verbose_name='Texte', blank=True,
+ help_text=HELP_TEXT_TAGS_ACCEPTES, )
+ html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True, blank=True,
+ help_text=HELP_TEXT_TAGS_ACCEPTES, )
def __unicode__(self):
return '%s' % (self.titre)
{% block title %}RH - Recrutement{% endblock %}
{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Envoyer courriel{% endblock %}
+{% block sous_titre %}Envoyer courriel aux candidats{% endblock %}
{% block extrahead %}
{{ form.media }}
<div id="content-main">
{% block object-tools %}{% endblock %}
-
-
<div class="module">
<h2>Envoyer un courriel aux candidats</h2>
<table>
<tr>
<td>Candidats sélectionnés</td>
- <td><select name="candidats" multiple="True">
+ <td>
+ <select name="candidats" multiple="True">
{% for c in form.candidats %}
<option selected="selected" value="{{ c.nom }}_{{c.prenom}}_{{c.id}}">{{c}}</option>
{% endfor %}
</td>
</tr>
<tr>
- <td>{{ form.template.label }}</td>
- <td>{{ form.template }}</td>
+ <td>Modèle de courriel</td>
+ <td>
+ {{ form.template }}
+ </td>
</tr>
<tr>
- <td>{{ form.titre.label }}</td>
- <td>{{ form.titre }}</td>
+ <td>{{ form.sujet.label }}</td>
+ <td>{{ form.sujet }}</td>
</tr>
<tr>
-
- <td>{{ form.texte.label }}</td>
- <td>{{ form.texte }}</td>
-<script type="text/javascript">tinyMCE.setContent('<strong>Some contents</strong>');</script>
+ <td>{{ form.plain_text.label }}</td>
+ <td>{{ form.plain_text }}
+ <p class="help">{{ form.plain_text.help_text }}</p>
+ </td>
+
+ </tr>
+ <tr>
+ <td>{{ form.html.label }}</td>
+ <td>{{ form.html }}
+ <p class="help">{{ form.html.help_text }}</p>
+ </td>
</tr>
-
</table>
<div class="submit-row">
<input type="submit" name="_save" class="default" value="Envoyer">
--- /dev/null
+{% extends 'admin/base_site.html' %}
+{% load i18n adminmedia form_utils_tags %}
+
+{% block title %}RH - Recrutement{% endblock %}
+{% block titre %}Ressources humaines{% endblock %}
+{% block sous_titre %}Envoyer courriel aux candidats{% endblock %}
+{% block extrahead %}
+{{ form.media }}
+{% endblock %}
+{% block content %}
+<div id="content-main">
+ {% block object-tools %}{% endblock %}
+
+ <div class="module">
+ <h2>Sélectionner modèle de courriel</h2>
+
+ <form action="" method="post">
+ <table>
+ <tr>
+ <td>{{ form.template.label }}</td>
+ <td>{{ form.template }}</td>
+ </tr>
+
+ </table>
+ <div class="submit-row">
+ <input type="submit" name="_save" class="default" value="Envoyer">
+ </div>
+ </form>
+ </div>
+
+
+</div>
+
+{% endblock %}
from django.contrib import messages
from django.contrib.auth.models import User
from django.core.mail import send_mail
-from django.http import HttpResponse
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, redirect, get_object_or_404
-from django.template import Context, RequestContext
+from django.template import Context, RequestContext, Template
+from django.core.mail import EmailMultiAlternatives
from forms import *
from models import *
return render_to_response("recrutement/affecter_evaluateurs.html",
Context(c), context_instance = RequestContext(request))
+def selectionner_template(request):
+ candidat_ids = request.GET.get('ids')
+ if request.method == "POST":
+ form = CandidatCourrielTemplateForm(request.POST)
+ if form.is_valid():
+ form.save()
+ courriel_template_id = form.get_template()
+
+ return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+
+ "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id))
+ else:
+ form = CandidatCourrielTemplateForm()
+
+ c = {'form' : form}
+ return render_to_response("recrutement/selectionner_template.html",
+ Context(c), context_instance = RequestContext(request))
+
def envoyer_courriel_candidats(request):
- candidat_ids = request.GET.get('ids').split(',')
+ candidat_ids = request.GET.get('ids_cand').split(',')
candidats = Candidat.objects.filter(id__in=candidat_ids)
+ template_id = request.GET.get('id_temp')
+ template = CourrielTemplate.objects.get(id=template_id)
if request.method == "POST":
- form = CandidatCourrielForm(request.POST, candidats=candidats)
+ form = CandidatCourrielForm(request.POST, instance=template,
+ candidats=candidats, template=template)
+
if form.is_valid():
form.save()
+ courriel_template = CourrielTemplate()
+ courriel_template.nom_modele = template.nom_modele
+ courriel_template.sujet = form.data['sujet']
+ courriel_template.plain_text = form.data['plain_text']
+ courriel_template.html = form.data['html']
+ for cand in candidats:
+ import pdb;pdb.set_trace()
+ send_templated_email(cand, courriel_template)
messages.add_message(request, messages.SUCCESS,
- "Les évaluateurs ont été affectés aux candidats.")
+ "Le email a été envoyé aux candidats.")
return redirect("admin:recrutement_candidat_changelist")
else:
- form = CandidatCourrielForm(candidats=candidats)
+ form = CandidatCourrielForm(candidats=candidats, template=template,
+ initial={'sujet': template.sujet,
+ 'plain_text': template.plain_text,
+ 'html': template.html})
c = {'form' : form}
return render_to_response("recrutement/envoyer_courriel_candidats.html",
Context(c), context_instance = RequestContext(request))
def postuler_appel_offre(request):
-
vars = dict()
offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
candidat = Candidat()
instance=candidat, offre_emploi=offre_emploi)
piecesForm = CandidatPieceForm(request.POST, request.FILES,
instance=candidat)
- print form.errors
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.")
-
- # Envoi d'un email de confirmation
- send_mail(u"Confirmation de postulation pour le poste \
- de " + offre_emploi.nom,
- u"Bonjour " + candidat.prenom + " " + candidat.nom +
- u", \nceci est un email pour vous confirmer que votre \
- postulation pour l'offre d'emploi: " +
- offre_emploi.nom + u" a été effectuée avec succès. Vous\
- devriez être contacté sous peu par l'AUF. \n\n Merci \
- pour votre intérêt envers l'AUF.",
- 'test@auf.org',
- [candidat.email], fail_silently=False)
-
+ été effectuée.")
return redirect("admin:recrutement_offreemploi_changelist")
else:
messages.add_message(request, messages.ERROR,
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,}
+ 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()
from django.conf import settings
from django.contrib import admin
-
admin.autodiscover()
handler500 # Pyflakes
url(r'^recrutement/envoyer_courriel_candidats/$',
'recrutement.views.envoyer_courriel_candidats',
name='envoyer_courriel_candidats'),
+ url(r'^recrutement/selectionner_template/$',
+ 'recrutement.views.selectionner_template',
+ name='selectionner_template'),
url(r'^recrutement/pieces/$', 'recrutement.views.postuler_appel_offre',
name='pieces'),
url(r'^recrutement/postuler_appel_offre/$',