feat: update finance views
Browse files- finance/views.py +61 -2
finance/views.py
CHANGED
|
@@ -1,3 +1,62 @@
|
|
| 1 |
-
from
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
# Create your views here.
|
|
|
|
| 1 |
+
from rest_framework import viewsets, permissions
|
| 2 |
+
from rest_framework.response import Response
|
| 3 |
+
from rest_framework.decorators import action
|
| 4 |
+
from django.db.models import Sum
|
| 5 |
+
from .models import Transaction, Budget, Goal, Subscription
|
| 6 |
+
from .serializers import TransactionSerializer, BudgetSerializer, GoalSerializer, SubscriptionSerializer
|
| 7 |
+
|
| 8 |
+
class TransactionViewSet(viewsets.ModelViewSet):
|
| 9 |
+
serializer_class = TransactionSerializer
|
| 10 |
+
permission_classes = [permissions.IsAuthenticated]
|
| 11 |
+
|
| 12 |
+
def get_queryset(self):
|
| 13 |
+
return Transaction.objects.filter(user=self.request.user)
|
| 14 |
+
|
| 15 |
+
def perform_create(self, serializer):
|
| 16 |
+
serializer.save(user=self.request.user)
|
| 17 |
+
|
| 18 |
+
class BudgetViewSet(viewsets.ModelViewSet):
|
| 19 |
+
serializer_class = BudgetSerializer
|
| 20 |
+
permission_classes = [permissions.IsAuthenticated]
|
| 21 |
+
|
| 22 |
+
def get_queryset(self):
|
| 23 |
+
user = self.request.user
|
| 24 |
+
budgets = Budget.objects.filter(user=user)
|
| 25 |
+
for budget in budgets:
|
| 26 |
+
cat_key = budget.category_key
|
| 27 |
+
filter_keys = ['dining', 'food'] if cat_key in ['dining', 'food'] else [cat_key]
|
| 28 |
+
expenses_sum = Transaction.objects.filter(
|
| 29 |
+
user=user,
|
| 30 |
+
category_key__in=filter_keys,
|
| 31 |
+
amount__lt=0
|
| 32 |
+
).aggregate(total=Sum('amount'))['total'] or 0
|
| 33 |
+
|
| 34 |
+
spent_val = abs(expenses_sum)
|
| 35 |
+
if budget.spent_amount != spent_val:
|
| 36 |
+
budget.spent_amount = spent_val
|
| 37 |
+
budget.save()
|
| 38 |
+
return Budget.objects.filter(user=user)
|
| 39 |
+
|
| 40 |
+
def perform_create(self, serializer):
|
| 41 |
+
serializer.save(user=self.request.user)
|
| 42 |
+
|
| 43 |
+
class GoalViewSet(viewsets.ModelViewSet):
|
| 44 |
+
serializer_class = GoalSerializer
|
| 45 |
+
permission_classes = [permissions.IsAuthenticated]
|
| 46 |
+
|
| 47 |
+
def get_queryset(self):
|
| 48 |
+
return Goal.objects.filter(user=self.request.user)
|
| 49 |
+
|
| 50 |
+
def perform_create(self, serializer):
|
| 51 |
+
serializer.save(user=self.request.user)
|
| 52 |
+
|
| 53 |
+
class SubscriptionViewSet(viewsets.ModelViewSet):
|
| 54 |
+
serializer_class = SubscriptionSerializer
|
| 55 |
+
permission_classes = [permissions.IsAuthenticated]
|
| 56 |
+
|
| 57 |
+
def get_queryset(self):
|
| 58 |
+
return Subscription.objects.filter(user=self.request.user)
|
| 59 |
+
|
| 60 |
+
def perform_create(self, serializer):
|
| 61 |
+
serializer.save(user=self.request.user)
|
| 62 |
|
|
|