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'