From 7386cb52e02371a82b981cd59a81972bea5dc51f Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sat, 17 Jul 2021 22:15:39 +0000 Subject: [PATCH] Allow filtering transactions by stack and month --- server/server/api/views.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/server/server/api/views.py b/server/server/api/views.py index ceecc83..9b1039d 100644 --- a/server/server/api/views.py +++ b/server/server/api/views.py @@ -2,6 +2,8 @@ from django.contrib.auth.models import User, Group from rest_framework import viewsets, permissions from server.api import serializers, models +from datetime import datetime + class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() @@ -36,4 +38,20 @@ class TransactionViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAuthenticated] def get_queryset(self): - return self.queryset.filter(stack__account__users=self.request.user) + queryset = self.queryset.filter(stack__account__users=self.request.user) + + if self.action == 'list': + month = self.request.query_params.get('month', '') + stack = self.request.query_params.get('stack', '') + + if month: + try: + dt = datetime.strptime(month, '%Y-%m') + except ValueError: + raise exceptions.ValidationError(dict(month='Should be YYYY-MM.')) + queryset = queryset.filter(created_at__year=dt.year) + queryset = queryset.filter(created_at__month=dt.month) + if stack: + queryset = queryset.filter(stack=stack) + + return queryset.order_by('-created_at', '-id')