From ed8fc156ac3946d8c15f3c79ae68dbd99784081b Mon Sep 17 00:00:00 2001 From: jain Date: Wed, 2 Aug 2023 14:23:36 +0530 Subject: [PATCH] change junior task list api response --- base/constants.py | 1 + guardian/serializers.py | 27 ++++++++++++++++++++++++++- junior/serializers.py | 8 ++++++-- junior/views.py | 6 +++--- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/base/constants.py b/base/constants.py index 3c1501c..6022f62 100644 --- a/base/constants.py +++ b/base/constants.py @@ -83,6 +83,7 @@ IN_PROGRESS = 2 REJECTED = 3 REQUESTED = 4 COMPLETED = 5 +EXPIRED = 6 TASK_POINTS = 5 # duplicate name used defined in constant PROJECT_NAME PROJECT_NAME = 'Zod Bank' diff --git a/guardian/serializers.py b/guardian/serializers.py index df2178a..1509fdf 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -211,7 +211,7 @@ class GuardianDetailSerializer(serializers.ModelSerializer): """Meta info""" model = Guardian fields = ['id', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob', - 'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image', + 'guardian_code','is_active', 'is_complete_profile', 'created_at', 'image', 'updated_at'] class TaskDetailsSerializer(serializers.ModelSerializer): """Task detail serializer""" @@ -244,6 +244,31 @@ class TaskDetailsSerializer(serializers.ModelSerializer): 'requested_on', 'rejected_on', 'completed_on', 'is_expired', 'junior', 'task_status', 'is_active', 'remaining_time', 'created_at','updated_at'] +class TaskDetailsjuniorSerializer(serializers.ModelSerializer): + """Task detail serializer""" + + guardian = GuardianDetailSerializer() + remaining_time = serializers.SerializerMethodField('get_remaining_time') + + def get_remaining_time(self, obj): + """ remaining time to complete task""" + due_date_datetime = datetime.combine(obj.due_date, datetime.max.time()) + # fetch real time + current_datetime = real_time() + # Perform the subtraction + if due_date_datetime > current_datetime: + time_difference = due_date_datetime - current_datetime + time_only = convert_timedelta_into_datetime(time_difference) + return str(time_difference.days) + ' days ' + str(time_only) + return str(NUMBER['zero']) + ' days ' + '00:00:00:00000' + + + class Meta(object): + """Meta info""" + model = JuniorTask + fields = ['id', 'guardian', 'task_name', 'task_description', 'points', 'due_date','default_image', 'image', + 'requested_on', 'rejected_on', 'completed_on', + 'junior', 'task_status', 'is_active', 'remaining_time', 'created_at','updated_at'] class TopJuniorSerializer(serializers.ModelSerializer): """Top junior serializer""" diff --git a/junior/serializers.py b/junior/serializers.py index 27a6808..0c5911a 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -12,7 +12,7 @@ from account.utils import send_otp_email, generate_code from junior.models import Junior, JuniorPoints, JuniorGuardianRelationship from guardian.tasks import generate_otp from base.messages import ERROR_CODE, SUCCESS_CODE -from base.constants import PENDING, IN_PROGRESS, REJECTED, REQUESTED, COMPLETED, NUMBER, JUN, ZOD +from base.constants import PENDING, IN_PROGRESS, REJECTED, REQUESTED, COMPLETED, NUMBER, JUN, ZOD, EXPIRED from guardian.models import Guardian, JuniorTask from account.models import UserEmailOtp, UserNotification from junior.utils import junior_notification_email, junior_approval_mail @@ -335,6 +335,7 @@ class JuniorPointsSerializer(serializers.ModelSerializer): requested_task = serializers.SerializerMethodField('get_requested_task') rejected_task = serializers.SerializerMethodField('get_rejected_task') pending_task = serializers.SerializerMethodField('get_pending_task') + expired_task = serializers.SerializerMethodField('get_expired_task') position = serializers.SerializerMethodField('get_position') def get_junior_id(self, obj): @@ -370,11 +371,14 @@ class JuniorPointsSerializer(serializers.ModelSerializer): def get_pending_task(self, obj): return JuniorTask.objects.filter(junior=obj.junior, task_status=PENDING).count() + def get_expired_task(self, obj): + return JuniorTask.objects.filter(junior=obj.junior, task_status=EXPIRED).count() + class Meta(object): """Meta info""" model = Junior fields = ['junior_id', 'total_points', 'position', 'pending_task', 'in_progress_task', 'completed_task', - 'requested_task', 'rejected_task'] + 'requested_task', 'rejected_task', 'expired_task'] class AddGuardianSerializer(serializers.ModelSerializer): """Add guardian serializer""" diff --git a/junior/views.py b/junior/views.py index c9c8739..8cb95a3 100644 --- a/junior/views.py +++ b/junior/views.py @@ -32,7 +32,7 @@ from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, Ad RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer, AddGuardianSerializer, StartTaskSerializer) from guardian.models import Guardian, JuniorTask -from guardian.serializers import TaskDetailsSerializer +from guardian.serializers import TaskDetailsSerializer, TaskDetailsjuniorSerializer from base.messages import ERROR_CODE, SUCCESS_CODE from base.constants import NUMBER from account.utils import custom_response, custom_error_response @@ -265,7 +265,7 @@ class RemoveJuniorAPIView(views.APIView): class JuniorTaskListAPIView(viewsets.ModelViewSet): """Update guardian profile""" - serializer_class = TaskDetailsSerializer + serializer_class = TaskDetailsjuniorSerializer permission_classes = [IsAuthenticated] pagination_class = PageNumberPagination queryset = JuniorTask.objects.all() @@ -295,7 +295,7 @@ class JuniorTaskListAPIView(viewsets.ModelViewSet): # use Pagination paginated_queryset = paginator.paginate_queryset(queryset, request) # use TaskDetailsSerializer serializer - serializer = TaskDetailsSerializer(paginated_queryset, many=True) + serializer = TaskDetailsjuniorSerializer(paginated_queryset, many=True) return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)