Skip to content

Commit 4e019ac

Browse files
committed
Updated respond invite functionality, fixed submission detail page permission for coapplicant
1 parent 40d6bde commit 4e019ac

6 files changed

Lines changed: 42 additions & 8 deletions

File tree

hypha/apply/funds/models/co_applicants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@ class Meta:
6666
unique_together = ("submission", "user")
6767

6868
def __str__(self):
69-
return self.user
69+
return self.user.get_display_name()

hypha/apply/funds/permissions.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,12 @@ def is_user_has_access_to_view_submission(user, submission):
188188
if submission.is_archive and not can_view_archived_submissions(user):
189189
return False, "Archived Submission"
190190

191-
if user.is_apply_staff or submission.user == user or user.is_reviewer:
191+
if (
192+
user.is_apply_staff
193+
or submission.user == user
194+
or user.is_reviewer
195+
or submission.co_applicants.filter(user=user).exists()
196+
):
192197
return True, ""
193198

194199
if user.is_partner and submission.partners.filter(pk=user.pk).exists():

hypha/apply/funds/templates/funds/coapplicant_invite_landing_page.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
<a
2020
class="button button--submit button--primary"
2121
type="button"
22-
href="{% url 'apply:submissions:invite_co_applicant' pk=submission.id %}"
2322
hx-post="."
2423
hx-vals='{"action": "accept"}'
2524
hx-trigger="click"

hypha/apply/funds/templates/funds/includes/generic_primary_actions.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ <h5>{% trans "Manage Co-applicants" %}</h5>
4343
class="button button--primary button--full-width button--bottom-space"
4444
hx-get="{% url 'apply:submissions:invite_co_applicant' pk=object.id %}"
4545
hx-target="#htmx-modal"
46-
{% if object.co_applicant_invites.count >= 10 %}disabled{% endif %}
46+
{% if object.co_applicant_invites.count >= 100 %}disabled{% endif %}
4747
role="button"
4848
aria-label="{% trans "Invite CoApplicant" %}"
4949
>{% trans "Invite Co-applicant" %}</button>

hypha/apply/funds/views/co_applicants.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import datetime
22
import json
33

4+
from django.conf import settings
45
from django.contrib import messages
6+
from django.contrib.auth import login
57
from django.contrib.auth.decorators import login_required
8+
from django.contrib.auth.models import Group
69
from django.http import Http404, HttpResponse, HttpResponseRedirect
710
from django.shortcuts import get_object_or_404, render
811
from django.urls import reverse_lazy
@@ -12,10 +15,12 @@
1215
from django_htmx.http import HttpResponseClientRedirect
1316

1417
from hypha.apply.activity.messaging import MESSAGES, messenger
18+
from hypha.apply.users.models import User
19+
from hypha.apply.users.roles import APPLICANT_GROUP_NAME
1520

1621
from ..forms import InviteCoApplicantForm
17-
from ..models import ApplicationSubmission, CoApplicantInvite
18-
from ..models.co_applicants import CoApplicantInviteStatus
22+
from ..models import ApplicationSubmission, CoApplicant, CoApplicantInvite
23+
from ..models.co_applicants import READ_ONLY, CoApplicantInviteStatus
1924
from ..permissions import has_permission
2025
from ..utils import verify_signed_token
2126

@@ -107,6 +112,9 @@ def dispatch(self, request, *args, **kwargs):
107112
raise Http404("Invalid: Invite not found")
108113

109114
def get(self, *args, **kwargs):
115+
user = User.objects.filter(email=self.invite.invited_user_email).first()
116+
if user and (user.is_apply_staff or user.is_apply_staff_admin):
117+
return HttpResponseRedirect(reverse_lazy("dashboard:dashboard"))
110118
return render(
111119
self.request,
112120
"funds/coapplicant_invite_landing_page.html",
@@ -122,6 +130,25 @@ def post(self, args, **kwargs):
122130
self.invite.save(update_fields=["status", "responded_on"])
123131

124132
# handle auto login/signup
133+
user, created = User.objects.get_or_create(
134+
email=self.invite.invited_user_email, is_active=True
135+
)
136+
if created:
137+
applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
138+
user.groups.add(applicant_group)
139+
user.set_unusable_password()
140+
user.save()
141+
142+
# create Co-applicant and add to submission
143+
co_applicant, created = CoApplicant.objects.get_or_create(
144+
invite=self.invite,
145+
submission=self.invite.submission,
146+
user=user,
147+
role=[READ_ONLY],
148+
)
149+
150+
user.backend = settings.CUSTOM_AUTH_BACKEND
151+
login(self.request, user)
125152

126153
return HttpResponseClientRedirect(
127154
reverse_lazy(

hypha/apply/funds/views/submission_detail.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,11 @@ def dispatch(self, request, *args, **kwargs):
193193
permission, _ = has_permission(
194194
"submission_view", request.user, object=submission, raise_exception=True
195195
)
196-
# This view is only for applicants.
197-
if submission.user != request.user:
196+
# This view is only for applicants and co-applicants.
197+
if (
198+
submission.user != request.user
199+
and not submission.co_applicants.filter(user=request.user).exists()
200+
):
198201
raise PermissionDenied
199202
return super().dispatch(request, *args, **kwargs)
200203

0 commit comments

Comments
 (0)