application withdraw with currency
This commit is contained in:
parent
ba876e2874
commit
b3fc8cc17f
2 changed files with 20 additions and 7 deletions
|
|
@ -203,8 +203,10 @@ class ApplicationDepositSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
||||||
|
uuid = serializers.UUIDField(required=False, allow_null=None)
|
||||||
payer_id = serializers.UUIDField(required=True)
|
payer_id = serializers.UUIDField(required=True)
|
||||||
payer_type = serializers.IntegerField(required=True)
|
payer_type = serializers.IntegerField(required=True)
|
||||||
|
payer_wallet_category = serializers.UUIDField(required=True)
|
||||||
amount = serializers.IntegerField(required=True, validators=[MinValueValidator(1)])
|
amount = serializers.IntegerField(required=True, validators=[MinValueValidator(1)])
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -213,8 +215,10 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
||||||
'uuid',
|
'uuid',
|
||||||
'payer_id',
|
'payer_id',
|
||||||
'payer_type',
|
'payer_type',
|
||||||
|
'payer_wallet_category',
|
||||||
'payee_id',
|
'payee_id',
|
||||||
'payee_type',
|
'payee_type',
|
||||||
|
'payee_wallet_category',
|
||||||
"created_at",
|
"created_at",
|
||||||
"state",
|
"state",
|
||||||
'amount',
|
'amount',
|
||||||
|
|
@ -223,4 +227,4 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
||||||
'details',
|
'details',
|
||||||
)
|
)
|
||||||
|
|
||||||
read_only_fields = ['updated_at', 'state', 'created_at', 'payee_id', 'payee_type']
|
read_only_fields = ['updated_at', 'state', 'created_at', 'payee_id', 'payee_type', 'payee_wallet_category']
|
||||||
|
|
|
||||||
|
|
@ -349,16 +349,25 @@ class CategoryWithdrawSubmitAPIView(generics.CreateAPIView):
|
||||||
# TODO: get_or_create instead of create if uuid given
|
# TODO: get_or_create instead of create if uuid given
|
||||||
# TODO: it is possible to merage create and submit in one step for improve performance
|
# TODO: it is possible to merage create and submit in one step for improve performance
|
||||||
application = get_application(self.request)
|
application = get_application(self.request)
|
||||||
category_uuid = self.kwargs.get('category_uuid')
|
payer_wallet_category_uuid = serializer.validated_data.pop('payer_wallet_category')
|
||||||
if category_uuid:
|
payer_wallet_category_uuid = payer_wallet_category_uuid and str(payer_wallet_category_uuid)
|
||||||
category = get_object_or_404(Category.objects.all(), uuid=category_uuid)
|
|
||||||
|
payee_wallet_category_uuid = self.kwargs.get('category_uuid')
|
||||||
|
if payee_wallet_category_uuid:
|
||||||
|
payee_wallet_category = get_object_or_404(Category.objects.all(), uuid=payee_wallet_category_uuid)
|
||||||
else:
|
else:
|
||||||
category = None
|
payee_wallet_category = None
|
||||||
|
|
||||||
|
payer_wallet_category = get_object_or_404(Category.objects.all(), uuid=payer_wallet_category_uuid)
|
||||||
|
|
||||||
|
if not(payer_wallet_category and payer_wallet_category.currency == payee_wallet_category.currency):
|
||||||
|
raise UnprocessableEntity('payer and payee wallet currency not equal')
|
||||||
|
|
||||||
payer_id = serializer.validated_data.pop('payer_id')
|
payer_id = serializer.validated_data.pop('payer_id')
|
||||||
payer_type = serializer.validated_data.pop('payer_type')
|
payer_type = serializer.validated_data.pop('payer_type')
|
||||||
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
|
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
|
||||||
category=category)
|
category=payee_wallet_category)
|
||||||
payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payer_id, owner_type=payer_type, category=category)
|
payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payer_id, owner_type=payer_type, category=payer_wallet_category)
|
||||||
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
|
instance = serializer.save(payer_wallet=payer_wallet, application=application, payee_wallet=payee_wallet)
|
||||||
instance.category_submit()
|
instance.category_submit()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue