optimize generation of pdf if its not stored to db
This commit is contained in:
parent
ba824215c1
commit
23bace99bb
2 changed files with 48 additions and 22 deletions
|
@ -118,21 +118,10 @@ class RunXRechnungReport(Wizard):
|
||||||
'invoice_report_cache_id': None,
|
'invoice_report_cache_id': None,
|
||||||
'invoice_report_format': None}])
|
'invoice_report_format': None}])
|
||||||
|
|
||||||
to_generate = [x.id for x in invoices if not x.invoice_report_cache]
|
to_generate = [x for x in invoices if not x.invoice_report_cache]
|
||||||
if to_generate:
|
if to_generate:
|
||||||
report_action = XReport.get_used_report()
|
# the pdf should be stored in db...
|
||||||
|
XReport.generate_pdf_data(to_generate)
|
||||||
# run selected report on invoices w/o stored report-data
|
|
||||||
data2 = {}
|
|
||||||
data2.update(data)
|
|
||||||
data2['action_id'] = report_action.id
|
|
||||||
data2['model'] = report_action.model
|
|
||||||
data2['id'] = to_generate[0]
|
|
||||||
data2['ids'] = to_generate
|
|
||||||
|
|
||||||
RepInvoice = pool.get(report_action.report_name, type='report')
|
|
||||||
with Transaction().set_context({'with_rec_name': False}):
|
|
||||||
RepInvoice.execute(to_generate, data2)
|
|
||||||
|
|
||||||
def do_export(self, action):
|
def do_export(self, action):
|
||||||
""" run export
|
""" run export
|
||||||
|
@ -151,7 +140,6 @@ class RunXRechnungReport(Wizard):
|
||||||
if data['edocument'] == 'edocument.facturxext.invoice-ferd':
|
if data['edocument'] == 'edocument.facturxext.invoice-ferd':
|
||||||
# pdf is stored to db
|
# pdf is stored to db
|
||||||
self.generate_invoice_reports(data)
|
self.generate_invoice_reports(data)
|
||||||
|
|
||||||
return action, data
|
return action, data
|
||||||
|
|
||||||
# end RunXRechnungReport
|
# end RunXRechnungReport
|
||||||
|
|
52
xreport.py
52
xreport.py
|
@ -11,6 +11,7 @@ from trytond.report import Report
|
||||||
from trytond.pool import Pool
|
from trytond.pool import Pool
|
||||||
from trytond.exceptions import UserError
|
from trytond.exceptions import UserError
|
||||||
from trytond.i18n import gettext
|
from trytond.i18n import gettext
|
||||||
|
from trytond.transaction import Transaction
|
||||||
from .wizard_runreport import edoc_versions
|
from .wizard_runreport import edoc_versions
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,6 +113,36 @@ class XReport(Report):
|
||||||
'account_invoice_xrechnung.msg_no_report_found'))
|
'account_invoice_xrechnung.msg_no_report_found'))
|
||||||
return act_report
|
return act_report
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def generate_pdf_data(cls, records):
|
||||||
|
""" generate pdf of invoice using defined report
|
||||||
|
|
||||||
|
Args:
|
||||||
|
records (list): records of account.invoice
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: dicts - {'content': <pdf-data>, 'fname': 'file-name'}
|
||||||
|
"""
|
||||||
|
report_action = cls.get_used_report()
|
||||||
|
RepInvoice = Pool().get(report_action.report_name, type='report')
|
||||||
|
|
||||||
|
# run selected report on invoices w/o stored report-data
|
||||||
|
data2 = {}
|
||||||
|
data2['action_id'] = report_action.id
|
||||||
|
data2['model'] = report_action.model
|
||||||
|
result = []
|
||||||
|
for record in records:
|
||||||
|
data2['id'] = record.id
|
||||||
|
data2['ids'] = [record.id]
|
||||||
|
|
||||||
|
with Transaction().set_context({'with_rec_name': False}):
|
||||||
|
(ext, content, print1, fname) = RepInvoice.execute(
|
||||||
|
[record.id], data2)
|
||||||
|
result.append({
|
||||||
|
'content': content,
|
||||||
|
'fname': fname})
|
||||||
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_zugferd_pdf(cls, invoice, invoice_xml):
|
def get_zugferd_pdf(cls, invoice, invoice_xml):
|
||||||
""" generate ZugFeRD-PDF
|
""" generate ZugFeRD-PDF
|
||||||
|
@ -120,15 +151,22 @@ class XReport(Report):
|
||||||
invoice (record): model account.invoice
|
invoice (record): model account.invoice
|
||||||
invoice_xml (str): xml-data
|
invoice_xml (str): xml-data
|
||||||
"""
|
"""
|
||||||
# pdf was already stored to db
|
# pdf was already stored to db, must be pdf
|
||||||
if not (invoice.invoice_report_cache and (
|
if invoice.invoice_report_cache:
|
||||||
invoice.invoice_report_format == 'pdf')):
|
if invoice.invoice_report_format != 'pdf':
|
||||||
raise UserError(gettext(
|
raise UserError(gettext(
|
||||||
'account_invoice_xrechnung.msg_invalid_cachecontent',
|
'account_invoice_xrechnung.msg_invalid_cachecontent',
|
||||||
invoice_name=invoice.rec_name))
|
invoice_name=invoice.rec_name))
|
||||||
|
pdf_data = invoice.invoice_report_cache
|
||||||
|
else:
|
||||||
|
# run report, could fail because we are in
|
||||||
|
# readonly-transaction
|
||||||
|
report_data = cls.generate_pdf_data([invoice])
|
||||||
|
if report_data:
|
||||||
|
pdf_data = report_data[0]['content']
|
||||||
|
|
||||||
zugferd_pdf = generate_from_binary(
|
zugferd_pdf = generate_from_binary(
|
||||||
pdf_file=invoice.invoice_report_cache,
|
pdf_file=pdf_data,
|
||||||
xml=invoice_xml,
|
xml=invoice_xml,
|
||||||
check_xsd=True,
|
check_xsd=True,
|
||||||
pdf_metadata={
|
pdf_metadata={
|
||||||
|
|
Loading…
Reference in a new issue