73 lines
2.5 KiB
Python
Executable file
73 lines
2.5 KiB
Python
Executable file
from django.db.models import Q
|
|
|
|
from oauth2_provider.contrib.rest_framework import TokenHasScope, IsAuthenticatedOrTokenHasScope
|
|
from rest_framework import generics, permissions
|
|
from rest_framework.response import Response
|
|
|
|
from apps.transactions.models import Transaction
|
|
from apps.transactions.serializers import TransactionSerializer
|
|
|
|
|
|
class TransactionList(generics.ListCreateAPIView):
|
|
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
|
|
serializer_class = TransactionSerializer
|
|
required_scopes = []
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
return Transaction.objects.filter(Q(payee_id=user.id) | Q(payer_id=user.id)).all()
|
|
|
|
def perform_create(self, serializer):
|
|
try:
|
|
application = self.request.auth.application
|
|
application_id = application.id
|
|
except:
|
|
application_id = None
|
|
|
|
user = self.request.user
|
|
serializer.save(payee=user, application_id=application_id)
|
|
|
|
|
|
class TransactionDetail(generics.RetrieveAPIView):
|
|
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
|
|
serializer_class = TransactionSerializer
|
|
lookup_field = 'code'
|
|
required_scopes = []
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
return Transaction.objects.filter(Q(payee_id=user.id) | Q(payer_id=user.id) | Q(payer__isnull=True)).all()
|
|
|
|
|
|
class TransactionPay(generics.RetrieveAPIView):
|
|
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
|
|
serializer_class = TransactionSerializer
|
|
lookup_field = 'code'
|
|
required_scopes = []
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
return Transaction.objects.filter(Q(payer_id=user.id) | Q(payer__isnull=True)).all()
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
instance.pay(payer=self.request.user)
|
|
serializer = self.get_serializer(instance)
|
|
return Response(serializer.data)
|
|
|
|
|
|
class TransactionReceipt(generics.RetrieveAPIView):
|
|
permission_classes = [permissions.IsAuthenticated, IsAuthenticatedOrTokenHasScope]
|
|
serializer_class = TransactionSerializer
|
|
lookup_field = 'code'
|
|
required_scopes = []
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
return Transaction.objects.filter(payer_id=user.id).all()
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
instance.receipt()
|
|
serializer = self.get_serializer(instance)
|
|
return Response(serializer.data)
|