146 lines
5.0 KiB
Python
Executable File
146 lines
5.0 KiB
Python
Executable File
from django.contrib.auth.models import Group
|
|
from django.contrib.auth import get_user_model
|
|
from rest_framework import serializers
|
|
from qrtr_account.models import Account, BankAccount, Institution, Transaction, Slice, Rule
|
|
from user.models import User
|
|
from connection.models import Connection, ConnectionType
|
|
from connection.serializers import ConnectionTypeSerializer, ConnectionSerializer
|
|
|
|
|
|
class UserAccountSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = get_user_model()
|
|
fields = ['pk', 'url', 'username', 'email', 'groups']
|
|
|
|
|
|
class AccountReadSerializer(serializers.HyperlinkedModelSerializer):
|
|
owner = UserAccountSerializer(read_only=True)
|
|
admin_users = UserAccountSerializer(many=True, read_only=True)
|
|
view_users = UserAccountSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = Account
|
|
fields = ['pk', 'url', 'owner', 'name', 'admin_users', 'view_users']
|
|
|
|
class AccountWriteSerializer(serializers.HyperlinkedModelSerializer):
|
|
owner = serializers.SlugRelatedField(slug_field='pk', queryset=User.objects.all())
|
|
admin_users = serializers.SlugRelatedField(slug_field='pk', queryset=User.objects.all(), many=True)
|
|
view_users = serializers.SlugRelatedField(slug_field='pk', queryset=User.objects.all(), many=True)
|
|
class Meta:
|
|
model = Account
|
|
fields = ['pk', 'url', 'owner', 'name', 'admin_users', 'view_users']
|
|
|
|
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|
owned_accounts = AccountReadSerializer(many=True, read_only=True)
|
|
admin_accounts = AccountReadSerializer(many=True, read_only=True)
|
|
view_accounts = AccountReadSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = get_user_model()
|
|
fields = ['pk', 'url', 'username', 'email', 'groups', 'owned_accounts',
|
|
'admin_accounts', 'view_accounts']
|
|
|
|
|
|
class GroupSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Group
|
|
fields = ['pk', 'url', 'name']
|
|
|
|
|
|
class BankAccountSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = BankAccount
|
|
fields = [
|
|
'pk',
|
|
'url',
|
|
'qrtr_account',
|
|
'connection',
|
|
'institution',
|
|
'nickname',
|
|
'balance',
|
|
'ac_type',
|
|
'ac_subtype',
|
|
]
|
|
extra_kwargs = {
|
|
'balance': {'read_only': True},
|
|
'connection': {'read_only': True},
|
|
'institution': {'read_only': True},
|
|
'ac_type': {'read_only': True},
|
|
'ac_subtype': {'read_only': True}
|
|
}
|
|
|
|
|
|
class BankAccountSerializerPOST(BankAccountSerializer):
|
|
"""Separate Serializer for POST requests to create a new bank. This adds
|
|
a new field called connection_details that is used to create a new
|
|
connection record to go with the new BankAccount. This field is only allowed on
|
|
POST because we don't want to expose this information to the user, or allow
|
|
them to change it b/c that could lead to an integrity problem, breaking
|
|
their bank functionality.
|
|
"""
|
|
# connection_details = serializers.JSONField(
|
|
# write_only=True,
|
|
# required=True,
|
|
# initial={
|
|
# "type": f"{' OR '.join(ConnectionType.objects.all().values_list('name', flat=True))}",
|
|
# "credentials": {}})
|
|
|
|
class Meta:
|
|
model = BankAccount
|
|
fields = [
|
|
'pk',
|
|
'url',
|
|
'qrtr_account',
|
|
'connection',
|
|
'institution',
|
|
'nickname',
|
|
'balance',
|
|
'ac_type',
|
|
'ac_subtype',
|
|
# 'connection_details'
|
|
]
|
|
extra_kwargs = {
|
|
'balance': {'read_only': True},
|
|
# 'connection': {'read_only': True},
|
|
'institution': {'read_only': True},
|
|
'ac_type': {'read_only': True},
|
|
'ac_subtype': {'read_only': True}
|
|
}
|
|
|
|
|
|
class InstitutionSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Institution
|
|
fields = ['pk', 'url', 'name']
|
|
|
|
|
|
class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Transaction
|
|
fields = ['pk', 'url', 'authorized_date',
|
|
'bank', 'name','details','slice','trans_id',
|
|
'updated_at','created_at']
|
|
|
|
|
|
class SliceSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Slice
|
|
fields = ['pk', 'url', 'name', 'icon', 'description', 'balance', 'slice_of', 'bank_acc']
|
|
|
|
|
|
class SliceTransactionSerializer(serializers.ModelSerializer):
|
|
transactions = TransactionSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = Slice
|
|
fields = ['pk', 'url', 'name', 'icon', 'description', 'balance', 'slice_of', 'transactions', 'bank_acc']
|
|
|
|
class RuleSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Rule
|
|
fields = [
|
|
'url',
|
|
'name',
|
|
'kind',
|
|
'when_to_run',
|
|
'amount',
|
|
'source',
|
|
'destination']
|