diff --git a/scipost_django/journals/migrations/0115_publication_cf_citation.py b/scipost_django/journals/migrations/0115_publication_cf_citation.py new file mode 100644 index 0000000000000000000000000000000000000000..5e7a60ab1ae81e1ddc969c963936c7d30a7211ab --- /dev/null +++ b/scipost_django/journals/migrations/0115_publication_cf_citation.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-02-20 20:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('journals', '0114_journal_required_article_elements'), + ] + + operations = [ + migrations.AddField( + model_name='publication', + name='cf_citation', + field=models.CharField(blank=True, max_length=1024), + ), + ] diff --git a/scipost_django/journals/models/publication.py b/scipost_django/journals/models/publication.py index 3a17a2891620a70f8a08c33e15896c7e3e67a585..af0fb381dacdcbf3981c7419f1d0a33122238515 100644 --- a/scipost_django/journals/models/publication.py +++ b/scipost_django/journals/models/publication.py @@ -167,6 +167,7 @@ class Publication(models.Model): ) # Needs `auto_now` as its not explicity updated anywhere? # Calculated fields + cf_citation = models.CharField(max_length=1024, blank=True) cf_author_affiliation_indices_list = ArrayField( ArrayField( models.PositiveSmallIntegerField(blank=True, null=True), default=list @@ -361,30 +362,38 @@ class Publication(models.Model): @property def citation(self): + if self.cf_citation: + return self.cf_citation + citation = "" """Return Publication name in the preferred citation format.""" if self.in_issue and self.in_issue.in_volume: - return "{journal} {volume}, {paper_nr} ({year})".format( + citation = "{journal} {volume}, {paper_nr} ({year})".format( journal=self.in_issue.in_volume.in_journal.name_abbrev, volume=self.in_issue.in_volume.number, paper_nr=self.get_paper_nr(), year=self.publication_date.strftime("%Y"), ) elif self.in_issue and self.in_issue.in_journal: - return "{journal} {issue}, {paper_nr} ({year})".format( + citation = "{journal} {issue}, {paper_nr} ({year})".format( journal=self.in_issue.in_journal.name_abbrev, issue=self.in_issue.number, paper_nr=self.get_paper_nr(), year=self.publication_date.strftime("%Y"), ) elif self.in_journal: - return "{journal} {paper_nr} ({year})".format( + citation = "{journal} {paper_nr} ({year})".format( journal=self.in_journal.name_abbrev, paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y"), ) - return "{paper_nr} ({year})".format( - paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y") - ) + else: + citation = "{paper_nr} ({year})".format( + paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y") + ) + self.cf_citation = citation + self.save() + return citation + def get_cc_license_URI(self): for (key, val) in CC_LICENSES_URI: