소스 검색

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'