mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 18:07:02 +00:00
minor changes in excel import api method
This commit is contained in:
@ -6,9 +6,6 @@ import datetime
|
||||
import io
|
||||
import pandas as pd
|
||||
import xlsxwriter
|
||||
import tempfile
|
||||
import oss2
|
||||
from django.conf import settings
|
||||
|
||||
# third party imports
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
@ -33,7 +30,7 @@ from junior.models import JuniorPoints
|
||||
from web_admin.pagination import CustomPageNumberPagination
|
||||
from web_admin.permission import AdminPermission
|
||||
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()
|
||||
|
||||
@ -56,7 +53,7 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
).prefetch_related('guardian_profile',
|
||||
'junior_profile'
|
||||
).exclude(junior_profile__isnull=True,
|
||||
guardian_profile__isnull=True).order_by('date_joined')
|
||||
guardian_profile__isnull=True).order_by('-date_joined')
|
||||
return user_qs
|
||||
|
||||
@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)
|
||||
:return:
|
||||
"""
|
||||
|
||||
end_date = datetime.date.today()
|
||||
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)
|
||||
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||
request.query_params.get('end_date'))
|
||||
|
||||
user_qs = self.get_queryset()
|
||||
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)
|
||||
:return:
|
||||
"""
|
||||
end_date = datetime.date.today()
|
||||
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)
|
||||
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||
request.query_params.get('end_date'))
|
||||
|
||||
user_qs = self.get_queryset()
|
||||
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)
|
||||
:return:
|
||||
"""
|
||||
end_date = datetime.date.today()
|
||||
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)
|
||||
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||
request.query_params.get('end_date'))
|
||||
|
||||
assign_tasks = JuniorTask.objects.filter(
|
||||
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['Content-Disposition'] = 'attachment; filename="ZOD_Bank_Analytics.xlsx"'
|
||||
|
||||
end_date = datetime.date.today()
|
||||
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)
|
||||
start_date, end_date = get_dates(request.query_params.get('start_date'),
|
||||
request.query_params.get('end_date'))
|
||||
|
||||
# Use BytesIO for binary data
|
||||
buffer = io.BytesIO()
|
||||
@ -177,7 +157,7 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
workbook = xlsxwriter.Workbook(buffer)
|
||||
|
||||
# Add sheets
|
||||
sheets = ['Users', 'Assign Tasks', 'Juniors leaderboard']
|
||||
sheets = ['Users', 'Assign Tasks', 'Juniors Leaderboard']
|
||||
|
||||
for sheet_name in sheets:
|
||||
worksheet = workbook.add_worksheet(name=sheet_name)
|
||||
@ -195,12 +175,7 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
'Date Joined': user['date_joined']}
|
||||
for user in serializer.data
|
||||
])
|
||||
for idx, col in enumerate(df_users.columns):
|
||||
# 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)
|
||||
write_excel_worksheet(worksheet, df_users)
|
||||
|
||||
# sheet 2 for Assign Task
|
||||
elif sheet_name == 'Assign Tasks':
|
||||
@ -213,15 +188,10 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
for task in assign_tasks
|
||||
])
|
||||
|
||||
for idx, col in enumerate(df_tasks.columns):
|
||||
# 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)
|
||||
write_excel_worksheet(worksheet, df_tasks)
|
||||
|
||||
# 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(
|
||||
expression=Rank(),
|
||||
order_by=[F('total_points').desc(), 'junior__created_at']
|
||||
@ -236,12 +206,7 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
for junior in queryset
|
||||
])
|
||||
|
||||
for idx, col in enumerate(df_leaderboard.columns):
|
||||
# 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)
|
||||
write_excel_worksheet(worksheet, df_leaderboard)
|
||||
|
||||
# Close the workbook to save the content
|
||||
workbook.close()
|
||||
@ -255,3 +220,12 @@ class AnalyticsViewSet(GenericViewSet):
|
||||
file_link = upload_excel_file_to_alibaba(response, filename)
|
||||
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