SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 35a6e4bb authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Institutions go public

parent 53be57c0
No related branches found
No related tags found
No related merge requests found
...@@ -16,3 +16,7 @@ class AffiliationQuerySet(models.QuerySet): ...@@ -16,3 +16,7 @@ class AffiliationQuerySet(models.QuerySet):
Q(begin_date__isnull=True, end_date__gte=today) | Q(begin_date__isnull=True, end_date__gte=today) |
Q(begin_date__lte=today, end_date__gte=today) | Q(begin_date__lte=today, end_date__gte=today) |
Q(begin_date__isnull=True, end_date__isnull=True)) Q(begin_date__isnull=True, end_date__isnull=True))
class InstitutionQuerySet(models.QuerySet):
def has_publications(self):
return self.filter(publications__isnull=False)
...@@ -10,18 +10,19 @@ from django_countries.fields import CountryField ...@@ -10,18 +10,19 @@ from django_countries.fields import CountryField
from scipost.models import Contributor from scipost.models import Contributor
from .constants import INSTITUTION_TYPES, TYPE_UNIVERSITY from .constants import INSTITUTION_TYPES, TYPE_UNIVERSITY
from .managers import AffiliationQuerySet from .managers import AffiliationQuerySet, InstitutionQuerySet
class Institution(models.Model): class Institution(models.Model):
""" """Any (scientific) Institution with a SciPost registration."""
Any (scientific) Institution in the world should ideally have a SciPost registration.
"""
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
acronym = models.CharField(max_length=16, blank=True) acronym = models.CharField(max_length=16, blank=True)
country = CountryField() country = CountryField()
type = models.CharField(max_length=16, choices=INSTITUTION_TYPES, default=TYPE_UNIVERSITY) type = models.CharField(max_length=16, choices=INSTITUTION_TYPES, default=TYPE_UNIVERSITY)
objects = InstitutionQuerySet.as_manager()
class Meta: class Meta:
default_related_name = 'institutions' default_related_name = 'institutions'
ordering = ['country'] ordering = ['country']
...@@ -30,9 +31,11 @@ class Institution(models.Model): ...@@ -30,9 +31,11 @@ class Institution(models.Model):
return '{name} ({country})'.format(name=self.name, country=self.get_country_display()) return '{name} ({country})'.format(name=self.name, country=self.get_country_display())
def get_absolute_url(self): def get_absolute_url(self):
"""Return the Institution detail page."""
return reverse('affiliations:institution_details', args=(self.id,)) return reverse('affiliations:institution_details', args=(self.id,))
def contributors(self): def contributors(self):
"""All Contributor instances related to the Institution."""
return Contributor.objects.filter(affiliations__institution=self) return Contributor.objects.filter(affiliations__institution=self)
......
{% 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 %}
{% 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 %}
{% extends 'scipost/_personal_page_base.html' %} {% extends 'affiliations/base.html' %}
{% block pagetitle %}: Institutions{% endblock pagetitle %} {% block pagetitle %}: Institutions{% endblock pagetitle %}
{% block breadcrumb_items %} {% block breadcrumb_items %}
{{ block.super }}
<span class="breadcrumb-item">Institutions</span> <span class="breadcrumb-item">Institutions</span>
{% endblock %} {% endblock %}
{% block content %} {% 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 %} {% if is_paginated %}
{% include 'partials/pagination.html' with page_obj=page_obj %} {% include 'partials/pagination.html' with page_obj=page_obj %}
{% endif %} {% endif %}
<ul> <ul>
{% for institution in object_list %} {% 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 %} &middot; <a href="{% url 'affiliations:institution_edit' institution.id %}"><i class="fa fa-pencil"></i></a>{% endif %}
</li>
{% empty %} {% empty %}
<li><em>There are no Institutions known yet.</em><li> <li><em>There are no Institutions known yet.</em><li>
{% endfor %} {% endfor %}
......
...@@ -8,8 +8,10 @@ from . import views ...@@ -8,8 +8,10 @@ from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.InstitutionListView.as_view(), name='institutions'), 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'), 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, url(r'^(?P<institution_id>[0-9]+)/merge$', views.merge_institutions,
name='merge_institutions'), name='merge_institutions'),
] ]
...@@ -7,6 +7,7 @@ from django.contrib import messages ...@@ -7,6 +7,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.urls import reverse from django.urls import reverse
from django.utils.decorators import method_decorator 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.edit import UpdateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
...@@ -15,10 +16,14 @@ from .forms import InstitutionMergeForm ...@@ -15,10 +16,14 @@ from .forms import InstitutionMergeForm
from .models import Institution from .models import Institution
@method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch')
class InstitutionListView(ListView): class InstitutionListView(ListView):
queryset = Institution.objects.has_publications()
paginate_by = 20
class InstitutionDetailView(DetailView):
model = Institution model = Institution
paginate_by = 100 pk_url_kwarg = 'institution_id'
@method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch') @method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch')
...@@ -53,4 +58,4 @@ def merge_institutions(request, institution_id): ...@@ -53,4 +58,4 @@ def merge_institutions(request, institution_id):
messages.success(request, 'Institution {a} merged into {b}'.format( messages.success(request, 'Institution {a} merged into {b}'.format(
a=form.cleaned_data.get('institution', '?'), b=institution)) 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,)))
{% extends 'scipost/base.html' %} {% extends 'scipost/base.html' %}
{% block breadcrumb %} {% block breadcrumb %}
<div class="container-outside breadcrumb-nav"> <div class="container-outside header">
<div class="container"> <div class="container">
<nav class="breadcrumb hidden-sm-down"> <nav class="breadcrumb hidden-sm-down">
{% block breadcrumb_items %} {% block breadcrumb_items %}
......
...@@ -116,19 +116,13 @@ ...@@ -116,19 +116,13 @@
</ul> </ul>
{% endif %} {% endif %}
{% if is_edcol_admin %} {% if publication.institutions.all %}
{# This function is not available for public yet! #} <h3>Institution{{ publication.institutions.count|pluralize }} related to this Publication</h3>
<em>The following is not available for the public yet:</em> <ul>
{% include 'partials/journals/references.html' with publication=publication %} {% for institution in publication.institutions.all %}
<li><a href="{{ institution.get_absolute_url }}">{{ institution }}</a></li>
{% if publication.institutions.exists %} {% endfor %}
<h3>Institution{{ publication.institutions.count|pluralize }} related to this Publication</h3> </ul>
<ul>
{% for institution in publication.institutions.all %}
<li>{{ institution }}</li>
{% endfor %}
</ul>
{% endif %}
{% endif %} {% endif %}
</div> </div>
</div> </div>
......
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