From e2816fb066c0d0ea2c3386acea9bd23be64275e2 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Tue, 13 Oct 2020 06:03:24 +0200
Subject: [PATCH] Add basic SubsidyListAPIView (with csv option)

---
 api/urls.py                 |  1 +
 finances/api/serializers.py | 18 ++++++++++++++++++
 finances/api/urls.py        | 18 ++++++++++++++++++
 finances/api/views.py       | 24 ++++++++++++++++++++++++
 requirements.txt            |  1 +
 5 files changed, 62 insertions(+)
 create mode 100644 finances/api/serializers.py
 create mode 100644 finances/api/urls.py
 create mode 100644 finances/api/views.py

diff --git a/api/urls.py b/api/urls.py
index 9bf2d58c3..dc61d316c 100644
--- a/api/urls.py
+++ b/api/urls.py
@@ -29,6 +29,7 @@ urlpatterns += [
         views.OmniAuthUserInfoView.as_view(),
         name='omniauth_userinfo'
     ),
+    path('finances/', include('finances.api.urls')),
     path('journals/', include('journals.api.urls')),
     path('organizations/', include('organizations.api.urls')),
 
diff --git a/finances/api/serializers.py b/finances/api/serializers.py
new file mode 100644
index 000000000..f22b49441
--- /dev/null
+++ b/finances/api/serializers.py
@@ -0,0 +1,18 @@
+__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from rest_framework import serializers
+
+from organizations.api.serializers import OrganizationSerializer
+
+from ..models import Subsidy
+
+
+class SubsidySerializer(serializers.ModelSerializer):
+    organization = serializers.CharField()#OrganizationSerializer()
+    subsidy_type = serializers.CharField(source='get_subsidy_type_display', read_only=True)
+
+    class Meta:
+        model = Subsidy
+        fields = '__all__'
diff --git a/finances/api/urls.py b/finances/api/urls.py
new file mode 100644
index 000000000..da5f5c962
--- /dev/null
+++ b/finances/api/urls.py
@@ -0,0 +1,18 @@
+__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.urls import path
+
+from finances.api import views as api_views
+
+
+urlpatterns = [
+
+    path ( # /api/finances/subsidies
+        'subsidies',
+        api_views.SubsidyListAPIView.as_view(),
+        name='subsidies'
+    ),
+
+]
diff --git a/finances/api/views.py b/finances/api/views.py
new file mode 100644
index 000000000..0c10b8912
--- /dev/null
+++ b/finances/api/views.py
@@ -0,0 +1,24 @@
+__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from rest_framework.generics import ListAPIView, RetrieveAPIView
+from rest_framework.permissions import BasePermission
+from rest_framework.settings import api_settings
+from rest_framework_csv import renderers as r
+
+from ..models import Subsidy
+from .serializers import SubsidySerializer
+
+
+class CanManageSubsidies(BasePermission):
+    def has_permission(self, request, view):
+        return request.user.has_perm('scipost:can_manage_subsidies')
+
+
+class SubsidyListAPIView(ListAPIView):
+    pagination_class = None
+    permission_classes = [CanManageSubsidies]
+    queryset = Subsidy.objects.all()
+    renderer_classes = tuple(api_settings.DEFAULT_RENDERER_CLASSES) + (r.CSVRenderer, )
+    serializer_class = SubsidySerializer
diff --git a/requirements.txt b/requirements.txt
index 4ba2e302f..65021f9c0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -25,6 +25,7 @@ django-oauth-toolkit==1.3.2	# 2020-09-03
 django-silk==2.0.0
 django-webpack-loader==0.5
 django-maintenancemode-2==1.1.11
+djangorestframework-csv		# 2020-10-13
 
 plotly==4.6.0			# 2020-05-05
 
-- 
GitLab