diff --git a/billing/migrations/0015_topup_payment_type.py b/billing/migrations/0015_topup_payment_type.py new file mode 100644 index 0000000..7fff297 --- /dev/null +++ b/billing/migrations/0015_topup_payment_type.py @@ -0,0 +1,21 @@ +# Generated by Django 5.2 on 2025-07-27 07:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("billing", "0014_wallettransaction"), + ] + + operations = [ + migrations.AddField( + model_name="topup", + name="payment_type", + field=models.CharField( + choices=[("CASH", "Cash"), ("TRANSFER", "Transfer")], + default="TRANSFER", + max_length=20, + ), + ), + ] diff --git a/billing/models.py b/billing/models.py index 969e31d..8689f92 100644 --- a/billing/models.py +++ b/billing/models.py @@ -66,6 +66,14 @@ class Topup(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) amount = models.FloatField() user = models.ForeignKey(user, on_delete=models.CASCADE, related_name="topups") + payment_type = models.CharField( + max_length=20, + choices=[ + ("CASH", "Cash"), + ("TRANSFER", "Transfer"), + ], + default="TRANSFER", + ) paid = models.BooleanField(default=False) paid_at = models.DateTimeField(null=True, blank=True) status = models.CharField( diff --git a/billing/views.py b/billing/views.py index b2f5e65..f0c27b8 100644 --- a/billing/views.py +++ b/billing/views.py @@ -624,14 +624,16 @@ class AdminTopupCreateView(StaffEditorPermissionMixin, generics.CreateAPIView): {"message": "User not found."}, status=status.HTTP_404_NOT_FOUND, ) - topup = Topup.objects.create(amount=amount, user=user) - description = f"Topup of {amount} MVR (Cash)" - WalletTransaction.objects.create( - user=user, + topup = Topup.objects.create( amount=amount, - transaction_type="TOPUP", - description=description, + user=user, + paid=True, + paid_at=timezone.now(), + payment_type="CASH", + status="PAID", ) + description = f"Topup of {amount} MVR (Cash)" + user.add_wallet_funds(amount, description, topup.id) serializer = TopupSerializer(topup) return Response(serializer.data, status=status.HTTP_201_CREATED)