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):
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)
......@@ -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)
......
{% 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 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 %} &middot; <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 %}
......
......@@ -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'),
]
......@@ -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,)))
{% 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 %}
......
......@@ -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>
......
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