From c731ff48bd1e08cedc5df437a82235c48dcf7a67 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Mon, 27 Mar 2017 22:48:55 +0200
Subject: [PATCH] Improve journals html in models

---
 journals/admin.py                             | 26 ++++++++++-
 journals/models.py                            | 41 +++++------------
 .../journals/_publication_citations.html      | 46 +++++++++++++++++++
 .../journals/publication_detail.html          | 27 +++++------
 journals/views.py                             | 10 ++--
 5 files changed, 101 insertions(+), 49 deletions(-)
 create mode 100644 journals/templates/journals/_publication_citations.html

diff --git a/journals/admin.py b/journals/admin.py
index 711eca57f..acd232a6a 100644
--- a/journals/admin.py
+++ b/journals/admin.py
@@ -1,27 +1,49 @@
-from django.contrib import admin
+from django.contrib import admin, messages
 
-from journals.models import Journal, Volume, Issue, Publication
+from journals.models import Journal, Volume, Issue, Publication, Deposit
 
 
 class JournalAdmin(admin.ModelAdmin):
     search_fields = ['name']
 
+
 admin.site.register(Journal, JournalAdmin)
 
 
 class VolumeAdmin(admin.ModelAdmin):
     pass
 
+
 admin.site.register(Volume, VolumeAdmin)
 
 
 class IssueAdmin(admin.ModelAdmin):
     pass
 
+
 admin.site.register(Issue, IssueAdmin)
 
 
 class PublicationAdmin(admin.ModelAdmin):
     search_fields = ['title', 'author_list']
 
+
 admin.site.register(Publication, PublicationAdmin)
+
+
+class DepositAdmin(admin.ModelAdmin):
+    list_display = ('doi_batch_id', 'publication', 'deposition_date',)
+    readonly_fields = ('publication', 'doi_batch_id', 'metadata_xml', 'deposition_date',)
+    actions = None
+
+    def message_user(self, request, *args):
+        return messages.warning(request, 'Sorry, Deposit\'s are readonly.')
+
+    def has_add_permission(self, *args):
+        return False
+
+    def has_delete_permission(self, *args):
+        return False
+
+
+admin.site.register(Deposit, DepositAdmin)
diff --git a/journals/models.py b/journals/models.py
index e411c9835..ac6a47892 100644
--- a/journals/models.py
+++ b/journals/models.py
@@ -5,7 +5,7 @@ from django.utils import timezone
 
 from .constants import SCIPOST_JOURNALS, SCIPOST_JOURNALS_DOMAINS,\
                        STATUS_DRAFT, STATUS_PUBLISHED, ISSUE_STATUSES
-from .helpers import paper_nr_string, journal_name_abbrev_citation
+from .helpers import paper_nr_string, journal_name_abbrev_doi, journal_name_abbrev_citation
 from .managers import IssueManager, PublicationManager
 
 from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS
@@ -30,6 +30,12 @@ class Journal(models.Model):
     def __str__(self):
         return self.name
 
+    def get_abbreviation_citation(self):
+        return journal_name_abbrev_citation(self.name)
+
+    def get_abbreviation_doi(self):
+        return journal_name_abbrev_doi(self.name)
+
 
 class Volume(models.Model):
     in_journal = models.ForeignKey(Journal, on_delete=models.CASCADE)
@@ -132,38 +138,15 @@ class Publication(models.Model):
                   + ', published ' + self.publication_date.strftime('%Y-%m-%d'))
         return header
 
+    def get_paper_nr(self):
+        return paper_nr_string(self.paper_nr)
+
     def citation(self):
-        return (journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name)
+        return (self.in_issue.in_volume.in_journal.get_abbreviation_citation()
                 + ' ' + str(self.in_issue.in_volume.number)
-                + ', ' + paper_nr_string(self.paper_nr)
+                + ', ' + self.get_paper_nr()
                 + ' (' + self.publication_date.strftime('%Y') + ')')
 
