From 9a2369ccbb20b368f09db3477fa80a8378c64df3 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Thu, 12 Oct 2017 09:49:27 +0200
Subject: [PATCH] Add missing requirement

---
 mails/forms.py                                | 18 +++++++-----
 .../partners_followup_mail.json               |  1 +
 .../mail_templates/partners_initial_mail.json |  1 +
 partners/constants.py                         |  2 ++
 .../migrations/0038_auto_20171012_0948.py     | 20 +++++++++++++
 partners/views.py                             | 29 +++++++++++++------
 6 files changed, 55 insertions(+), 16 deletions(-)
 create mode 100644 partners/migrations/0038_auto_20171012_0948.py

diff --git a/mails/forms.py b/mails/forms.py
index c277051d2..4dfc63413 100644
--- a/mails/forms.py
+++ b/mails/forms.py
@@ -1,3 +1,4 @@
+import re
 import json
 import inspect
 from html2text import HTML2Text
@@ -62,14 +63,17 @@ class EmailTemplateForm(forms.Form):
         # Get recipients list. Try to send through BCC to prevent privacy issues!
         bcc_list = []
         if self.mail_data.get('bcc_to') and self.object:
-            bcc_to = self.object
-            for attr in self.mail_data.get('bcc_to').split('.'):
-                bcc_to = getattr(bcc_to, attr)
-
-            if not isinstance(bcc_to, list):
-                bcc_list = [bcc_to]
+            if re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to')):
+                bcc_list = [self.mail_data.get('bcc_to')]
             else:
-                bcc_list = bcc_to
+                bcc_to = self.object
+                for attr in self.mail_data.get('bcc_to').split('.'):
+                    bcc_to = getattr(bcc_to, attr)
+
+                if not isinstance(bcc_to, list):
+                    bcc_list = [bcc_to]
+                else:
+                    bcc_list = bcc_to
 
         if self.cleaned_data.get('extra_recipient') and self.recipient:
             bcc_list.append(self.cleaned_data.get('extra_recipient'))
diff --git a/mails/templates/mail_templates/partners_followup_mail.json b/mails/templates/mail_templates/partners_followup_mail.json
index efb95bbc8..e2a4c1570 100644
--- a/mails/templates/mail_templates/partners_followup_mail.json
+++ b/mails/templates/mail_templates/partners_followup_mail.json
@@ -1,6 +1,7 @@
 {
     "subject": "SciPost: Supporting Partners Board",
     "to_address": "email",
+    "bcc_to": "partners@scipost.org",
     "from_address_name": "SciPost Supporting Partners",
     "from_address": "partners@scipost.org",
     "context_object": "contact"
diff --git a/mails/templates/mail_templates/partners_initial_mail.json b/mails/templates/mail_templates/partners_initial_mail.json
index efb95bbc8..e2a4c1570 100644
--- a/mails/templates/mail_templates/partners_initial_mail.json
+++ b/mails/templates/mail_templates/partners_initial_mail.json
@@ -1,6 +1,7 @@
 {
     "subject": "SciPost: Supporting Partners Board",
     "to_address": "email",
+    "bcc_to": "partners@scipost.org",
     "from_address_name": "SciPost Supporting Partners",
     "from_address": "partners@scipost.org",
     "context_object": "contact"
diff --git a/partners/constants.py b/partners/constants.py
index a00f453a7..6aeb94d3c 100644
--- a/partners/constants.py
+++ b/partners/constants.py
@@ -20,6 +20,7 @@ PARTNER_KINDS = (
 PROSPECTIVE_PARTNER_REQUESTED = 'requested'
 PROSPECTIVE_PARTNER_ADDED = 'added'
 PROSPECTIVE_PARTNER_APPROACHED = 'approached'
+PROSPECTIVE_PARTNER_FOLLOWED_UP = 'followuped'
 PROSPECTIVE_PARTNER_NEGOTIATING = 'negotiating'
 PROSPECTIVE_PARTNER_UNINTERESTED = 'uninterested'
 PROSPECTIVE_PARTNER_PROCESSED = 'processed'
@@ -27,6 +28,7 @@ PROSPECTIVE_PARTNER_STATUS = (
     (PROSPECTIVE_PARTNER_REQUESTED, 'Requested (from online form)'),
     (PROSPECTIVE_PARTNER_ADDED, 'Added internally'),
     (PROSPECTIVE_PARTNER_APPROACHED, 'Approached'),
+    (PROSPECTIVE_PARTNER_FOLLOWED_UP, 'Followed-up'),
     (PROSPECTIVE_PARTNER_NEGOTIATING, 'Negotiating'),
     (PROSPECTIVE_PARTNER_UNINTERESTED, 'Uninterested'),
     (PROSPECTIVE_PARTNER_PROCESSED, 'Processed into Partner'),
diff --git a/partners/migrations/0038_auto_20171012_0948.py b/partners/migrations/0038_auto_20171012_0948.py
new file mode 100644
index 000000000..ca52c993e
--- /dev/null
+++ b/partners/migrations/0038_auto_20171012_0948.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2017-10-12 07:48
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('partners', '0037_merge_20171009_2000'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='prospectivepartner',
+            name='status',
+            field=models.CharField(choices=[('requested', 'Requested (from online form)'), ('added', 'Added internally'), ('approached', 'Approached'), ('followuped', 'Followed-up'), ('negotiating', 'Negotiating'), ('uninterested', 'Uninterested'), ('processed', 'Processed into Partner')], default='added', max_length=32),
+        ),
+    ]
diff --git a/partners/views.py b/partners/views.py
index 0acab83ef..97b865b06 100644
--- a/partners/views.py
+++ b/partners/views.py
@@ -4,7 +4,7 @@ from django.contrib import messages
 from django.contrib.auth.decorators import login_required
 from django.db import transaction
 from django.forms import modelformset_factory
-from django.http import FileResponse, HttpResponse
+from django.http import HttpResponse
 from django.shortcuts import get_object_or_404, render, reverse, redirect
 from django.utils import timezone
 
@@ -14,7 +14,8 @@ from mails.views import MailEditingSubView
 
 from .constants import PROSPECTIVE_PARTNER_REQUESTED,\
     PROSPECTIVE_PARTNER_APPROACHED, PROSPECTIVE_PARTNER_ADDED,\
-    PROSPECTIVE_PARTNER_EVENT_REQUESTED, PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT
+    PROSPECTIVE_PARTNER_EVENT_REQUESTED, PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT,\
+    PROSPECTIVE_PARTNER_FOLLOWED_UP
 from .models import Partner, ProspectivePartner, ProspectiveContact, ContactRequest,\
                     ProspectivePartnerEvent, MembershipAgreement, Contact, Institution,\
                     PartnersAttachment
@@ -25,7 +26,6 @@ from .forms import ProspectivePartnerForm, ProspectiveContactForm,\
                    NewContactForm, InstitutionForm, ActivationForm, PartnerEventForm,\
                    MembershipAgreementForm, RequestContactForm, RequestContactFormSet,\
                    ProcessRequestContactForm, PartnersAttachmentFormSet, PartnersAttachmentForm
-from .utils import PartnerUtils
 
 
 def supporting_partners(request):
@@ -265,13 +265,17 @@ def add_prospartner_contact(request, prospartner_id):
 def email_prospartner_contact(request, contact_id, mail=None):
     contact = get_object_or_404(ProspectiveContact, pk=contact_id)
 
+    suffix = ''
     if mail == 'followup':
         code = 'partners_followup_mail'
+        suffix = ' (followup)'
+        new_status = PROSPECTIVE_PARTNER_FOLLOWED_UP
     else:
         code = 'partners_initial_mail'
+        new_status = PROSPECTIVE_PARTNER_APPROACHED
     mail_request = MailEditingSubView(request, mail_code=code, contact=contact)
     if mail_request.is_valid():
-        comments = 'Email sent to %s.' % str(contact)
+        comments = 'Email{suffix} sent to {name}.'.format(suffix=suffix, name=contact)
         prospartnerevent = ProspectivePartnerEvent(
             prospartner=contact.prospartner,
             event=PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT,
@@ -280,8 +284,9 @@ def email_prospartner_contact(request, contact_id, mail=None):
             noted_by=request.user.contributor)
         prospartnerevent.save()
         if contact.prospartner.status in [PROSPECTIVE_PARTNER_REQUESTED,
-                                          PROSPECTIVE_PARTNER_ADDED]:
-            contact.prospartner.status = PROSPECTIVE_PARTNER_APPROACHED
+                                          PROSPECTIVE_PARTNER_ADDED,
+                                          PROSPECTIVE_PARTNER_APPROACHED]:
+            contact.prospartner.status = new_status
             contact.prospartner.save()
 
         messages.success(request, 'Email successfully sent.')
@@ -296,13 +301,18 @@ def email_prospartner_contact(request, contact_id, mail=None):
 def email_prospartner_generic(request, prospartner_id, mail=None):
     prospartner = get_object_or_404(ProspectivePartner, pk=prospartner_id)
 
+    suffix = ''
     if mail == 'followup':
         code = 'partners_followup_mail'
+        suffix = ' (followup)'
+        new_status = PROSPECTIVE_PARTNER_FOLLOWED_UP
     else:
         code = 'partners_initial_mail'
+        new_status = PROSPECTIVE_PARTNER_APPROACHED
     mail_request = MailEditingSubView(request, mail_code=code)
     if mail_request.is_valid():
-        comments = 'Email sent to %s.' % str(mail_request.recipients_string)
+        comments = 'Email{suffix} sent to {name}.'.format(suffix=suffix,
+                                                          name=mail_request.recipients_string)
         prospartnerevent = ProspectivePartnerEvent(
             prospartner=prospartner,
             event=PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT,
@@ -311,8 +321,9 @@ def email_prospartner_generic(request, prospartner_id, mail=None):
             noted_by=request.user.contributor)
         prospartnerevent.save()
         if prospartner.status in [PROSPECTIVE_PARTNER_REQUESTED,
-                                  PROSPECTIVE_PARTNER_ADDED]:
-            prospartner.status = PROSPECTIVE_PARTNER_APPROACHED
+                                  PROSPECTIVE_PARTNER_ADDED,
+                                  PROSPECTIVE_PARTNER_APPROACHED]:
+            prospartner.status = new_status
             prospartner.save()
 
         messages.success(request, 'Email successfully sent.')
-- 
GitLab