From e9b4609d20e35262afcdc236ba230dc63d0b5f9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org>
Date: Tue, 26 Oct 2021 21:04:08 +0200
Subject: [PATCH] Improve logic and display

---
 scipost_django/ontology/context_processors.py | 12 +++----
 scipost_django/ontology/forms.py              | 36 ++++++++++++++++---
 scipost_django/ontology/views.py              | 13 ++++---
 .../static/scipost/assets/css/_navbar.scss    |  4 +--
 .../scipost/_index_publications.html          | 19 ++++++++++
 .../scipost/templates/scipost/index.html      |  3 +-
 6 files changed, 69 insertions(+), 18 deletions(-)

diff --git a/scipost_django/ontology/context_processors.py b/scipost_django/ontology/context_processors.py
index bf92c16b2..2b8e0d02f 100644
--- a/scipost_django/ontology/context_processors.py
+++ b/scipost_django/ontology/context_processors.py
@@ -17,11 +17,11 @@ def ontology_processor(request):
     }
     initial = {}
     if request.session.get('session_acad_field_slug', None):
-        context['session_acad_field'] = AcademicField.objects.get(
-            slug=request.session.get('session_acad_field_slug'))
-        initial['acad_field'] = context['session_acad_field']
-    if request.session.get('session_specialty_slug', None):
-        context['session_specialty'] = Specialty.objects.get(
-            slug=request.session.get('session_specialty_slug'))
+        try:
+            context['session_acad_field'] = AcademicField.objects.get(
+                slug=request.session.get('session_acad_field_slug'))
+            initial['acad_field_slug'] = request.session.get('session_acad_field_slug')
+        except AcademicField.DoesNotExist:
+            context['session_acad_field'] = None
     context['session_acad_field_form'] = SessionAcademicFieldForm(initial=initial)
     return context
diff --git a/scipost_django/ontology/forms.py b/scipost_django/ontology/forms.py
index 37a69732d..7177bdbbf 100644
--- a/scipost_django/ontology/forms.py
+++ b/scipost_django/ontology/forms.py
@@ -10,13 +10,39 @@ from crispy_bootstrap5.bootstrap5 import FloatingField
 from dal import autocomplete
 
 from .constants import TOPIC_RELATIONS_ASYM
-from .models import AcademicField, Tag, Topic
+from .models import Branch, AcademicField, Tag, Topic
+
+
+def academic_field_slug_choices():
+    choices = (
+        ('All', (
+            ('all', 'All'),
+        )),
+    )
+    for branch in Branch.objects.all():
+        if branch.name == 'Multidisciplinary':
+            continue
+        subchoices = ()
+        for acad_field in branch.academic_fields.all():
+            subchoices += (
+                (acad_field.slug, acad_field.name),
+            )
+        choices += (
+            (branch.name, subchoices),
+        )
+    return choices
 
 
 class SessionAcademicFieldForm(forms.Form):
-    acad_field = forms.ModelChoiceField(
-        queryset=AcademicField.objects.all(),
-        label='Academic Field'
+    # acad_field = forms.ModelChoiceField(
+    #     queryset=AcademicField.objects.all(),
+    #     label='Academic Field',
+    #     empty_label=None
+    #     choices=academic_field_choices()
+    # )
+    acad_field_slug = forms.ChoiceField(
+        label='Academic Field',
+        choices=academic_field_slug_choices()
     )
 
     def __init__(self, *args, **kwargs):
@@ -25,7 +51,7 @@ class SessionAcademicFieldForm(forms.Form):
         self.helper.disable_csrf = True
         self.helper.show_errors = True
         self.helper.layout = Layout(
-            Div(FloatingField('acad_field'))
+            Div(FloatingField('acad_field_slug'))
         )
 
 
diff --git a/scipost_django/ontology/views.py b/scipost_django/ontology/views.py
index 1cb8e698b..1ca413595 100644
--- a/scipost_django/ontology/views.py
+++ b/scipost_django/ontology/views.py
@@ -30,10 +30,15 @@ def set_session_acad_field(request):
     """Set the Academic Field to be viewed in the current user session."""
     form = SessionAcademicFieldForm(request.GET or None)
     if form.is_valid():
-        request.session['session_acad_field_slug'] = form.cleaned_data['acad_field'].slug
-    form = SessionAcademicFieldForm(initial={
-        'acad_field': AcademicField.objects.get(slug=request.session['session_acad_field_slug'])
-    })
+        request.session['session_acad_field_slug'] = form.cleaned_data['acad_field_slug']
+    try:
+        initial = {
+            'acad_field_slug': AcademicField.objects.get(
+                slug=request.session['session_acad_field_slug']).slug
+        }
+    except AcademicField.DoesNotExist:
+        initial = {}
+    form = SessionAcademicFieldForm(initial=initial)
     response = render(
         request,
         'ontology/session_acad_field_form.html',
diff --git a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss
index 199a79f4f..297238abf 100644
--- a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss
+++ b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss
@@ -287,10 +287,10 @@ header .nav-item {
 
 #session_acad_field_form {
 
-    div #div_id_acad_field {
+    div #div_id_acad_field_slug {
 	margin: 0rem !important;
 
-	#id_acad_field {
+	#id_acad_field_slug {
 	    border: 2px solid $scipost-lightblue;
 	    border-radius: 2px;
 	    background-color: $scipost-darkblue;
diff --git a/scipost_django/scipost/templates/scipost/_index_publications.html b/scipost_django/scipost/templates/scipost/_index_publications.html
index 6d297de0d..d1e7e2748 100644
--- a/scipost_django/scipost/templates/scipost/_index_publications.html
+++ b/scipost_django/scipost/templates/scipost/_index_publications.html
@@ -1,3 +1,5 @@
+{% load journals_extras %}
+
 <ul class="list-group list-group-flush px-3 mb-3">
   {% for publication in publications %}
     <li class="list-group-item py-2">
@@ -9,3 +11,20 @@
     </li>
   {% endfor %}
 </ul>
+
+{% if not session_acad_field.journals.active|length > 0 %}
+  <div class="card m-2">
+    <div class="card-header text-center">
+      <h2 class="p-2 text-white bg-danger">We are not yet active in<br>{{ session_acad_field }}</h2>
+    </div>
+    <div class="card-body">
+      <h3>Interested in helping us set things up?</h3>
+      <p>
+	<a href="mailto:admin@{{ request.get_host }}">Email us</a>
+	your suggestions for Editorial Fellows.
+      </p>
+    </div>
+  </div>
+{% else %}
+  <p class="mb-3 px-3"><a href="{% url 'journals:publications' %}">View all Publications</a></p>
+{% endif %}
diff --git a/scipost_django/scipost/templates/scipost/index.html b/scipost_django/scipost/templates/scipost/index.html
index 012ab3db9..8c08daeb1 100644
--- a/scipost_django/scipost/templates/scipost/index.html
+++ b/scipost_django/scipost/templates/scipost/index.html
@@ -3,6 +3,7 @@
 {% load render_bundle from webpack_loader %}
 {% load static %}
 
+
 {% block headsup %}
   {{ block.super }}
   <style>
@@ -25,6 +26,7 @@
 {% block pagetitle %}Homepage{% endblock pagetitle %}
 
 {% block content %}
+
   <div class="row">
     <div class="col-md-4">
       <!-- Latest publications -->
@@ -37,7 +39,6 @@
 	     hx-trigger="load, session-acad-field-set from:body"
 	>
 	</div>
-        <p class="mb-3 px-3"><a href="{% url 'journals:publications' %}">View all Publications</a></p>
       </div><!-- End latest publications -->
     </div>
 
-- 
GitLab