-    def citation_for_web(self):
-        citation = ('{{ abbrev }} <strong>{{ volume_nr }}</strong>'
-                    ', {{ paper_nr }} ({{ year }})')
-        template = Template(citation)
-        context = Context(
-            {'abbrev': journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name),
-             'volume_nr': str(self.in_issue.in_volume.number),
-             'issue_nr': str(self.in_issue.number),
-             'paper_nr': paper_nr_string(self.paper_nr),
-             'year': self.publication_date.strftime('%Y'), })
-        return template.render(context)
-
-    def citation_for_web_linked(self):
-        citation = ('<a href="{% url \'scipost:publication_detail\' doi_string=doi_string %}">'
-                    '{{ abbrev }} <strong>{{ volume_nr }}</strong>'
-                    ', {{ paper_nr }} ({{ year }})</a>')
-        template = Template(citation)
-        context = Context(
-            {'doi_string': self.doi_string,
-             'abbrev': journal_name_abbrev_citation(self.in_issue.in_volume.in_journal.name),
-             'volume_nr': str(self.in_issue.in_volume.number),
-             'issue_nr': str(self.in_issue.number),
-             'paper_nr': paper_nr_string(self.paper_nr),
-             'year': self.publication_date.strftime('%Y'), })
-        return template.render(context)
-
     def citations_as_ul(self):
         output = '<ul>'
         context = Context({})
diff --git a/journals/templates/journals/_publication_citations.html b/journals/templates/journals/_publication_citations.html
new file mode 100644
index 000000000..a7954a898
--- /dev/null
+++ b/journals/templates/journals/_publication_citations.html
@@ -0,0 +1,46 @@
+XX
+{% comment %}
+output = '<ul>'
+context = Context({})
+nr = 0
+{
+    first_author_given_name: 'John',
+    first_author_surname: 'Doe',
+    multiauthors: true
+    article_title: 'Phase transitions on 2D Ising model',
+    journal_abbreviation: 'SciPostPhys',
+    vol: ''
+
+}
+for cit in self.citedby:
+    output += '<li>{{ auth_' + str(nr) + ' }}'
+    context['auth_' + str(nr)] = (cit['first_author_given_name']
+                                  + ' ' + cit['first_author_surname'])
+    if cit['multiauthors']:
+        output += ' <em>et al.</em>'
+    output += (', <em>{{ title_' + str(nr) + ' }}</em>, <br/>'
+               '{{ journal_abbrev_' + str(nr) + ' }}')
+    context['title_' + str(nr)] = cit['article_title']
+    context['journal_abbrev_' + str(nr)] = cit['journal_abbreviation']
+    if cit['volume']:
+        context['volume_' + str(nr)] = cit['volume']
+        output += ' <strong>{{ volume_' + str(nr) + ' }}</strong>'
+    output += ', '
+    if cit['first_page']:
+        output += '{{ first_page_' + str(nr) + ' }}'
+        context['first_page_' + str(nr)] = cit['first_page']
+    elif cit['item_number']:
+        output += '{{ item_number_' + str(nr) + ' }}'
+        context['item_number_' + str(nr)] = cit['item_number']
+    output += (' ({{ year_' + str(nr) + ' }}) '
+               '<a href="https://doi.org/{{ doi_' + str(nr) + ' }}" '
+               'target="_blank">[Crossref]</a>')
+    context['year_' + str(nr)] = cit['year']
+    context['doi_' + str(nr)] = cit['doi']
+    output += '</li>'
+    nr += 1
+output += '</ul>'
+template = Template(output)
+return template.render(context)
+
+{% endcomment %}
diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html
index 8b9d46ecd..b903b60bf 100644
--- a/journals/templates/journals/publication_detail.html
+++ b/journals/templates/journals/publication_detail.html
@@ -43,21 +43,22 @@
 {% include 'journals/_publication_details.html' with publication=publication %}
 
 {% if publication.citedby|length >= 1 %}
