From bdad58558ed1ace75e7cea2b594b6cdf40276113 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Tue, 26 Feb 2019 08:41:50 +0100
Subject: [PATCH] Add method to toggle Subsidy amount public visibility

---
 finances/templates/finances/_subsidy_card.html |  2 +-
 finances/urls.py                               |  3 +++
 finances/views.py                              | 15 +++++++++++++++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/finances/templates/finances/_subsidy_card.html b/finances/templates/finances/_subsidy_card.html
index bace5687a..8cfdee9cc 100644
--- a/finances/templates/finances/_subsidy_card.html
+++ b/finances/templates/finances/_subsidy_card.html
@@ -27,7 +27,7 @@
 	  <td>Description:</td><td>{{ subsidy.description }}</td>
 	</tr>
 	<tr>
-	  <td>Amount:</td><td>{% if subsidy.amount_publicly_shown or perms.scipost.can_manage_subsidies %}&euro;{{ subsidy.amount }}{% else %}-{% endif %}{% if perms.scipost.can_manage_subsidies or "can_view_org_contacts" in user_org_perms %} <span class="text-muted">[publicly {% if subsidy.amount_publicly_shown %}visible{% else %}invisible{% endif %}]</span>{% endif %}</td>
+	  <td>Amount:</td><td>{% if subsidy.amount_publicly_shown or perms.scipost.can_manage_subsidies or "can_view_org_contacts" in user_org_perms %}&euro;{{ subsidy.amount }}{% else %}-{% endif %}{% if perms.scipost.can_manage_subsidies or "can_view_org_contacts" in user_org_perms %} {% if subsidy.amount_publicly_shown %}<span class="text-success">publicly visible</span>{% else %}<span class="text-danger">publicly invisible</span>{% endif %}&nbsp;&nbsp;<a href="{% url 'finances:subsidy_toggle_amount_public_visibility' subsidy_id=subsidy.id %}" class="small">Make it {% if subsidy.amount_publicly_shown %}in{% endif %}visible</a>{% endif %}</td>
 	</tr>
 	<tr>
 	  <td>Date:</td><td>{{ subsidy.date }}</td>
diff --git a/finances/urls.py b/finances/urls.py
index 1d85d1dd2..ed97e7ef0 100644
--- a/finances/urls.py
+++ b/finances/urls.py
@@ -18,6 +18,9 @@ urlpatterns = [
     url(r'^subsidies/(?P<pk>[0-9]+)/delete/$', views.SubsidyDeleteView.as_view(),
         name='subsidy_delete'),
     url(r'^subsidies/(?P<pk>[0-9]+)/$', views.SubsidyDetailView.as_view(), name='subsidy_details'),
+    url(r'^subsidies/(?P<subsidy_id>[0-9]+)/toggle_amount_visibility/$',
+        views.subsidy_toggle_amount_public_visibility,
+        name='subsidy_toggle_amount_public_visibility'),
     url(r'^subsidies/(?P<subsidy_id>[0-9]+)/attachments/add/$',
         views.SubsidyAttachmentCreateView.as_view(),
         name='subsidyattachment_create'),
diff --git a/finances/views.py b/finances/views.py
index 4addb6a7e..0b7939f46 100644
--- a/finances/views.py
+++ b/finances/views.py
@@ -88,6 +88,21 @@ class SubsidyDetailView(DetailView):
     model = Subsidy
 
 
+def subsidy_toggle_amount_public_visibility(request, subsidy_id):
+    """
+    Method to toggle the public visibility of the amount of a Subsidy.
+    Callable by Admin and Contacts for the relevant Organization.
+    """
+    subsidy = get_object_or_404(Subsidy, pk=subsidy_id)
+    if not (request.user.has_perm('scipost.can_manage_subsidies') or
+            request.user.has_perm('can_view_org_contacts', subsidy.organization)):
+        raise PermissionDenied
+    subsidy.amount_publicly_shown = not subsidy.amount_publicly_shown
+    subsidy.save()
+    messages.success(request, 'Amount visibility set to %s' % subsidy.amount_publicly_shown)
+    return redirect(subsidy.get_absolute_url())
+
+
 class SubsidyAttachmentCreateView(PermissionsMixin, CreateView):
     """
     Create a new SubsidyAttachment.
-- 
GitLab