Parcourir la source

search agent delete, emails

Juan Carlos il y a 5 ans
Parent
commit
466cd8418f

+ 1 - 0
marktplatz/__init__.py

@@ -0,0 +1 @@
+default_app_config = 'marktplatz.apps.marktplatzConfig'

+ 3 - 11
marktplatz/apps.py

@@ -1,19 +1,11 @@
+from __future__ import unicode_literals
 from django.apps import AppConfig
-from django.contrib.auth.models import User
 
 
-
-
-# import django
-# django.setup()
-
 class marktplatzConfig(AppConfig):
     name = 'marktplatz'
 
     def ready(self):
 
-        u = User(username='admin')
-        u.set_password('admin_pass')
-        u.is_superuser = True
-        u.is_staff = True
-        u.save()
+        import marktplatz.signals
+        super().ready()

+ 10 - 1
marktplatz/forms.py

@@ -150,7 +150,16 @@ class SubmissionForm(forms.ModelForm):
                   Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
                   Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
                   css_class='form-row  row'),
-             'kflaechen', 'gemeinschaftr', 'kgemeinschaftr', 'raumangebot', 'kraumangebot', 'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
+             'kflaechen',
+
+              Div(
+                  Div('gemeinschaftr',  css_class='col-sm-6 col-6'),
+                  Div('raumangebot', css_class='col-sm-6 col-6'),
+                Div('kgemeinschaftr',  css_class='col-sm-6 col-6'),
+                Div('kraumangebot', css_class='col-sm-6 col-6'),
+                  css_class='form-row  row'),
+
+              'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
 
            )
        )

+ 68 - 42
marktplatz/models.py

@@ -24,9 +24,12 @@ from imagekit.processors import Thumbnail
 from imagekit.processors import ResizeToCover
 from imagekit.models import ProcessedImageField
 
+from post_office import mail
+from constance import config
 
 from marktplatz.widgets import *
 
+
 class Credit(models.Model):
     owner = CharField(verbose_name='Building or Product owner',blank=True,max_length = 300)
     architecture = CharField(verbose_name='Architecture',blank=True,max_length = 300)
@@ -139,35 +142,66 @@ class Product(models.Model):
         super(Product, self).__init__(*args, **kwargs)
         self.__original_frei = self.frei
 
-    def save(self, force_insert=False, update_fields=[''], force_update=False, *args, **kwargs):
-        if self.frei != self.__original_frei:
-            if self.frei == "JAJA":
-                for agent in SearchAgent.objects.all():
-                    for agentOrt in agent.ort:
-                        print(agentOrt)
-                        if agentOrt == self.ort:
-                            print ('send_mail')
-
-                            # context []
-                            # context ['base_uri'] =  self.request.build_absolute_uri( '/' ).rstrip('/')
-                            # context['recipient'] = [ myActivity.contact.email, ]
-                            # context['msg_subject' ] =  _('Activity created')
-                            # context['msg_content' ] = "\n" + "<br/>" + \
-                            #         _("Title: ")               + form.cleaned_data['title']        + "\n" + "<br/><br/>" + \
-                            #         _('Description: ')         + form.cleaned_data['description']  + "\n" + "<br/>"
-                            #
-                            # mail.send(
-                            #     context['recipient'],
-                            #     config.EMAIL_NOREPLY,
-                            #     context = context,
-                            #     template='generic',
-                            #     headers={  'Reply-To': context['email']  },
-                            #     priority='now',
-                            # )
-
-
-        super(Product, self).save(force_insert, force_update, update_fields=['frei'], *args, **kwargs)
+
+    def save(self, update_fields=None, *args, **kwargs):
+        print ("is this workig?")
+
+
+        print ('update_fields: ', update_fields)
+        # post_save.connect(search_agent)
+        if self.frei != self.__original_frei and self.frei == "JAJA":
+            for agent in SearchAgent.objects.all():
+                for agentOrt in agent.ort:
+                    print(agentOrt)
+                    if agentOrt == self.ort:
+                        print ('send_mail')
+
+                        context = {}
+
+                        context['product_name']=self.name
+                        context['product_claim']=self.claim
+                        context['product_beschreibung']=self.beschreibung
+                        context['product_learning']=self.learning
+                        context['product_gruendungsjahr']=self.gruendungsjahr
+                        context['product_betriebgenommen']=self.betriebgenommen
+                        context['product_status']=self.status
+                        context['product_adresse']=self.adresse
+                        context['product_plz']=self.plz
+                        context['product_adresse_zusatz']=self.adresse_zusatz
+                        context['product_ort']=self.ort
+                        context['product_website']=self.website
+                        context['product_email']=agent.hash
+
+                        context['agent_hash']=self.email
+
+
+
+                        context['recipient'] = [ agent.email, ]
+                        context['msg_subject' ] = ('Gemeinschaffen - ' + self.name )
+
+                        mail.send(
+                            context['recipient'],
+                            config.EMAIL_NOREPLY,
+                            context = context,
+                            template='generic',
+                            headers={  'Reply-To': context['product_email']  },
+                            priority='now',
+                        )
+
+
+        super().save( update_fields=update_fields, *args, **kwargs)  # Call the "real" save() method.
         self.__original_frei = self.frei
