diff --git a/colleges/constants.py b/colleges/constants.py index f0411a34040c7903cdd19aba9f798e74fc668a3e..46625c019ecc87e79119e7456f672264e57c39c0 100644 --- a/colleges/constants.py +++ b/colleges/constants.py @@ -41,6 +41,9 @@ potential_fellowship_statuses_dict = dict(POTENTIAL_FELLOWSHIP_STATUSES) POTENTIAL_FELLOWSHIP_EVENT_DEFINED = 'defined' +POTENTIAL_FELLOWSHIP_EVENT_NOMINATED = 'nominated' +POTENTIAL_FELLOWSHIP_EVENT_VOTED_ON = 'votedon' +POTENTIAL_FELLOWSHIP_EVENT_ELECTED = 'elected' POTENTIAL_FELLOWSHIP_EVENT_EMAILED = 'emailed' POTENTIAL_FELLOWSHIP_EVENT_RESPONDED = 'responded' POTENTIAL_FELLOWSHIP_EVENT_STATUSUPDATED = 'statusupdated' @@ -49,6 +52,9 @@ POTENTIAL_FELLOWSHIP_EVENT_DEACTIVATION = 'deactivation' POTENTIAL_FELLOWSHIP_EVENTS = ( (POTENTIAL_FELLOWSHIP_EVENT_DEFINED, 'Defined in database'), + (POTENTIAL_FELLOWSHIP_EVENT_NOMINATED, 'Nominated'), + (POTENTIAL_FELLOWSHIP_EVENT_VOTED_ON, 'Voted on'), + (POTENTIAL_FELLOWSHIP_EVENT_ELECTED, 'Elected'), (POTENTIAL_FELLOWSHIP_EVENT_EMAILED, 'Emailed with invitation'), (POTENTIAL_FELLOWSHIP_EVENT_RESPONDED, 'Response received'), (POTENTIAL_FELLOWSHIP_EVENT_STATUSUPDATED, 'Status updated'), diff --git a/colleges/forms.py b/colleges/forms.py index 302d050a760f8b234a7ce87dda2217405b3fb937..a09f430abfba5c76604b2a8fbff4d81b5614fe81 100644 --- a/colleges/forms.py +++ b/colleges/forms.py @@ -14,7 +14,8 @@ from scipost.forms import RequestFormMixin from scipost.models import Contributor from .models import Fellowship, PotentialFellowship, PotentialFellowshipEvent -from .constants import POTENTIAL_FELLOWSHIP_NOMINATED +from .constants import POTENTIAL_FELLOWSHIP_IDENTIFIED, POTENTIAL_FELLOWSHIP_NOMINATED,\ + POTENTIAL_FELLOWSHIP_EVENT_DEFINED, POTENTIAL_FELLOWSHIP_EVENT_NOMINATED class AddFellowshipForm(forms.ModelForm): @@ -235,18 +236,26 @@ class PotentialFellowshipForm(RequestFormMixin, forms.ModelForm): def save(self): """ - The default status is IDENTIFIED, which is appropriate if the + The default status is IDENTIFIED, which is appropriate if the PotentialFellow was added directly by SciPost Admin. But if the PotFel is nominated by somebody on the Advisory Board or by an existing Fellow, the status is set to NOMINATED and the person nominating is added to the list of in_agreement with election. """ potfel = super().save() - if self.request.user.groups.filter(name__in=[ - 'Advisory Board', 'Editorial College']).exists(): + nominated = self.request.user.groups.filter(name__in=[ + 'Advisory Board', 'Editorial College']).exists() + if nominated: potfel.status = POTENTIAL_FELLOWSHIP_NOMINATED potfel.in_agreement.add(self.request.user.contributor) + event = POTENTIAL_FELLOWSHIP_EVENT_NOMINATED + else: + potfel.status = POTENTIAL_FELLOWSHIP_IDENTIFIED + event = POTENTIAL_FELLOWSHIP_EVENT_DEFINED potfel.save() + newevent = PotentialFellowshipEvent( + potfel=potfel, event=event, noted_by=self.request.user.contributor) + newevent.save() return potfel diff --git a/colleges/migrations/0013_auto_20190117_1935.py b/colleges/migrations/0013_auto_20190117_1935.py new file mode 100644 index 0000000000000000000000000000000000000000..d6cd8ee25dd7bcf47d6776f921f7b0a54a318e98 --- /dev/null +++ b/colleges/migrations/0013_auto_20190117_1935.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.4 on 2019-01-17 18:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('colleges', '0012_auto_20190114_0550'), + ] + + operations = [ + migrations.AlterField( + model_name='potentialfellowshipevent', + name='event', + field=models.CharField(choices=[('defined', 'Defined in database'), ('nominated', 'Nominated'), ('votedon', 'Voted on'), ('elected', 'Elected'), ('emailed', 'Emailed with invitation'), ('responded', 'Response received'), ('statusupdated', 'Status updated'), ('comment', 'Comment'), ('deactivation', 'Deactivation: not considered anymore')], max_length=32), + ), + ] diff --git a/colleges/templates/colleges/_potentialfellowship_card.html b/colleges/templates/colleges/_potentialfellowship_card.html index 6ef9fa58091f9482b57dd0abebf98ac83a0460e2..9225b7042363af21b72c01cd51f8460dae11af8c 100644 --- a/colleges/templates/colleges/_potentialfellowship_card.html +++ b/colleges/templates/colleges/_potentialfellowship_card.html @@ -108,6 +108,7 @@ </div> {% endif %} + {% if perms.scipost.can_manage_college_composition %} <h3 class="highlight">Events</h3> <div class="row"> <div class="col-md-6"> @@ -119,7 +120,7 @@ {% endfor %} </ul> </div> - {% if perms.scipost.can_manage_college_composition %} + <div class="col-md-6"> <h3>Add an event for this Potential Fellowship</h3> <form class="d-block mt-2 mb-3" action="{% url 'colleges:potential_fellowship_event_create' pk=potfel.id %}" method="post"> @@ -128,6 +129,6 @@ <input type="submit" name="submit" value="Submit" class="btn btn-outline-secondary"> </form> </div> - {% endif %} </div> + {% endif %} </div> diff --git a/colleges/views.py b/colleges/views.py index 56111c96058246f5b1b86caedf9ec01c2db768f8..7f076cf1cd27a0fa6ea88e52d2c3a14e916a7228 100644 --- a/colleges/views.py +++ b/colleges/views.py @@ -4,9 +4,10 @@ __license__ = "AGPL v3" from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required +from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import Count +from django.http import Http404 from django.shortcuts import get_object_or_404, render, redirect -from django.core.urlresolvers import reverse, reverse_lazy from django.utils import timezone from django.utils.decorators import method_decorator from django.views.generic.detail import DetailView @@ -15,10 +16,10 @@ from django.views.generic.list import ListView from submissions.models import Submission -from .constants import POTENTIAL_FELLOWSHIP_INVITED, potential_fellowship_statuses_dict,\ - POTENTIAL_FELLOWSHIP_EVENT_EMAILED, POTENTIAL_FELLOWSHIP_EVENT_STATUSUPDATED,\ - POTENTIAL_FELLOWSHIP_EVENT_COMMENT,\ - POTENTIAL_FELLOWSHIP_STATUSES +from .constants import POTENTIAL_FELLOWSHIP_STATUSES,\ + POTENTIAL_FELLOWSHIP_INVITED, potential_fellowship_statuses_dict,\ + POTENTIAL_FELLOWSHIP_EVENT_VOTED_ON, POTENTIAL_FELLOWSHIP_EVENT_EMAILED,\ + POTENTIAL_FELLOWSHIP_EVENT_STATUSUPDATED, POTENTIAL_FELLOWSHIP_EVENT_COMMENT from .forms import FellowshipForm, FellowshipTerminateForm, FellowshipRemoveSubmissionForm,\ FellowshipAddSubmissionForm, AddFellowshipForm, SubmissionAddFellowshipForm,\ FellowshipRemoveProceedingsForm, FellowshipAddProceedingsForm, SubmissionAddVotingFellowForm,\ @@ -314,7 +315,7 @@ class PotentialFellowshipCreateView(PermissionsMixin, RequestViewMixin, CreateVi success_url = reverse_lazy('colleges:potential_fellowships') -class PotentialFellowshipUpdateView(PermissionsMixin, UpdateView): +class PotentialFellowshipUpdateView(PermissionsMixin, RequestViewMixin, UpdateView): """ Formview to update a Potential Fellowship. """ @@ -409,10 +410,19 @@ def vote_on_potential_fellowship(request, potfel_id, vote): potfel.in_disagreement.remove(request.user.contributor) if vote == 'A': potfel.in_agreement.add(request.user.contributor) + comments = 'Voted Agree' elif vote == 'N': potfel.in_abstain.add(request.user.contributor) + comments = 'Voted Abstain' elif vote == 'D': potfel.in_disagreement.add(request.user.contributor) + comments = 'Voted Disagree' + else: + raise Http404 + newevent = PotentialFellowshipEvent( + potfel=potfel, event=POTENTIAL_FELLOWSHIP_EVENT_VOTED_ON, + comments=comments, noted_by=request.user.contributor) + newevent.save() return redirect(reverse('colleges:potential_fellowships'))