forked from Mapan/odoo17e
55 lines
2.5 KiB
Python
55 lines
2.5 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
import io
|
|
from odoo import models
|
|
from odoo.tools.parse_version import parse_version
|
|
from odoo.tools.pdf import OdooPdfFileReader, OdooPdfFileWriter, to_pdf_stream
|
|
|
|
class IrActionsReport(models.Model):
|
|
_inherit = 'ir.actions.report'
|
|
|
|
def _render_qweb_pdf_prepare_streams(self, report_ref, data, res_ids=None):
|
|
# OVERRIDE
|
|
res = super()._render_qweb_pdf_prepare_streams(report_ref, data, res_ids)
|
|
report = self._get_report(report_ref)
|
|
if not res_ids or report.report_name != 'account_followup.report_followup_print_all':
|
|
return res
|
|
|
|
# TODO: Remove this check in master
|
|
# This makes sure the report template is upgraded to a version compatible with this function.
|
|
# Note: field latest_version of model ir.module.module is the installed version
|
|
installed_module_version = self.sudo().env.ref('base.module_account_followup').latest_version
|
|
if parse_version(installed_module_version)[2:] < parse_version('1.1'):
|
|
return res
|
|
|
|
options = data.get('options', {})
|
|
for partner_id in res_ids:
|
|
partner = self.env['res.partner'].browse(partner_id)
|
|
join_invoices = options.get('join_invoices', partner.followup_line_id.join_invoices)
|
|
if not join_invoices:
|
|
continue
|
|
|
|
if options.get('attachment_ids'):
|
|
attachments = self.env['ir.attachment'].browse(options.get('attachment_ids'))
|
|
else:
|
|
invoices = partner._get_invoices_to_print(options)
|
|
attachments = invoices.message_main_attachment_id # existence guaranteed by _get_invoices_to_print
|
|
|
|
writer = OdooPdfFileWriter()
|
|
|
|
# Fill writer with the followup report followed by the invoices
|
|
followup_stream = res[partner_id]['stream']
|
|
input_streams = [followup_stream] + [to_pdf_stream(attachment) for attachment in attachments
|
|
if attachment.mimetype == 'application/pdf']
|
|
for stream in input_streams:
|
|
reader = OdooPdfFileReader(stream, strict=False)
|
|
writer.appendPagesFromReader(reader)
|
|
|
|
# Generate the output stream from writer and close the input streams
|
|
output_stream = io.BytesIO()
|
|
writer.write(output_stream)
|
|
res[partner_id]['stream'] = output_stream
|
|
for stream in input_streams:
|
|
stream.close()
|
|
|
|
return res
|