src/hdalab/models/renkan.py
changeset 462 df8b3b49e81c
parent 458 604b887e70c3
child 466 b1b5bc392a45
--- 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)