From 35a6e4bb83686371ac206a97654c513992848d4e Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Wed, 25 Apr 2018 22:34:38 +0200 Subject: [PATCH] Institutions go public --- affiliations/managers.py | 4 +++ affiliations/models.py | 11 +++++--- affiliations/templates/affiliations/base.html | 13 ++++++++++ .../affiliations/institution_detail.html | 26 +++++++++++++++++++ .../affiliations/institution_list.html | 14 +++++++--- affiliations/urls.py | 4 ++- affiliations/views.py | 11 +++++--- funders/templates/funders/base.html | 2 +- .../journals/publication_detail.html | 20 +++++--------- 9 files changed, 79 insertions(+), 26 deletions(-) create mode 100644 affiliations/templates/affiliations/base.html create mode 100644 affiliations/templates/affiliations/institution_detail.html diff --git a/affiliations/managers.py b/affiliations/managers.py index e6a087205..11d16f9ec 100644 --- a/affiliations/managers.py +++ b/affiliations/managers.py @@ -16,3 +16,7 @@ class AffiliationQuerySet(models.QuerySet): Q(begin_date__isnull=True, end_date__gte=today) | Q(begin_date__lte=today, end_date__gte=today) | Q(begin_date__isnull=True, end_date__isnull=True)) + +class InstitutionQuerySet(models.QuerySet): + def has_publications(self): + return self.filter(publications__isnull=False) diff --git a/affiliations/models.py b/affiliations/models.py index 40f41195d..faf522846 100644 --- a/affiliations/models.py +++ b/affiliations/models.py @@ -10,18 +10,19 @@ from django_countries.fields import CountryField from scipost.models import Contributor from .constants import INSTITUTION_TYPES, TYPE_UNIVERSITY -from .managers import AffiliationQuerySet +from .managers import AffiliationQuerySet, InstitutionQuerySet class Institution(models.Model): - """ - Any (scientific) Institution in the world should ideally have a SciPost registration. - """ + """Any (scientific) Institution with a SciPost registration.""" + name = models.CharField(max_length=255) acronym = models.CharField(max_length=16, blank=True) country = CountryField() type = models.CharField(max_length=16, choices=INSTITUTION_TYPES, default=TYPE_UNIVERSITY) + objects = InstitutionQuerySet.as_manager() + class Meta: default_related_name = 'institutions' ordering = ['country'] @@ -30,9 +31,11 @@ class Institution(models.Model): return '{name} ({country})'.format(name=self.name, country=self.get_country_display()) def get_absolute_url(self): + """Return the Institution detail page.""" return reverse('affiliations:institution_details', args=(self.id,)) def contributors(self): + """All Contributor instances related to the Institution.""" return Contributor.objects.filter(affiliations__institution=self) diff --git a/affiliations/templates/affiliations/base.html b/affiliations/templates/affiliations/base.html new file mode 100644 index 000000000..6e6300f5f --- /dev/null +++ b/affiliations/templates/affiliations/base.html @@ -0,0 +1,13 @@ +{% extends 'scipost/base.html' %} + +{% block breadcrumb %} + <div class="container-outside header"> + <div class="container"> + <nav class="breadcrumb hidden-sm-down"> + {% block breadcrumb_items %} + <a href="{% url 'affiliations:institutions' %}" class="breadcrumb-item">Institutions</a> + {% endblock %} + </nav> + </div> + </div> +{% endblock %} diff --git a/affiliations/templates/affiliations/institution_detail.html b/affiliations/templates/affiliations/institution_detail.html new file mode 100644 index 000000000..641f62929 --- /dev/null +++ b/affiliations/templates/affiliations/institution_detail.html @@ -0,0 +1,26 @@ +{% extends 'affiliations/base.html' %} + +{% load bootstrap %} + +{% block pagetitle %}: Institution details{% endblock pagetitle %} + +{% block breadcrumb_items %} + {{ block.super }} + <span class="breadcrumb-item">{{ institution }}</span> +{% endblock %} + +{% block content %} + +<h1 class="highlight">Institution {{ institution }}</h1> + +<ul> + {% for publication in institution.publications.all %} + <li> + <a href="{{ publication.get_absolute_url }}">{{ publication.title }}</a> + <br>by {{ publication.author_list }}, + <br>{{ publication.citation }} + </li> + {% endfor %} +</ul> + +{% endblock content %} diff --git a/affiliations/templates/affiliations/institution_list.html b/affiliations/templates/affiliations/institution_list.html index 50d0b8ea3..a76c137dd 100644 --- a/affiliations/templates/affiliations/institution_list.html +++ b/affiliations/templates/affiliations/institution_list.html @@ -1,23 +1,29 @@ -{% extends 'scipost/_personal_page_base.html' %} +{% extends 'affiliations/base.html' %} {% block pagetitle %}: Institutions{% endblock pagetitle %} + {% block breadcrumb_items %} - {{ block.super }} <span class="breadcrumb-item">Institutions</span> {% endblock %} {% block content %} -<h1>All Institutions in the database</h1> +<h1 class="highlight">Institutions</h1> + +<h3>All Institutions with a SciPost publication</h3> {% if is_paginated %} {% include 'partials/pagination.html' with page_obj=page_obj %} {% endif %} + <ul> {% for institution in object_list %} - <li><a href="{% url 'affiliations:institution_details' institution.id %}">{{ institution }}</a></li> + <li> + <a href="{{ institution.get_absolute_url }}">{{ institution }}</a> + {% if perms.scipost.can_manage_affiliations %} · <a href="{% url 'affiliations:institution_edit' institution.id %}"><i class="fa fa-pencil"></i></a>{% endif %} + </li> {% empty %} <li><em>There are no Institutions known yet.</em><li> {% endfor %} diff --git a/affiliations/urls.py b/affiliations/urls.py index 0b839a465..22b6fc62e 100644 --- a/affiliations/urls.py +++ b/affiliations/urls.py @@ -8,8 +8,10 @@ from . import views urlpatterns = [ url(r'^$', views.InstitutionListView.as_view(), name='institutions'), - url(r'^(?P<institution_id>[0-9]+)/$', views.InstitutionUpdateView.as_view(), + url(r'^(?P<institution_id>[0-9]+)/$', views.InstitutionDetailView.as_view(), name='institution_details'), + url(r'^(?P<institution_id>[0-9]+)/edit', views.InstitutionUpdateView.as_view(), + name='institution_edit'), url(r'^(?P<institution_id>[0-9]+)/merge$', views.merge_institutions, name='merge_institutions'), ] diff --git a/affiliations/views.py b/affiliations/views.py index 83e94a2c9..9de5a4d02 100644 --- a/affiliations/views.py +++ b/affiliations/views.py @@ -7,6 +7,7 @@ from django.contrib import messages from django.contrib.auth.decorators import permission_required from django.urls import reverse from django.utils.decorators import method_decorator +from django.views.generic.detail import DetailView from django.views.generic.edit import UpdateView from django.views.generic.list import ListView from django.shortcuts import get_object_or_404 @@ -15,10 +16,14 @@ from .forms import InstitutionMergeForm from .models import Institution -@method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch') class InstitutionListView(ListView): + queryset = Institution.objects.has_publications() + paginate_by = 20 + + +class InstitutionDetailView(DetailView): model = Institution - paginate_by = 100 + pk_url_kwarg = 'institution_id' @method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch') @@ -53,4 +58,4 @@ def merge_institutions(request, institution_id): messages.success(request, 'Institution {a} merged into {b}'.format( a=form.cleaned_data.get('institution', '?'), b=institution)) - return redirect(reverse('affiliations:institution_details', args=(institution.id,))) + return redirect(reverse('affiliations:institution_edit', args=(institution.id,))) diff --git a/funders/templates/funders/base.html b/funders/templates/funders/base.html index 45d65898c..b36e0fc49 100644 --- a/funders/templates/funders/base.html +++ b/funders/templates/funders/base.html @@ -1,7 +1,7 @@ {% extends 'scipost/base.html' %} {% block breadcrumb %} - <div class="container-outside breadcrumb-nav"> + <div class="container-outside header"> <div class="container"> <nav class="breadcrumb hidden-sm-down"> {% block breadcrumb_items %} diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html index a96613517..9566a2284 100644 --- a/journals/templates/journals/publication_detail.html +++ b/journals/templates/journals/publication_detail.html @@ -116,19 +116,13 @@ </ul> {% endif %} - {% if is_edcol_admin %} - {# This function is not available for public yet! #} - <em>The following is not available for the public yet:</em> - {% include 'partials/journals/references.html' with publication=publication %} - - {% if publication.institutions.exists %} - <h3>Institution{{ publication.institutions.count|pluralize }} related to this Publication</h3> - <ul> - {% for institution in publication.institutions.all %} - <li>{{ institution }}</li> - {% endfor %} - </ul> - {% endif %} + {% if publication.institutions.all %} + <h3>Institution{{ publication.institutions.count|pluralize }} related to this Publication</h3> + <ul> + {% for institution in publication.institutions.all %} + <li><a href="{{ institution.get_absolute_url }}">{{ institution }}</a></li> + {% endfor %} + </ul> {% endif %} </div> </div> -- GitLab