From f377e283fd55e4026cb568d8fbe82dd4add5cea9 Mon Sep 17 00:00:00 2001 From: jain Date: Mon, 7 Aug 2023 13:25:01 +0530 Subject: [PATCH] guardian list api --- base/messages.py | 3 ++- guardian/serializers.py | 35 ++++++++++++++++++++++++++++- guardian/views.py | 50 +++++++++++++++++------------------------ junior/serializers.py | 6 +++-- junior/views.py | 5 +++-- 5 files changed, 63 insertions(+), 36 deletions(-) diff --git a/base/messages.py b/base/messages.py index 979d970..470c674 100644 --- a/base/messages.py +++ b/base/messages.py @@ -92,7 +92,8 @@ ERROR_CODE = { "2063": "Unauthorized access.", "2064": "To change your password first request an OTP and get it verify then change your password.", "2065": "Passwords do not match. Please try again.", - "2066": "Task does not exist or not in expired state" + "2066": "Task does not exist or not in expired state", + "2067": "No guardian associated with this junior" } """Success message code""" SUCCESS_CODE = { diff --git a/guardian/serializers.py b/guardian/serializers.py index db465ad..04acb9d 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -23,7 +23,7 @@ from account.utils import generate_code from junior.serializers import JuniorDetailSerializer from base.messages import ERROR_CODE, SUCCESS_CODE from base.constants import NUMBER, JUN, ZOD, GRD -from junior.models import Junior, JuniorPoints +from junior.models import Junior, JuniorPoints, JuniorGuardianRelationship from .utils import real_time, convert_timedelta_into_datetime, update_referral_points # notification's constant from notifications.constants import TASK_POINTS, TASK_REJECTED @@ -386,3 +386,36 @@ class ApproveTaskSerializer(serializers.ModelSerializer): junior_data.save() return junior_details +class GuardianDetailListSerializer(serializers.ModelSerializer): + """Guardian serializer""" + + first_name = serializers.SerializerMethodField('get_first_name') + last_name = serializers.SerializerMethodField('get_last_name') + email = serializers.SerializerMethodField('get_email') + image = serializers.SerializerMethodField('get_image') + guardian_id = serializers.SerializerMethodField('get_guardian_id') + + class Meta(object): + """Meta info""" + model = JuniorGuardianRelationship + fields = ['guardian_id', 'first_name', 'last_name', 'email', 'relationship', 'image', 'created_at', + 'updated_at'] + + def get_guardian_id(self,obj): + """first name of guardian""" + return obj.guardian.id + def get_first_name(self,obj): + """first name of guardian""" + return obj.guardian.user.first_name + + def get_last_name(self,obj): + """last name of guardian""" + return obj.guardian.user.last_name + + def get_email(self,obj): + """emailof guardian""" + return obj.guardian.user.email + + def get_image(self,obj): + """first name of guardian""" + return obj.guardian.image diff --git a/guardian/views.py b/guardian/views.py index 47fbdda..211d6ed 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -26,9 +26,10 @@ from django.utils import timezone # Import notification constant # Import send_notification function from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer, - TopJuniorSerializer, ApproveJuniorSerializer, ApproveTaskSerializer) + TopJuniorSerializer, ApproveJuniorSerializer, ApproveTaskSerializer, + GuardianDetailListSerializer) from .models import Guardian, JuniorTask -from junior.models import Junior, JuniorPoints +from junior.models import Junior, JuniorPoints, JuniorGuardianRelationship from account.models import UserEmailOtp, UserNotification from .tasks import generate_otp from account.utils import custom_response, custom_error_response, OTP_EXPIRY, send_otp_email @@ -329,32 +330,21 @@ class ApproveTaskAPIView(viewsets.ViewSet): return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) class GuardianListAPIView(viewsets.ModelViewSet): - """Junior list of assosicated guardian""" - pass + """Guardian list of assosicated junior""" - # serializer_class = JuniorDetailListSerializer - # queryset = Junior.objects.all() - # permission_classes = [IsAuthenticated] - # filter_backends = (SearchFilter,) - # search_fields = ['auth__first_name', 'auth__last_name'] - # http_method_names = ('get',) - # - # def get_queryset(self): - # queryset = self.filter_queryset(self.queryset) - # return queryset - # - # def list(self, request, *args, **kwargs): - # """ junior list""" - # try: - # update_positions_based_on_points() - # guardian_data = Guardian.objects.filter(user__email=request.user).last() - # # fetch junior object - # if guardian_data: - # queryset = self.get_queryset() - # queryset = queryset.filter(guardian_code__icontains=str(guardian_data.guardian_code)) - # # use JuniorDetailListSerializer serializer - # serializer = JuniorDetailListSerializer(queryset, many=True) - # return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) - # return custom_error_response(ERROR_CODE['2045'], response_status=status.HTTP_200_OK) - # except Exception as e: - # return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) + serializer_class = GuardianDetailListSerializer + permission_classes = [IsAuthenticated] + http_method_names = ('get',) + + def list(self, request, *args, **kwargs): + """ junior list""" + try: + guardian_data = JuniorGuardianRelationship.objects.filter(junior__auth__email=self.request.user) + # fetch junior object + if guardian_data: + # use GuardianDetailListSerializer serializer + serializer = GuardianDetailListSerializer(guardian_data, many=True) + return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) + return custom_error_response(ERROR_CODE['2067'], response_status=status.HTTP_200_OK) + except Exception as e: + return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) diff --git a/junior/serializers.py b/junior/serializers.py index 316c1bf..1dc04da 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -89,7 +89,10 @@ class CreateJuniorSerializer(serializers.ModelSerializer): """condition for guardian code""" if guardian_code: junior.guardian_code = guardian_code - junior.dob = validated_data.get('dob',junior.dob) + guardian_data = Guardian.objects.filter(guardian_code=guardian_code[0]).last() + if guardian_data: + JuniorGuardianRelationship.objects.get_or_create(guardian=guardian_data, junior=junior) + junior.dob = validated_data.get('dob', junior.dob) junior.passcode = validated_data.get('passcode', junior.passcode) junior.country_name = validated_data.get('country_name', junior.country_name) """Update country code and phone number""" @@ -289,7 +292,6 @@ class AddJuniorSerializer(serializers.ModelSerializer): UserNotification.objects.get_or_create(user=user_data) """Notification email""" junior_notification_email(email, full_name, email, password) - junior_approval_mail(guardian, full_name) # push notification send_notification.delay(SKIPPED_PROFILE_SETUP, None, junior_data.auth.id, {}) return junior_data diff --git a/junior/views.py b/junior/views.py index 3f3cd5a..15cd387 100644 --- a/junior/views.py +++ b/junior/views.py @@ -27,7 +27,7 @@ import requests # Import upload_image_to_alibaba # Import custom_response, custom_error_response # Import constants -from junior.models import Junior, JuniorPoints +from junior.models import Junior, JuniorPoints, JuniorGuardianRelationship from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\ RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer, AddGuardianSerializer, StartTaskSerializer, ReAssignTaskSerializer) @@ -144,7 +144,6 @@ class JuniorListAPIView(viewsets.ModelViewSet): class AddJuniorAPIView(viewsets.ModelViewSet): """Add Junior by guardian""" - queryset = Junior.objects.all() serializer_class = AddJuniorSerializer permission_classes = [IsAuthenticated] http_method_names = ('post',) @@ -172,6 +171,8 @@ class AddJuniorAPIView(viewsets.ModelViewSet): guardian = Guardian.objects.filter(user=self.request.user).first() junior.guardian_code = [guardian.guardian_code] junior.save() + JuniorGuardianRelationship.objects.get_or_create(guardian=guardian, junior=junior, + relationship=str(self.request.data['relationship'])) return True