mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-16 18:36:18 +00:00
minor changes in excel import api method
This commit is contained in:
@ -2,8 +2,9 @@
|
|||||||
web_utils file
|
web_utils file
|
||||||
"""
|
"""
|
||||||
import base64
|
import base64
|
||||||
|
import datetime
|
||||||
|
|
||||||
from base.constants import ARTICLE_CARD_IMAGE_FOLDER
|
from base.constants import ARTICLE_CARD_IMAGE_FOLDER, DATE_FORMAT
|
||||||
from guardian.utils import upload_image_to_alibaba, upload_base64_image_to_alibaba
|
from guardian.utils import upload_image_to_alibaba, upload_base64_image_to_alibaba
|
||||||
|
|
||||||
|
|
||||||
@ -40,3 +41,21 @@ def get_image_url(data):
|
|||||||
# upload image on ali baba
|
# upload image on ali baba
|
||||||
image_url = upload_image_to_alibaba(image, filename)
|
image_url = upload_image_to_alibaba(image, filename)
|
||||||
return image_url
|
return image_url
|
||||||
|
|
||||||
|
|
||||||
|
def get_dates(start_date, end_date):
|
||||||
|
"""
|
||||||
|
to get start and end date
|
||||||
|
:param start_date: format (yyyy-mm-dd)
|
||||||
|
:param end_date: format (yyyy-mm-dd)
|
||||||
|
:return: start and end date
|
||||||
|
"""
|
||||||
|
|
||||||
|
if start_date and end_date:
|
||||||
|
start_date = datetime.datetime.strptime(start_date, DATE_FORMAT).date()
|
||||||
|
end_date = datetime.datetime.strptime(end_date, DATE_FORMAT).date()
|
||||||
|
else:
|
||||||
|
end_date = datetime.date.today()
|
||||||
|
start_date = end_date - datetime.timedelta(days=6)
|
||||||
|
|
||||||
|
return start_date, end_date
|
||||||
|
@ -6,9 +6,6 @@ import datetime
|
|||||||
import io
|
import io
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import xlsxwriter
|
import xlsxwriter
|
||||||
import tempfile
|
|
||||||
import oss2
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
# third party imports
|
# third party imports
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
@ -33,7 +30,7 @@ from junior.models import JuniorPoints
|
|||||||
from web_admin.pagination import CustomPageNumberPagination
|
from web_admin.pagination import CustomPageNumberPagination
|
||||||
from web_admin.permission import AdminPermission
|
from web_admin.permission import AdminPermission
|
||||||
from web_admin.serializers.analytics_serializer import LeaderboardSerializer, UserCSVReportSerializer
|
from web_admin.serializers.analytics_serializer import LeaderboardSerializer, UserCSVReportSerializer
|
||||||
from web_admin.serializers.user_management_serializer import UserManagementListSerializer
|
from web_admin.utils import get_dates
|
||||||
|
|
||||||
USER = get_user_model()
|
USER = get_user_model()
|
||||||
|
|
||||||
@ -56,7 +53,7 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
).prefetch_related('guardian_profile',
|
).prefetch_related('guardian_profile',
|
||||||
'junior_profile'
|
'junior_profile'
|
||||||
).exclude(junior_profile__isnull=True,
|
).exclude(junior_profile__isnull=True,
|
||||||
guardian_profile__isnull=True).order_by('date_joined')
|
guardian_profile__isnull=True).order_by('-date_joined')
|
||||||
return user_qs
|
return user_qs
|
||||||
|
|
||||||
@action(methods=['get'], url_name='users-count', url_path='users-count', detail=False)
|
@action(methods=['get'], url_name='users-count', url_path='users-count', detail=False)
|
||||||
@ -67,13 +64,8 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
:param request: end_date: date format (yyyy-mm-dd)
|
:param request: end_date: date format (yyyy-mm-dd)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||||
end_date = datetime.date.today()
|
request.query_params.get('end_date'))
|
||||||
start_date = end_date - datetime.timedelta(days=6)
|
|
||||||
|
|
||||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
|
||||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
|
||||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
|
||||||
|
|
||||||
user_qs = self.get_queryset()
|
user_qs = self.get_queryset()
|
||||||
queryset = user_qs.filter(date_joined__range=(start_date, (end_date + datetime.timedelta(days=1))))
|
queryset = user_qs.filter(date_joined__range=(start_date, (end_date + datetime.timedelta(days=1))))
|
||||||
@ -92,12 +84,8 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
:param request: end_date: date format (yyyy-mm-dd)
|
:param request: end_date: date format (yyyy-mm-dd)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
end_date = datetime.date.today()
|
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||||
start_date = end_date - datetime.timedelta(days=6)
|
request.query_params.get('end_date'))
|
||||||
|
|
||||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
|
||||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
|
||||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
|
||||||
|
|
||||||
user_qs = self.get_queryset()
|
user_qs = self.get_queryset()
|
||||||
signup_data = user_qs.filter(date_joined__range=[start_date, (end_date + datetime.timedelta(days=1))]
|
signup_data = user_qs.filter(date_joined__range=[start_date, (end_date + datetime.timedelta(days=1))]
|
||||||
@ -114,12 +102,8 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
:param request: end_date: date format (yyyy-mm-dd)
|
:param request: end_date: date format (yyyy-mm-dd)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
end_date = datetime.date.today()
|
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||||
start_date = end_date - datetime.timedelta(days=6)
|
request.query_params.get('end_date'))
|
||||||
|
|
||||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
|
||||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
|
||||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
|
||||||
|
|
||||||
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))]
|
||||||
@ -163,12 +147,8 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
||||||
response['Content-Disposition'] = 'attachment; filename="ZOD_Bank_Analytics.xlsx"'
|
response['Content-Disposition'] = 'attachment; filename="ZOD_Bank_Analytics.xlsx"'
|
||||||
|
|
||||||
end_date = datetime.date.today()
|
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||||
start_date = end_date - datetime.timedelta(days=6)
|
request.query_params.get('end_date'))
|
||||||
|
|
||||||
if request.query_params.get('start_date') and request.query_params.get('end_date'):
|
|
||||||
start_date = datetime.datetime.strptime(request.query_params.get('start_date'), DATE_FORMAT)
|
|
||||||
end_date = datetime.datetime.strptime(request.query_params.get('end_date'), DATE_FORMAT)
|
|
||||||
|
|
||||||
# Use BytesIO for binary data
|
# Use BytesIO for binary data
|
||||||
buffer = io.BytesIO()
|
buffer = io.BytesIO()
|
||||||
@ -177,7 +157,7 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
workbook = xlsxwriter.Workbook(buffer)
|
workbook = xlsxwriter.Workbook(buffer)
|
||||||
|
|
||||||
# Add sheets
|
# Add sheets
|
||||||
sheets = ['Users', 'Assign Tasks', 'Juniors leaderboard']
|
sheets = ['Users', 'Assign Tasks', 'Juniors Leaderboard']
|
||||||
|
|
||||||
for sheet_name in sheets:
|
for sheet_name in sheets:
|
||||||
worksheet = workbook.add_worksheet(name=sheet_name)
|
worksheet = workbook.add_worksheet(name=sheet_name)
|
||||||
@ -195,12 +175,7 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
'Date Joined': user['date_joined']}
|
'Date Joined': user['date_joined']}
|
||||||
for user in serializer.data
|
for user in serializer.data
|
||||||
])
|
])
|
||||||
for idx, col in enumerate(df_users.columns):
|
write_excel_worksheet(worksheet, df_users)
|
||||||
# Write header
|
|
||||||
worksheet.write(0, idx, col)
|
|
||||||
for row_num, row in enumerate(df_users.values, start=1):
|
|
||||||
for col_num, value in enumerate(row):
|
|
||||||
worksheet.write(row_num, col_num, value)
|
|
||||||
|
|
||||||
# sheet 2 for Assign Task
|
# sheet 2 for Assign Task
|
||||||
elif sheet_name == 'Assign Tasks':
|
elif sheet_name == 'Assign Tasks':
|
||||||
@ -213,15 +188,10 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
for task in assign_tasks
|
for task in assign_tasks
|
||||||
])
|
])
|
||||||
|
|
||||||
for idx, col in enumerate(df_tasks.columns):
|
write_excel_worksheet(worksheet, df_tasks)
|
||||||
# Write header
|
|
||||||
worksheet.write(0, idx, col)
|
|
||||||
for row_num, row in enumerate(df_tasks.values, start=1):
|
|
||||||
for col_num, value in enumerate(row):
|
|
||||||
worksheet.write(row_num, col_num, value)
|
|
||||||
|
|
||||||
# sheet 3 for Juniors Leaderboard and rank
|
# sheet 3 for Juniors Leaderboard and rank
|
||||||
elif sheet_name == 'Juniors leaderboard':
|
elif sheet_name == 'Juniors Leaderboard':
|
||||||
queryset = JuniorPoints.objects.prefetch_related('junior', 'junior__auth').annotate(rank=Window(
|
queryset = JuniorPoints.objects.prefetch_related('junior', 'junior__auth').annotate(rank=Window(
|
||||||
expression=Rank(),
|
expression=Rank(),
|
||||||
order_by=[F('total_points').desc(), 'junior__created_at']
|
order_by=[F('total_points').desc(), 'junior__created_at']
|
||||||
@ -236,12 +206,7 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
for junior in queryset
|
for junior in queryset
|
||||||
])
|
])
|
||||||
|
|
||||||
for idx, col in enumerate(df_leaderboard.columns):
|
write_excel_worksheet(worksheet, df_leaderboard)
|
||||||
# Write header
|
|
||||||
worksheet.write(0, idx, col)
|
|
||||||
for row_num, row in enumerate(df_leaderboard.values, start=1):
|
|
||||||
for col_num, value in enumerate(row):
|
|
||||||
worksheet.write(row_num, col_num, value)
|
|
||||||
|
|
||||||
# Close the workbook to save the content
|
# Close the workbook to save the content
|
||||||
workbook.close()
|
workbook.close()
|
||||||
@ -255,3 +220,12 @@ class AnalyticsViewSet(GenericViewSet):
|
|||||||
file_link = upload_excel_file_to_alibaba(response, filename)
|
file_link = upload_excel_file_to_alibaba(response, filename)
|
||||||
return custom_response(None, file_link)
|
return custom_response(None, file_link)
|
||||||
|
|
||||||
|
|
||||||
|
def write_excel_worksheet(worksheet, dataframe):
|
||||||
|
for idx, col in enumerate(dataframe.columns):
|
||||||
|
# Write header
|
||||||
|
worksheet.write(0, idx, col)
|
||||||
|
for row_num, row in enumerate(dataframe.values, start=1):
|
||||||
|
for col_num, value in enumerate(row):
|
||||||
|
worksheet.write(row_num, col_num, value)
|
||||||
|
return worksheet
|
||||||
|
Reference in New Issue
Block a user