36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from django.http import HttpResponse
|
|
from rest_framework import status
|
|
from rest_framework.views import APIView
|
|
|
|
from apps.reports.serializers import ReportGenerateSerializer
|
|
from apps.reports.services.excel import build_report_workbook
|
|
from apps.reports.services.orchestrator import ReportOrchestrator
|
|
|
|
|
|
class GenerateReportView(APIView):
|
|
authentication_classes = []
|
|
permission_classes = []
|
|
|
|
def post(self, request):
|
|
serializer = ReportGenerateSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
orchestrator = ReportOrchestrator()
|
|
report_data = orchestrator.generate(serializer.validated_data)
|
|
workbook = build_report_workbook(
|
|
title=report_data["title"],
|
|
columns=report_data["columns"],
|
|
rows=report_data["rows"],
|
|
)
|
|
|
|
response = HttpResponse(
|
|
workbook,
|
|
content_type=(
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
),
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
response["Content-Disposition"] = (
|
|
f'attachment; filename="{report_data["filename"]}"'
|
|
)
|
|
return response
|