diff --git a/api/migrations/0017_alter_temporaryuser_t_id_card_and_more.py b/api/migrations/0017_alter_temporaryuser_t_id_card_and_more.py new file mode 100644 index 0000000..b3170d7 --- /dev/null +++ b/api/migrations/0017_alter_temporaryuser_t_id_card_and_more.py @@ -0,0 +1,40 @@ +# Generated by Django 5.2 on 2025-07-15 20:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("api", "0016_user_is_admin"), + ] + + operations = [ + migrations.AlterField( + model_name="temporaryuser", + name="t_id_card", + field=models.CharField( + blank=True, db_index=True, max_length=255, null=True, unique=True + ), + ), + migrations.AlterField( + model_name="temporaryuser", + name="t_mobile", + field=models.CharField( + blank=True, db_index=True, max_length=255, null=True, unique=True + ), + ), + migrations.AlterField( + model_name="user", + name="id_card", + field=models.CharField( + blank=True, db_index=True, max_length=255, null=True, unique=True + ), + ), + migrations.AlterField( + model_name="user", + name="mobile", + field=models.CharField( + blank=True, db_index=True, max_length=255, null=True, unique=True + ), + ), + ] diff --git a/api/models.py b/api/models.py index 71cc6ba..f92cb6e 100644 --- a/api/models.py +++ b/api/models.py @@ -13,10 +13,14 @@ import pyotp class User(AbstractUser): address = models.CharField(max_length=255, blank=True) email = models.EmailField(blank=True, null=True, unique=True) - mobile = models.CharField(max_length=255, blank=True, unique=True, null=True) + mobile = models.CharField( + max_length=255, blank=True, unique=True, null=True, db_index=True + ) designation = models.CharField(max_length=255, blank=True) acc_no = models.CharField(max_length=255, blank=True) - id_card = models.CharField(max_length=255, blank=True, unique=True, null=True) + id_card = models.CharField( + max_length=255, blank=True, unique=True, null=True, db_index=True + ) verified = models.BooleanField(default=False) is_admin = models.BooleanField(default=False) dob = models.DateField(blank=True, null=True) @@ -46,10 +50,14 @@ class TemporaryUser(models.Model): t_last_name = models.CharField(max_length=255, blank=True) t_address = models.CharField(max_length=255, blank=True) t_email = models.EmailField(blank=True, null=True, unique=True) - t_mobile = models.CharField(max_length=255, blank=True, unique=True, null=True) + t_mobile = models.CharField( + max_length=255, blank=True, unique=True, null=True, db_index=True + ) t_designation = models.CharField(max_length=255, blank=True) t_acc_no = models.CharField(max_length=255, blank=True) - t_id_card = models.CharField(max_length=255, blank=True, unique=True, null=True) + t_id_card = models.CharField( + max_length=255, blank=True, unique=True, null=True, db_index=True + ) t_verified = models.BooleanField(default=False) t_dob = models.DateField(blank=True, null=True) t_terms_accepted = models.BooleanField(default=False) diff --git a/billing/views.py b/billing/views.py index cfa0018..6001d51 100644 --- a/billing/views.py +++ b/billing/views.py @@ -105,6 +105,30 @@ class ListCreatePaymentView(StaffEditorPermissionMixin, generics.ListCreateAPIVi serializer = PaymentSerializer(payment) return Response(serializer.data, status=status.HTTP_201_CREATED) + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + all_payments = request.query_params.get("all_payments", "false").lower() in [ + "true", + "1", + "yes", + ] + if ( + request.user.is_authenticated + and getattr(request.user, "is_admin") + and bool(all_payments) + ): + pass + else: + queryset = queryset.filter(user=request.user) + + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + class PaymentDetailAPIView(StaffEditorPermissionMixin, generics.RetrieveAPIView): queryset = Payment.objects.select_related("user").all()