From ca71fb110fa1a22c8c6d9c7aaeb824c44ef4e418 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Thu, 28 Jun 2018 06:20:28 +0200
Subject: [PATCH] Partial work on Prospective Fellows

---
 colleges/forms.py                             |  9 +++-
 .../colleges/_prospectivefellow_card.html     |  7 ++-
 .../colleges/prospectivefellow_list.html      |  2 +-
 colleges/urls.py                              |  2 +
 colleges/views.py                             | 48 +++++++++++--------
 5 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/colleges/forms.py b/colleges/forms.py
index 9e122f940..f2df23911 100644
--- a/colleges/forms.py
+++ b/colleges/forms.py
@@ -10,7 +10,7 @@ from proceedings.models import Proceedings
 from submissions.models import Submission
 from scipost.models import Contributor
 
-from .models import Fellowship, ProspectiveFellow
+from .models import Fellowship, ProspectiveFellow, ProspectiveFellowEvent
 
 
 class AddFellowshipForm(forms.ModelForm):
@@ -225,3 +225,10 @@ class ProspectiveFellowCreateForm(forms.ModelForm):
         model = ProspectiveFellow
         fields = ['title', 'first_name', 'last_name', 'email',
                   'discipline', 'expertises', 'webpage', 'status', 'contributor']
+
+
+class ProspectiveFellowEventForm(forms.ModelForm):
+
+    class Meta:
+        model = ProspectiveFellowEvent
+        fields = ['event', 'comments']
diff --git a/colleges/templates/colleges/_prospectivefellow_card.html b/colleges/templates/colleges/_prospectivefellow_card.html
index 7b4aff424..47c302400 100644
--- a/colleges/templates/colleges/_prospectivefellow_card.html
+++ b/colleges/templates/colleges/_prospectivefellow_card.html
@@ -23,5 +23,10 @@
     </div>
     <div class="col-md-5">
       <h3>Add an event for this Prospective Fellow</h3>
-    </div>
+      <form class="d-block mt-2 mb-3" action="{% url 'colleges:prospective_Fellow_event_create' pk=prosfel.id %}" method="post">
+        {% csrf_token %}
+        {{ pfevent_form|bootstrap }}
+        <input type="submit" name="submit" value="Submit" class="btn btn-outline-secondary">
+      </form>
+
 </div>
diff --git a/colleges/templates/colleges/prospectivefellow_list.html b/colleges/templates/colleges/prospectivefellow_list.html
index 4d5ac386c..a91f731cd 100644
--- a/colleges/templates/colleges/prospectivefellow_list.html
+++ b/colleges/templates/colleges/prospectivefellow_list.html
@@ -34,7 +34,7 @@
 	</tr>
 	<tr id="collapse{{ prosfel.id }}" class="collapse" role="tabpanel" aria-labelledby="heading{{ prosfel.id }}" style="background-color: #fff;">
 	  <td colspan="4">
-	    {% include 'colleges/_prospectivefellow_card.html' with prosfel=prosfel %}
+	    {% include 'colleges/_prospectivefellow_card.html' with prosfel=prosfel pfevent_form=pfevent_form %}
 	  </td>
 	</tr>
 	{% empty %}
diff --git a/colleges/urls.py b/colleges/urls.py
index 4c31ec0d9..9815eb3a5 100644
--- a/colleges/urls.py
+++ b/colleges/urls.py
@@ -52,4 +52,6 @@ urlpatterns = [
         views.ProspectiveFellowUpdateView.as_view(), name='prospective_Fellow_update'),
     url(r'^prospectivefellows/(?P<pk>[0-9]+)/delete/$',
         views.ProspectiveFellowDeleteView.as_view(), name='prospective_Fellow_delete'),
+    url(r'^prospectivefellows/(?P<pk>[0-9]+)/events/add$',
+        views.ProspectiveFellowEventCreateView.as_view(), name='prospective_Fellow_event_create'),
 ]
