qrtr-services/qrtr_account/views.py

113 lines
4.2 KiB
Python

from django.shortcuts import render
from rest_framework import viewsets, mixins
from .models import Account, BankAccount, Institution, Transaction, Slice, Rule
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import action
from connection.models import Connection, ConnectionType
from api.serializers import (AccountReadSerializer, AccountWriteSerializer,
BankAccountSerializer, BankAccountSerializerPOST,
InstitutionSerializer,
TransactionSerializer,
ConnectionSerializer,
ConnectionTypeSerializer,
SliceSerializer, SliceTransactionSerializer,
RuleSerializer)
from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter
from dj_rest_auth.registration.views import SocialLoginView
from allauth.socialaccount.providers.twitter.views import TwitterOAuthAdapter
from dj_rest_auth.social_serializers import TwitterLoginSerializer
from api.mixins import ReadWriteSerializerMixin
class TwitterLogin(SocialLoginView):
serializer_class = TwitterLoginSerializer
adapter_class = TwitterOAuthAdapter
class FacebookLogin(SocialLoginView):
adapter_class = FacebookOAuth2Adapter
class AccountViewSet(ReadWriteSerializerMixin, viewsets.ModelViewSet):
"""API endpoint that allows accounts to be viewed or edited
"""
queryset = Account.objects.all()
read_serializer_class = AccountReadSerializer
write_serializer_class = AccountWriteSerializer
class BankAccountViewSet(viewsets.ModelViewSet):
"""API endpoint that allows BankAccounts to be viewed or edited
"""
queryset = BankAccount.objects.all()
# serializer_class = BankAccountSerializer
def get_serializer_class(self):
if self.action == 'create':
return BankAccountSerializerPOST
return BankAccountSerializer
class SliceViewSet(viewsets.ModelViewSet):
"""API endpoint that allows BankAccounts to be viewed.
"""
queryset = Slice.objects.all()
serializer_class = SliceSerializer
class InstitutionViewSet(viewsets.ReadOnlyModelViewSet):
"""API endpoint that allows BankAccounts to be viewed.
"""
queryset = Institution.objects.all()
serializer_class = InstitutionSerializer
class TransactionViewSet(viewsets.ModelViewSet):
"""API endpoint that allows BankAccounts to be viewed.
"""
queryset = Transaction.objects.filter(is_split=False)
serializer_class = TransactionSerializer
search_fields = ['name', 'slice__name', 'bank__nickname',
'bank__official_name']
filterset_fields = {
'slice__id': ['exact', 'isnull'],
'slice__name': ['exact', ],
'authorized_date': ['exact', 'lte', 'gte', 'isnull'],
'updated_at': ['exact', 'lte', 'gte', 'isnull'],
'created_at': ['exact', 'lte', 'gte', 'isnull'],
'trans_id': ['exact', 'lte', 'gte', 'isnull'],
}
@action(detail=True, methods=['post'], url_path='split')
def split_transaction(self, request, pk=None):
parent = self.get_object()
base_information = {"authorized_date": parent.authorized_date,
"bank": parent.bank,
"name": parent.name,
"details": parent.details,
"slice": parent.slice,
"trans_id": parent.trans_id,
"split_parent": parent
}
child1 = Transaction.objects.create(**base_information)
child1.name = f"{child1.name}.split1"
child2 = Transaction.objects.create(**base_information)
child2.name = f"{child1.name}.split2"
class SliceTransactionViewSet(viewsets.ModelViewSet):
serializer_class = SliceTransactionSerializer
queryset = Slice.objects.all()
# def get_queryset(self):
# return Transaction.objects.filter(slice__pk=self.kwargs.get('slice_pk'))
class RuleViewSet(viewsets.ReadOnlyModelViewSet):
"""API endpoint that allows BankAccounts to be viewed.
"""
queryset = Rule.objects.all()
serializer_class = RuleSerializer