SciPost Code Repository

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

Add Institute relations to Publications

parent 723156a9
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-11-02 12:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('affiliations', '0007_auto_20171102_1256'),
('journals', '0049_auto_20171101_2000'),
]
operations = [
migrations.AddField(
model_name='publication',
name='institutes',
field=models.ManyToManyField(blank=True, related_name='publications', to='affiliations.Institute'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-11-02 12:07
from __future__ import unicode_literals
from django.db import migrations
def fill_publications(apps, schema_editor):
"""
Add all Institutes to a Publication, assuming all Contributors Affiliations are
active at moment of publication.
"""
Publication = apps.get_model('journals', 'Publication')
for publication in Publication.objects.all():
for author in publication.authors.all():
for affiliation in author.affiliations.all():
publication.institutes.add(affiliation.institute)
def return_none(*args, **kwargs):
return
class Migration(migrations.Migration):
dependencies = [
('journals', '0050_publication_institutes'),
]
operations = [
migrations.RunPython(fill_publications, return_none),
]
......@@ -123,20 +123,28 @@ class Issue(models.Model):
class Publication(models.Model):
"""
A Publication is an object directly related to an accepted Submission. It contains metadata,
the actual publication file, author data, etc. etc.
"""
# Publication data
accepted_submission = models.OneToOneField('submissions.Submission', on_delete=models.CASCADE)
in_issue = models.ForeignKey(Issue, on_delete=models.CASCADE)
paper_nr = models.PositiveSmallIntegerField()
# Core fields
title = models.CharField(max_length=300)
author_list = models.CharField(max_length=1000, verbose_name="author list")
abstract = models.TextField()
pdf_file = models.FileField(upload_to='UPLOADS/PUBLICATIONS/%Y/%m/', max_length=200)
discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics')
domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS)
subject_area = models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS,
verbose_name='Primary subject area', default='Phys:QP')
secondary_areas = ChoiceArrayField(models.CharField(max_length=10,
choices=SCIPOST_SUBJECT_AREAS),
blank=True, null=True)
title = models.CharField(max_length=300)
author_list = models.CharField(max_length=1000, verbose_name="author list")
secondary_areas = ChoiceArrayField(
models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS), blank=True, null=True)
# Authors which have been mapped to contributors:
# Authors
authors = models.ManyToManyField('scipost.Contributor', blank=True,
related_name='publications')
authors_unregistered = models.ManyToManyField(UnregisteredAuthor, blank=True,
......@@ -151,26 +159,33 @@ class Publication(models.Model):
related_name='claimed_publications')
authors_false_claims = models.ManyToManyField('scipost.Contributor', blank=True,
related_name='false_claimed_publications')
abstract = models.TextField()
pdf_file = models.FileField(upload_to='UPLOADS/PUBLICATIONS/%Y/%m/', max_length=200)
cc_license = models.CharField(max_length=32, choices=CC_LICENSES, default=CCBY4)
# Funders
grants = models.ManyToManyField('funders.Grant', blank=True, related_name="publications")
funders_generic = models.ManyToManyField('funders.Funder', blank=True,
related_name="publications") # not linked to a grant
funders_generic = models.ManyToManyField(
'funders.Funder', blank=True, related_name="publications") # not linked to a grant
institutes = models.ManyToManyField('affiliations.Institute',
blank=True, related_name="publications")
# Metadata
metadata = JSONField(default={}, blank=True, null=True)
metadata_xml = models.TextField(blank=True, null=True) # for Crossref deposit
latest_metadata_update = models.DateTimeField(blank=True, null=True)
metadata_DOAJ = JSONField(default={}, blank=True, null=True)
BiBTeX_entry = models.TextField(blank=True, null=True)
doi_label = models.CharField(max_length=200, unique=True, db_index=True,
validators=[doi_publication_validator])
BiBTeX_entry = models.TextField(blank=True, null=True)
doideposit_needs_updating = models.BooleanField(default=False)
citedby = JSONField(default={}, blank=True, null=True)
# Date fields
submission_date = models.DateField(verbose_name='submission date')
acceptance_date = models.DateField(verbose_name='acceptance date')
publication_date = models.DateField(verbose_name='publication date')
latest_citedby_update = models.DateTimeField(null=True, blank=True)
latest_metadata_update = models.DateTimeField(blank=True, null=True)
latest_activity = models.DateTimeField(default=timezone.now)
citedby = JSONField(default={}, blank=True, null=True)
objects = PublicationManager()
......
......@@ -3,8 +3,9 @@
{% load journals_extras %}
{% load staticfiles %}
{% load scipost_extras %}
{% load user_groups %}
{% block pagetitle %}: Publication detail{% endblock pagetitle %}
{% block pagetitle %}: {{ publication.citation }} - {{ publication.title }}{% endblock pagetitle %}
{% block breadcrumb_items %}
{{block.super}}
......@@ -46,6 +47,7 @@
{% endblock headsup %}
{% block content %}
{% is_edcol_admin request.user as is_edcol_admin %}
{% include 'journals/_publication_details.html' with publication=publication %}
......@@ -85,10 +87,20 @@
{{ author }} {% if not forloop.last %} · {% endif %}
{% endfor %}
</p>
{% if is_edcol_admin %}
{# This function is not available for public yet! #}
<h3>Institutes related to this Publication: <small>(adminstrator only)</small></h3>
<ul>
{% for institute in publication.institutes.all %}
<li>{{ institute }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% if request.user|is_in_group:'Editorial Administrators' %}
{% if is_edcol_admin %}
<hr>
<div class="row">
<div class="col-12">
......
......@@ -253,6 +253,13 @@ def validate_publication(request):
publication.authors_unregistered.add(publication.first_author_unregistered)
publication.authors_claims.add(*submission.authors_claims.all())
publication.authors_false_claims.add(*submission.authors_false_claims.all())
# Add Institutes to the publication
for author in publication.authors.all():
for institute in author.affiliations.active():
publication.institutes.add(institute)
# Save the beast
publication.save()
# Move file to final location
......
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