From 213b704796cd5dc48766f7e21caba7957a137453 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Sun, 21 May 2017 08:28:28 +0200
Subject: [PATCH] Add permissions and EdCol assignments

---
 submissions/forms.py | 23 ++++++++++++++++++++++-
 submissions/views.py | 12 ++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/submissions/forms.py b/submissions/forms.py
index b0ccceb4a..266b66824 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -1,11 +1,14 @@
 from django import forms
+from django.contrib.auth.models import Group
 from django.core.validators import RegexValidator
 from django.db import models, transaction
 
+from guardian.shortcuts import assign_perm
+
 from .constants import ASSIGNMENT_BOOL, ASSIGNMENT_REFUSAL_REASONS, STATUS_RESUBMITTED,\
                        REPORT_ACTION_CHOICES, REPORT_REFUSAL_CHOICES, STATUS_REVISION_REQUESTED,\
                        STATUS_REJECTED, STATUS_REJECTED_VISIBLE, STATUS_RESUBMISSION_INCOMING
-from .models import Submission, RefereeInvitation, Report, EICRecommendation
+from .models import Submission, RefereeInvitation, Report, EICRecommendation, EditorialAssignment
 
 from scipost.constants import SCIPOST_SUBJECT_AREAS
 from scipost.services import ArxivCaller
@@ -260,6 +263,23 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm):
         submission.save()
         return submission
 
+    @transaction.atomic
+    def reassign_eic_and_admins(self, submission):
+        # Assign permissions
+        assign_perm('can_take_editorial_actions', submission.editor_in_charge.user, submission)
+        ed_admins = Group.objects.get(name='Editorial Administrators')
+        assign_perm('can_take_editorial_actions', ed_admins, submission)
+
+        # Assign editor
+        assignment = EditorialAssignment(
+            submission=submission,
+            to=submission.editor_in_charge,
+            accepted=True
+        )
+        assignment.save()
+        submission.save()
+        return submission
+
     @transaction.atomic
     def save(self):
         """
@@ -284,6 +304,7 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm):
         submission.save()
         if self.submission_is_resubmission():
             submission = self.copy_and_save_data_from_resubmission(submission)
+            submission = self.reassign_eic_and_admins(submission)
         submission.authors.add(self.requested_by.contributor)
         return submission
 
diff --git a/submissions/views.py b/submissions/views.py
index 15451982b..ba4a51f9e 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -59,10 +59,22 @@ class RequestSubmission(CreateView):
         kwargs['requested_by'] = self.request.user
         return kwargs
 
+    @transaction.atomic
     def form_valid(self, form):
+        submission = form.save()
         text = ('<h3>Thank you for your Submission to SciPost</h3>'
                 'Your Submission will soon be handled by an Editor.')
         messages.success(self.request, text)
+
+        if form.submission_is_resubmission():
+            # Send emails
+            SubmissionUtils.load({'submission': submission}, self.request)
+            SubmissionUtils.send_authors_resubmission_ack_email()
+            SubmissionUtils.send_EIC_reappointment_email()
+        else:
+            # Send emails
+            SubmissionUtils.load({'submission': submission})
+            SubmissionUtils.send_authors_submission_ack_email()
         return super().form_valid(form)
 
 
-- 
GitLab