From 5e55f6efe9fe0fe44d733a29d9e9c12d8186fe4d Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Thu, 27 Jul 2017 15:15:11 +0200
Subject: [PATCH] Improve metadata: manage per issue/publication

---
 journals/helpers.py                             | 12 ++++++++++++
 .../templates/journals/manage_metadata.html     | 13 ++++++++++++-
 journals/urls/general.py                        |  6 ++++++
 journals/views.py                               | 17 +++++++++++++----
 4 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/journals/helpers.py b/journals/helpers.py
index d1d656c2b..6c097de27 100644
--- a/journals/helpers.py
+++ b/journals/helpers.py
@@ -1,6 +1,18 @@
+import re
+
 from .exceptions import JournalNameError, PaperNumberError
 
 
+def issue_doi_label_from_doi_label(doi_label):
+    """
+    Strip the last digits block from the label.
+    """
+    m = re.match(r'[a-zA-Z]+.[0-9]+.[0-9]+', doi_label)
+    s = m.start()
+    e = m.end()
+    return doi_label[s:e]
+
+
 def journal_name_abbrev_citation(journal_name):
     if journal_name == 'SciPostPhys':
         return 'SciPost Phys.'
diff --git a/journals/templates/journals/manage_metadata.html b/journals/templates/journals/manage_metadata.html
index 9f9f358af..ba798601b 100644
--- a/journals/templates/journals/manage_metadata.html
+++ b/journals/templates/journals/manage_metadata.html
@@ -23,7 +23,18 @@ event: "focusin"
 
 <div class="row">
     <div class="col-12">
-        <h1 class="highlight">Manage Publications Metadata</h1>
+        <h1 class="highlight">Manage Publications Metadata{% if issue_doi_label %} for issue {{ issue_doi_label }}{% endif %}</h1>
+	{% if issue_doi_label %}
+	<h3>Return to the <a href="{% url 'journals:manage_metadata' %}">Main manage metadata page</a></h3>
+	{% endif %}
+	<h3>Manage metadata per issue:</h3>
+        <ul>
+          {% for issue in issues %}
+          <li>
+            <a href="{% url 'journals:manage_metadata' issue_doi_label=issue.doi_label %}">{{ issue }}</a>
+          </li>
+          {% endfor %}
+        </ul>
     </div>
 </div>
 
diff --git a/journals/urls/general.py b/journals/urls/general.py
index 4352f06a2..648fb35f2 100644
--- a/journals/urls/general.py
+++ b/journals/urls/general.py
@@ -41,6 +41,12 @@ urlpatterns = [
     url(r'^add_new_unreg_author/(?P<publication_id>[0-9]+)$',
         journals_views.add_new_unreg_author,
         name='add_new_unreg_author'),
+    url(r'^manage_metadata/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+        journals_views.manage_metadata,
+        name='manage_metadata'),
+    url(r'^manage_metadata/(?P<issue_doi_label>[a-zA-Z]+.[0-9]+.[0-9]+)$',
+        journals_views.manage_metadata,
+        name='manage_metadata'),
     url(r'^manage_metadata/$',
         journals_views.manage_metadata,
         name='manage_metadata'),
diff --git a/journals/views.py b/journals/views.py
index d818c435f..a6fa6cf55 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -16,7 +16,7 @@ from django.db import transaction
 from django.http import HttpResponse
 
 from .exceptions import PaperNumberingError
-from .helpers import paper_nr_string
+from .helpers import paper_nr_string, issue_doi_label_from_doi_label
 from .models import Journal, Issue, Publication, UnregisteredAuthor, Deposit, DOAJDeposit
 from .forms import FundingInfoForm, InitiatePublicationForm, ValidatePublicationForm,\
                    UnregisteredAuthorForm, CreateMetadataXMLForm, CitationListBibitemsForm
@@ -271,11 +271,19 @@ def validate_publication(request):
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
-def manage_metadata(request):
-    publications = Publication.objects.order_by('-publication_date', '-paper_nr')
+def manage_metadata(request, issue_doi_label=None, doi_label=None):
+    issues = Issue.objects.all().order_by('-until_date')
+    publications = Publication.objects.all()
+    if doi_label:
+        issue_doi_label = issue_doi_label_from_doi_label(doi_label)
+    if issue_doi_label:
+        publications = publications.filter(in_issue__doi_label=issue_doi_label)
+    publications.order_by('-publication_date', '-paper_nr')
     associate_grant_form = GrantSelectForm()
     associate_generic_funder_form = FunderSelectForm()
     context = {
+        'issues': issues,
+        'issue_doi_label': issue_doi_label,
         'publications': publications,
         'associate_grant_form': associate_grant_form,
         'associate_generic_funder_form': associate_generic_funder_form,
@@ -437,7 +445,8 @@ def add_associated_grant(request, doi_label):
         publication.grants.add(grant_select_form.cleaned_data['grant'])
         publication.save()
         messages.success(request, 'Grant added to publication %s' % str(publication))
-    return redirect(reverse('journals:manage_metadata'))
+    return redirect(reverse('journals:manage_metadata',
+                            kwargs={'doi_label': publication.doi_label}))
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
-- 
GitLab