-<hr>
-<div class="row">
-    <div class="col-6 col-md-2">
-        <h3 class="mb-2">Cited by {{ publication.citedby|length }}</h3>
-        <button class="btn btn-sm btn-secondary" id="citationslistbutton">Toggle view</button>
-    </div>
-    <div class="col-6 col-md-2">
-        <img src="{% static 'scipost/images/citedby.gif' %}" alt="Crossref Cited-by" width="64" />
+    <hr>
+    <div class="row">
+        <div class="col-6 col-md-2">
+            <h3 class="mb-2">Cited by {{ publication.citedby|length }}</h3>
+            <button class="btn btn-sm btn-secondary" id="citationslistbutton">Toggle view</button>
+        </div>
+        <div class="col-6 col-md-2">
+            <img src="{% static 'scipost/images/citedby.gif' %}" alt="Crossref Cited-by" width="64" />
+        </div>
     </div>
-</div>
-<div class="row" id="citationslist">
-    <div class="col-12">
-        {{ publication.citations_as_ul }}
+    <div class="row" id="citationslist">
+        <div class="col-12">
+            {# {% include 'journals/_publication_citations.html' with publication=publication %}#}
+            {{ publication.citations_as_ul }}
+        </div>
     </div>
-</div>
 {% endif %}
 
 <div class="row">
diff --git a/journals/views.py b/journals/views.py
index 5a4bf03f7..8fefa369b 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -13,7 +13,7 @@ from django.db import transaction
 from django.http import HttpResponse
 
 from .exceptions import PaperNumberingError
-from .helpers import journal_name_abbrev_citation, journal_name_abbrev_doi, paper_nr_string
+from .helpers import paper_nr_string
 from .models import Issue, Publication, UnregisteredAuthor
 from .forms import FundingInfoForm, InitiatePublicationForm, ValidatePublicationForm,\
                    UnregisteredAuthorForm, CreateMetadataXMLForm, CitationListBibitemsForm
@@ -143,7 +143,7 @@ def initiate_publication(request):
                 if paper_nr > 999:
                     raise PaperNumberingError(paper_nr)
             doi_label = (
-                journal_name_abbrev_doi(current_issue.in_volume.in_journal.name)
+                current_issue.in_volume.in_journal.get_abbreviation_doi()
                 + '.' + str(current_issue.in_volume.number)
                 + '.' + str(current_issue.number) + '.' + paper_nr_string(paper_nr)
             )
@@ -153,7 +153,7 @@ def initiate_publication(request):
                 '\ttitle={{' + submission.title + '}},\n'
                 '\tauthor={' + submission.author_list.replace(',', ' and') + '},\n'
                 '\tjournal={'
-                + journal_name_abbrev_citation(current_issue.in_volume.in_journal.name)
+                + current_issue.in_volume.in_journal.get_abbreviation_citation()
                 + '},\n'
                 '\tvolume={' + str(current_issue.in_volume.number) + '},\n'
                 '\tissue={' + str(current_issue.number) + '},\n'
@@ -222,7 +222,7 @@ def validate_publication(request):
             # Move file to final location
             initial_path = publication.pdf_file.path
             new_dir = (settings.MEDIA_ROOT + publication.in_issue.path + '/'
-                       + paper_nr_string(publication.paper_nr))
+                       + publication.get_paper_nr())
             new_path = new_dir + '/' + publication.doi_label.replace('.', '_') + '.pdf'
             os.makedirs(new_dir)
             os.rename(initial_path, new_path)
@@ -456,7 +456,7 @@ def create_metadata_xml(request, doi_string):
         '<journal_metadata>\n'
         '<full_title>' + publication.in_issue.in_volume.in_journal.name + '</full_title>\n'
         '<abbrev_title>'
-        + journal_name_abbrev_citation(publication.in_issue.in_volume.in_journal.name) +
+        + publication.in_issue.in_volume.in_journal.get_abbreviation_citation() +
         '</abbrev_title>\n'
         '<issn>' + publication.in_issue.in_volume.in_journal.issn + '</issn>\n'
         '<doi_data>\n'
-- 
GitLab