signals.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import datetime
  2. from django.utils import timezone
  3. from django.dispatch import receiver
  4. from django.urls import reverse
  5. from django.forms.models import model_to_dict
  6. from django.db.models.signals import post_delete, post_save
  7. from constance import config
  8. from post_office import mail
  9. # from django.core.mail import EmailMessage
  10. # from django.core.mail import EmailMultiAlternatives
  11. from marktplatz.models import *
  12. @receiver(post_save, sender=Product)
  13. # @receiver(post_save, sender=MobilitaetsProjekt)
  14. # @receiver(post_save, sender=ErnaehrungsProjekt)
  15. # @receiver(post_save, sender=EnergyProjekt)
  16. # @receiver(post_save, sender=Wohnprojekt)
  17. def search_agent(sender, instance, update_fields=None, **kwargs):
  18. # print("signal called")
  19. # if update_fields is not None:
  20. # if 'frei' in update_fields:
  21. if instance.frei == 'JAJA' and instance.public == True :
  22. # SAVE an object that will trigger the search loop later.
  23. trigger = Trigger(ort=instance.ort, instancepk = instance.pk )
  24. trigger.save()
  25. def process_triggers():
  26. for trigger in Trigger.objects.filter(sent=False):
  27. instance = Product.objects.get(pk = trigger.instancepk)
  28. for agent in SearchAgent.objects.all( ):
  29. # This is needed because ort is a multiple selection.
  30. for agentOrt in agent.ort:
  31. if agentOrt == instance.ort:
  32. context = {}
  33. context['product'] = model_to_dict ( instance )
  34. context['agent'] = model_to_dict ( agent )
  35. context['product']['status'] = instance.get_status_display()
  36. context['product']['ort'] = instance.get_ort_display()
  37. context['agent']['delete_url']= 'https://' + config.WEBSEITE_URI + reverse( 'search-agent-delete' , kwargs={ 'pk': agent.pk, 'hash': agent.hash } )
  38. context['recipient'] = [ agent.email, ]
  39. context['msg_subject' ] = ('Gemeinschaffen - ' + instance.name )
  40. # print( "triggered!!!!", context['product']['name'], context['product']['ort'] )
  41. mail.send(
  42. context['recipient'],
  43. config.EMAIL_NOREPLY,
  44. context = context,
  45. template='generic',
  46. headers={ 'Reply-To': instance.email },
  47. priority='medium',
  48. )
  49. Trigger.objects.filter(pk=trigger.pk).update( sent=True, sentdate = timezone.now() )