from django.shortcuts import render from Wallet.models import Transaction, Wallet from rest_framework import viewsets, generics, status, permissions # Create your views here. from rest_framework.response import Response from django.forms.models import model_to_dict from Wallet.serializers.customer import TransactionSerializer, WalletSerializer from oauth2_provider.contrib.rest_framework import ( TokenHasReadWriteScope, OAuth2Authentication, ) from oauth2_provider.models import AccessToken class WalletViewSet(viewsets.ModelViewSet): queryset = Wallet.objects.all() serializer_class = WalletSerializer permission_classes = [TokenHasReadWriteScope] lookup_field = 'key' lookup_url_kwarg = 'key' def list(self, request, *args, **kwargs): if "key" in request.GET: wallet_obj = Wallet.objects.get(key__exact=request.GET["key"]) queryset = wallet_obj.category.all() products = [x for x in queryset] serializer = WalletSerializer(products, many=True) return Response(serializer.data, status=status.HTTP_200_OK) if "type" in request.GET: wallet_obj = Wallet.objects.filter(user_id=request.user.id) query = [x for x in wallet_obj] serializer = WalletSerializer(query, many=True) return Response(serializer.data, status=status.HTTP_200_OK) else: queryset = Wallet.objects.all() serializer = WalletSerializer(queryset, many=True) return Response(serializer.data, status=status.HTTP_200_OK) def create(self, request, *args, **kwargs): wallet = Wallet.objects.get(key__exact=request.data["key"]) serializer = self.serializer_class(data=request.data) if serializer.is_valid(): w = serializer.create(validated_data=request.data) w.user = request.user w.save() w_s = self.serializer_class(w) return Response(w_s.data, status=status.HTTP_201_CREATED) return Response(serializer.errors) def retrieve(self, request, key=None, *args, **kwargs): queryset = self.get_object() serializer = self.serializer_class(queryset) return Response(serializer.data, status=status.HTTP_200_OK) def update(self, request, pk=None, *args, **kwargs): queryset = self.get_object() queryset.save() serializer = self.serializer_class(queryset) serializer.update(instance=queryset, validated_data=request.data) return Response(serializer.data, status=status.HTTP_200_OK) def partial_update(self, request, pk=None, *args, **kwargs): pass def destroy(self, request, pk=None, *args, **kwargs): queryset = self.get_object() queryset.trash = True queryset.save() return Response(status=status.HTTP_200_OK) class TransactionViewSet(viewsets.ModelViewSet): queryset = Transaction.objects.all() serializer_class = TransactionSerializer permission_classes = [TokenHasReadWriteScope] def list(self, request, *args, **kwargs): if "key" in request.GET: transaction_obj = Transaction.objects.get(key__exact=request.GET["key"]) queryset = transaction_obj.category.all() transactions = [x for x in queryset] serializer = self.serializer_class(transactions, many=True) return Response(serializer.data, status=status.HTTP_200_OK) if "type" in request.GET: transactions_obj = Transaction.objects.filter(user_id=request.user.id) query = [x for x in transactions_obj] serializer = self.serializer_class(query, many=True) return Response(serializer.data, status=status.HTTP_200_OK) else: queryset = Wallet.objects.all() serializer = self.serializer_class(queryset, many=True) return Response(serializer.data, status=status.HTTP_200_OK) def create(self, request, *args, **kwargs): transaction_obj = Transaction.objects.get(key__exact=request.data["key"]) serializer = self.serializer_class(data=request.data) if serializer.is_valid(): t = serializer.create(validated_data=request.data) t.user = request.user t.save() t_s = self.serializer_class(t) return Response(t_s.data, status=status.HTTP_201_CREATED) return Response(serializer.errors) def retrieve(self, request, pk=None, *args, **kwargs): queryset = Transaction.objects.get(key__exact=request.GET["key"]) serializer = self.serializer_class(queryset) return Response(serializer.data, status=status.HTTP_200_OK) def update(self, request, pk=None, *args, **kwargs): queryset = Transaction.objects.get(key__exact=request.GET["key"]) queryset.save() serializer = self.serializer_class(queryset) serializer.update(instance=queryset, validated_data=request.data) return Response(serializer.data, status=status.HTTP_200_OK) def partial_update(self, request, pk=None, *args, **kwargs): pass def destroy(self, request, pk=None, *args, **kwargs): queryset = Transaction.objects.get(key__exact=request.GET["wallet_id"]) queryset.trash = True queryset.save() return Response(status=status.HTTP_200_OK)