added optional user as name

This commit is contained in:
abutalib-kiwi
2023-08-24 13:33:34 +05:30
parent f541608656
commit cd3b385756
7 changed files with 51 additions and 19 deletions

View File

@ -37,6 +37,27 @@ def send_email_otp(email, verification_code):
return True return True
@shared_task
def send_mail(recipient_list, template, context: dict = None):
"""
used to send otp on email
:param context:
:param recipient_list: e-mail list
:param template: email template
"""
if context is None:
context = {}
from_email = settings.EMAIL_FROM_ADDRESS
recipient_list = recipient_list
send_templated_mail(
template_name=template,
from_email=from_email,
recipient_list=recipient_list,
context=context
)
return True
@shared_task() @shared_task()
def notify_task_expiry(): def notify_task_expiry():
""" """

View File

@ -9,6 +9,7 @@ from firebase_admin.messaging import Message, Notification as FirebaseNotificati
# django imports # django imports
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
# local imports
from account.models import UserNotification from account.models import UserNotification
from account.utils import get_user_full_name from account.utils import get_user_full_name
from base.constants import GUARDIAN, JUNIOR from base.constants import GUARDIAN, JUNIOR
@ -17,8 +18,6 @@ from junior.models import Junior
from notifications.constants import NOTIFICATION_DICT from notifications.constants import NOTIFICATION_DICT
from notifications.models import Notification from notifications.models import Notification
# local imports
User = get_user_model() User = get_user_model()
@ -105,7 +104,7 @@ def send_notification(notification_type, from_user_id, from_user_type, to_user_i
notification_data.update({'badge': Notification.objects.filter(notification_to=to_user, is_read=False).count()}) notification_data.update({'badge': Notification.objects.filter(notification_to=to_user, is_read=False).count()})
Notification.objects.create(notification_type=notification_type, notification_from=from_user, Notification.objects.create(notification_type=notification_type, notification_from=from_user,
notification_to=to_user, data=notification_data) notification_to=to_user, data=notification_data)
if user_notification_type.push_notification: if user_notification_type and user_notification_type.push_notification:
send_push(to_user, push_data) send_push(to_user, push_data)

View File

@ -10,10 +10,8 @@ from rest_framework import viewsets, status, views
# local imports # local imports
from account.utils import custom_response, custom_error_response from account.utils import custom_response, custom_error_response
from base.constants import JUNIOR, GUARDIAN
from base.messages import SUCCESS_CODE, ERROR_CODE from base.messages import SUCCESS_CODE, ERROR_CODE
from base.tasks import notify_task_expiry from base.tasks import notify_task_expiry
from guardian.models import Guardian
from notifications.constants import TEST_NOTIFICATION from notifications.constants import TEST_NOTIFICATION
from notifications.serializers import RegisterDevice, NotificationListSerializer, ReadNotificationSerializer from notifications.serializers import RegisterDevice, NotificationListSerializer, ReadNotificationSerializer
from notifications.utils import send_notification from notifications.utils import send_notification

View File

@ -7,6 +7,7 @@ from rest_framework import serializers
# django imports # django imports
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from account.utils import get_user_full_name
# local imports # local imports
from base.constants import USER_TYPE from base.constants import USER_TYPE
@ -74,6 +75,7 @@ class UserCSVReportSerializer(serializers.ModelSerializer):
""" """
user csv/xls report serializer user csv/xls report serializer
""" """
name = serializers.SerializerMethodField()
phone_number = serializers.SerializerMethodField() phone_number = serializers.SerializerMethodField()
user_type = serializers.SerializerMethodField() user_type = serializers.SerializerMethodField()
is_active = serializers.SerializerMethodField() is_active = serializers.SerializerMethodField()
@ -84,7 +86,15 @@ class UserCSVReportSerializer(serializers.ModelSerializer):
meta class meta class
""" """
model = USER model = USER
fields = ('first_name', 'last_name', 'email', 'phone_number', 'user_type', 'is_active', 'date_joined') fields = ('name', 'email', 'phone_number', 'user_type', 'is_active', 'date_joined')
@staticmethod
def get_name(obj):
"""
:param obj: user object
:return: full name
"""
return get_user_full_name(obj)
@staticmethod @staticmethod
def get_phone_number(obj): def get_phone_number(obj):

View File

@ -14,7 +14,7 @@ from account.models import UserEmailOtp
from base.constants import USER_TYPE from base.constants import USER_TYPE
from base.messages import ERROR_CODE from base.messages import ERROR_CODE
from guardian.tasks import generate_otp from guardian.tasks import generate_otp
from base.tasks import send_email_otp from base.tasks import send_mail
USER = get_user_model() USER = get_user_model()
@ -48,11 +48,13 @@ class AdminOTPSerializer(serializers.ModelSerializer):
:return: user_data :return: user_data
""" """
email = validated_data['email'] email = validated_data['email']
verification_code = generate_otp() verification_code = generate_otp()
template = 'email_reset_verification.email'
# Send the verification code to the user's email # Send the verification code to the user's email
send_email_otp.delay(email, verification_code) data = {
"verification_code": verification_code
}
send_mail.delay([email], template, data)
expiry = timezone.now() + timezone.timedelta(days=1) expiry = timezone.now() + timezone.timedelta(days=1)
user_data, created = UserEmailOtp.objects.update_or_create(email=email, user_data, created = UserEmailOtp.objects.update_or_create(email=email,

View File

@ -5,6 +5,7 @@ web_admin user_management serializers file
from rest_framework import serializers from rest_framework import serializers
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from account.utils import get_user_full_name
from base.constants import USER_TYPE, GUARDIAN, JUNIOR from base.constants import USER_TYPE, GUARDIAN, JUNIOR
# local imports # local imports
from base.messages import ERROR_CODE, SUCCESS_CODE from base.messages import ERROR_CODE, SUCCESS_CODE
@ -37,7 +38,7 @@ class UserManagementListSerializer(serializers.ModelSerializer):
:param obj: user object :param obj: user object
:return: full name :return: full name
""" """
return f"{obj.first_name} {obj.last_name}" if obj.last_name else obj.first_name return get_user_full_name(obj)
@staticmethod @staticmethod
def get_country_code(obj): def get_country_code(obj):
@ -144,7 +145,7 @@ class GuardianSerializer(serializers.ModelSerializer):
:param obj: guardian object :param obj: guardian object
:return: full name :return: full name
""" """
return f"{obj.user.first_name} {obj.user.last_name}" if obj.user.last_name else obj.user.first_name return get_user_full_name(obj.user)
@staticmethod @staticmethod
def get_first_name(obj): def get_first_name(obj):
@ -222,7 +223,7 @@ class JuniorSerializer(serializers.ModelSerializer):
:param obj: junior object :param obj: junior object
:return: full name :return: full name
""" """
return f"{obj.auth.first_name} {obj.auth.last_name}" if obj.auth.last_name else obj.auth.first_name return get_user_full_name(obj.auth)
@staticmethod @staticmethod
def get_first_name(obj): def get_first_name(obj):

View File

@ -107,13 +107,15 @@ class AnalyticsViewSet(GenericViewSet):
assign_tasks = JuniorTask.objects.filter( assign_tasks = JuniorTask.objects.filter(
created_at__range=[start_date, (end_date + datetime.timedelta(days=1))] created_at__range=[start_date, (end_date + datetime.timedelta(days=1))]
).exclude(task_status__in=[PENDING, EXPIRED]) )
data = { data = {
'task_completed': assign_tasks.filter(task_status=COMPLETED).count(), 'task_completed': assign_tasks.filter(task_status=COMPLETED).count(),
'task_pending': assign_tasks.filter(task_status=PENDING).count(),
'task_in_progress': assign_tasks.filter(task_status=IN_PROGRESS).count(), 'task_in_progress': assign_tasks.filter(task_status=IN_PROGRESS).count(),
'task_requested': assign_tasks.filter(task_status=REQUESTED).count(), 'task_requested': assign_tasks.filter(task_status=REQUESTED).count(),
'task_rejected': assign_tasks.filter(task_status=REJECTED).count(), 'task_rejected': assign_tasks.filter(task_status=REJECTED).count(),
'task_expired': assign_tasks.filter(task_status=EXPIRED).count(),
} }
return custom_response(None, data) return custom_response(None, data)
@ -169,10 +171,9 @@ class AnalyticsViewSet(GenericViewSet):
serializer = UserCSVReportSerializer(queryset, many=True) serializer = UserCSVReportSerializer(queryset, many=True)
df_users = pd.DataFrame([ df_users = pd.DataFrame([
{'Name': f"{user['first_name']} {user['last_name']}", {'Name': user['name'], 'Email': user['email'],
'Email': user['email'], 'Phone Number': user['phone_number'], 'Phone Number': user['phone_number'], 'User Type': user['user_type'],
'User Type': user['user_type'], 'Status': user['is_active'], 'Status': user['is_active'], 'Date Joined': user['date_joined']}
'Date Joined': user['date_joined']}
for user in serializer.data for user in serializer.data
]) ])
write_excel_worksheet(worksheet, df_users) write_excel_worksheet(worksheet, df_users)
@ -181,7 +182,7 @@ class AnalyticsViewSet(GenericViewSet):
elif sheet_name == 'Assign Tasks': elif sheet_name == 'Assign Tasks':
assign_tasks = JuniorTask.objects.filter( assign_tasks = JuniorTask.objects.filter(
created_at__range=[start_date, (end_date + datetime.timedelta(days=1))] created_at__range=[start_date, (end_date + datetime.timedelta(days=1))]
).exclude(task_status__in=[PENDING, EXPIRED]) )
df_tasks = pd.DataFrame([ df_tasks = pd.DataFrame([
{'Task Name': task.task_name, 'Task Status': dict(TASK_STATUS).get(task.task_status).capitalize()} {'Task Name': task.task_name, 'Task Status': dict(TASK_STATUS).get(task.task_status).capitalize()}