Browse Source

trigger for seach agents

Juan Carlos 4 năm trước cách đây
mục cha
commit
9761a64d07
3 tập tin đã thay đổi với 68 bổ sung11 xóa
  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'