[IMP] sale(_management,_pdf_quote_builder),*: improve pdf quote builder

Following 116879e17e81657f48a7d11780d8d30715ecc68f a few improvements were needed to make it more
complete.

task-3484125

closes odoo/odoo#137522

Related: odoo/enterprise#48563
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
Demesmaeker
2023-10-17 08:53:06 +00:00
parent ddd380edb0
commit 211a5bb13b
18 changed files with 163 additions and 79 deletions
+30 -15
View File
@@ -77,35 +77,50 @@ class BrandedFileWriter(PdfFileWriter):
PdfFileWriter = BrandedFileWriter
def merge_pdf(pdf_data, form_fields=None):
def merge_pdf(pdf_data):
''' Merge a collection of PDF documents in one.
Note that the attachments are not merged.
:param list pdf_data: a list of PDF datastrings
:param dict form_fields: a dictionary of form fields to update in the merged PDF
:return: a unique merged PDF datastring
'''
form_fields = form_fields or {}
writer = PdfFileWriter()
for document in pdf_data:
reader = PdfFileReader(io.BytesIO(document), strict=False)
has_fields = form_fields and bool(reader.getFields())
for page in range(0, reader.getNumPages()):
page = reader.getPage(page)
writer.addPage(page)
if has_fields:
try:
writer.update_page_form_field_values(page, form_fields)
except AttributeError: # This method was renamed in PyPDF2 2.0
# This is a known bug on previous version of PyPDF2, fixed in 2.11
if not page.get('/Annots'):
_logger.info("No fields to update in this page")
else:
writer.updatePageFormFieldValues(page, form_fields)
writer.addPage(reader.getPage(page))
with io.BytesIO() as _buffer:
writer.write(_buffer)
return _buffer.getvalue()
def fill_form_fields_pdf(document, form_fields=None):
''' Fill in the form fields of a PDF
:param datastring document: a PDF datastring
:param dict form_fields: a dictionary of form fields to update in the PDF
:return: a filled PDF datastring
'''
form_fields = form_fields or {}
writer = PdfFileWriter()
reader = PdfFileReader(io.BytesIO(document), strict=False)
has_fields = form_fields and bool(reader.getFields())
if not has_fields:
return document
for page in range(0, reader.getNumPages()):
page = reader.getPage(page)
writer.addPage(page)
try:
writer.update_page_form_field_values(page, form_fields)
except AttributeError: # This method was renamed in PyPDF2 2.0
# This is a known bug on previous version of PyPDF2, fixed in 2.11
if not page.get('/Annots'):
_logger.info("No fields to update in this page")
else:
writer.updatePageFormFieldValues(page, form_fields)
with io.BytesIO() as _buffer:
writer.write(_buffer)
return _buffer.getvalue()
def rotate_pdf(pdf):
''' Rotate clockwise PDF (90°) into a new PDF.