From f3c018823125b888908a7d0a3bbad3f25e089e68 Mon Sep 17 00:00:00 2001
From: Fredrik Jonsson <frjo@xdeb.org>
Date: Thu, 9 May 2019 15:02:41 +0200
Subject: [PATCH] When new partners are added to a submission, notify the
 applicant and the added partners.

---
 opentech/apply/activity/messaging.py          | 19 +++++++++++++++++++
 .../migrations/0023_notify_partners.py        | 18 ++++++++++++++++++
 opentech/apply/activity/options.py            |  1 +
 .../templates/messages/email/base.html        |  5 +----
 .../email/partners_update_applicant.html      |  9 +++++++++
 .../email/partners_update_partner.html        |  9 +++++++++
 .../applicationsubmission_admin_detail.html   |  2 +-
 opentech/apply/funds/views.py                 | 10 ++++++++++
 8 files changed, 68 insertions(+), 5 deletions(-)
 create mode 100644 opentech/apply/activity/migrations/0023_notify_partners.py
 create mode 100644 opentech/apply/activity/templates/messages/email/partners_update_applicant.html
 create mode 100644 opentech/apply/activity/templates/messages/email/partners_update_partner.html

diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index e5e77f64e..2401c66e2 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -556,6 +556,8 @@ class EmailAdapter(AdapterBase):
         MESSAGES.INVITED_TO_PROPOSAL: 'messages/email/invited_to_proposal.html',
         MESSAGES.BATCH_READY_FOR_REVIEW: 'messages/email/batch_ready_to_review.html',
         MESSAGES.READY_FOR_REVIEW: 'messages/email/ready_to_review.html',
+        MESSAGES.PARTNERS_UPDATED: 'partners_updated_applicant',
+        MESSAGES.PARTNERS_UPDATED_PARTNER: 'partners_updated_partner',
     }
 
     def get_subject(self, message_type, submission):
@@ -607,6 +609,11 @@ class EmailAdapter(AdapterBase):
             # Only notify the applicant if the new phase can be seen within the workflow
             if not submission.phase.permissions.can_view(submission.user):
                 return []
+
+        if message_type == MESSAGES.PARTNERS_UPDATED_PARTNER:
+            partners = kwargs['added']
+            return [partner.email for partner in partners]
+
         return [submission.user.email]
 
     def batch_recipients(self, message_type, submissions, **kwargs):
@@ -633,6 +640,18 @@ class EmailAdapter(AdapterBase):
             if submission.phase.permissions.can_review(reviewer) and not reviewer.is_apply_staff
         ]
 
+    def partners_updated_applicant(self, added, removed, **kwargs):
+        if added:
+            return self.render_message(
+                'messages/email/partners_update_applicant.html',
+                added=added,
+                **kwargs
+            )
+
+    def partners_updated_partner(self, added, removed, **kwargs):
+        for partner in added:
+            return self.render_message('messages/email/partners_update_partner.html', **kwargs)
+
     def render_message(self, template, **kwargs):
         return render_to_string(template, kwargs)
 
diff --git a/opentech/apply/activity/migrations/0023_notify_partners.py b/opentech/apply/activity/migrations/0023_notify_partners.py
new file mode 100644
index 000000000..097c6f648
--- /dev/null
+++ b/opentech/apply/activity/migrations/0023_notify_partners.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.0.13 on 2019-05-09 13:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('activity', '0022_add_versioning_to_comments'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='event',
+            name='type',
+            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review')], max_length=50),
+        ),
+    ]
diff --git a/opentech/apply/activity/options.py b/opentech/apply/activity/options.py
index f99b26089..c007308a2 100644
--- a/opentech/apply/activity/options.py
+++ b/opentech/apply/activity/options.py
@@ -15,6 +15,7 @@ class MESSAGES(Enum):
     REVIEWERS_UPDATED = 'Reviewers Updated'
     BATCH_REVIEWERS_UPDATED = 'Batch Reviewers Updated'
     PARTNERS_UPDATED = 'Partners Updated'
+    PARTNERS_UPDATED_PARTNER = 'Partners Updated Partner'
     READY_FOR_REVIEW = 'Ready For Review'
     BATCH_READY_FOR_REVIEW = 'Batch Ready For Review'
     NEW_REVIEW = 'New Review'
diff --git a/opentech/apply/activity/templates/messages/email/base.html b/opentech/apply/activity/templates/messages/email/base.html
index b745bcf22..2c634ca5a 100644
--- a/opentech/apply/activity/templates/messages/email/base.html
+++ b/opentech/apply/activity/templates/messages/email/base.html
@@ -1,13 +1,10 @@
 {% block salutation %}Dear {{ user }},{% endblock %}
-
 {% block content %}{% endblock %}
-
 {% block more_info %}{% endblock %}
-
 Kind Regards,
 The OTF Team
 
--- 
+--
 Open Technology Fund
 https://www.opentech.fund/
 {% block post_signature_content %}{% endblock %}
diff --git a/opentech/apply/activity/templates/messages/email/partners_update_applicant.html b/opentech/apply/activity/templates/messages/email/partners_update_applicant.html
new file mode 100644
index 000000000..aac53450a
--- /dev/null
+++ b/opentech/apply/activity/templates/messages/email/partners_update_applicant.html
@@ -0,0 +1,9 @@
+{% extends "messages/email/base.html" %}
+{% block content %}
+New partner(s) has been added to your submission.
+{% for partner in added %}
+* {{ partner }}
+{% endfor %}
+Title: {{ submission.title }}
+Link: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
+{% endblock %}
diff --git a/opentech/apply/activity/templates/messages/email/partners_update_partner.html b/opentech/apply/activity/templates/messages/email/partners_update_partner.html
new file mode 100644
index 000000000..c80e90cc8
--- /dev/null
+++ b/opentech/apply/activity/templates/messages/email/partners_update_partner.html
@@ -0,0 +1,9 @@
+{% extends "messages/email/base.html" %}
+{% block salutation %}Dear Partner,{% endblock %}
+
+{% block content %}
+You have been added as a partner the following submission.
+
+Title: {{ submission.title }}
+Link: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
+{% endblock %}
diff --git a/opentech/apply/funds/templates/funds/applicationsubmission_admin_detail.html b/opentech/apply/funds/templates/funds/applicationsubmission_admin_detail.html
index 71bcd9abd..f11f7ecc0 100644
--- a/opentech/apply/funds/templates/funds/applicationsubmission_admin_detail.html
+++ b/opentech/apply/funds/templates/funds/applicationsubmission_admin_detail.html
@@ -54,6 +54,6 @@
     <script src="{% static 'js/apply/toggle-reviewers.js' %}"></script>
     <script src="{% static 'js/apply/toggle-sidebar.js' %}"></script>
     <script src="{% static 'js/apply/submission-text-cleanup.js' %}"></script>
-    <script src="{% static 'js/apply/edit-comment.js' %}"></script>
     <script src="{% static 'js/apply/toggle-related.js' %}"></script>
+    <script src="{% static 'js/apply/edit-comment.js' %}"></script>
 {% endblock %}
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index 530823289..fb94816ca 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -427,6 +427,16 @@ class UpdatePartnersView(DelegatedViewMixin, UpdateView):
             added=added,
             removed=removed,
         )
+
+        messenger(
+            MESSAGES.PARTNERS_UPDATED_PARTNER,
+            request=self.request,
+            user=self.request.user,
+            submission=self.kwargs['submission'],
+            added=added,
+            removed=removed,
+        )
+
         return response
 
 
-- 
GitLab