Source code for django_afip.views
import base64
from django.utils.functional import cached_property
from django_renderpdf.views import PDFView
from django_afip import models, pdf
[docs]class ReceiptPDFView(PDFView):
@cached_property
def receipt(self):
return models.Receipt.objects.select_related(
'receipt_type',
'point_of_sales',
).get(
pk=self.kwargs['pk'],
)
[docs] def get_download_name(self):
return '{}.pdf'.format(self.receipt.formatted_number)
[docs] def get_template_name(self):
return 'receipts/code_{}.html'.format(self.receipt.receipt_type.code)
@staticmethod
def get_context_for_pk(pk, *args, **kwargs):
context = {}
receipt_pdf = models.ReceiptPDF.objects.select_related(
'receipt',
'receipt__receipt_type',
'receipt__document_type',
'receipt__validation',
'receipt__point_of_sales',
'receipt__point_of_sales__owner',
).prefetch_related(
'receipt__entries',
).get(
receipt__pk=pk,
)
# Prefetch required data in a single query:
receipt_pdf.receipt = models.Receipt.objects.select_related(
'receipt_type',
'document_type',
'validation',
'point_of_sales',
'point_of_sales__owner',
).prefetch_related(
'entries',
).get(
pk=receipt_pdf.receipt_id,
)
taxpayer = receipt_pdf.receipt.point_of_sales.owner
extras = models.TaxPayerExtras.objects.filter(
taxpayer=taxpayer,
).first()
generator = pdf.ReceiptBarcodeGenerator(receipt_pdf.receipt)
barcode = base64.b64encode(generator.generate_barcode())
context['pdf'] = receipt_pdf
context['taxpayer'] = taxpayer
context['extras'] = extras
context['barcode'] = barcode.decode()
return context
def get_context_data(self, *args, pk=None, **kwargs):
context = super().get_context_data(*args, pk=pk, **kwargs)
context.update(self.get_context_for_pk(pk, *args, **kwargs))
return context
class ReceiptPDFDownloadView(ReceiptPDFView):
prompt_download = True