SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit a4702d4c authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Start working on invitations (for nominated and elected)

parent 102323ac
No related branches found
No related tags found
No related merge requests found
# Generated by Django 3.2.12 on 2022-03-07 09:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('colleges', '0036_auto_20220307_0831'),
]
operations = [
migrations.AlterField(
model_name='fellowshipinvitation',
name='postpone_start_to',
field=models.DateField(blank=True, null=True),
),
]
......@@ -271,7 +271,7 @@ class FellowshipInvitation(models.Model):
)
response = models.CharField(max_length=16, choices=RESPONSE_CHOICES, blank=True)
postpone_start_to = models.DateField(blank=True)
postpone_start_to = models.DateField(blank=True, null=True)
comments = models.TextField(
help_text=(
......
{% include 'colleges/_hx_nominations_invitations_tablist.html' with selected=selected %}
{% for invitation in invitations.all %}
<div class="card">
<div class="card-header">
{{ invitation }}
</div>
<div class="card-body">
{% if selected == 'notyetinvited' %}
<ul>
{% if not invitation.nomination.profile.contributor %}
<li class="text-danger">N.B.: this potential Fellow is not yet registered as a Contributor</li>
{% endif %}
<li>For named or elected: prepare and send initial email</li>
</ul>
{% endif %}
</div>
</div>
{% empty %}
<p>No invitations of this kind</p>
{% endfor %}
<div class="tablist">
{% for choice in response_choices %}
<a hx-get="{% url 'colleges:_hx_nominations_invitations' %}?response={{ choice.0 }}"
{% if selected == choice.0 %}class="selected"{% endif %}
>{{ choice.1 }}</a>
{% endfor %}
</div>
......@@ -141,6 +141,25 @@
</div>
</details>
{% if "edadmin" in user_roles %}
<details class="border border-success border-2 mt-4">
<summary class="bg-success bg-opacity-10 p-2">
<h2 class="ms-2">
<strong class="text-danger">EdAdmin</strong>:
(for elected) invitations</h2>
</summary>
<div class="p-2 mt-2">
<div id="invitations_tablist"
hx-get="{% url 'colleges:_hx_nominations_invitations' %}?response='notyetinvited'"
hx-trigger="load"
hx-target="this"
hx-swap="innerHTML"
>
</div>
</div>
</details>
{% endif %}
<details class="border border-2 mt-4">
<summary class="bg-light p-2">
<h2 class="ms-2">List / filter</h2>
......
......@@ -184,4 +184,9 @@ urlpatterns = [
views._hx_nomination_decision,
name="_hx_nomination_decision",
),
path(
"_hx_nominations_invitations",
views._hx_nominations_invitations,
name="_hx_nominations_invitations",
),
]
......@@ -63,6 +63,8 @@ from .models import (
FellowshipNomination,
FellowshipNominationVotingRound,
FellowshipNominationVote,
FellowshipNominationDecision,
FellowshipInvitation,
)
from scipost.forms import EmailUsersForm, SearchTextForm
......@@ -624,6 +626,7 @@ class PotentialFellowshipEventCreateView(PermissionsMixin, CreateView):
###############
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def nominations(request):
"""
......@@ -643,6 +646,7 @@ def nominations(request):
return render(request, "colleges/nominations.html", context)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nomination_form(request, profile_id):
profile = get_object_or_404(Profile, pk=profile_id)
......@@ -671,6 +675,7 @@ def _hx_nomination_form(request, profile_id):
return render(request, "colleges/_hx_nomination_form.html", context)
@login_required
@user_passes_test(is_edadmin_or_senior_fellow)
def _hx_nominations_needing_specialties(request):
nominations_needing_specialties = FellowshipNomination.objects.filter(
......@@ -686,6 +691,7 @@ def _hx_nominations_needing_specialties(request):
)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nominations(request):
form = FellowshipNominationSearchForm(request.POST or None)
......@@ -700,6 +706,7 @@ def _hx_nominations(request):
return render(request, "colleges/_hx_nominations.html", context)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nomination_li_contents(request, nomination_id):
"""For (re)loading the details if modified."""
......@@ -708,6 +715,7 @@ def _hx_nomination_li_contents(request, nomination_id):
return render(request, "colleges/_hx_nomination_li_contents.html", context)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nomination_comments(request, nomination_id):
nomination = get_object_or_404(FellowshipNomination, pk=nomination_id)
......@@ -720,6 +728,7 @@ def _hx_nomination_comments(request, nomination_id):
return render(request, "colleges/_hx_nomination_comments.html", context)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nomination_voting_rounds(request):
fellowship = request.user.contributor.session_fellowship(request)
......@@ -749,6 +758,7 @@ def _hx_nomination_voting_rounds(request):
return render(request, "colleges/_hx_nomination_voting_rounds.html", context)
@login_required
@user_passes_test(is_edadmin_or_advisory_or_active_regular_or_senior_fellow)
def _hx_nomination_vote(request, voting_round_id):
fellowship = request.user.contributor.session_fellowship(request)
......@@ -771,12 +781,19 @@ def _hx_nomination_vote(request, voting_round_id):
return render(request, "colleges/_hx_nomination_vote.html", context)
@login_required
@user_passes_test(is_edadmin)
def _hx_nomination_decision(request, nomination_id):
nomination = get_object_or_404(FellowshipNomination, pk=nomination_id)
decision_form = FellowshipNominationDecisionForm(request.POST or None)
if decision_form.is_valid():
decision = decision_form.save()
if decision.outcome == FellowshipNominationDecision.OUTCOME_ELECTED:
invitation = FellowshipInvitation(
nomination=nomination,
response=FellowshipInvitation.RESPONSE_NOT_YET_INVITED,
)
invitation.save()
else:
decision_form.fields["nomination"].initial = nomination
context = {
......@@ -784,3 +801,23 @@ def _hx_nomination_decision(request, nomination_id):
"decision_form": decision_form,
}
return render(request, "colleges/_hx_nomination_decision.html", context)
@login_required
@user_passes_test(is_edadmin)
def _hx_nominations_invitations(request):
selected = request.GET.get("response", "notyetinvited")
invitations = FellowshipInvitation.objects.filter(
nomination__fellowship__isnull=True,
response=selected,
)
context = {
"response_choices": FellowshipInvitation.RESPONSE_CHOICES,
"selected": selected,
"invitations": invitations,
}
return render(
request,
"colleges/_hx_nominations_invitations.html",
context,
)
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