Generate bill PDFs from /my/bill
This commit is contained in:
parent
3874165189
commit
ae2bad5754
6 changed files with 96 additions and 115 deletions
|
|
@ -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'))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue