From 7b1b3d73ca4ae964dbb37e3c3c44df46a50a7cac Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Thu, 6 Sep 2018 11:32:50 +0100
Subject: [PATCH] Make sure we can save the related object for all messages

---
 opentech/apply/activity/messaging.py       | 24 ++++++++++++++++------
 opentech/apply/funds/models/submissions.py |  2 +-
 opentech/apply/funds/views.py              |  2 +-
 opentech/apply/review/views.py             |  2 +-
 4 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index 0310a560f..e96326e4b 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -1,5 +1,6 @@
 import requests
 
+from django.db import models
 from django.conf import settings
 from django.contrib import messages
 from django.template.loader import render_to_string
@@ -14,6 +15,9 @@ def link_to(target, request):
 
 neat_related = {
     MESSAGES.DETERMINATION_OUTCOME: 'determination',
+    MESSAGES.UPDATE_LEAD: 'old',
+    MESSAGES.NEW_REVIEW: 'review',
+    MESSAGES.TRANSITION: 'old_phase',
 }
 
 
@@ -59,8 +63,9 @@ class AdapterBase:
     def recipients(self, message_type, **kwargs):
         raise NotImplementedError()
 
-    def process(self, message_type, event, user, submission, related=None):
+    def process(self, message_type, event, request, user, submission, related=None):
         kwargs = {
+            'request': request,
             'user': user,
             'submission': submission,
             'related': related,
@@ -86,7 +91,7 @@ class AdapterBase:
                     message = '{} [to: {}]: {}'.format(self.adapter_type, recipient, message)
                 else:
                     message = '{}: {}'.format(self.adapter_type, message)
-                messages.add_message(kwargs['request'], messages.INFO, message)
+                messages.add_message(request, messages.INFO, message)
 
     def create_log(self, message, recipient, event):
         from .models import Message
@@ -115,7 +120,7 @@ class ActivityAdapter(AdapterBase):
         MESSAGES.DETERMINATION_OUTCOME: 'Sent a determination. Outcome: {determination.clean_outcome}',
         MESSAGES.INVITED_TO_PROPOSAL: 'Invited to submit a proposal',
         MESSAGES.REVIEWERS_UPDATED: 'reviewers_updated',
-        MESSAGES.NEW_REVIEW: 'Submitted a review',
+        MESSAGES.NEW_REVIEW: MESSAGES.NEW_REVIEW.name,
         MESSAGES.OPENED_SEALED: 'Opened the submission while still sealed',
     }
 
@@ -143,12 +148,19 @@ class ActivityAdapter(AdapterBase):
     def send_message(self, message, user, submission, **kwargs):
         from .models import Activity, PUBLIC
         visibility = kwargs.get('visibility', PUBLIC)
+
+        related =kwargs['related']
+        if isinstance(related, models.Model):
+            related_object = related
+        else:
+            related_object = None
+
         Activity.actions.create(
             user=user,
             submission=submission,
             message=message,
             visibility=visibility,
-            related_object=kwargs['related']
+            related_object=related_object,
         )
 
 
@@ -290,11 +302,11 @@ class MessengerBackend:
     def __call__(self, message_type, request, user, submission, **kwargs):
         return self.send(message_type, request=request, user=user, submission=submission, **kwargs)
 
-    def send(self, message_type, user, submission, related):
+    def send(self, message_type, request, user, submission, related):
         from .models import Event
         event = Event.objects.create(type=message_type.name, by=user, submission=submission)
         for adapter in self.adapters:
-            adapter.process(message_type, event, user=user, submission=submission, related=related)
+            adapter.process(message_type, event, request=request, user=user, submission=submission, related=related)
 
 
 adapters = [
diff --git a/opentech/apply/funds/models/submissions.py b/opentech/apply/funds/models/submissions.py
index eeaf49583..65dff5f21 100644
--- a/opentech/apply/funds/models/submissions.py
+++ b/opentech/apply/funds/models/submissions.py
@@ -596,7 +596,7 @@ def log_status_update(sender, **kwargs):
             user=by,
             request=request,
             submission=instance,
-            old_phase=old_phase,
+            related=old_phase,
         )
 
         if instance.status in review_statuses:
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index eb27dc0dd..5e612143e 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -104,7 +104,7 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
             request=self.request,
             user=self.request.user,
             submission=form.instance,
-            old=old,
+            related=old,
         )
         return response
 
diff --git a/opentech/apply/review/views.py b/opentech/apply/review/views.py
index 445efe2e4..70a3ad13c 100644
--- a/opentech/apply/review/views.py
+++ b/opentech/apply/review/views.py
@@ -89,7 +89,7 @@ class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
                 request=self.request,
                 user=self.object.author,
                 submission=self.submission,
-                review=self.object,
+                related=self.object,
             )
         return response
 
-- 
GitLab