From 8e7eb6cfc1609e2396b826bdc45d46fb32c3fbf4 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Tue, 19 Feb 2019 15:11:16 +0000
Subject: [PATCH] GH-858: Make sure the correct phase is passed to the
 messaging

---
 opentech/apply/activity/messaging.py |  6 +++---
 opentech/apply/funds/views.py        | 11 ++++++-----
 opentech/apply/funds/workflow.py     |  4 ++--
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index dc5e30041..2af8aa9ef 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -257,7 +257,7 @@ class ActivityAdapter(AdapterBase):
     def handle_batch_transition(self, transitions, submissions, **kwargs):
         kwargs.pop('submission')
         for submission in submissions:
-            old_phase = transitions[submission.phase]
+            old_phase = transitions[submission]
             return self.handle_transition(old_phase=old_phase, submission=submission, **kwargs)
 
     def send_message(self, message, user, submission, submissions, **kwargs):
@@ -373,7 +373,7 @@ class SlackAdapter(AdapterBase):
         submissions_text = [
             ': '.join([
                 self.slack_links(links, [submission]),
-                f'{transitions[submission.phase].display_name} → {submission.phase}',
+                f'{transitions[submission].display_name} → {submission.phase}',
             ])
             for submission in submissions
         ]
@@ -482,7 +482,7 @@ class EmailAdapter(AdapterBase):
     def handle_batch_transition(self, transitions, submissions, **kwargs):
         kwargs.pop('submission')
         for submission in submissions:
-            old_phase = transitions[submission.phase]
+            old_phase = transitions[submission]
             return self.render_message(
                 'messages/email/transition.html',
                 submission=submission,
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index b14fbdc52..9e877069e 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -139,6 +139,7 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
         phase_changes = {}
         for submission in submissions:
             valid_actions = {action for action, _ in submission.get_actions_for_user(self.request.user)}
+            old_phase = submission.phase
             try:
                 transition = (valid_actions & set(transitions)).pop()
                 submission.perform_transition(
@@ -150,7 +151,7 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
             except (PermissionDenied, KeyError):
                 failed.append(submission)
             else:
-                phase_changes[submission.phase] = transitions[transition]
+                phase_changes[submission] = old_phase
 
         if failed:
             messages.warning(
@@ -159,11 +160,12 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
                 ', '.join(str(submission) for submission in failed)
             )
 
+        succeeded_submissions = submissions.exclude(id__in=[submission.id for submission in failed])
         messenger(
             MESSAGES.BATCH_TRANSITION,
             user=self.request.user,
             request=self.request,
-            submissions=submissions.exclude(id__in=[submission.id for submission in failed]),
+            submissions=succeeded_submissions,
             related=phase_changes,
         )
 
@@ -278,15 +280,14 @@ class SubmissionsByStatus(BaseAdminSubmissionsTable, DelegateableListView):
         BatchProgressSubmissionView,
     ]
 
-    def get(self, request, *args, **kwargs):
+    def dispatch(self, request, *args, **kwargs):
         self.status = kwargs.get('status')
         status_data = self.status_mapping[self.status]
         self.status_name = status_data['name']
         self.statuses = status_data['statuses']
         if self.status not in self.status_mapping:
             raise Http404(_("No statuses match the requested value"))
-
-        return super().get(request, *args, **kwargs)
+        return super().dispatch(request, *args, **kwargs)
 
     def get_filterset_kwargs(self, filterset_class, **kwargs):
         return super().get_filterset_kwargs(filterset_class, limit_statuses=self.statuses, **kwargs)
diff --git a/opentech/apply/funds/workflow.py b/opentech/apply/funds/workflow.py
index 93b13acc8..58b017eae 100644
--- a/opentech/apply/funds/workflow.py
+++ b/opentech/apply/funds/workflow.py
@@ -735,7 +735,7 @@ def get_determination_transitions():
 
 def get_action_mapping(workflow):
     # Maps action names to the phase they originate from
-    transitions = defaultdict(lambda: {'display': '', 'transitions': {}})
+    transitions = defaultdict(lambda: {'display': '', 'transitions': []})
     if workflow:
         phases = workflow.items()
     else:
@@ -744,7 +744,7 @@ def get_action_mapping(workflow):
         for transition_name, transition in phase.transitions.items():
             transition_display = transition['display']
             transition_key = slugify(transition_display)
-            transitions[transition_key]['transitions'][transition_name] = phase
+            transitions[transition_key]['transitions'].append(transition_name)
             transitions[transition_key]['display'] = transition_display
 
     return transitions
-- 
GitLab