Generate bill PDFs from /my/bill

This commit is contained in:
fnux 2020-05-07 15:38:49 +02:00
commit ae2bad5754
6 changed files with 96 additions and 115 deletions

View file

@ -9,6 +9,10 @@ from rest_framework.reverse import reverse
from rest_framework.decorators import renderer_classes
from vat_validator import validate_vat, vies
from vat_validator.countries import EU_COUNTRY_CODES
from hardcopy import bytestring_to_pdf
from django.core.files.temp import NamedTemporaryFile
from django.http import FileResponse
from django.template.loader import render_to_string
import json
import logging
@ -190,6 +194,20 @@ class BillViewSet(viewsets.ReadOnlyModelViewSet):
many=True)
return Response(serializer.data)
@action(detail=True, methods=['get'])
def download(self, *args, **kwargs):
bill = self.get_object()
output_file = NamedTemporaryFile()
bill_html = render_to_string("bill.html.j2", {'bill': bill})
bytestring_to_pdf(bill_html.encode('utf-8'), output_file)
response = FileResponse(output_file, content_type="application/pdf")
response['Content-Disposition'] = 'filename="{}_{}.pdf"'.format(
bill.reference, bill.uuid
)
return response
class OrderViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = OrderSerializer
@ -287,19 +305,11 @@ class AdminOrderViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.CreateModelMixin,
viewsets.GenericViewSet):
serializer_class = OrderSerializer
permission_classes = [permissions.IsAdminUser]
def get_serializer(self, *args, **kwargs):
return OrderSerializer(*args, **kwargs, admin=True)
return self.serializer_class(*args, **kwargs, admin=True)
def get_queryset(self):
return Order.objects.all()
# PDF tests
from django.views.generic import TemplateView
from hardcopy.views import PDFViewMixin, PNGViewMixin
class MyPDFView(PDFViewMixin, TemplateView):
template_name = "bill.html"
# def get_filename(self):
# return "my_file_{}.pdf".format(now().strftime('Y-m-d'))