diff --git a/scipost_django/submissions/forms.py b/scipost_django/submissions/forms.py index bbdb2d25daf09a56150e73ad61d590f844455e1f..59f187868ef596bcdf63fc9b8a35271e45e7c121 100644 --- a/scipost_django/submissions/forms.py +++ b/scipost_django/submissions/forms.py @@ -138,7 +138,7 @@ class SubmissionSearchForm(forms.Form): ) if self.reports_needed: submissions = submissions.actively_refereeing( - ).open_for_reporting().order_by('submission_date') + ).open_for_reporting().reports_needed().order_by('submission_date') return submissions diff --git a/scipost_django/submissions/managers/submission.py b/scipost_django/submissions/managers/submission.py index 009dd716dee0f87791954ef462d8dccb248d67bd..7a9bfeb926f1323fe26dcf3921fb171630c9e55d 100644 --- a/scipost_django/submissions/managers/submission.py +++ b/scipost_django/submissions/managers/submission.py @@ -204,9 +204,20 @@ class SubmissionQuerySet(models.QuerySet): return self._newest_version_only(self.filter(status=constants.STATUS_WITHDRAWN)) def open_for_reporting(self): - """Return Submission that allow for reporting.""" + """Return Submissions open for reporting.""" return self.filter(open_for_reporting=True) + def reports_needed(self): + """ + Return Submissions for which the nr of Reports is less than required by target Journal. + """ + qs = self.prefetch_related( + 'reports', 'submitted_to' + ).annotate(nr_reports=models.Count('reports')) + ids_list = [s.id for s in qs.all() if ( + s.nr_reports < s.submitted_to.minimal_nr_of_reports)] + return self.filter(id__in=ids_list) + def open_for_commenting(self): """Return Submission that allow for commenting.""" return self.filter(open_for_commenting=True)