mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Automatically re-render PDF for files lost due to bug
This commit is contained in:
@@ -38,12 +38,19 @@ class InvoiceExporter(BaseExporter):
|
|||||||
with tempfile.TemporaryDirectory() as d:
|
with tempfile.TemporaryDirectory() as d:
|
||||||
with ZipFile(os.path.join(d, 'tmp.zip'), 'w') as zipf:
|
with ZipFile(os.path.join(d, 'tmp.zip'), 'w') as zipf:
|
||||||
for i in qs:
|
for i in qs:
|
||||||
if not i.file:
|
try:
|
||||||
|
if not i.file:
|
||||||
|
invoice_pdf_task.apply(args=(i.pk,))
|
||||||
|
i.refresh_from_db()
|
||||||
|
i.file.open('rb')
|
||||||
|
zipf.writestr('{}.pdf'.format(i.number), i.file.read())
|
||||||
|
i.file.close()
|
||||||
|
except FileNotFoundError:
|
||||||
invoice_pdf_task.apply(args=(i.pk,))
|
invoice_pdf_task.apply(args=(i.pk,))
|
||||||
i.refresh_from_db()
|
i.refresh_from_db()
|
||||||
i.file.open('rb')
|
i.file.open('rb')
|
||||||
zipf.writestr('{}.pdf'.format(i.number), i.file.read())
|
zipf.writestr('{}.pdf'.format(i.number), i.file.read())
|
||||||
i.file.close()
|
i.file.close()
|
||||||
|
|
||||||
with open(os.path.join(d, 'tmp.zip'), 'rb') as zipf:
|
with open(os.path.join(d, 'tmp.zip'), 'rb') as zipf:
|
||||||
return '{}_invoices.zip'.format(self.event.slug), 'application/zip', zipf.read()
|
return '{}_invoices.zip'.format(self.event.slug), 'application/zip', zipf.read()
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ from pretix.base.models.orders import OrderFee
|
|||||||
from pretix.base.models.tax import EU_COUNTRIES
|
from pretix.base.models.tax import EU_COUNTRIES
|
||||||
from pretix.base.services.export import export
|
from pretix.base.services.export import export
|
||||||
from pretix.base.services.invoices import (
|
from pretix.base.services.invoices import (
|
||||||
generate_cancellation, generate_invoice, invoice_pdf, invoice_qualified,
|
generate_cancellation, generate_invoice, invoice_pdf, invoice_pdf_task,
|
||||||
regenerate_invoice,
|
invoice_qualified, regenerate_invoice,
|
||||||
)
|
)
|
||||||
from pretix.base.services.locking import LockTimeoutException
|
from pretix.base.services.locking import LockTimeoutException
|
||||||
from pretix.base.services.mail import SendMailException, render_mail
|
from pretix.base.services.mail import SendMailException, render_mail
|
||||||
@@ -461,7 +461,12 @@ class InvoiceDownload(EventPermissionRequiredMixin, View):
|
|||||||
'now. Please try again in a few seconds.'))
|
'now. Please try again in a few seconds.'))
|
||||||
return redirect(self.get_order_url())
|
return redirect(self.get_order_url())
|
||||||
|
|
||||||
resp = FileResponse(self.invoice.file.file, content_type='application/pdf')
|
try:
|
||||||
|
resp = FileResponse(self.invoice.file.file, content_type='application/pdf')
|
||||||
|
except FileNotFoundError:
|
||||||
|
invoice_pdf_task.apply(args=(self.invoice.pk,))
|
||||||
|
return self.get(request, *args, **kwargs)
|
||||||
|
|
||||||
resp['Content-Disposition'] = 'attachment; filename="{}.pdf"'.format(self.invoice.number)
|
resp['Content-Disposition'] = 'attachment; filename="{}.pdf"'.format(self.invoice.number)
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ from pretix.base.models.orders import (
|
|||||||
)
|
)
|
||||||
from pretix.base.payment import PaymentException
|
from pretix.base.payment import PaymentException
|
||||||
from pretix.base.services.invoices import (
|
from pretix.base.services.invoices import (
|
||||||
generate_cancellation, generate_invoice, invoice_pdf, invoice_qualified,
|
generate_cancellation, generate_invoice, invoice_pdf, invoice_pdf_task,
|
||||||
|
invoice_qualified,
|
||||||
)
|
)
|
||||||
from pretix.base.services.orders import cancel_order
|
from pretix.base.services.orders import cancel_order
|
||||||
from pretix.base.services.tickets import (
|
from pretix.base.services.tickets import (
|
||||||
@@ -673,6 +674,10 @@ class InvoiceDownload(EventViewMixin, OrderDetailMixin, View):
|
|||||||
'now. Please try again in a few seconds.'))
|
'now. Please try again in a few seconds.'))
|
||||||
return redirect(self.get_order_url())
|
return redirect(self.get_order_url())
|
||||||
|
|
||||||
resp = FileResponse(invoice.file.file, content_type='application/pdf')
|
try:
|
||||||
|
resp = FileResponse(invoice.file.file, content_type='application/pdf')
|
||||||
|
except FileNotFoundError:
|
||||||
|
invoice_pdf_task.apply(args=(invoice.pk,))
|
||||||
|
return self.get(request, *args, **kwargs)
|
||||||
resp['Content-Disposition'] = 'attachment; filename="{}.pdf"'.format(invoice.number)
|
resp['Content-Disposition'] = 'attachment; filename="{}.pdf"'.format(invoice.number)
|
||||||
return resp
|
return resp
|
||||||
|
|||||||
Reference in New Issue
Block a user