mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-17 02:45:08 +00:00
conflict resolved
This commit is contained in:
@ -8,7 +8,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 0 27px 15px;">
|
<td style="padding: 0 27px 15px;">
|
||||||
<p style="margin: 0; font-size: 16px; line-height: 20px; padding: 36px 0 0; font-weight: 500; color: #1f2532;">
|
<p style="margin: 0; font-size: 16px; line-height: 20px; padding: 36px 0 0; font-weight: 500; color: #1f2532;">
|
||||||
Hi {{full_name}},
|
Hello,
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -22,7 +22,7 @@ from junior.models import Junior
|
|||||||
from guardian.models import Guardian
|
from guardian.models import Guardian
|
||||||
from account.models import UserDelete
|
from account.models import UserDelete
|
||||||
from base.messages import ERROR_CODE
|
from base.messages import ERROR_CODE
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
# Define delete
|
# Define delete
|
||||||
# user account condition,
|
# user account condition,
|
||||||
@ -228,3 +228,4 @@ def generate_code(value, user_id):
|
|||||||
return code
|
return code
|
||||||
|
|
||||||
|
|
||||||
|
OTP_EXPIRY = timezone.now() + timezone.timedelta(days=1)
|
||||||
|
@ -22,7 +22,7 @@ from django.conf import settings
|
|||||||
"""App Import"""
|
"""App Import"""
|
||||||
from guardian.models import Guardian
|
from guardian.models import Guardian
|
||||||
from junior.models import Junior
|
from junior.models import Junior
|
||||||
from guardian.utils import upload_image_to_alibaba
|
from guardian.utils import upload_image_to_alibaba, OTP_EXPIRY
|
||||||
from account.models import UserDeviceDetails, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
|
from account.models import UserDeviceDetails, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
"""Account serializer"""
|
"""Account serializer"""
|
||||||
@ -228,7 +228,7 @@ class ForgotPasswordAPIView(views.APIView):
|
|||||||
'verification_code': verification_code
|
'verification_code': verification_code
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
expiry = timezone.now() + timezone.timedelta(days=1)
|
expiry = OTP_EXPIRY
|
||||||
user_data, created = UserEmailOtp.objects.get_or_create(email=email)
|
user_data, created = UserEmailOtp.objects.get_or_create(email=email)
|
||||||
if created:
|
if created:
|
||||||
user_data.expired_at = expiry
|
user_data.expired_at = expiry
|
||||||
@ -399,7 +399,7 @@ class ReSendEmailOtp(viewsets.ModelViewSet):
|
|||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
otp = generate_otp()
|
otp = generate_otp()
|
||||||
if User.objects.filter(email=request.data['email']):
|
if User.objects.filter(email=request.data['email']):
|
||||||
expiry = timezone.now() + timezone.timedelta(days=1)
|
expiry = OTP_EXPIRY
|
||||||
email_data, created = UserEmailOtp.objects.get_or_create(email=request.data['email'])
|
email_data, created = UserEmailOtp.objects.get_or_create(email=request.data['email'])
|
||||||
if created:
|
if created:
|
||||||
email_data.expired_at = expiry
|
email_data.expired_at = expiry
|
||||||
|
@ -76,12 +76,15 @@ ERROR_CODE = {
|
|||||||
"2043": "Article Survey with given id doesn't exist.",
|
"2043": "Article Survey with given id doesn't exist.",
|
||||||
"2044": "Task does not exist",
|
"2044": "Task does not exist",
|
||||||
"2045": "Invalid guardian",
|
"2045": "Invalid guardian",
|
||||||
|
# past due date
|
||||||
"2046": "Due date must be future date",
|
"2046": "Due date must be future date",
|
||||||
# invalid junior id msg
|
# invalid junior id msg
|
||||||
"2047": "Invalid Junior ID ",
|
"2047": "Invalid Junior ID ",
|
||||||
"2048": "Choose right file for image",
|
"2048": "Choose right file for image",
|
||||||
|
# task request
|
||||||
"2049": "This task is already requested ",
|
"2049": "This task is already requested ",
|
||||||
"2059": "Already exist junior",
|
"2059": "Already exist junior",
|
||||||
|
# task status
|
||||||
"2060": "Task does not exist or not in pending state",
|
"2060": "Task does not exist or not in pending state",
|
||||||
"2061": "Please insert image or check the image is valid or not.",
|
"2061": "Please insert image or check the image is valid or not.",
|
||||||
}
|
}
|
||||||
|
@ -215,6 +215,7 @@ class TaskDetailsSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
junior = JuniorDetailSerializer()
|
junior = JuniorDetailSerializer()
|
||||||
remaining_time = serializers.SerializerMethodField('get_remaining_time')
|
remaining_time = serializers.SerializerMethodField('get_remaining_time')
|
||||||
|
is_expired = serializers.SerializerMethodField('get_is_expired')
|
||||||
|
|
||||||
def get_remaining_time(self, obj):
|
def get_remaining_time(self, obj):
|
||||||
""" remaining time to complete task"""
|
""" remaining time to complete task"""
|
||||||
@ -228,12 +229,16 @@ class TaskDetailsSerializer(serializers.ModelSerializer):
|
|||||||
return str(time_difference.days) + ' days ' + str(time_only)
|
return str(time_difference.days) + ' days ' + str(time_only)
|
||||||
return str(NUMBER['zero']) + ' days ' + '00:00:00:00000'
|
return str(NUMBER['zero']) + ' days ' + '00:00:00:00000'
|
||||||
|
|
||||||
|
def get_is_expired(self, obj):
|
||||||
|
""" task expired or not"""
|
||||||
|
if obj.due_date < datetime.today().date():
|
||||||
|
return True
|
||||||
|
return False
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
"""Meta info"""
|
"""Meta info"""
|
||||||
model = JuniorTask
|
model = JuniorTask
|
||||||
fields = ['id', 'guardian', 'task_name', 'task_description', 'points', 'due_date','default_image', 'image',
|
fields = ['id', 'guardian', 'task_name', 'task_description', 'points', 'due_date','default_image', 'image',
|
||||||
'requested_on', 'rejected_on', 'completed_on',
|
'requested_on', 'rejected_on', 'completed_on', 'is_expired',
|
||||||
'junior', 'task_status', 'is_active', 'remaining_time', 'created_at','updated_at']
|
'junior', 'task_status', 'is_active', 'remaining_time', 'created_at','updated_at']
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
"""Views of Guardian"""
|
"""Views of Guardian"""
|
||||||
|
|
||||||
# django imports
|
# django imports
|
||||||
|
# Import IsAuthenticated
|
||||||
|
# Import viewsets and status
|
||||||
|
# Import PageNumberPagination
|
||||||
|
# Import User
|
||||||
|
# Import timezone
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework import viewsets, status
|
from rest_framework import viewsets, status
|
||||||
from rest_framework.pagination import PageNumberPagination
|
from rest_framework.pagination import PageNumberPagination
|
||||||
@ -18,15 +23,15 @@ from django.utils import timezone
|
|||||||
# from utils file
|
# from utils file
|
||||||
# Import account's serializer
|
# Import account's serializer
|
||||||
# Import account's task
|
# Import account's task
|
||||||
|
# Import notification constant
|
||||||
|
# Import send_notification function
|
||||||
from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer,
|
from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer,
|
||||||
TopJuniorSerializer, ApproveJuniorSerializer, ApproveTaskSerializer)
|
TopJuniorSerializer, ApproveJuniorSerializer, ApproveTaskSerializer)
|
||||||
from .models import Guardian, JuniorTask
|
from .models import Guardian, JuniorTask
|
||||||
from junior.models import Junior, JuniorPoints
|
from junior.models import Junior, JuniorPoints
|
||||||
from account.models import UserEmailOtp, UserNotification
|
from account.models import UserEmailOtp, UserNotification
|
||||||
from .tasks import generate_otp
|
from .tasks import generate_otp
|
||||||
from account.utils import send_otp_email
|
from account.utils import custom_response, custom_error_response, OTP_EXPIRY, send_otp_email
|
||||||
from account.utils import custom_response, custom_error_response
|
|
||||||
from base.messages import ERROR_CODE, SUCCESS_CODE
|
from base.messages import ERROR_CODE, SUCCESS_CODE
|
||||||
from base.constants import NUMBER
|
from base.constants import NUMBER
|
||||||
from .utils import upload_image_to_alibaba
|
from .utils import upload_image_to_alibaba
|
||||||
@ -58,13 +63,15 @@ class SignupViewset(viewsets.ModelViewSet):
|
|||||||
user = serializer.save()
|
user = serializer.save()
|
||||||
"""Generate otp"""
|
"""Generate otp"""
|
||||||
otp = generate_otp()
|
otp = generate_otp()
|
||||||
expiry = timezone.now() + timezone.timedelta(days=1)
|
# expire otp after 1 day
|
||||||
|
expiry = OTP_EXPIRY
|
||||||
# create user email otp object
|
# create user email otp object
|
||||||
UserEmailOtp.objects.create(email=request.data['email'], otp=otp,
|
UserEmailOtp.objects.create(email=request.data['email'], otp=otp,
|
||||||
user_type=str(request.data['user_type']), expired_at=expiry)
|
user_type=str(request.data['user_type']), expired_at=expiry)
|
||||||
"""Send email to the register user"""
|
"""Send email to the register user"""
|
||||||
send_otp_email(request.data['email'], otp)
|
send_otp_email(request.data['email'], otp)
|
||||||
send_notification(REGISTRATION, None, user.id, {})
|
# send push notification for registration
|
||||||
|
send_notification.delay(REGISTRATION, None, user.id, {})
|
||||||
return custom_response(SUCCESS_CODE['3001'],
|
return custom_response(SUCCESS_CODE['3001'],
|
||||||
response_status=status.HTTP_200_OK)
|
response_status=status.HTTP_200_OK)
|
||||||
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"""Third party Django app"""
|
"""Third party Django app"""
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
"""Import Django app"""
|
"""Import Django app"""
|
||||||
from .models import Junior, JuniorPoints
|
from .models import Junior, JuniorPoints, JuniorGuardianRelationship
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
@admin.register(Junior)
|
@admin.register(Junior)
|
||||||
class JuniorAdmin(admin.ModelAdmin):
|
class JuniorAdmin(admin.ModelAdmin):
|
||||||
@ -21,3 +21,9 @@ class JuniorPointsAdmin(admin.ModelAdmin):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""Return email id"""
|
"""Return email id"""
|
||||||
return self.junior.auth.email
|
return self.junior.auth.email
|
||||||
|
|
||||||
|
@admin.register(JuniorGuardianRelationship)
|
||||||
|
class JuniorGuardianRelationshipAdmin(admin.ModelAdmin):
|
||||||
|
"""Junior Admin"""
|
||||||
|
list_display = ['guardian', 'junior', 'relationship']
|
||||||
|
|
||||||
|
@ -49,9 +49,6 @@ class Junior(models.Model):
|
|||||||
dob = models.DateField(max_length=15, null=True, blank=True, default=None)
|
dob = models.DateField(max_length=15, null=True, blank=True, default=None)
|
||||||
# Image of the junior"""
|
# Image of the junior"""
|
||||||
image = models.URLField(null=True, blank=True, default=None)
|
image = models.URLField(null=True, blank=True, default=None)
|
||||||
# relationship"""
|
|
||||||
relationship = models.CharField(max_length=31, choices=RELATIONSHIP, null=True, blank=True,
|
|
||||||
default='1')
|
|
||||||
# Sign up method"""
|
# Sign up method"""
|
||||||
signup_method = models.CharField(max_length=31, choices=SIGNUP_METHODS, default='1')
|
signup_method = models.CharField(max_length=31, choices=SIGNUP_METHODS, default='1')
|
||||||
# Codes"""
|
# Codes"""
|
||||||
@ -115,7 +112,8 @@ class JuniorPoints(models.Model):
|
|||||||
|
|
||||||
class JuniorGuardianRelationship(models.Model):
|
class JuniorGuardianRelationship(models.Model):
|
||||||
"""Junior Guardian relationship model"""
|
"""Junior Guardian relationship model"""
|
||||||
guardian = models.ForeignKey(Guardian, on_delete=models.CASCADE, related_name='guardian_relation', verbose_name='Guardian')
|
guardian = models.ForeignKey(Guardian, on_delete=models.CASCADE, related_name='guardian_relation',
|
||||||
|
verbose_name='Guardian')
|
||||||
# associated junior with the task
|
# associated junior with the task
|
||||||
junior = models.ForeignKey(Junior, on_delete=models.CASCADE, related_name='junior_relation', verbose_name='Junior')
|
junior = models.ForeignKey(Junior, on_delete=models.CASCADE, related_name='junior_relation', verbose_name='Junior')
|
||||||
# relation between guardian and junior"""
|
# relation between guardian and junior"""
|
||||||
|
@ -9,14 +9,14 @@ from rest_framework_simplejwt.tokens import RefreshToken
|
|||||||
|
|
||||||
"""Import django app"""
|
"""Import django app"""
|
||||||
from account.utils import send_otp_email, generate_code
|
from account.utils import send_otp_email, generate_code
|
||||||
from junior.models import Junior, JuniorPoints
|
from junior.models import Junior, JuniorPoints, JuniorGuardianRelationship
|
||||||
from guardian.tasks import generate_otp
|
from guardian.tasks import generate_otp
|
||||||
from base.messages import ERROR_CODE, SUCCESS_CODE
|
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
|
||||||
from guardian.models import Guardian, JuniorTask
|
from guardian.models import Guardian, JuniorTask
|
||||||
from account.models import UserEmailOtp
|
from account.models import UserEmailOtp, UserNotification
|
||||||
from junior.utils import junior_notification_email, junior_approval_mail
|
from junior.utils import junior_notification_email, junior_approval_mail
|
||||||
from guardian.utils import real_time, update_referral_points
|
from guardian.utils import real_time, update_referral_points, convert_timedelta_into_datetime
|
||||||
from notifications.utils import send_notification
|
from notifications.utils import send_notification
|
||||||
from notifications.constants import INVITED_GUARDIAN, APPROVED_JUNIOR
|
from notifications.constants import INVITED_GUARDIAN, APPROVED_JUNIOR
|
||||||
|
|
||||||
@ -249,18 +249,11 @@ class JuniorProfileSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class AddJuniorSerializer(serializers.ModelSerializer):
|
class AddJuniorSerializer(serializers.ModelSerializer):
|
||||||
"""Add junior serializer"""
|
"""Add junior serializer"""
|
||||||
auth_token = serializers.SerializerMethodField('get_auth_token')
|
|
||||||
|
|
||||||
def get_auth_token(self, obj):
|
|
||||||
"""auth token"""
|
|
||||||
refresh = RefreshToken.for_user(obj)
|
|
||||||
access_token = str(refresh.access_token)
|
|
||||||
return access_token
|
|
||||||
|
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
"""Meta info"""
|
"""Meta info"""
|
||||||
model = Junior
|
model = Junior
|
||||||
fields = ['id', 'gender','dob', 'relationship', 'auth_token', 'is_invited']
|
fields = ['id', 'gender','dob', 'is_invited']
|
||||||
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
@ -268,6 +261,7 @@ class AddJuniorSerializer(serializers.ModelSerializer):
|
|||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
email = self.context['email']
|
email = self.context['email']
|
||||||
guardian = self.context['user']
|
guardian = self.context['user']
|
||||||
|
relationship = self.context['relationship']
|
||||||
full_name = self.context['first_name'] + ' ' + self.context['last_name']
|
full_name = self.context['first_name'] + ' ' + self.context['last_name']
|
||||||
guardian_data = Guardian.objects.filter(user__username=guardian).last()
|
guardian_data = Guardian.objects.filter(user__username=guardian).last()
|
||||||
user_data = User.objects.create(username=email, email=email,
|
user_data = User.objects.create(username=email, email=email,
|
||||||
@ -278,11 +272,13 @@ class AddJuniorSerializer(serializers.ModelSerializer):
|
|||||||
user_data.save()
|
user_data.save()
|
||||||
junior_data = Junior.objects.create(auth=user_data, gender=validated_data.get('gender'),
|
junior_data = Junior.objects.create(auth=user_data, gender=validated_data.get('gender'),
|
||||||
dob=validated_data.get('dob'), is_invited=True,
|
dob=validated_data.get('dob'), is_invited=True,
|
||||||
relationship=validated_data.get('relationship'),
|
guardian_code=[guardian_data.guardian_code],
|
||||||
junior_code=generate_code(JUN, user_data.id),
|
junior_code=generate_code(JUN, user_data.id),
|
||||||
referral_code=generate_code(ZOD, user_data.id),
|
referral_code=generate_code(ZOD, user_data.id),
|
||||||
referral_code_used=guardian_data.referral_code,
|
referral_code_used=guardian_data.referral_code,
|
||||||
is_password_set=False, is_verified=True)
|
is_password_set=False, is_verified=True)
|
||||||
|
JuniorGuardianRelationship.objects.create(guardian=guardian_data, junior=junior_data,
|
||||||
|
relationship=relationship)
|
||||||
"""Generate otp"""
|
"""Generate otp"""
|
||||||
otp_value = generate_otp()
|
otp_value = generate_otp()
|
||||||
expiry_time = timezone.now() + timezone.timedelta(days=1)
|
expiry_time = timezone.now() + timezone.timedelta(days=1)
|
||||||
@ -375,18 +371,11 @@ class JuniorPointsSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class AddGuardianSerializer(serializers.ModelSerializer):
|
class AddGuardianSerializer(serializers.ModelSerializer):
|
||||||
"""Add guardian serializer"""
|
"""Add guardian serializer"""
|
||||||
auth_token = serializers.SerializerMethodField('get_auth_token')
|
|
||||||
|
|
||||||
def get_auth_token(self, obj):
|
|
||||||
"""auth token"""
|
|
||||||
refresh = RefreshToken.for_user(obj)
|
|
||||||
access_token = str(refresh.access_token)
|
|
||||||
return access_token
|
|
||||||
|
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
"""Meta info"""
|
"""Meta info"""
|
||||||
model = Guardian
|
model = Guardian
|
||||||
fields = ['id', 'auth_token']
|
fields = ['id']
|
||||||
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
@ -394,15 +383,17 @@ class AddGuardianSerializer(serializers.ModelSerializer):
|
|||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
email = self.context['email']
|
email = self.context['email']
|
||||||
junior = self.context['user']
|
junior = self.context['user']
|
||||||
|
relationship = self.context['relationship']
|
||||||
full_name = self.context['first_name'] + ' ' + self.context['last_name']
|
full_name = self.context['first_name'] + ' ' + self.context['last_name']
|
||||||
junior_data = Junior.objects.filter(auth__username=junior).last()
|
junior_data = Junior.objects.filter(auth__username=junior).last()
|
||||||
instance = User.objects.filter(username=email).last()
|
instance = User.objects.filter(username=email).last()
|
||||||
if instance:
|
if instance:
|
||||||
guardian_data = Guardian.objects.filter(user=user).update(is_invited=True,
|
guardian_data = Guardian.objects.filter(user=instance).update(is_invited=True,
|
||||||
referral_code=generate_code(ZOD,
|
referral_code=generate_code(ZOD,
|
||||||
instance.id),
|
instance.id),
|
||||||
referral_code_used=junior_data.referral_code,
|
referral_code_used=junior_data.referral_code,
|
||||||
is_verified=True)
|
is_verified=True)
|
||||||
|
UserNotification.objects.create(user=instance)
|
||||||
return guardian_data
|
return guardian_data
|
||||||
else:
|
else:
|
||||||
user = User.objects.create(username=email, email=email,
|
user = User.objects.create(username=email, email=email,
|
||||||
@ -412,7 +403,7 @@ class AddGuardianSerializer(serializers.ModelSerializer):
|
|||||||
password = User.objects.make_random_password()
|
password = User.objects.make_random_password()
|
||||||
user.set_password(password)
|
user.set_password(password)
|
||||||
user.save()
|
user.save()
|
||||||
Guardian.objects.create(user=user, is_invited=True,
|
guardian_data = Guardian.objects.create(user=user, is_invited=True,
|
||||||
referral_code=generate_code(ZOD, user.id),
|
referral_code=generate_code(ZOD, user.id),
|
||||||
referral_code_used=junior_data.referral_code,
|
referral_code_used=junior_data.referral_code,
|
||||||
is_password_set=False, is_verified=True)
|
is_password_set=False, is_verified=True)
|
||||||
@ -422,19 +413,36 @@ class AddGuardianSerializer(serializers.ModelSerializer):
|
|||||||
UserEmailOtp.objects.create(email=email, otp=otp_value,
|
UserEmailOtp.objects.create(email=email, otp=otp_value,
|
||||||
user_type=str(NUMBER['two']), expired_at=expiry_time,
|
user_type=str(NUMBER['two']), expired_at=expiry_time,
|
||||||
is_verified=True)
|
is_verified=True)
|
||||||
|
UserNotification.objects.create(user=user)
|
||||||
|
JuniorGuardianRelationship.objects.create(guardian=guardian_data, junior=junior_data,
|
||||||
|
relationship=relationship)
|
||||||
|
|
||||||
"""Notification email"""
|
"""Notification email"""
|
||||||
junior_notification_email(email, full_name, email, password)
|
junior_notification_email(email, full_name, email, password)
|
||||||
junior_approval_mail(email, full_name)
|
junior_approval_mail(email, full_name)
|
||||||
send_notification(INVITED_GUARDIAN, None, junior_data.auth.id, {})
|
send_notification.delay(INVITED_GUARDIAN, None, junior_data.auth.id, {})
|
||||||
send_notification(APPROVED_JUNIOR, None, email, {})
|
send_notification.delay(APPROVED_JUNIOR, None, guardian_data.user.id, {})
|
||||||
return instance
|
return guardian_data
|
||||||
|
|
||||||
class StartTaskSerializer(serializers.ModelSerializer):
|
class StartTaskSerializer(serializers.ModelSerializer):
|
||||||
"""User task Serializer"""
|
"""User task Serializer"""
|
||||||
|
task_duration = serializers.SerializerMethodField('get_task_duration')
|
||||||
|
|
||||||
|
def get_task_duration(self, obj):
|
||||||
|
""" remaining time to complete task"""
|
||||||
|
due_date = datetime.combine(obj.due_date, datetime.max.time())
|
||||||
|
# fetch real time
|
||||||
|
real_datetime = real_time()
|
||||||
|
# Perform the subtraction
|
||||||
|
if due_date > real_datetime:
|
||||||
|
time_difference = due_date - real_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):
|
class Meta(object):
|
||||||
"""Meta class"""
|
"""Meta class"""
|
||||||
model = JuniorTask
|
model = JuniorTask
|
||||||
fields = ('id', 'task_status')
|
fields = ('id', 'task_duration')
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
instance.task_status = str(NUMBER['two'])
|
instance.task_status = str(NUMBER['two'])
|
||||||
instance.save()
|
instance.save()
|
||||||
|
@ -20,6 +20,10 @@ import requests
|
|||||||
# Import account's serializer
|
# Import account's serializer
|
||||||
# Import account's task
|
# Import account's task
|
||||||
# import junior serializer
|
# import junior serializer
|
||||||
|
# Import update_positions_based_on_points
|
||||||
|
# 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
|
||||||
from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\
|
from .serializers import (CreateJuniorSerializer, JuniorDetailListSerializer, AddJuniorSerializer,\
|
||||||
RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer,
|
RemoveJuniorSerializer, CompleteTaskSerializer, JuniorPointsSerializer,
|
||||||
@ -43,7 +47,10 @@ from .utils import update_positions_based_on_points
|
|||||||
# approve junior API
|
# approve junior API
|
||||||
# create referral code
|
# create referral code
|
||||||
# validation API
|
# validation API
|
||||||
|
# invite guardian API
|
||||||
|
# by junior
|
||||||
|
# Start task
|
||||||
|
# by junior API
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class UpdateJuniorProfile(viewsets.ViewSet):
|
class UpdateJuniorProfile(viewsets.ViewSet):
|
||||||
"""Update junior profile"""
|
"""Update junior profile"""
|
||||||
@ -58,6 +65,7 @@ class UpdateJuniorProfile(viewsets.ViewSet):
|
|||||||
image = request.data.get('image')
|
image = request.data.get('image')
|
||||||
image_url = ''
|
image_url = ''
|
||||||
if image:
|
if image:
|
||||||
|
# check image size
|
||||||
if image.size == NUMBER['zero']:
|
if image.size == NUMBER['zero']:
|
||||||
return custom_error_response(ERROR_CODE['2035'], response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(ERROR_CODE['2035'], response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
# convert into file
|
# convert into file
|
||||||
@ -91,6 +99,7 @@ class ValidateGuardianCode(viewsets.ViewSet):
|
|||||||
# fetch guardian object
|
# fetch guardian object
|
||||||
guardian_data = Guardian.objects.filter(guardian_code=code).exists()
|
guardian_data = Guardian.objects.filter(guardian_code=code).exists()
|
||||||
if guardian_data:
|
if guardian_data:
|
||||||
|
# successfully check guardian code
|
||||||
return custom_response(SUCCESS_CODE['3013'], response_status=status.HTTP_200_OK)
|
return custom_response(SUCCESS_CODE['3013'], response_status=status.HTTP_200_OK)
|
||||||
else:
|
else:
|
||||||
return custom_error_response(ERROR_CODE["2022"], response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(ERROR_CODE["2022"], response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
@ -129,13 +138,13 @@ class AddJuniorAPIView(viewsets.ModelViewSet):
|
|||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
""" junior list"""
|
""" junior list"""
|
||||||
try:
|
try:
|
||||||
info = {'user': request.user, 'email': request.data['email'], 'first_name': request.data['first_name'],
|
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']}
|
'last_name': request.data['last_name']}
|
||||||
if User.objects.filter(username=request.data['email']):
|
if User.objects.filter(username=request.data['email']):
|
||||||
return custom_error_response(ERROR_CODE['2059'], response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(ERROR_CODE['2059'], response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
# use AddJuniorSerializer serializer
|
# use AddJuniorSerializer serializer
|
||||||
serializer = AddJuniorSerializer(data=request.data, context=info)
|
serializer = AddJuniorSerializer(data=request.data, context=info_data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
# save serializer
|
# save serializer
|
||||||
serializer.save()
|
serializer.save()
|
||||||
@ -365,7 +374,7 @@ class InviteGuardianAPIView(viewsets.ModelViewSet):
|
|||||||
""" junior list"""
|
""" junior list"""
|
||||||
try:
|
try:
|
||||||
info = {'user': request.user, 'email': request.data['email'], 'first_name': request.data['first_name'],
|
info = {'user': request.user, 'email': request.data['email'], 'first_name': request.data['first_name'],
|
||||||
'last_name': request.data['last_name']}
|
'last_name': request.data['last_name'], 'relationship': str(request.data['relationship'])}
|
||||||
# use AddJuniorSerializer serializer
|
# use AddJuniorSerializer serializer
|
||||||
serializer = AddGuardianSerializer(data=request.data, context=info)
|
serializer = AddGuardianSerializer(data=request.data, context=info)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
@ -393,9 +402,10 @@ class StartTaskAPIView(views.APIView):
|
|||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
# save serializer
|
# save serializer
|
||||||
serializer.save()
|
serializer.save()
|
||||||
return custom_response(SUCCESS_CODE['3035'], None, response_status=status.HTTP_200_OK)
|
return custom_response(SUCCESS_CODE['3035'], serializer.data, response_status=status.HTTP_200_OK)
|
||||||
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
else:
|
else:
|
||||||
|
# task in another state
|
||||||
return custom_error_response(ERROR_CODE['2060'], response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(ERROR_CODE['2060'], response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
Reference in New Issue
Block a user