From 0f4f46444a82b2b0968b13f66c146823ad6080e7 Mon Sep 17 00:00:00 2001
From: George Katsikas <giorgakis.katsikas@gmail.com>
Date: Mon, 18 Mar 2024 16:02:37 +0100
Subject: [PATCH] add notes creation/view for subsidies

fixes #214
---
 .../templates/finances/_hx_subsidy_list.html  |  3 +++
 .../templates/finances/_subsidy_details.html  |  3 +++
 scipost_django/finances/views.py              | 23 +++++++++++++++++--
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/scipost_django/finances/templates/finances/_hx_subsidy_list.html b/scipost_django/finances/templates/finances/_hx_subsidy_list.html
index 0efab5b8e..c5d893554 100644
--- a/scipost_django/finances/templates/finances/_hx_subsidy_list.html
+++ b/scipost_django/finances/templates/finances/_hx_subsidy_list.html
@@ -6,6 +6,9 @@
       </a>
     </td>
     <td>
+      {% if subsidy.nr_visible_notes %}
+      <span class="text-primary me-1" data-bs-placement='bottom' data-bs-toggle="tooltip" data-bs-html="true" title="There exist {{ subsidy.nr_visible_notes }} notes related to this Subsidy.">{% include 'bi/info-circle-fill.html' %}</span>
+      {% endif %}
       <a href="{{ subsidy.get_absolute_url }}">
 	{{ subsidy.get_subsidy_type_display }}
       </a>
diff --git a/scipost_django/finances/templates/finances/_subsidy_details.html b/scipost_django/finances/templates/finances/_subsidy_details.html
index 6722e3012..8e6dc12f4 100644
--- a/scipost_django/finances/templates/finances/_subsidy_details.html
+++ b/scipost_django/finances/templates/finances/_subsidy_details.html
@@ -110,6 +110,9 @@
   </div>
 </div>
 
+<!-- Notes -->
+{% include "pins/_hx_notes_list.html" with object=subsidy %}
+
 
 {% if 'edadmin' in user_roles %}
   {% if subsidy.amount_publicly_shown %}
diff --git a/scipost_django/finances/views.py b/scipost_django/finances/views.py
index ceb0db23e..886822cae 100644
--- a/scipost_django/finances/views.py
+++ b/scipost_django/finances/views.py
@@ -7,7 +7,10 @@ from itertools import accumulate
 import mimetypes
 from dal import autocomplete
 
-from django.db.models import Q
+from django.contrib.contenttypes.models import ContentType
+from django.db import models
+from django.db.models import Q, Count, OuterRef, Subquery
+from django.db.models.functions import Coalesce
 from django.template.response import TemplateResponse
 from django.utils.html import format_html
 import matplotlib
@@ -49,6 +52,7 @@ from journals.models import Journal, Publication
 from organizations.models import Organization
 from scipost.mixins import PermissionsMixin
 from scipost.permissions import HTMXPermissionsDenied, HTMXResponse
+from pins.models import Note
 
 
 def publishing_years():
@@ -406,6 +410,21 @@ def _hx_subsidy_list(request):
         subsidies = form.search_results(request.user)
     else:
         subsidies = Subsidy.objects.all()
+
+    content_type = ContentType.objects.get_for_model(Subsidy)
+    subsidies = subsidies.annotate(
+        nr_visible_notes=Coalesce(
+            Subquery(
+                Note.objects.visible_for(request.user, content_type.id, OuterRef("id"))
+                .values("regarding_object_id")
+                .annotate(nr=Count("id"))
+                .values("nr"),
+                output_field=models.IntegerField(),
+            ),
+            0,
+        )
+    )
+
     paginator = Paginator(subsidies, 16)
     page_nr = request.GET.get("page")
     page_obj = paginator.get_page(page_nr)
@@ -421,7 +440,7 @@ def _hx_subsidy_list(request):
 
 
 @permission_required("scipost.can_manage_subsidies", raise_exception=True)
-def allocate_subsidy(request, subsidy_id:int):
+def allocate_subsidy(request, subsidy_id: int):
     subsidy = get_object_or_404(Subsidy, pk=subsidy_id)
     subsidy.allocate()
     return redirect(reverse("finances:subsidy_details", kwargs={"pk": subsidy.id}))
-- 
GitLab