From cec2045e5fd3b1fa9841c2550abb57dff4055bdb Mon Sep 17 00:00:00 2001 From: i701 Date: Thu, 3 Jul 2025 21:04:59 +0500 Subject: [PATCH] =?UTF-8?q?refactor(billing):=20Enhance=20TopupSerializer?= =?UTF-8?q?=20to=20include=20detailed=20user=20information=20and=20update?= =?UTF-8?q?=20ListCreateTopupView=20queryset=20filtering=20=F0=9F=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- billing/serializers.py | 14 ++++++++++++-- billing/views.py | 14 +++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/billing/serializers.py b/billing/serializers.py index c859eb1..44dcc5c 100644 --- a/billing/serializers.py +++ b/billing/serializers.py @@ -1,7 +1,6 @@ from rest_framework import serializers from .models import Payment, Topup from devices.serializers import DeviceSerializer -from api.serializers import CustomReadOnlyUserSerializer class PaymentSerializer(serializers.ModelSerializer): @@ -21,7 +20,18 @@ class UpdatePaymentSerializer(serializers.ModelSerializer): class TopupSerializer(serializers.ModelSerializer): - user = CustomReadOnlyUserSerializer(read_only=True) + user = serializers.SerializerMethodField() + + def get_user(self, obj): + user = obj.user + if user: + return { + "id": user.id, + "name": user.first_name + " " + user.last_name, + "id_card": user.id_card, + "mobile": user.mobile, + } + return None class Meta: # type: ignore model = Topup diff --git a/billing/views.py b/billing/views.py index 620a4b5..9b4c4ae 100644 --- a/billing/views.py +++ b/billing/views.py @@ -281,6 +281,12 @@ class ListCreateTopupView(StaffEditorPermissionMixin, generics.ListCreateAPIView serializer = TopupSerializer(topup) return Response(serializer.data, status=status.HTTP_201_CREATED) + def get_queryset(self): + queryset = super().get_queryset() + if getattr(self.request.user, "is_admin") or self.request.user.is_superuser: + return queryset + return queryset.filter(user=self.request.user) + class VerifyTopupPaymentAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView): queryset = Topup.objects.all() @@ -311,6 +317,7 @@ class VerifyTopupPaymentAPIView(StaffEditorPermissionMixin, generics.UpdateAPIVi topup.paid = True # topup.paid_at = timezone.now() # Assuming Topup model has paid_at field topup.mib_reference = mib_resp["transaction"]["ref"] or "" + topup.paid_at = timezone.now() topup.save() return True @@ -332,10 +339,11 @@ class VerifyTopupPaymentAPIView(StaffEditorPermissionMixin, generics.UpdateAPIVi "benefName": f"{user.first_name} {user.last_name}", # type: ignore "accountNo": user.acc_no, # type: ignore "absAmount": topup_instance.amount, - "time": localtime(timezone.now() + timedelta(minutes=5)).strftime( - "%Y-%m-%d %H:%M" - ), + "time": localtime( + topup_instance.created_at + timedelta(minutes=5) + ).strftime("%Y-%m-%d %H:%M"), } + print("payment payload in view ->", data) topup_status = self.verify_transfer_topup(data, topup_instance) if topup_status: return Response(