From 26fe8dc851622252ac5797d0d4d2c61d6c5d2e29 Mon Sep 17 00:00:00 2001 From: George Katsikas <giorgakis.katsikas@gmail.com> Date: Mon, 5 Aug 2024 14:34:27 +0200 Subject: [PATCH] allow alternative recommendations based on journal fixes #123 --- scipost_django/submissions/forms/__init__.py | 25 ++++++++++++-------- scipost_django/submissions/views/__init__.py | 4 ++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/scipost_django/submissions/forms/__init__.py b/scipost_django/submissions/forms/__init__.py index e94841fd9..ddce84b2a 100644 --- a/scipost_django/submissions/forms/__init__.py +++ b/scipost_django/submissions/forms/__init__.py @@ -3156,17 +3156,14 @@ class EICRecommendationForm(forms.ModelForm): latest_recommendation.recommendation ) - for_journal_qs = Journal.objects.active().filter( - # The journals which can be recommended for are those falling under - # the responsibility of the College of the journal submitted to - college=self.submission.submitted_to.college - ) - if self.submission.submitted_to.name.partition(" ")[0] == "SciPost": - # Submitted to a SciPost journal, so Selections is accessible - for_journal_qs = for_journal_qs | Journal.objects.filter( - name="SciPost Selections" + alternative_journal_ids = ( + self.submission.submitted_to.alternative_journals.active().values_list( + "id", flat=True ) - self.fields["for_journal"].empty_label = "Any/All Journals" + ) + for_journal_qs = Journal.objects.filter( + id__in=list(alternative_journal_ids) + [self.submission.submitted_to.id] + ) self.fields["for_journal"].queryset = for_journal_qs if self.submission.submitted_to.name.partition(" ")[0] == "SciPost": # Submitted to a SciPost journal, so Core and Selections are accessible @@ -3401,6 +3398,14 @@ class RecommendationVoteForm(forms.Form): required=False, ) + def __init__(self, *args, **kwargs): + self.recommendation: "EICRecommendation" = kwargs.pop("recommendation") + super().__init__(*args, **kwargs) + + self.fields["alternative_for_journal"].queryset = ( + self.recommendation.submission.submitted_to.alternative_journals.all() + ) + def clean(self): cleaned_data = super().clean() if cleaned_data["vote"] == "disagree" and ( diff --git a/scipost_django/submissions/views/__init__.py b/scipost_django/submissions/views/__init__.py index 192fbe284..ccb80f184 100644 --- a/scipost_django/submissions/views/__init__.py +++ b/scipost_django/submissions/views/__init__.py @@ -2948,9 +2948,9 @@ def _hx_recommendation_vote_form(request, rec_id): initial = {"vote": previous_vote} if request.POST: - form = RecommendationVoteForm(request.POST) + form = RecommendationVoteForm(request.POST, recommendation=recommendation) else: - form = RecommendationVoteForm(initial=initial) + form = RecommendationVoteForm(initial=initial, recommendation=recommendation) if form.is_valid(): # Delete previous tierings and alternative recs, irrespective of the vote SubmissionTiering.objects.filter( -- GitLab