diff --git a/guardian/serializers.py b/guardian/serializers.py index 8ec66bf..df2178a 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -308,6 +308,7 @@ class GuardianProfileSerializer(serializers.ModelSerializer): 'is_active', 'is_complete_profile', 'created_at', 'image', 'signup_method', 'updated_at', 'passcode'] + class ApproveJuniorSerializer(serializers.ModelSerializer): """approve junior serializer""" class Meta(object): @@ -319,9 +320,11 @@ class ApproveJuniorSerializer(serializers.ModelSerializer): """update guardian code""" instance = self.context['junior'] instance.guardian_code = [self.context['guardian_code']] + instance.is_invited = True instance.save() return instance + class ApproveTaskSerializer(serializers.ModelSerializer): """approve task serializer""" class Meta(object): diff --git a/guardian/views.py b/guardian/views.py index 7a56656..9706e87 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -281,10 +281,13 @@ class ApproveJuniorAPIView(viewsets.ViewSet): serializer.save() return custom_response(SUCCESS_CODE['3023'], serializer.data, response_status=status.HTTP_200_OK) else: + queryset[1].guardian_code = None + queryset[1].save() return custom_response(SUCCESS_CODE['3024'], response_status=status.HTTP_200_OK) except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) + class ApproveTaskAPIView(viewsets.ViewSet): """approve junior by guardian""" serializer_class = ApproveTaskSerializer diff --git a/junior/views.py b/junior/views.py index 429b2a1..c9c8739 100644 --- a/junior/views.py +++ b/junior/views.py @@ -5,6 +5,8 @@ from rest_framework import viewsets, status, generics,views from rest_framework.permissions import IsAuthenticated from rest_framework.pagination import PageNumberPagination from django.contrib.auth.models import User +from rest_framework.filters import SearchFilter + import datetime import requests """Django app import""" @@ -115,8 +117,14 @@ class JuniorListAPIView(viewsets.ModelViewSet): 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: @@ -124,7 +132,8 @@ class JuniorListAPIView(viewsets.ModelViewSet): guardian_data = Guardian.objects.filter(user__email=request.user).last() # fetch junior object if guardian_data: - queryset = Junior.objects.filter(guardian_code__icontains=str(guardian_data.guardian_code)) + 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) @@ -132,20 +141,22 @@ class JuniorListAPIView(viewsets.ModelViewSet): except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) + class AddJuniorAPIView(viewsets.ModelViewSet): """Add Junior by guardian""" queryset = Junior.objects.all() serializer_class = AddJuniorSerializer permission_classes = [IsAuthenticated] http_method_names = ('post',) + def create(self, request, *args, **kwargs): """ junior list""" try: info_data = {'user': request.user, 'relationship': str(request.data['relationship']), 'email': request.data['email'], 'first_name': request.data['first_name'], 'last_name': request.data['last_name']} - if User.objects.filter(username=request.data['email']): - return custom_error_response(ERROR_CODE['2059'], response_status=status.HTTP_400_BAD_REQUEST) - + if user := User.objects.filter(username=request.data['email']).first(): + self.associate_guardian(user) + return custom_response(SUCCESS_CODE['3021'], response_status=status.HTTP_200_OK) # use AddJuniorSerializer serializer serializer = AddJuniorSerializer(data=request.data, context=info_data) if serializer.is_valid(): @@ -156,6 +167,14 @@ class AddJuniorAPIView(viewsets.ModelViewSet): except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) + def associate_guardian(self, user): + junior = Junior.objects.filter(auth=user).first() + guardian = Guardian.objects.filter(user=self.request.user).first() + junior.guardian_code = [guardian.guardian_code] + junior.save() + return True + + class InvitedJuniorAPIView(viewsets.ModelViewSet): """Junior list of assosicated guardian""" diff --git a/web_admin/serializers/article_serializer.py b/web_admin/serializers/article_serializer.py index 185482f..e374679 100644 --- a/web_admin/serializers/article_serializer.py +++ b/web_admin/serializers/article_serializer.py @@ -60,14 +60,14 @@ class ArticleSurveySerializer(serializers.ModelSerializer): article survey serializer """ id = serializers.IntegerField(required=False) - survey_options = SurveyOptionSerializer(many=True) + options = SurveyOptionSerializer(many=True) class Meta: """ meta class """ model = ArticleSurvey - fields = ('id', 'question', 'survey_options') + fields = ('id', 'question', 'options') class ArticleSerializer(serializers.ModelSerializer): @@ -120,7 +120,7 @@ class ArticleSerializer(serializers.ModelSerializer): for survey in article_survey: survey = pop_id(survey) - options = survey.pop('survey_options') + options = survey.pop('options') survey_obj = ArticleSurvey.objects.create(article=article, points=ARTICLE_SURVEY_POINTS, **survey) for option in options: option = pop_id(option) @@ -165,7 +165,7 @@ class ArticleSerializer(serializers.ModelSerializer): # Update or create survey sections for survey_data in article_survey: survey_id = survey_data.get('id', None) - options_data = survey_data.pop('survey_options') + options_data = survey_data.pop('options') if survey_id: survey = ArticleSurvey.objects.get(id=survey_id, article=instance) survey.question = survey_data.get('question', survey.question) diff --git a/web_admin/serializers/auth_serializer.py b/web_admin/serializers/auth_serializer.py index 511d344..9f603ce 100644 --- a/web_admin/serializers/auth_serializer.py +++ b/web_admin/serializers/auth_serializer.py @@ -125,12 +125,10 @@ class AdminCreatePasswordSerializer(serializers.ModelSerializer): if new_password != confirm_password: raise serializers.ValidationError({'details': ERROR_CODE['2065']}) - user_otp_details = UserEmailOtp.objects.filter(email=email).last() + user_otp_details = UserEmailOtp.objects.filter(email=email, is_verified=True).last() if not user_otp_details: raise serializers.ValidationError({'details': ERROR_CODE['2064']}) if user_otp_details.user_type != dict(USER_TYPE).get('3'): raise serializers.ValidationError({'details': ERROR_CODE['2063']}) - if not user_otp_details.is_verified: - raise serializers.ValidationError({'details': ERROR_CODE['2064']}) user_otp_details.delete() return attrs