grouped transactions
This commit is contained in:
parent
e045ffd9b1
commit
15fe0d4531
2 changed files with 14 additions and 6 deletions
|
|
@ -226,4 +226,12 @@ class ApplicationWithdrawSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class TransactionGroupedSerializer(serializers.Serializer):
|
class TransactionGroupedSerializer(serializers.Serializer):
|
||||||
pass
|
reference = serializers.UUIDField(source='details__reference_id')
|
||||||
|
application = serializers.UUIDField()
|
||||||
|
total_amount = serializers.FloatField()
|
||||||
|
total_count = serializers.IntegerField()
|
||||||
|
transactions = TransactionSerializer(many=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
fields = ('reference', 'application', 'total_amount', 'total_count', 'transactions')
|
||||||
|
read_only_fields = ['reference', 'application', 'total_amount', 'total_count', 'transactions']
|
||||||
|
|
|
||||||
|
|
@ -349,14 +349,14 @@ class UserTransactionViewSet(mixins.ListModelMixin,
|
||||||
|
|
||||||
@extend_schema(responses=TransactionGroupedSerializer(many=True))
|
@extend_schema(responses=TransactionGroupedSerializer(many=True))
|
||||||
@action(detail=False, methods=["GET"], serializer_class=TransactionGroupedSerializer)
|
@action(detail=False, methods=["GET"], serializer_class=TransactionGroupedSerializer)
|
||||||
def grouped(self):
|
def grouped(self, request, *args, **kwargs):
|
||||||
|
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
|
||||||
grouped_transaction_list = queryset.values('details__reference_id', 'application').annotate(
|
grouped_transaction_list = queryset.values('details__reference_id', 'application').annotate(
|
||||||
total_amount=Sum('amount'),
|
total_amount=Sum('amount'),
|
||||||
total_count=Count('uuid'),
|
total_count=Count('uuid'),
|
||||||
transaction_uuid_list=ArrayAgg('uuid'),
|
transactions=ArrayAgg('uuid'),
|
||||||
)
|
)
|
||||||
|
|
||||||
page = list(self.paginate_queryset(grouped_transaction_list))
|
page = list(self.paginate_queryset(grouped_transaction_list))
|
||||||
|
|
@ -364,15 +364,15 @@ class UserTransactionViewSet(mixins.ListModelMixin,
|
||||||
transaction_uuid_list = []
|
transaction_uuid_list = []
|
||||||
|
|
||||||
for grouped_transaction in page:
|
for grouped_transaction in page:
|
||||||
transaction_uuid_list += grouped_transaction['transaction_uuid_list']
|
transaction_uuid_list += grouped_transaction['transactions']
|
||||||
|
|
||||||
transaction_list = Transaction.objects.filter(uuid__in=transaction_uuid_list)
|
transaction_list = Transaction.objects.filter(uuid__in=transaction_uuid_list)
|
||||||
|
|
||||||
transaction_dict = {t.pk: t for t in transaction_list}
|
transaction_dict = {t.pk: t for t in transaction_list}
|
||||||
|
|
||||||
for grouped_transaction in page:
|
for grouped_transaction in page:
|
||||||
for i, transaction in enumerate(grouped_transaction['transaction_uuid_list']):
|
for i, transaction in enumerate(grouped_transaction['transactions']):
|
||||||
grouped_transaction['transaction_uuid_list'][i] = transaction_dict[transaction]
|
grouped_transaction['transactions'][i] = transaction_dict[transaction]
|
||||||
|
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
return self.get_paginated_response(serializer.data)
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue