From ab2c34894171220bdb941bd62494bcfa6caebfc4 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Tue, 6 Feb 2018 11:03:50 +0100
Subject: [PATCH] Fix volunteer-as-EIC didn't check for earlier invitation

---
 submissions/models.py |  3 ++-
 submissions/utils.py  | 23 +++--------------------
 submissions/views.py  | 24 +++++++++++++++---------
 3 files changed, 20 insertions(+), 30 deletions(-)

diff --git a/submissions/models.py b/submissions/models.py
index 8b2f21ef3..99b5b94ce 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -128,8 +128,9 @@ class Submission(models.Model):
             version=self.arxiv_vn_nr)
         self.arxiv_identifier_w_vn_nr = arxiv_w_vn
 
-        super().save(*args, **kwargs)
+        obj = super().save(*args, **kwargs)
         self._update_cycle()
+        return obj
 
     def __str__(self):
         header = (self.arxiv_identifier_w_vn_nr + ', '
diff --git a/submissions/utils.py b/submissions/utils.py
index aacecf3fe..018678df4 100644
--- a/submissions/utils.py
+++ b/submissions/utils.py
@@ -262,12 +262,9 @@ class SubmissionUtils(BaseMailUtil):
         # Import here due to circular import error
         from .models import EditorialAssignment
 
-        assignments_to_deprecate = (EditorialAssignment.objects
-                                    .filter(submission=cls.assignment.submission, accepted=None)
-                                    .exclude(to=cls.assignment.to))
-        for atd in assignments_to_deprecate:
-            atd.deprecated = True
-            atd.save()
+        EditorialAssignment.objects.filter(submission=cls.assignment.submission, accepted=None)\
+            .exclude(to=cls.assignment.to)\
+            .update(deprecated=True)
 
     @classmethod
     def deprecate_all_assignments(cls):
@@ -1368,17 +1365,3 @@ class SubmissionUtils(BaseMailUtil):
             reply_to=['admin@scipost.org'])
         emailmessage.attach_alternative(html_version, 'text/html')
         emailmessage.send(fail_silently=False)
-
-
-    @classmethod
-    def email_Fellow_tasklist(cls):
-        """
-        Email list of current and upcoming tasks to an individual Fellow.
-
-        Requires context to contain:
-        - `fellow`
-        """
-        cls._send_mail(cls, 'email_fellow_tasklist',
-#                       [cls._context['fellow'].email_address],
-                       ['jscaux@scipost.org'], # temporary, for testing
-                       'Current and upcoming tasks')
diff --git a/submissions/views.py b/submissions/views.py
index 2ecd5d295..1e1cc60d5 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -481,7 +481,7 @@ def assignment_request(request, assignment_id):
         if form.cleaned_data['accept'] == 'True':
             assignment.accepted = True
             assignment.to = request.user.contributor
-            assignment.submission.status = 'EICassigned'
+            assignment.submission.status = STATUS_EIC_ASSIGNED
             assignment.submission.editor_in_charge = request.user.contributor
             assignment.submission.open_for_reporting = True
             deadline = timezone.now() + datetime.timedelta(days=28)  # for papers
@@ -546,22 +546,28 @@ def volunteer_as_EIC(request, arxiv_identifier_w_vn_nr):
         messages.warning(request, errormessage)
         return redirect(reverse('submissions:pool'))
     contributor = Contributor.objects.get(user=request.user)
-    assignment = EditorialAssignment(submission=submission,
-                                     to=contributor,
-                                     accepted=True,
-                                     date_created=timezone.now(),
-                                     date_answered=timezone.now())
+
+    # The Contributor may already have an EditorialAssignment due to an earlier invitation.
+    assignment, __ = EditorialAssignment.objects.get_or_create(
+        submission=submission,
+        to=contributor)
+    assignment.accepted = True
+    assignment.date_answered = timezone.now()
+    assignment.save()
+
+    # Set deadlines
     deadline = timezone.now() + datetime.timedelta(days=28)  # for papers
     if submission.submitted_to_journal == 'SciPostPhysLectNotes':
         deadline += datetime.timedelta(days=28)
-    submission.status = 'EICassigned'
+
+    # Update Submission data
+    submission.status = STATUS_EIC_ASSIGNED
     submission.editor_in_charge = contributor
     submission.open_for_reporting = True
     submission.reporting_deadline = deadline
     submission.open_for_commenting = True
-    submission.latest_activity = timezone.now()
-    assignment.save()
     submission.save()
+    submission.touch()
 
     SubmissionUtils.load({'assignment': assignment})
     SubmissionUtils.deprecate_other_assignments()
-- 
GitLab