signals.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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=Wohnprojekt)
  14. def search_agent(sender, instance, update_fields=None, **kwargs):
  15. # print("signal called")
  16. # if update_fields is not None:
  17. # if 'frei' in update_fields:
  18. if instance.frei == 'JAJA' and instance.public == True :
  19. trigger = Trigger(ort=instance.ort, instancepk = instance.pk )
  20. trigger.save()
  21. # SAVE an object that will trigger the search loop later.
  22. # for agent in SearchAgent.objects.all():
  23. #
  24. # for agentOrt in agent.ort:
  25. # if agentOrt == instance.ort:
  26. # context = {}
  27. # context['product'] = model_to_dict ( instance )
  28. # context['agent'] = model_to_dict ( agent )
  29. #
  30. # context['product']['status'] = instance.get_status_display()
  31. # context['product']['ort'] = instance.get_ort_display()
  32. # context['agent']['delete_url']= 'https://' + config.WEBSEITE_URI + reverse( 'search-agent-delete' , kwargs={ 'pk': agent.pk, 'hash': agent.hash } )
  33. #
  34. # context['recipient'] = [ agent.email, ]
  35. # context['msg_subject' ] = ('Gemeinschaffen - ' + instance.name )
  36. #
  37. # mail.send(
  38. # context['recipient'],
  39. # config.EMAIL_NOREPLY,
  40. # context = context,
  41. # template='generic',
  42. # headers={ 'Reply-To': instance.email },
  43. # priority='medium',
  44. # )
  45. def process_triggers():
  46. for trigger in Trigger.objects.filter(sent=False):
  47. instance = Product.objects.get(pk = trigger.instancepk)
  48. for agent in SearchAgent.objects.all( ):
  49. # This is needed because ort is a multiple selection.
  50. for agentOrt in agent.ort:
  51. if agentOrt == instance.ort:
  52. context = {}
  53. context['product'] = model_to_dict ( instance )
  54. context['agent'] = model_to_dict ( agent )
  55. context['product']['status'] = instance.get_status_display()
  56. context['product']['ort'] = instance.get_ort_display()
  57. context['agent']['delete_url']= 'https://' + config.WEBSEITE_URI + reverse( 'search-agent-delete' , kwargs={ 'pk': agent.pk, 'hash': agent.hash } )
  58. context['recipient'] = [ agent.email, ]
  59. context['msg_subject' ] = ('Gemeinschaffen - ' + instance.name )
  60. # print( "triggered!!!!", context['product']['name'], context['product']['ort'] )
  61. mail.send(
  62. context['recipient'],
  63. config.EMAIL_NOREPLY,
  64. context = context,
  65. template='generic',
  66. headers={ 'Reply-To': instance.email },
  67. priority='medium',
  68. )
  69. Trigger.objects.filter(pk=trigger.pk).update( sent=True, sentdate = timezone.now() )