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):
|
||||
uuid = serializers.UUIDField(required=False, allow_null=None)
|
||||
payer_id = serializers.UUIDField(required=True)
|
||||
payer_type = serializers.IntegerField(required=True)
|
||||
payer_wallet_category = serializers.UUIDField(required=True)
|
||||
amount = serializers.IntegerField(required=True, validators=[MinValueValidator(1)])
|
||||
|
||||
class Meta:
|
||||
|
|
@ -213,8 +215,10 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
|||
'uuid',
|
||||
'payer_id',
|
||||
'payer_type',
|
||||
'payer_wallet_category',
|
||||
'payee_id',
|
||||
'payee_type',
|
||||
'payee_wallet_category',
|
||||
"created_at",
|
||||
"state",
|
||||
'amount',
|
||||
|
|
@ -223,4 +227,4 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
|||
'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: it is possible to merage create and submit in one step for improve performance
|
||||
application = get_application(self.request)
|
||||
category_uuid = self.kwargs.get('category_uuid')
|
||||
if category_uuid:
|
||||
category = get_object_or_404(Category.objects.all(), uuid=category_uuid)
|
||||
payer_wallet_category_uuid = serializer.validated_data.pop('payer_wallet_category')
|
||||
payer_wallet_category_uuid = payer_wallet_category_uuid and str(payer_wallet_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:
|
||||
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_type = serializer.validated_data.pop('payer_type')
|
||||
payee_wallet, _ = Wallet.objects.get_or_create(owner_uuid=application.uuid, owner_type=TypeChoices.APPLICATION,
|
||||
category=category)
|
||||
payer_wallet, _ = Wallet.objects.get_or_create(owner_uuid=payer_id, owner_type=payer_type, category=category)
|
||||
category=payee_wallet_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.category_submit()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue