Skip to content
Snippets Groups Projects
Commit 0367a063 authored by sandeepsajan0's avatar sandeepsajan0
Browse files

Add external reviewers option for batch action

parent b03b3a6f
No related branches found
No related tags found
No related merge requests found
...@@ -315,9 +315,18 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm): ...@@ -315,9 +315,18 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
class BatchUpdateReviewersForm(forms.Form): class BatchUpdateReviewersForm(forms.Form):
submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'})) submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
reviewer_reviewers = forms.ModelMultipleChoiceField(
queryset=User.objects.reviewers().only('pk', 'full_name'),
widget=Select2MultiCheckboxesWidget(attrs={'data-placeholder': 'Reviewers'}),
label=_('External Reviewers'),
required=False,
)
def __init__(self, *args, user=None, round=None, **kwargs): def __init__(self, *args, user=None, round=None, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.user = user
self.fields = OrderedDict(self.fields)
self.role_fields = {} self.role_fields = {}
field_data = make_role_reviewer_fields() field_data = make_role_reviewer_fields()
...@@ -327,6 +336,8 @@ class BatchUpdateReviewersForm(forms.Form): ...@@ -327,6 +336,8 @@ class BatchUpdateReviewersForm(forms.Form):
self.fields[field_name] = data['field'] self.fields[field_name] = data['field']
self.role_fields[field_name] = data['role'] self.role_fields[field_name] = data['role']
self.fields.move_to_end('reviewer_reviewers')
def clean_submissions(self): def clean_submissions(self):
value = self.cleaned_data['submissions'] value = self.cleaned_data['submissions']
submission_ids = [int(submission) for submission in value.split(',')] submission_ids = [int(submission) for submission in value.split(',')]
...@@ -334,6 +345,14 @@ class BatchUpdateReviewersForm(forms.Form): ...@@ -334,6 +345,14 @@ class BatchUpdateReviewersForm(forms.Form):
def clean(self): def clean(self):
cleaned_data = super().clean() cleaned_data = super().clean()
external_reviewers = self.cleaned_data['reviewer_reviewers']
submissions = self.cleaned_data['submissions']
if external_reviewers:
if self.user_cant_alter_submissions_external_reviewers(submissions, self.user):
self.add_error('reviewer_reviewers', _("Only Lead can change the External Reviewers"))
elif self.submissions_cant_have_external_reviewers(submissions):
self.add_error('reviewer_reviewers', _('External Reviewers cannot be selected because of the application workflow'))
role_reviewers = [ role_reviewers = [
user user
for field, user in self.cleaned_data.items() for field, user in self.cleaned_data.items()
...@@ -346,8 +365,21 @@ class BatchUpdateReviewersForm(forms.Form): ...@@ -346,8 +365,21 @@ class BatchUpdateReviewersForm(forms.Form):
return cleaned_data return cleaned_data
def submissions_cant_have_external_reviewers(self, submissions):
for submission in submissions:
if not submission.stage.has_external_review:
return True
return False
def user_cant_alter_submissions_external_reviewers(self, submissions, user):
for submission in submissions:
if user!=submission.lead and not user.is_superuser:
return True
return False
def save(self): def save(self):
submissions = self.cleaned_data['submissions'] submissions = self.cleaned_data['submissions']
external_reviewers = self.cleaned_data['reviewer_reviewers']
assigned_roles = { assigned_roles = {
role: self.cleaned_data[field] role: self.cleaned_data[field]
for field, role in self.role_fields.items() for field, role in self.role_fields.items()
...@@ -356,6 +388,12 @@ class BatchUpdateReviewersForm(forms.Form): ...@@ -356,6 +388,12 @@ class BatchUpdateReviewersForm(forms.Form):
if reviewer: if reviewer:
AssignedReviewers.objects.update_role(role, reviewer, *submissions) AssignedReviewers.objects.update_role(role, reviewer, *submissions)
for submission in submissions:
AssignedReviewers.objects.bulk_create_reviewers(
[reviewer for reviewer in external_reviewers],
submission,
)
return None return None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment