CineDev commited on
Commit
bb38b01
·
1 Parent(s): 72d0269

feat: update finance views

Browse files
Files changed (1) hide show
  1. finance/views.py +61 -2
finance/views.py CHANGED
@@ -1,3 +1,62 @@
1
- from django.shortcuts import render
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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