From 82aacaf8709227724a9c4a0409a55c5d9fadea1a Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Tue, 18 Sep 2018 21:49:48 +0200 Subject: [PATCH] Add pubfraction info in Organizations list --- partners/models.py | 12 +++++++++++- partners/templates/partners/_organization_card.html | 9 ++++++++- partners/templatetags/partners_extras.py | 5 +++++ partners/views.py | 1 + 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/partners/models.py b/partners/models.py index 6620e1baf..78de4764b 100644 --- a/partners/models.py +++ b/partners/models.py @@ -10,6 +10,7 @@ import string from django.contrib.auth.models import User from django.contrib.postgres.fields import JSONField from django.db import models +from django.db.models import Sum from django.utils import timezone from django.urls import reverse @@ -32,7 +33,7 @@ from .managers import ( MembershipAgreementManager, ProspectivePartnerManager, PartnerManager, ContactRequestManager, PartnersAttachmentManager) -from journals.models import Publication, PublicationAuthorsTable +from journals.models import Publication, PublicationAuthorsTable, OrgPubFraction from scipost.constants import TITLE_CHOICES from scipost.fields import ChoiceArrayField @@ -131,6 +132,15 @@ class Organization(models.Model): self.cf_nr_associated_publications = self.count_publications() self.save() + def pubfractions_in_year(self, year): + """ + Returns the sum of pubfractions for the given year. + """ + return OrgPubFraction.objects.filter( + organization=self, + publication__publication_date__year=year + ).aggregate(Sum('fraction'))['fraction__sum'] + def get_contributor_authors(self): return self.publicationauthorstable_set.select_related( 'contributor').order_by('contributor__user__last_name') diff --git a/partners/templates/partners/_organization_card.html b/partners/templates/partners/_organization_card.html index 0dfa94a13..5c6de16c2 100644 --- a/partners/templates/partners/_organization_card.html +++ b/partners/templates/partners/_organization_card.html @@ -1,5 +1,7 @@ {% load bootstrap %} +{% load partners_extras %} + <div class="card-body"> <div class="row"> @@ -11,7 +13,7 @@ </li> {% endif %} <li class="nav-item"> - <a class="nav-link active" id="publications-{{ org.id }}-tab" data-toggle="tab" href="#publications-{{ org.id }}" role="tab" aria-controls="publications-{{ org.id }}" aria-selected="true">Associated Publications</a> + <a class="nav-link active" id="publications-{{ org.id }}-tab" data-toggle="tab" href="#publications-{{ org.id }}" role="tab" aria-controls="publications-{{ org.id }}" aria-selected="true">Publications & PubFractions</a> </li> <li class="nav-item"> <a class="nav-link" id="authors-{{ org.id }}-tab" data-toggle="tab" href="#authors-{{ org.id }}" role="tab" aria-controls="authors-{{ org.id }}" aria-selected="true">Associated Authors</a> @@ -40,15 +42,20 @@ <div class="tab-pane show active pt-4" id="publications-{{ org.id }}" role="tabpanel" aria-labelledby="publications-{{ org.id }}-tab"> <h3>Publications associated to this Organization:</h3> + {% for pubyear in pubyears %} + <h4>{{ pubyear }} <span class="text-muted">(total pubfractions: {{ org|pubfractions_in_year:pubyear }})</span></h4> <ul> {% for publication in org.get_publications %} + {% if publication.publication_date|date:'Y'|add:"0" == pubyear %} <li> <a href="{{ publication.get_absolute_url }}">{{ publication.title }}</a> <br>by {{ publication.author_list }}, <br>{{ publication.citation }} </li> + {% endif %} {% endfor %} </ul> + {% endfor %} </div> <div class="tab-pane pt-4" id="authors-{{ org.id }}" role="tabpanel" aria-labelledby="authors-{{ org.id }}-tab"> diff --git a/partners/templatetags/partners_extras.py b/partners/templatetags/partners_extras.py index 9abcc6c3d..5842a2f02 100644 --- a/partners/templatetags/partners_extras.py +++ b/partners/templatetags/partners_extras.py @@ -33,3 +33,8 @@ def partnerstatuscolor(status): elif status == PROSPECTIVE_PARTNER_FOLLOWED_UP: color = '#d2e3f6' return color + + +@register.filter(name='pubfractions_in_year') +def pubfractions_in_year(org, year): + return org.pubfractions_in_year(int(year)) diff --git a/partners/views.py b/partners/views.py index 6986f8fe3..789d3402e 100644 --- a/partners/views.py +++ b/partners/views.py @@ -84,6 +84,7 @@ class OrganizationListView(ListView): context = super().get_context_data(*args, **kwargs) if self.request.user.has_perm('scipost.can_manage_organizations'): context['nr_funders_wo_organization'] = Funder.objects.filter(organization=None).count() + context['pubyears'] = range(int(timezone.now().strftime('%Y')), 2015, -1) return context def get_queryset(self): -- GitLab