diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/models/renkan.py --- a/src/hdalab/models/renkan.py Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/models/renkan.py Sat Feb 28 06:40:48 2015 +0100 @@ -1,15 +1,27 @@ +# -*- coding: utf-8 -*- ''' Created on Jul 17, 2014 @author: tc ''' +import logging from renkanmanager.models import Renkan from django.conf import settings +from django.core.mail import send_mail from django.db import models +from django.db.models.signals import post_save +from django.template import loader +from django.template.base import TemplateDoesNotExist +from django.template.context import Context from django.utils.translation import ugettext as _ +from django.template.loader import render_to_string +from django.core.mail.message import EmailMultiAlternatives +from django.utils.html import strip_tags +logger = logging.getLogger(__name__) + class HdalabRenkan(models.Model): EDITION = 1 @@ -49,3 +61,48 @@ class Meta: app_label = 'hdalab' + +MAIL_TEMPLATES = { + HdalabRenkan.PUBLISHED: ("mails/published_renkan", "Renkan publié"), + HdalabRenkan.REJECTED: ("mails/rejected_renkan", "Renkan rejeté") +} + + +#TODO put into queue +def send_renkan_moderation_messages(sender, **kwargs): + renkan_state = kwargs.get('instance', None) + if not renkan_state or renkan_state.to_state not in MAIL_TEMPLATES: + return + + msg_txt = "" + msg_html = "" + subject = "" + try: + template_name, subject = MAIL_TEMPLATES[renkan_state.to_state] +# template = loader.get_template(template_name) + context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL} + msg_html = render_to_string(template_name+".txt", context) + msg_txt = render_to_string(template_name+".html", context) + except TemplateDoesNotExist: + logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[renkan_state.to_state], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state]) + return + except Exception as e: + logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[renkan_state.to_state], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e) + + if msg_txt and msg_html and renkan_state.renkan and renkan_state.renkan.renkan and renkan_state.renkan.renkan.owner and renkan_state.renkan.renkan.owner.email: + logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt) + emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.ADMINS[0][1], [renkan_state.renkan.renkan.owner.email]) + emsg.attach_alternative(msg_html, "text/html") + emsg.send(fail_silently=True) + + +def queue_renkan_rendering(sender, **kwargs): + pass + #check state + #queue renkan for endering + + +RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" +RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" + +post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)