1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/account_followup/models/ir_actions_report.py
2024-12-10 09:04:09 +07:00

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