diff --git a/scipost/static/scipost/assets/css/_cards.scss b/scipost/static/scipost/assets/css/_cards.scss index a276ee0cce180697b019963054b6cbea7eb81002..a8625fded65fb44c56709bf4d3829627cf888a69 100644 --- a/scipost/static/scipost/assets/css/_cards.scss +++ b/scipost/static/scipost/assets/css/_cards.scss @@ -58,3 +58,14 @@ } } } + +.card.radio-option { + label { + cursor: pointer; + } + + &.checked, + &:hover { + border-color: $scipost-darkblue; + } +} diff --git a/submissions/forms.py b/submissions/forms.py index 6bb7af39bb29008fd9eb097450b5178d4a7f4402..ba545eb05b6c62cbcbd7c80e211db3aa65a3e473 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -2,7 +2,7 @@ from django import forms from django.core.validators import RegexValidator from .constants import ASSIGNMENT_BOOL, ASSIGNMENT_REFUSAL_REASONS,\ - REPORT_ACTION_CHOICES, REPORT_REFUSAL_CHOICES + REPORT_ACTION_CHOICES, REPORT_REFUSAL_CHOICES, SUBMISSION_CYCLES from .models import Submission, RefereeInvitation, Report, EICRecommendation from scipost.constants import SCIPOST_SUBJECT_AREAS @@ -261,3 +261,21 @@ class RecommendationVoteForm(forms.Form): css_class='flex-Fellowactionbox'), css_class='flex-container') ) + + +class SubmissionCycleChoiceForm(forms.ModelForm): + referees_reinvite = forms.ModelMultipleChoiceField(queryset=RefereeInvitation.objects.none(), + widget=forms.CheckboxSelectMultiple({ + 'checked': 'checked'}), + required=False, label='Reinvite referees') + + class Meta: + model = Submission + fields = ('refereeing_cycle',) + widgets = {'refereeing_cycle': forms.RadioSelect} + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['refereeing_cycle'].default = None + self.fields['referees_reinvite'].queryset = (self.instance.other_versions() + .first().referee_invitations.all()) diff --git a/submissions/templates/submissions/_form_submission_cycle_choice.html b/submissions/templates/submissions/_form_submission_cycle_choice.html new file mode 100644 index 0000000000000000000000000000000000000000..7b3e3f5fda5b721baf256eca8240bfe1d4f25db0 --- /dev/null +++ b/submissions/templates/submissions/_form_submission_cycle_choice.html @@ -0,0 +1,82 @@ +<form method="post"> + <h3 class="mb-2">This submission is a resubmission, please choose which submission cycle to proceed with</h3> + <div class="card-deck" id="id_submission_cycle"> + {% for choice in form.refereeing_cycle %} + <div class="card radio-option" for="{{choice.id_for_label}}" data-reinvite="{% if choice.choice_value == 'direct_rec' %}0{% else %}1{% endif %}"> + <div class="card-block text-center"> + <span class="hidden-xs-up">{{choice.tag}}</span> + <label for="{{choice.id_for_label}}"> + <h3 class="card-title">{{choice.choice_label}}</h3> + <p class="card-text text-muted"> + {% if choice.choice_value == 'short' %} + Run a speedy refereeing round: two weeks, with option of reinviting previous referees + {% elif choice.choice_value == 'direct_rec' %} + Immediately write an editorial recommendation. + {% else %} + Run a new full refereeing round: four weeks as usual, can invite previous referees and/or new ones. + {% endif %} + </p> + </label> + </div> + </div> + {% endfor %} + </div> + <div class="card-deck" id="id_referees_reinvite_block" style="display: none;"> + <div class="card"> + <div class="card-block"> + <h3 class="card-title">The following referees were also invited in the last submission</h3> + <h4 class="card-subtitle text-muted pt-0">Please choose who you want to reinvite</h4> + <div class="form-group row" id="id_referees_reinvite"> + <label class="col-form-label col-md-2" for="id_referees_reinvite">Reinvite referees</label> + <div class="col-md-10 multiple-checkbox"> + <ul class="mb-0"> + {% for referee in form.referees_reinvite.field.queryset %} + <li> + <label for="{{form.referees_reinvite.name}}_{{forloop.counter0}}"> + <input checked="checked" id="{{form.referees_reinvite.name}}_{{forloop.counter0}}" name="{{form.referees_reinvite.name}}" type="checkbox" value="{{referee.id}}"> + <div class="d-inline-block" style="vertical-align: top;"> + {{referee.referee_str}} + <br> + <span class="text-muted">Originally invited on {{referee.date_invited}}</span> + </div> + </label> + </li> + {% endfor %} + </ul> + </div> + </div> + </div> + </div> + </div> + <input type="submit" class="btn btn-primary" value="Confirm choice"> +</form> + +<script> + $(function(){ + console.log($('#id_submission_cycle .radio-option')); + $('#id_submission_cycle .radio-option').on('click', function(){ + var el_id = $('#id_submission_cycle .radio-option input[type="radio"]:checked'), + radio_cards = $('#id_submission_cycle .radio-option'); + + // Check/uncheck radiobuttons + $('#id_submission_cycle input[type="radio"]') + .prop('checked', false) + .filter(el_id) + .prop('checked', true); + + // Toggle classes of cards + radio_cards.removeClass('checked') + var el_card = el_id.parents('.radio-option'); + el_card.addClass('checked'); + + // Show/hide invitation block + if(el_card.attr('data-reinvite') > 0) { + $('#id_referees_reinvite_block').show(); + } else { + $('#id_referees_reinvite_block').hide(); + } + }).trigger('click'); + + + }); +</script> diff --git a/submissions/templates/submissions/editorial_page.html b/submissions/templates/submissions/editorial_page.html index c5cc177ff3568ba332512714ab3afb37007c421b..a52050e5da183260baf2c442d59ad32ed9e67fdd 100644 --- a/submissions/templates/submissions/editorial_page.html +++ b/submissions/templates/submissions/editorial_page.html @@ -150,24 +150,7 @@ {% if submission.status == 'resubmitted_incomin' %} <div class="row"> <div class="col-12"> - <h3 class="highlight">This submission is a resubmission, please choose which submission cycle to proceed with</h3> - <div class="card-deck"> - <div class="card"> - <div class="card-block"> - HENK - </div> - </div> - <div class="card"> - <div class="card-block"> - INGRID - </div> - </div> - <div class="card"> - <div class="card-block"> - DE BUURVROUW - </div> - </div> - </div> + {% include 'submissions/_form_submission_cycle_choice.html' with form=cycle_choice_form %} </div> </div> {% else %} diff --git a/submissions/views.py b/submissions/views.py index 9f0e786745617ff92a3b1a2b92bb71852c6310ef..856bdbeb54e7a63453ec9668b7dc24e753b1e521 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -23,7 +23,8 @@ from .forms import SubmissionIdentifierForm, SubmissionForm, SubmissionSearchFor RecommendationVoteForm, ConsiderAssignmentForm, AssignSubmissionForm,\ SetRefereeingDeadlineForm, RefereeSelectForm, RefereeRecruitmentForm,\ ConsiderRefereeInvitationForm, EditorialCommunicationForm,\ - EICRecommendationForm, ReportForm, VetReportForm, VotingEligibilityForm + EICRecommendationForm, ReportForm, VetReportForm, VotingEligibilityForm,\ + SubmissionCycleChoiceForm from .utils import SubmissionUtils from comments.models import Comment @@ -633,13 +634,16 @@ def editorial_page(request, arxiv_identifier_w_vn_nr): .get(submission=submission)) except EICRecommendation.DoesNotExist: recommendation = None - context = {'submission': submission, - 'other_versions': other_versions, - 'recommendation': recommendation, - 'set_deadline_form': SetRefereeingDeadlineForm(), - 'ref_invitations': ref_invitations, - 'nr_reports_to_vet': nr_reports_to_vet, - 'communications': communications} + context = { + 'submission': submission, + 'other_versions': other_versions, + 'recommendation': recommendation, + 'set_deadline_form': SetRefereeingDeadlineForm(), + 'cycle_choice_form': SubmissionCycleChoiceForm(instance=submission), + 'ref_invitations': ref_invitations, + 'nr_reports_to_vet': nr_reports_to_vet, + 'communications': communications + } return render(request, 'submissions/editorial_page.html', context)