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):
|
||||
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))
|
||||
@action(detail=False, methods=["GET"], serializer_class=TransactionGroupedSerializer)
|
||||
def grouped(self):
|
||||
def grouped(self, request, *args, **kwargs):
|
||||
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
grouped_transaction_list = queryset.values('details__reference_id', 'application').annotate(
|
||||
total_amount=Sum('amount'),
|
||||
total_count=Count('uuid'),
|
||||
transaction_uuid_list=ArrayAgg('uuid'),
|
||||
transactions=ArrayAgg('uuid'),
|
||||
)
|
||||
|
||||
page = list(self.paginate_queryset(grouped_transaction_list))
|
||||
|
|
@ -364,15 +364,15 @@ class UserTransactionViewSet(mixins.ListModelMixin,
|
|||
transaction_uuid_list = []
|
||||
|
||||
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_dict = {t.pk: t for t in transaction_list}
|
||||
|
||||
for grouped_transaction in page:
|
||||
for i, transaction in enumerate(grouped_transaction['transaction_uuid_list']):
|
||||
grouped_transaction['transaction_uuid_list'][i] = transaction_dict[transaction]
|
||||
for i, transaction in enumerate(grouped_transaction['transactions']):
|
||||
grouped_transaction['transactions'][i] = transaction_dict[transaction]
|
||||
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue