Skip to content

Commit

Permalink
feature: resolving bugs in excel exporter from dashboard.
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanJaeger committed Jul 17, 2023
1 parent 837fee9 commit 4c2a570
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 36 deletions.
113 changes: 77 additions & 36 deletions chats/apps/api/v1/dashboard/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
from chats.apps.api.v1.permissions import HasDashboardAccess
from chats.apps.projects.models import Project

import io
from chats.core.excel_storage import ExcelStorage
import json


class DashboardLiveViewset(viewsets.GenericViewSet):
lookup_field = "uuid"
Expand Down Expand Up @@ -106,35 +110,54 @@ def export(self, request, *args, **kwargs):
project = self.get_object()
filter = request.query_params
dataset = get_export_data(project, filter)
data_frame_rooms = pandas.DataFrame(dataset)

filename = "dashboard_export_data"
filename = "dashboard_rooms_export_data"

if "xls" in filter:
response = HttpResponse(
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
response["Content-Disposition"] = (
'attachment; filename="' + filename + ".xls"
excel_rooms_buffer = io.BytesIO()
with pandas.ExcelWriter(excel_rooms_buffer, engine="xlsxwriter") as writer:
data_frame_rooms.to_excel(
writer,
sheet_name="rooms_infos",
startrow=1,
startcol=0,
index=False,
)
excel_rooms_buffer.seek(0) # Move o cursor para o início do buffer
storage = ExcelStorage()

bytes_archive = excel_rooms_buffer.getvalue()

with storage.open(filename + ".xlsx", "wb") as up_file:
up_file.write(bytes_archive)
file_url = storage.url(up_file.name)

data = {"path_file": file_url}

return HttpResponse(
json.dumps(data),
content_type="application/javascript; charset=utf8",
)
else:
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = (
'attachment; filename="' + filename + ".csv"
)

table = pandas.DataFrame(dataset)
table.rename(
columns={
0: "Queue Name",
1: "Waiting Time",
2: "Response Time",
3: "Interaction Time",
4: "Open",
},
inplace=True,
)
table.to_csv(response, encoding="utf-8", index=False)
return response
table = pandas.DataFrame(dataset)
table.rename(
columns={
0: "Queue Name",
1: "Waiting Time",
2: "Response Time",
3: "Interaction Time",
4: "Open",
},
inplace=True,
)
table.to_csv(response, encoding="utf-8", index=False)
return response

@action(
detail=True,
Expand All @@ -149,24 +172,28 @@ def export_dashboard(self, request, *args, **kwargs):
project = self.get_object()
filter = request.query_params

general_dataset = get_general_data(project, filter)
userinfo_dataset = get_agents_data(project, filter)
sector_dataset = get_sector_data(project, filter)
user_info_context = {}
user_info_context["filters"] = request.query_params

# General data
general_dataset = dashboard_general_data(context=filter, project=project)
raw_dataset = DashboardRawDataSerializer(instance=project, context=filter)
combined_dataset = {**general_dataset, **raw_dataset.data}

# Agents Data
userinfo_dataset = dashboard_agents_data(context=filter, project=project)
# # Sectors Data
sector_dataset = dashboard_division_data(context=filter, project=project)

filename = "dashboard_export_data"

data_frame = pandas.DataFrame([general_dataset])
data_frame_1 = pandas.read_json(userinfo_dataset)
data_frame_2 = pandas.read_json(sector_dataset)
data_frame = pandas.DataFrame([combined_dataset])
data_frame_1 = pandas.DataFrame(userinfo_dataset)
data_frame_2 = pandas.DataFrame(sector_dataset)

if "xls" in filter:
response = HttpResponse(
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
response["Content-Disposition"] = (
'attachment; filename="' + filename + ".xlsx"
)
with pandas.ExcelWriter(response, engine="xlsxwriter") as writer:
excel_buffer = io.BytesIO()
with pandas.ExcelWriter(excel_buffer, engine="xlsxwriter") as writer:
data_frame.to_excel(
writer,
sheet_name="dashboard_infos",
Expand All @@ -188,16 +215,30 @@ def export_dashboard(self, request, *args, **kwargs):
startcol=0,
index=False,
)
return response
excel_buffer.seek(0) # Move o cursor para o início do buffer
storage = ExcelStorage()

bytes_archive = excel_buffer.getvalue()

with storage.open(filename + ".xlsx", "wb") as up_file:
up_file.write(bytes_archive)
file_url = storage.url(up_file.name)

data = {"path_file": file_url}

return HttpResponse(
json.dumps(data),
content_type="application/javascript; charset=utf8",
)

else:
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = (
'attachment; filename="' + filename + ".csv"
)

data_frame.to_csv(response, index=False)
data_frame_1.to_csv(response, index=False, mode="a")
data_frame_2.to_csv(response, index=False, mode="a")
data_frame.to_csv(response, index=False, sep=";")
data_frame_1.to_csv(response, index=False, mode="a", sep=";")
data_frame_2.to_csv(response, index=False, mode="a", sep=";")

return response
8 changes: 8 additions & 0 deletions chats/core/excel_storage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from storages.backends.s3boto3 import S3Boto3Storage


class ExcelStorage(S3Boto3Storage): # pragma: no cover
def get_default_settings(self):
default_settings = super().get_default_settings()
default_settings["location"] = f"dashboard_data/excel"
return default_settings

0 comments on commit 4c2a570

Please sign in to comment.