src/hdalab/models/renkan.py
changeset 508 96ddbedf93cb
parent 492 19220d52bce7
child 559 1357a0cfdbf7
equal deleted inserted replaced
507:81acd8021764 508:96ddbedf93cb
     6 '''
     6 '''
     7 import logging
     7 import logging
     8 from renkanmanager.models import Renkan
     8 from renkanmanager.models import Renkan
     9 
     9 
    10 from django.conf import settings
    10 from django.conf import settings
    11 from django.core.mail.message import EmailMultiAlternatives
       
    12 from django.db import models
    11 from django.db import models
    13 from django.db.models.signals import post_save
       
    14 from django.template.base import TemplateDoesNotExist
       
    15 from django.template.loader import render_to_string
       
    16 from django.utils.html import strip_tags
       
    17 from django.utils.translation import ugettext as _
    12 from django.utils.translation import ugettext as _
    18 
    13 
    19 
    14 
    20 logger = logging.getLogger(__name__)
    15 logger = logging.getLogger(__name__)
    21 
    16 
    48         app_label = 'hdalab'
    43         app_label = 'hdalab'
    49 
    44 
    50 
    45 
    51 class HdalabRenkanStateTransition(models.Model):
    46 class HdalabRenkanStateTransition(models.Model):
    52 
    47 
    53     renkan = models.ForeignKey(HdalabRenkan, blank=False, null=False)
    48     renkan = models.ForeignKey(HdalabRenkan, blank=False, null=False, related_name='states')
    54     from_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False)
    49     from_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False)
    55     to_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False)
    50     to_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False)
    56     ts = models.DateTimeField(auto_now_add=True, blank=False, null=False)
    51     ts = models.DateTimeField(auto_now_add=True, blank=False, null=False)
    57     message = models.TextField(blank=True, null=True)
    52     message = models.TextField(blank=True, null=True)
    58     author = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False)
    53     author = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False)
    59     
    54     
    60     class Meta:
    55     class Meta:
    61         app_label = 'hdalab'
    56         app_label = 'hdalab'
    62 
    57         ordering = ["-ts"]
    63 MAIL_TEMPLATES = {
       
    64     (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
       
    65     (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
       
    66     (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
       
    67 }
       
    68 
       
    69 
       
    70 #TODO put into queue
       
    71 def send_renkan_moderation_messages(sender, **kwargs):
       
    72     renkan_state = kwargs.get('instance', None)
       
    73     if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
       
    74         return
       
    75 
       
    76     template_key = (renkan_state.from_state,renkan_state.to_state)
       
    77     msg_txt = ""
       
    78     msg_html = ""
       
    79     subject = ""
       
    80     try:
       
    81         template_name, subject = MAIL_TEMPLATES[template_key]
       
    82 #        template = loader.get_template(template_name)
       
    83         context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL}
       
    84         msg_html = render_to_string(template_name+".txt", context)
       
    85         msg_txt = render_to_string(template_name+".html", context)
       
    86     except TemplateDoesNotExist:
       
    87         logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state])
       
    88         return
       
    89     except Exception as e:
       
    90         logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
       
    91     
       
    92     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:
       
    93         logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
       
    94         emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
       
    95         emsg.attach_alternative(msg_html, "text/html")
       
    96         emsg.send(fail_silently=True)
       
    97 
       
    98 
       
    99 def queue_renkan_rendering(sender, **kwargs):
       
   100     pass
       
   101     #check state
       
   102     #queue renkan for endering
       
   103     
       
   104     
       
   105 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
       
   106 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
       
   107 
       
   108 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)