+        # super().save(update_fields=update_fields, *args, **kwargs)  # Call the "real" save() method.
+
+    # def save(self, *args, update_fields=[''], **kwargs):
+
+    #
+    #
+    #     # super(Product, self).save(force_insert, force_update, update_fields=['frei'], *args, **kwargs)
+    #     print ("savingg.....")
+    #     super().save(*args,  update_fields=['frei'], **kwargs)
+    #     print ("saved ++++++++")
+    #
 
     STATUS = [
         ('ENT', 'Entwicklung'),
@@ -252,7 +286,7 @@ class Product(models.Model):
     kfrei           = CharField   ( 'Platz frei - Kommentar',   max_length = 2048,  help_text="Kommentar", null = True, blank=True )
     rechtsform      = CharField   ( 'Rechtsform', max_length = 32, help_text="Rechtsform des Projektes", null = True, blank=True )
     orga            = CharField   ( 'Organisationsform',  max_length = 256, help_text="Organisationsform des Projektes.", null = True, blank=True )
-    mitmachen       = BooleanField( 'Mitmachen möglich', default=False, help_text="Kann jemand mitmachen?", null = True, blank=False )
+    mitmachen       = BooleanField( 'Mitmachen möglich', default=False, help_text="Kann jemand mitmachen?", blank=False )
     terms           = NullBooleanField(help_text="")
 
     title = CharField('Product Title',max_length = 100,null = True, blank=True)
@@ -301,15 +335,7 @@ def auto_delete_reverse_keys(sender, instance, **kwargs):
     if instance.interaction:
         instance.interaction.delete()
 
-@receiver(post_save, sender=Product)
-def search_agent(sender, instance, **kwargs):
-    print(instance)
-    print(sender)
-    print(update_fields)
-    if update_fields != None:
-        print(update_fields)
-        if 'frei' in update_fields:
-            print('frei updated')
+
 
 
 class SearchAgent(models.Model):
@@ -437,10 +463,10 @@ class Wohnprojekt(Product):
     def amitglieder(self):
             return self.aerwachsene + self.akinder
     awohnungen        = IntegerField( 'Anzahl an Wohnungen', help_text="Anzahl an Wohnungen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    wohnflaeche            = IntegerField( 'Wohnfläche', help_text="Wohnfläche", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    gewerbeflaechen        = IntegerField( 'Gewerbeflächen', help_text="Gewerbeflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    gemeinschaftsflaeche   = IntegerField( 'Gemeinschaftsflächen', help_text="Gemeinschaftsflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    sonstige_flaechen      = IntegerField( 'Sonstige Flächen', help_text="Sonstige Flächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
+    wohnflaeche            = IntegerField( 'Wohnfläche', help_text="Wohnfläche", validators=[MinValueValidator(0)], default = 0, null = True,  )
+    gewerbeflaechen        = IntegerField( 'Gewerbeflächen', help_text="Gewerbeflächen", validators=[MinValueValidator(0)], default = 0, null = True,  )
+    gemeinschaftsflaeche   = IntegerField( 'Gemeinschaftsflächen', help_text="Gemeinschaftsflächen", validators=[MinValueValidator(0)], default = 0, null = True,  )
+    sonstige_flaechen      = IntegerField( 'Sonstige Flächen', help_text="Sonstige Flächen", validators=[MinValueValidator(0)], default = 0, null = True,  )
     @property
     def flaeche(self):
             return self.wohnflaeche + self.gewerbeflaechen + self.gemeinschaftsflaeche + self.sonstige_flaechen

+ 15 - 0
marktplatz/receivers.py → marktplatz/signals.py

@@ -1,9 +1,24 @@
 from django.dispatch import receiver
+from django.db.models.signals import post_delete, post_save
+
+
 from post_office import mail
 from django.core.mail import EmailMessage
 from django.core.mail import EmailMultiAlternatives
 
+from .models import *
+
+
 
+@receiver(post_save, sender=Product)
+def search_agent(sender, instance, update_fields=None, **kwargs):
+    print(instance)
+    print(sender)
+    print(update_fields)
+    if update_fields != None:
+        print(update_fields)
+        if 'frei' in update_fields:
+            print('frei updated')
 
 
 #

+ 3 - 0
marktplatz/templates/marktplatz/form.html

@@ -14,6 +14,8 @@
 </style>
 
   <div class="col-sm-6">
+    <br>
+    {{ form_content }}
     <form method="post">
       {% csrf_token %}
       <!-- Left here in case we need to debug -->
@@ -29,6 +31,7 @@
 
       {% csrf_token %}
       {{ signUp|crispy }}
+      <br><br>
     <button type="submit" class="btn border-dark rounded-0 mybtn" >Register</button>  </form>
     <div class="">
       <br><br><br>

+ 4 - 3
marktplatz/templates/marktplatz/product_overview.html

@@ -137,10 +137,12 @@ $(document).ready(function(){
   .mab-card-body{
 
     padding: 5px;
-    padding-left: 0px;
+    padding-left: 5px;
 
   }
 
+
+
   .mab-Product-title {
 
     position: absolute;
@@ -189,7 +191,7 @@ $(document).ready(function(){
 {% block content %}
 
 <nav class="navbar-expand-sm tag" style="margin-left: 0px">
-  <button class="navbar-toggler border-thin mybtn rounded-0 tag navbar-expand-sm" type="button" data-toggle="collapse" data-target="#tags" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle tags" style="font-size: 15px">
+  <button class="navbar-toggler border-thin mybtn rounded-0 tag navbar-expand-sm " type="button" data-toggle="collapse" data-target="#tags" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle tags" style="font-size: 15px">
     <span class="mybtn"></span> Show All Tags ⋁
   </button>
   <div class="row border-dark collapse navbar-collapse" id="tags">
@@ -235,7 +237,6 @@ $(document).ready(function(){
 
   {% for product in wohnprojekt_list %}
 
-  {{ product.wohnprojekt }}
 
   <div class="mab-card  {{product.ort}} {{product.status}} {{product.frei}} {{product.altneu}} {% if product.frei == 'JAJA' %} mab-card-highlight {% endif %} card rounded-0 border-0 " style="">
     <a href="{% url 'product-detail' product.pk %}">

+ 1 - 0
marktplatz/urls.py

@@ -12,6 +12,7 @@ urlpatterns = [
     path('submit/', views.submit, name='submit'),
     path('products/', views.ProductsView.as_view(), name='products'),
     path('suchagent/', views.SearchAgentCreate.as_view(), name='search-agent-create'),
+    path('suchagent/<int:pk>/<slug:hash>/', views.SearchAgentDelete.as_view(), name='search-agent-delete'),
     path('product/<int:pk>', views.DetailView.as_view(), name='product-detail'),
     path('product/<int:pk>/embed', views.DetailView.as_view( embed=True, ), name='product-detail-embed'),
     path('votes/', views.VoteView.as_view(), name='vote-detail'),

+ 37 - 19
marktplatz/views.py

@@ -80,6 +80,25 @@ class SearchAgentCreate(CreateView):
     fields =  'ort', 'email'
     success_url = reverse_lazy('products')
 
+
+class SearchAgentDelete(DeleteView):
+    model = SearchAgent
+    template_name =  'marktplatz/form.html'
+    success_url = reverse_lazy('products')
+
+    def get(self, request, *args, **kwargs):
+        searchagent = SearchAgent.objects.get(pk= kwargs.get('pk') )
+        context = request.GET.dict()
+        if searchagent.hash == kwargs.get('hash'):
+            context['form_content'] = 'Dein Suchagent wurde gelöscht!'
+            print ("delete")
+            return render(request, self.template_name, context )
+            # super().get(self, request, *args, **kwargs)
+        else:
+            print ("not delete")
+            context['form_content'] = 'Oopala, das hat nicht geklappt.'
+            return render(request, self.template_name, context )
+
 class ProductsView(generic.ListView):
     model = Wohnprojekt
     #context_object_name = 'Products'
@@ -416,13 +435,6 @@ class registerView(FormView):
             return render(request, self.template_name, context)
 
 
-        # if form_contact.is_valid():
-        #     contact = form_contact.save(commit=False)
-        #     contact.user = user
-        #     contact.save()
-        #
-        #     return redirect('products')
-
         context = request.GET.dict()
         context['form'] = RegisterForm
         context['signUp'] = SignUpForm
@@ -587,6 +599,19 @@ class uploadView(LoginRequiredMixin, FormView):
 handle_upload = FileFormUploader()
 
 
+# class EditView(UpdateView):
+#
+#     model = Wohnprojekt
+#     fields = [
+#             # 'title','country','city','year','owner','teaser_txt','header','category', 'description_txt',
+#              'terms', 'product',
+#             'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
+#              'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'kflaechen', 'gemeinschaftr', 'kgemeinschaftr', 'sonderwohnformen', 'raumangebot', 'kraumangebot', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
+#              ]
+#     # exclude = ['']
+#     # form_class = SubmissionForm
+#     template_name = 'marktplatz/add.html'
+
 class EditView(FormView):
 
     template_name = 'marktplatz/add.html'
@@ -613,24 +638,17 @@ class EditView(FormView):
 
     def post(self, request, pk):
 
+        # print (  request.POST.dict()  )
         product_f = SubmissionForm(request.POST, request.FILES, instance=Wohnprojekt.objects.get(pk=pk))
-        # credits_f = CreditForm(request.POST,instance = Credit.objects.select_related().get(product=pk))
-        # description_f = DescriptionForm(request.POST,instance = Description.objects.select_related().get(product=pk))
-        # lnks_f      = LinkFormSet(request.POST,instance  = Wohnprojekt.objects.get(pk=pk) )
-        # interaction_f = InteractionForm(request.POST,instance = Interaction.objects.select_related().get(product=pk))
-        vid1_f = VideoForm(request.POST, request.FILES)
 
         if product_f.is_valid():
-            update_fields = []
             # https://stackoverflow.com/questions/35879101/how-to-determine-if-a-field-has-changed-in-a-django-modelform/43550210
             if product_f.has_changed():
-                product =  product_f.save(  commit=False )
-                if 'frei' in product_f.changed_data:
-                    product.save(  update_fields=['frei']   )
-                else:
-                    product.save(  )
-
+                update_fields = product_f.changed_data
+                product =  product_f.save( commit=False )
+                print ('product_f.changed_data: ',  product_f.changed_data)
 
+                product.save( update_fields=update_fields )
 
             # product = product_f.save()
             # for lnk in lnks_f:

+ 9 - 4
project_base/apps.py

@@ -29,11 +29,11 @@ def create_admin(sender=None, **kwargs):
                              )
     u = User.objects.get(username='admin')
     u.set_password('admin_pass')
+    u.save()
 
     Group.objects.update_or_create(name='submission')
     Group.objects.update_or_create(name='jury')
 
-    u.save()
 
 class project_base(AppConfig):
     name = 'project_base'
@@ -50,16 +50,21 @@ class AuthConfigBase(AuthConfig):
         super().ready()
         post_migrate.connect(create_admin, sender=self)
 
+content_html = """
+<table><tbody><tr><td><h2>&nbsp;gemeinschaffen.com </h2></td></tr><tr><td><h3>name</h3><p>{{product_name}}</p><h3>claim</h3><p>{{product_claim}}</p><h3>beschreibung</h3><p>{{product_beschreibung}}</p><h3>learning</h3><p>{{product_learning}}</p><h3>status</h3><p>{{product_status}}</p><h3>adresse</h3><p>{{product_adresse}}</p><h3>plz</h3><p>{{product_plz}}</p><h3>adresse_zusatz</h3><p>{{product_adresse_zusatz}}</p><h3>ort</h3><p>{{product_ort}}</p><h3>website</h3><p>{{product_website}}</p><h3>email</h3><p>{{product_email}}</p></td></tr><tr><td>&nbsp;<a href="https://gemeinschaffen.com/mab/products/">gemeinschaffen.com</a></td></tr></tbody></table><p>&nbsp;</p>
+"""
+
+content_txt = strip_tags(content_html)
 
 def create_emails(sender=None, **kwargs):
     from post_office.models import EmailTemplate
     EmailTemplate.objects.update_or_create(
         name='generic',
         defaults={
-        'subject'      :  'Neue Nachricht von gemeinschaffen.at',
+        'subject'      :  'Neue Nachricht von gemeinschaffen.com',
         'description'  :  'Generic template',
-        'html_content' :  "content html",
-        'content'      :  "content"}
+        'html_content' :  content_html,
+        'content'      :  content_txt}
         )
     pass
 

+ 2 - 1
project_base/settings.py

@@ -198,6 +198,7 @@ CONSTANCE_CONFIG = {
     'ADMIN_EMAIL': ('juan@mediaarchitecture.org', 'Admin email'),
     'WEBSITE_TITEL': ('Markplatz', 'Name of the website'),
     'LOGO_IMAGE': ('logo.png', 'Company logo', 'image_field'),
+    'EMAIL_NOREPLY' : ('no-reply@gemeinschaffen.com', 'No-reply email')
 }
 
 
@@ -211,7 +212,7 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
-    'marktplatz',
+    'marktplatz.apps.marktplatzConfig',
     #'constance',
     'project_base.apps.ConstanceBase',
     'constance.backends.database',

+ 20 - 1
project_base/templates/base_generic.html

@@ -19,6 +19,25 @@
     <script src="{% static 'jquery.min.js' %}"></script>
 
 
+    <style media="screen">
+
+      .mab-navbar{
+
+        	padding-left: 15px;
+        	padding-bottom: 4px;
+        	margin-bottom: 16px;
+        	position: sticky;
+        	top: 0;
+        	z-index: 2;
+        	background-color: #FCFCFC;
+        	padding-right: 15px;
+          box-shadow: 0 8px 4px -6px gray;
+      }
+
+    </style>
+
+
+
     {% block script %}
 
     {% endblock %}
@@ -27,7 +46,7 @@
 
     {% if not embed %}
     {% block navbar %}
-    <nav class="navbar navbar-expand-sm navbar-fixed-top" style="padding-left: 15px; padding-bottom: 0px; margin-bottom: 2px">
+    <nav class="navbar navbar-expand-sm navbar-fixed-top mab-navbar" style="">
       <div class="container-fluid rounded-0" style="padding-left: 2px">
         <a class="navbar-brand navbar-right" href="{% url 'products' %}">
           <img src="{% static 'newMAB.png' %}" alt="MAB20" height="40px" width="auto" style="margin: auto; padding-bottom: 2px">