grouped transactions

This commit is contained in:
Sayyid Hamid Mahdavi 2026-02-07 13:47:10 +03:30
parent e045ffd9b1
commit 15fe0d4531
2 changed files with 14 additions and 6 deletions

View file

@ -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']

View file

@ -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)