diff --git a/.env.example b/.env.example index bb2f85c..d92180d 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,8 @@ -PAYZE_API_KEY="{Key:Secret}" \ No newline at end of file +PAYZE_API_KEY="{Key:Secret}" +SECRET_KEY={Secret} +DEBUG=1 +DB_NAME={Database} +DB_USER={User} +DB_PASS={Password} +DB_HOST=localhost +DB_PORT=5432 \ No newline at end of file diff --git a/accounts/serializers.py b/accounts/serializers.py index c076332..6361660 100644 --- a/accounts/serializers.py +++ b/accounts/serializers.py @@ -33,7 +33,7 @@ class Meta: model = models.Enrollment fields = [ "id", "enrollment_date", "enrollment_cancel_date", "user", - "service_id", "program_id", "mentor_id", "status", + "service_id", "program_id", "mentor_id", "status", "start_payment", "last_payment", "payments", "program", "service" ] diff --git a/accounts/urls.py b/accounts/urls.py index bf1cd76..2793cb5 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -14,5 +14,8 @@ path("enrollments/", views.UpdateEnroll.as_view()), path("kids/newprofile", views.NewKidsProfile.as_view()), path("kids/getprofiles", views.GetKidsProfile.as_view()), - path("kids/deleteprofile", views.DeleteKidsProfile.as_view()) + path("kids/deleteprofile", views.DeleteKidsProfile.as_view()), + + path("enrollments/query", views.QueryEnrollments.as_view(), name="myenrollments"), + path("enrollments/get-enrollment-data", views.GetEnrollmentData.as_view()) ] diff --git a/accounts/views.py b/accounts/views.py index 61f5893..315955b 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -8,9 +8,12 @@ from django.urls import reverse from django.contrib.admin.views.decorators import staff_member_required from django.shortcuts import get_object_or_404 +from django.utils.dateparse import parse_date from drf_spectacular.utils import extend_schema from . import serializers, models +from datetime import datetime, timezone, timedelta, time from content import models as content_models +from content import serializers as content_serializers from datetime import datetime, timezone, timedelta import requests from django.conf import settings @@ -531,6 +534,32 @@ def delete(self, request, **kwargs): except models.KidsProfile.DoesNotExist: return Response({"error": "Profile not found"}, status=status.HTTP_404_NOT_FOUND) +class QueryEnrollments(APIView): + authentication_classes = [TokenAuthentication] + permission_classes = [IsAuthenticated] + + @extend_schema(responses=serializers.EnrollmentSerializer) + def get(self, request, **kwargs): + user = models.BitCampUser.objects.get(id=request.user.id) + + if user.is_superuser: + date_str = request.GET.get("date", None) + if date_str: + date_obj = parse_date(date_str) + if date_obj is None: + return Response({"error": "Invalid date format"}, status=status.HTTP_400_BAD_REQUEST) + + datetime_obj = datetime.combine(date_obj, time.min) + + users_after_date = models.Enrollment.objects.filter(last_payment__lt=datetime_obj) + + serializer = serializers.EnrollmentSerializer(users_after_date, many=True) + return Response(serializer.data) + else: + return Response({"error": "Date parameter is required"}, status=status.HTTP_400_BAD_REQUEST) + else: + return Response({"error": "Unauthorized"}, status=status.HTTP_401_UNAUTHORIZED) + @staff_member_required def ManualTransaction(request, enrollment_id): enrollment = models.Enrollment.objects.get(id=enrollment_id) @@ -599,3 +628,27 @@ def ManualTransaction(request, enrollment_id): return HttpResponseRedirect(reverse("admin:accounts_enrollment_change", args=[enrollment_id]), status=status.HTTP_201_CREATED) else: return HttpResponseRedirect(reverse("admin:accounts_enrollment_change", args=[enrollment_id]), status=status.HTTP_400_BAD_REQUEST) + +class GetEnrollmentData(APIView): + authentication_classes = [TokenAuthentication] + permission_classes = [IsAuthenticated] + + @extend_schema(responses=serializers.EnrollmentSerializer) + def get(self, request, **kwargs): + user = models.BitCampUser.objects.get(id=request.user.id) + + if user.is_superuser: + id = request.GET.get("id", None) + if id: + enrolment = models.Enrollment.objects.get(id=id) + user = enrolment.user + + enrolment_data = serializers.EnrollmentSerializer(enrolment) + user_data = serializers.BitCampUserSerializer(user).data + + return Response({ + "enrolment": enrolment_data.data, + "user": user_data + }) + else: + return Response({"error": "Unauthorized"}, status=status.HTTP_401_UNAUTHORIZED) diff --git a/requirements.txt b/requirements.txt index 4712e03..5251bf9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ django djangorestframework django-cors-headers drf-spectacular -psycopg2 +psycopg2-binary discord.py gunicorn requests