瀏覽代碼

trigger for seach agents

Juan Carlos 4 年之前
父節點
當前提交
9761a64d07
共有 3 個文件被更改,包括 68 次插入11 次删除
  1. 17 10
      marktplatz/models.py
  2. 50 1
      marktplatz/signals.py
  3. 1 0
      project_base/settings.py

+ 17 - 10
marktplatz/models.py

@@ -229,16 +229,6 @@ class Product(models.Model):
 
 
 
-class SearchAgent(models.Model):
-
-    def hash_gen():
-        return uuid.uuid1().hex
-
-    email           = EmailField         ( 'Email',   max_length = 2048, help_text="Email des Projektes", null = False, blank=False )
-    ort             = MultiSelectField   ( 'Ort', max_length = 4096 ,    choices=Product.ORT, default='', help_text="Ort des Projektes", null = True, blank=False )
-    hash            = CharField          ( max_length=255, default=hash_gen )
-
-
 class MobilitaetsProjekt(Product):
 
     @property
@@ -421,6 +411,23 @@ class Wohnprojekt(Product):
     urbanem            = BooleanField      ( 'Urbane Mischung', default=False, help_text="Gibt es im Haus neben dem Wohnen auch anderen urbane Funktionen wie Arbeiten, Gewerbe, Kultur, Bildung usf. (Und ist der Anteil dieser Flächen nennenswert?) Wenn ja dann kreuze dieses Feld an!", blank=False )
 
 
+
+class SearchAgent(models.Model):
+
+    def hash_gen():
+        return uuid.uuid1().hex
+
+    email           = EmailField         ( 'Email',   max_length = 2048, help_text="Email des Projektes", null = False, blank=False )
+    ort             = MultiSelectField   ( 'Ort', max_length = 4096 ,    choices=Product.ORT, default='', help_text="Ort des Projektes", null = True, blank=False )
+    hash            = CharField          ( max_length=255, default=hash_gen )
+
+
+class Trigger(models.Model):
+
+    ort             = MultiSelectField   ( 'Ort', max_length = 4096 ,    choices=Product.ORT, default='', help_text="Ort des Projektes", null = True, blank=False )
+    instancepk      = IntegerField       ( 'Id of original instance', help_text="Id of the product instance", default = 0, null = False,  )
+
+
 class Link(models.Model):
     product = ForeignKey(Product, on_delete=models.CASCADE)
     link_description = CharField(null=True, blank=True, max_length = 2048)

+ 50 - 1
marktplatz/signals.py

@@ -8,7 +8,7 @@ from post_office import mail
 # from django.core.mail import EmailMessage
 # from django.core.mail import EmailMultiAlternatives
 
-from .models import *
+from marktplatz.models import *
 
 
 
@@ -19,9 +19,51 @@ def search_agent(sender, instance, update_fields=None, **kwargs):
     # if update_fields is not None:
     #     if 'frei' in update_fields:
     if instance.frei == 'JAJA' and instance.public == True :
+
+        trigger = Trigger(ort=instance.ort, instancepk = instance.pk  )
+        trigger.save()
+        # SAVE an object that will trigger the search loop later.
+
+        # for agent in SearchAgent.objects.all():
+        #
+        #     for agentOrt in agent.ort:
+        #         if agentOrt == instance.ort:
+        #             context = {}
+        #             context['product'] = model_to_dict ( instance )
+        #             context['agent']   = model_to_dict ( agent )
+        #
+        #             context['product']['status']  =  instance.get_status_display()
+        #             context['product']['ort']     =  instance.get_ort_display()
+        #             context['agent']['delete_url']= 'https://' + config.WEBSEITE_URI + reverse(  'search-agent-delete' , kwargs={ 'pk': agent.pk, 'hash': agent.hash }   )
+        #
+        #             context['recipient'] = [ agent.email, ]
+        #             context['msg_subject' ] = ('Gemeinschaffen - ' + instance.name )
+        #
+        #             mail.send(
+        #                 context['recipient'],
+        #                 config.EMAIL_NOREPLY,
+        #                 context = context,
+        #                 template='generic',
+        #                 headers={  'Reply-To': instance.email },
+        #                 priority='medium',
+        #             )
+
+
+
+def process_triggers():
+
+    for trigger in Trigger.objects.all():
+        print("there is a trigger!")
+        instance = Product.objects.get(pk = trigger.instancepk)
+
+
         for agent in SearchAgent.objects.all():
+
             for agentOrt in agent.ort:
                 if agentOrt == instance.ort:
+
+
+
                     context = {}
                     context['product'] = model_to_dict ( instance )
                     context['agent']   = model_to_dict ( agent )
@@ -33,6 +75,8 @@ def search_agent(sender, instance, update_fields=None, **kwargs):
                     context['recipient'] = [ agent.email, ]
                     context['msg_subject' ] = ('Gemeinschaffen - ' + instance.name )
 
+                    print( "triggered!!!!", context['product']['name'],  context['product']['ort'] )
+
                     mail.send(
                         context['recipient'],
                         config.EMAIL_NOREPLY,
@@ -41,3 +85,8 @@ def search_agent(sender, instance, update_fields=None, **kwargs):
                         headers={  'Reply-To': instance.email },
                         priority='medium',
                     )
+
+        # trigger.delete()
+
+
+# process_triggers()

+ 1 - 0
project_base/settings.py

@@ -266,6 +266,7 @@ NEWSLETTER_BATCH_SIZE = 100
 CRONJOBS = [
     ('*/5 * * * *', 'django.core.management.call_command', ['submit_newsletter', ], {}, '>   /dev/null 2>&1' ), #> /dev/null 2>&1
     ('*/5 * * * *', 'django.core.management.call_command', ['send_queued_mail'], {}, '> /dev/null 2>&1'  ), #'> /dev/null 2>&1'
+    ('*/10 * * * *', 'marktplatz.signals.process_triggers', [''], {}, '> /dev/null 2>&1'  ), #'> /dev/null 2>&1'
 ]
 
 CRISPY_TEMPLATE_PACK = 'bootstrap4'