Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.contrib.auth.decorators import login_required, user_passes_test
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse
from colleges.permissions import is_edadmin
from profiles.models import Profile
from profiles.forms import ProfileDynSelForm
from submissions.models import Submission, SubmissionAuthorProfile
###########################
# Author Profile matching #
###########################
@login_required
@user_passes_test(is_edadmin)
def _hx_author_profiles_details_summary(request, identifier_w_vn_nr):
submission = get_object_or_404(
Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
)
matches = submission.author_profiles.exclude(profile__isnull=True).count()
context = {
"submission": submission,
"matches": matches,
}
return render(
request,
"edadmin/preassignment/_hx_author_profiles_details_summary.html",
context,
)
@login_required
@user_passes_test(is_edadmin)
def _hx_author_profiles_details_contents(request, identifier_w_vn_nr):
submission = get_object_or_404(
Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
)
matches_list = [ (
author_string,
index + 1,
submission.author_profiles.filter(
order=index + 1,
profile__isnull=False,
).first(),
) for index, author_string in enumerate(submission.authors_as_list) ]
context = {
"submission": submission,
"matches_list": matches_list,
}
return render(
request,
"edadmin/preassignment/_hx_author_profiles_details_contents.html",
context,
)
@login_required
@user_passes_test(is_edadmin)
def _hx_author_profile_row(request, identifier_w_vn_nr, order: int):
submission = get_object_or_404(
Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
)
author_string = submission.authors_as_list[order-1]
profile = submission.author_profiles.filter(
order=order,
profile__isnull=False,
).first()
context = {
"submission": submission,
"author_string": author_string,
"order": order,
"profile": profile,
}
if profile is None:
profile_dynsel_form = ProfileDynSelForm(
initial={
"q": author_string.rpartition(". ")[2],
"action_url_name": "edadmin:preassignment:_hx_author_profile_action",
"action_url_base_kwargs": {
"identifier_w_vn_nr": identifier_w_vn_nr,
"order": order,
"action": "match",
},
"action_target_element_id":
f"submission-{submission.pk}-author-profile-row-{order}",
"action_target_swap": "outerHTML",
}
)
context["profile_dynsel_form"] = profile_dynsel_form
response = render(
request,
"edadmin/preassignment/_hx_author_profile_row.html",
context,
)
response["HX-Trigger-After-Settle"] = f"submission-{submission.pk}-author-profiles-details-updated"
return response
@login_required
@user_passes_test(is_edadmin)
def _hx_author_profile_action(
request,
identifier_w_vn_nr,
order,
profile_id,
action: str="match",
):
submission = get_object_or_404(
Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
)
profile = get_object_or_404(Profile, pk=profile_id)
author_profile, created = SubmissionAuthorProfile.objects.get_or_create(
submission=submission,
order=order,
)
if action == "match":
author_profile.profile = profile
elif action == "unmatch":
author_profile.profile = None
author_profile.save()
response = redirect(
reverse(
"edadmin:preassignment:_hx_author_profile_row",
kwargs={
"identifier_w_vn_nr": identifier_w_vn_nr,
"order": order,
}
)
)
return response