crm-backend/apps/reports/views.py

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