diff --git a/colleges/views.py b/colleges/views.py
index 02ea1a107..23a757dcb 100644
--- a/colleges/views.py
+++ b/colleges/views.py
@@ -16,9 +16,11 @@ from .forms import FellowshipForm, FellowshipTerminateForm, FellowshipRemoveSubm
     FellowshipAddSubmissionForm, AddFellowshipForm, SubmissionAddFellowshipForm,\
     FellowshipRemoveProceedingsForm, FellowshipAddProceedingsForm, SubmissionAddVotingFellowForm,\
     FellowVotingRemoveSubmissionForm,\
-    ProspectiveFellowCreateForm
+    ProspectiveFellowCreateForm, ProspectiveFellowEventForm
 from .models import Fellowship, ProspectiveFellow
 
+from scipost.mixins import PermissionsMixin
+
 
 @login_required
 @permission_required('scipost.can_manage_college_composition', raise_exception=True)
@@ -299,50 +301,41 @@ def fellowship_add_proceedings(request, id):
 
 
 
-
-@method_decorator(login_required, name='dispatch')
-@method_decorator(permission_required('scipost.can_manage_college_composition', raise_exception=True),
-                  name='dispatch')
-class ProspectiveFellowCreateView(CreateView):
+class ProspectiveFellowCreateView(PermissionsMixin, CreateView):
     """
     Formview to create a new Prospective Fellow.
     """
+    permission_required = 'scipost.can_manage_college_composition'
     form_class = ProspectiveFellowCreateForm
     template_name = 'colleges/prospectivefellow_form.html'
     success_url = reverse_lazy('colleges:prospective_Fellows')
 
 
-@method_decorator(login_required, name='dispatch')
-@method_decorator(permission_required('scipost.can_manage_college_composition', raise_exception=True),
-                  name='dispatch')
-class ProspectiveFellowUpdateView(UpdateView):
+class ProspectiveFellowUpdateView(PermissionsMixin, UpdateView):
     """
     Formview to update a Prospective Fellow.
     """
+    permission_required = 'scipost.can_manage_college_composition'
     model = ProspectiveFellow
     form_class = ProspectiveFellowCreateForm
     template_name = 'colleges/prospectivefellow_form.html'
     success_url = reverse_lazy('colleges:prospective_Fellows')
 
 
-@method_decorator(login_required, name='dispatch')
-@method_decorator(permission_required('scipost.can_manage_college_composition', raise_exception=True),
-                  name='dispatch')
-class ProspectiveFellowDeleteView(DeleteView):
+class ProspectiveFellowDeleteView(PermissionsMixin, DeleteView):
     """
     Delete a Prospective Fellow.
     """
+    permission_required = 'scipost.can_manage_college_composition'
     model = ProspectiveFellow
     success_url = reverse_lazy('colleges:prospective_Fellows')
 
 
-@method_decorator(login_required, name='dispatch')
-@method_decorator(permission_required('scipost.can_manage_college_composition', raise_exception=True),
-                  name='dispatch')
-class ProspectiveFellowListView(ListView):
+class ProspectiveFellowListView(PermissionsMixin, ListView):
     """
     List the ProspectiveFellow object instances.
     """
+    permission_required = 'scipost.can_manage_college_composition'
     model = ProspectiveFellow
     paginate_by = 50
 
@@ -354,5 +347,22 @@ class ProspectiveFellowListView(ListView):
         if 'discipline' in self.request.GET:
             queryset = queryset.filter(discipline=self.request.GET['discipline'])
             if 'expertise' in self.request.GET:
-                queryset = queryset.filter(expertises__in=self.request.GET['expertise'])
+                queryset = queryset.filter(expertises__contains=self.request.GET['expertise'])
         return queryset
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['pfevent_form'] = ProspectiveFellowEventForm()
+        return context
+
+
+class ProspectiveFellowEventCreateView(PermissionsMixin, CreateView):
+    """
+    Add an event for a Prospective Fellow.
+    """
+    permission_required = 'scipost.can_manage_college_composition'
+    form_class = ProspectiveFellowEventForm
+
+    def form_valid(self, form):
+        messages.success(self.request, 'Event added successfully')
+        return super().form_valid(form)
-- 
GitLab