diff --git a/opentech/apply/funds/forms.py b/opentech/apply/funds/forms.py index 9af42b55d74016b555986744bf7a3b9663d09509..64e10f61b5a64205656077b296b3cd2a10058315 100644 --- a/opentech/apply/funds/forms.py +++ b/opentech/apply/funds/forms.py @@ -84,7 +84,8 @@ class UpdateReviewersForm(forms.ModelForm): field_name = 'reviewer_' + str(role.pk) self.fields[field_name] = forms.ModelChoiceField( queryset=staff_reviewers, - widget=Select2IconWidget(attrs={'data-placeholder': 'Select a reviewer', 'icon': role.icon}), + widget=Select2IconWidget(attrs={ + 'data-placeholder': 'Select a reviewer', 'role': role}), required=False, label=f'{role.name} Reviewer', ) diff --git a/opentech/apply/funds/templates/funds/includes/delegated_form_base.html b/opentech/apply/funds/templates/funds/includes/delegated_form_base.html index 905e28b5906b7a93373c2644e353ca36c68bc7d8..a5e618774eae30212d3764c0f586e4f3a7f27db2 100644 --- a/opentech/apply/funds/templates/funds/includes/delegated_form_base.html +++ b/opentech/apply/funds/templates/funds/includes/delegated_form_base.html @@ -8,8 +8,8 @@ {{ field.errors }} {# TODO: Add styles around icon later #} - {% if field.field.widget.attrs.icon %} - {% image field.field.widget.attrs.icon max-20x20 %} + {% if field.field.widget.attrs.role and field.field.widget.attrs.role.icon %} + {% image field.field.widget.attrs.role.icon max-20x20 %} {% endif %} diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py index 727483682a35bf66e8fbdb405aa4c8b05e4cc745..b5c00f2475b9960ff26f927d6cac49aea52d4217 100644 --- a/opentech/apply/funds/views.py +++ b/opentech/apply/funds/views.py @@ -42,7 +42,6 @@ from .models import ( ApplicationSubmission, AssignedReviewers, ApplicationRevision, - ReviewerRole, RoundsAndLabs, RoundBase, LabBase @@ -289,18 +288,12 @@ class UpdateReviewersView(DelegatedViewMixin, UpdateView): # Save role reviewers ONLY, we saved others in UpdateReviewersForm.save() form.cleaned_data.pop('reviewer_reviewers') for key, user in form.cleaned_data.items(): - role_pk = key[key.rindex("_") + 1:] - role = ReviewerRole.objects.get(pk=role_pk) - # Create the reviewer/role association to submission if it doesn't exist - submission_reviewer, created = AssignedReviewers.objects.get_or_create( - submission=form.instance, reviewer=user, role=role) + role = form.fields[key].widget.attrs['role'] + # Create the reviewer/role association to submission if it doesn't exist, or update it + obj, created = AssignedReviewers.objects.update_or_create( + submission=form.instance, role=role, defaults={'reviewer': user}) if created: users_with_roles.append({ 'user': user, 'role': role}) - # Delete any reviewer/role associations that existed previously - AssignedReviewers.objects.filter( - Q(submission=form.instance), - ~Q(reviewer=user), - Q(role=role)).delete() new_reviewers_external = set(AssignedReviewers.objects.filter(submission=form.instance, role__isnull=True)) added_external = new_reviewers_external - old_reviewers_external diff --git a/opentech/apply/funds/widgets.py b/opentech/apply/funds/widgets.py index 95b81f6d83a40e5ad21d9d3ad91f5c55e82a1b58..ecb2e9edeef1cfdfa644acd3cf78104c986f43f7 100644 --- a/opentech/apply/funds/widgets.py +++ b/opentech/apply/funds/widgets.py @@ -25,6 +25,6 @@ class Select2MultiCheckboxesWidget(Select2MultipleWidget): class Select2IconWidget(Select2Widget): def __init__(self, *args, **kwargs): attrs = kwargs.get('attrs', {}) - attrs.setdefault('icon', '') + attrs.setdefault('role', '') kwargs['attrs'] = attrs super().__init__(*args, **kwargs)