mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-01-11 20:00:26 +01:00
67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
from apps.dca.models import DCAStrategy, DCAEntry
|
|
from apps.api.serializers import DCAStrategySerializer, DCAEntrySerializer
|
|
|
|
|
|
class DCAStrategyViewSet(viewsets.ModelViewSet):
|
|
queryset = DCAStrategy.objects.all()
|
|
serializer_class = DCAStrategySerializer
|
|
filterset_fields = {
|
|
"name": ["exact", "icontains"],
|
|
"target_currency": ["exact"],
|
|
"payment_currency": ["exact"],
|
|
"notes": ["exact", "icontains"],
|
|
"created_at": ["exact", "gte", "lte", "gt", "lt"],
|
|
"updated_at": ["exact", "gte", "lte", "gt", "lt"],
|
|
}
|
|
search_fields = ["name", "notes"]
|
|
ordering_fields = "__all__"
|
|
|
|
def get_queryset(self):
|
|
return DCAStrategy.objects.all()
|
|
|
|
@action(detail=True, methods=["get"])
|
|
def investment_frequency(self, request, pk=None):
|
|
strategy = self.get_object()
|
|
return Response(strategy.investment_frequency_data())
|
|
|
|
@action(detail=True, methods=["get"])
|
|
def price_comparison(self, request, pk=None):
|
|
strategy = self.get_object()
|
|
return Response(strategy.price_comparison_data())
|
|
|
|
@action(detail=True, methods=["get"])
|
|
def current_price(self, request, pk=None):
|
|
strategy = self.get_object()
|
|
price_data = strategy.current_price()
|
|
if price_data:
|
|
price, date = price_data
|
|
return Response({"price": price, "date": date})
|
|
return Response({"price": None, "date": None})
|
|
|
|
|
|
class DCAEntryViewSet(viewsets.ModelViewSet):
|
|
queryset = DCAEntry.objects.all()
|
|
serializer_class = DCAEntrySerializer
|
|
filterset_fields = {
|
|
"strategy": ["exact"],
|
|
"date": ["exact", "gte", "lte", "gt", "lt"],
|
|
"amount_paid": ["exact", "gte", "lte", "gt", "lt"],
|
|
"amount_received": ["exact", "gte", "lte", "gt", "lt"],
|
|
"expense_transaction": ["exact", "isnull"],
|
|
"income_transaction": ["exact", "isnull"],
|
|
"notes": ["exact", "icontains"],
|
|
"created_at": ["exact", "gte", "lte", "gt", "lt"],
|
|
"updated_at": ["exact", "gte", "lte", "gt", "lt"],
|
|
}
|
|
search_fields = ["notes"]
|
|
ordering_fields = "__all__"
|
|
ordering = ["-date"]
|
|
|
|
def get_queryset(self):
|
|
# Filter entries by strategies the user has access to
|
|
accessible_strategies = DCAStrategy.objects.all()
|
|
return DCAEntry.objects.filter(strategy__in=accessible_strategies)
|