From ebb468166edc39c6dc0761e7d42bf1969dcd5f7e Mon Sep 17 00:00:00 2001 From: jain Date: Wed, 2 Aug 2023 15:20:43 +0530 Subject: [PATCH 1/3] sprint4 reassign task after expired --- base/messages.py | 6 ++++-- junior/serializers.py | 14 ++++++++++++++ junior/urls.py | 5 +++-- junior/views.py | 26 +++++++++++++++++++++++++- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/base/messages.py b/base/messages.py index 0407719..bff508d 100644 --- a/base/messages.py +++ b/base/messages.py @@ -91,7 +91,8 @@ ERROR_CODE = { "2062": "Please enter email address", "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." + "2065": "Passwords do not match. Please try again.", + "2066": "Task does not exist or not in expired state" } """Success message code""" SUCCESS_CODE = { @@ -140,7 +141,8 @@ SUCCESS_CODE = { "3032": "Task request sent successfully", "3033": "Valid Referral code", "3034": "Invite guardian successfully", - "3035": "Task started successfully" + "3035": "Task started successfully", + "3036": "Task reassign successfully" } """status code error""" STATUS_CODE_ERROR = { diff --git a/junior/serializers.py b/junior/serializers.py index 0c5911a..54332f0 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -458,3 +458,17 @@ class StartTaskSerializer(serializers.ModelSerializer): instance.task_status = str(NUMBER['two']) instance.save() return instance + +class ReAssignTaskSerializer(serializers.ModelSerializer): + """User task Serializer""" + class Meta(object): + """Meta class""" + model = JuniorTask + fields = ('id', 'due_date') + def update(self, instance, validated_data): + instance.task_status = str(NUMBER['one']) + instance.due_date = validated_data.get('due_date') + instance.is_approved = False + instance.requested_on = None + instance.save() + return instance diff --git a/junior/urls.py b/junior/urls.py index e4b2489..f66fa30 100644 --- a/junior/urls.py +++ b/junior/urls.py @@ -4,7 +4,7 @@ from django.urls import path, include from .views import (UpdateJuniorProfile, ValidateGuardianCode, JuniorListAPIView, AddJuniorAPIView, InvitedJuniorAPIView, FilterJuniorAPIView, RemoveJuniorAPIView, JuniorTaskListAPIView, CompleteJuniorTaskAPIView, JuniorPointsListAPIView, ValidateReferralCode, - InviteGuardianAPIView, StartTaskAPIView) + InviteGuardianAPIView, StartTaskAPIView, ReAssignJuniorTaskAPIView) """Third party import""" from rest_framework import routers @@ -46,5 +46,6 @@ urlpatterns = [ path('api/v1/', include(router.urls)), path('api/v1/remove-junior/', RemoveJuniorAPIView.as_view()), path('api/v1/complete-task/', CompleteJuniorTaskAPIView.as_view()), - path('api/v1/start-task/', StartTaskAPIView.as_view()) + path('api/v1/start-task/', StartTaskAPIView.as_view()), + path('api/v1/reassign-task/', ReAssignJuniorTaskAPIView.as_view()), ] diff --git a/junior/views.py b/junior/views.py index 8cb95a3..14920ec 100644 --- a/junior/views.py +++ b/junior/views.py @@ -30,7 +30,7 @@ import requests from junior.models import Junior, JuniorPoints from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\ RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer, - AddGuardianSerializer, StartTaskSerializer) + AddGuardianSerializer, StartTaskSerializer, ReAssignTaskSerializer) from guardian.models import Guardian, JuniorTask from guardian.serializers import TaskDetailsSerializer, TaskDetailsjuniorSerializer from base.messages import ERROR_CODE, SUCCESS_CODE @@ -434,3 +434,27 @@ class StartTaskAPIView(views.APIView): return custom_error_response(ERROR_CODE['2060'], response_status=status.HTTP_400_BAD_REQUEST) except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) + +class ReAssignJuniorTaskAPIView(views.APIView): + """Update junior task API""" + serializer_class = ReAssignTaskSerializer + model = JuniorTask + permission_classes = [IsAuthenticated] + + def put(self, request, format=None): + try: + task_id = self.request.data.get('task_id') + task_queryset = JuniorTask.objects.filter(id=task_id, guardian__user__email=self.request.user).last() + if task_queryset and task_queryset.task_status == str(NUMBER['six']): + # use StartTaskSerializer serializer + serializer = ReAssignTaskSerializer(task_queryset, data=request.data, partial=True) + if serializer.is_valid(): + # save serializer + serializer.save() + return custom_response(SUCCESS_CODE['3036'], response_status=status.HTTP_200_OK) + return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) + else: + # task in another state + return custom_error_response(ERROR_CODE['2066'], response_status=status.HTTP_400_BAD_REQUEST) + except Exception as e: + return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) From 75d0b12008ff4ca616d2ea11d6ca254b47f15d45 Mon Sep 17 00:00:00 2001 From: jain Date: Wed, 2 Aug 2023 16:26:20 +0530 Subject: [PATCH 2/3] changes in remove guardian code api --- guardian/serializers.py | 2 +- junior/models.py | 2 ++ junior/serializers.py | 2 +- junior/views.py | 3 +-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/guardian/serializers.py b/guardian/serializers.py index 1509fdf..db465ad 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -345,7 +345,7 @@ class ApproveJuniorSerializer(serializers.ModelSerializer): """update guardian code""" instance = self.context['junior'] instance.guardian_code = [self.context['guardian_code']] - instance.is_invited = True + instance.guardian_code_approved = True instance.save() return instance diff --git a/junior/models.py b/junior/models.py index dc71c97..b18cbf5 100644 --- a/junior/models.py +++ b/junior/models.py @@ -71,6 +71,8 @@ class Junior(models.Model): passcode = models.IntegerField(null=True, blank=True, default=None) # junior is verified or not""" is_verified = models.BooleanField(default=False) + """guardian code is approved or not""" + guardian_code_approved = models.BooleanField(default=False) # Profile created and updated time""" created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) diff --git a/junior/serializers.py b/junior/serializers.py index 54332f0..316c1bf 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -246,7 +246,7 @@ class JuniorProfileSerializer(serializers.ModelSerializer): fields = ['id', 'email', 'first_name', 'last_name', 'country_name', 'country_code', 'phone', 'gender', 'dob', 'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'image', 'updated_at', 'notification_count', 'total_count', 'complete_field_count', 'signup_method', - 'is_invited', 'passcode'] + 'is_invited', 'passcode', 'guardian_code_approved'] class AddJuniorSerializer(serializers.ModelSerializer): """Add junior serializer""" diff --git a/junior/views.py b/junior/views.py index 14920ec..3f3cd5a 100644 --- a/junior/views.py +++ b/junior/views.py @@ -246,8 +246,7 @@ class RemoveJuniorAPIView(views.APIView): junior_id = self.request.GET.get('id') guardian = Guardian.objects.filter(user__email=self.request.user).last() # fetch junior query - junior_queryset = Junior.objects.filter(id=junior_id, guardian_code__icontains=str(guardian.guardian_code), - is_invited=True).last() + junior_queryset = Junior.objects.filter(id=junior_id, guardian_code__icontains=str(guardian.guardian_code)).last() if junior_queryset: # use RemoveJuniorSerializer serializer serializer = RemoveJuniorSerializer(junior_queryset, data=request.data, partial=True) From 404825dc858d6e346c50efe68af3f8ac397b03cc Mon Sep 17 00:00:00 2001 From: jain Date: Wed, 2 Aug 2023 16:57:40 +0530 Subject: [PATCH 3/3] migration file --- ...018_remove_junior_relationship_and_more.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 junior/migrations/0018_remove_junior_relationship_and_more.py diff --git a/junior/migrations/0018_remove_junior_relationship_and_more.py b/junior/migrations/0018_remove_junior_relationship_and_more.py new file mode 100644 index 0000000..d24b43f --- /dev/null +++ b/junior/migrations/0018_remove_junior_relationship_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.2 on 2023-08-02 11:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('junior', '0017_juniorguardianrelationship'), + ] + + operations = [ + migrations.RemoveField( + model_name='junior', + name='relationship', + ), + migrations.AddField( + model_name='junior', + name='guardian_code_approved', + field=models.BooleanField(default=False), + ), + ]