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(