diff --git a/report_qweb_pdf_watermark/__manifest__.py b/report_qweb_pdf_watermark/__manifest__.py
index 1d3af3261..0291a0736 100644
--- a/report_qweb_pdf_watermark/__manifest__.py
+++ b/report_qweb_pdf_watermark/__manifest__.py
@@ -2,18 +2,24 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Pdf watermark",
- "version": "14.0.1.0.1",
+ "version": "15.0.1.0.0",
"author": "Therp BV, " "Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Technical Settings",
+ "development_status": "Production/Stable",
"summary": "Add watermarks to your QWEB PDF reports",
"website": "https://github.com/OCA/reporting-engine",
"depends": ["web"],
"data": [
"demo/report.xml",
"views/ir_actions_report_xml.xml",
- "views/layout_templates.xml",
+ "views/res_company.xml",
],
+ "assets": {
+ "web.report_assets_pdf": [
+ "/report_qweb_pdf_watermark/static/src/css/report_qweb_pdf_watermark.css"
+ ],
+ },
"demo": ["demo/report.xml"],
"installable": True,
}
diff --git a/report_qweb_pdf_watermark/demo/report.xml b/report_qweb_pdf_watermark/demo/report.xml
index 8c752c53a..9e58bd395 100644
--- a/report_qweb_pdf_watermark/demo/report.xml
+++ b/report_qweb_pdf_watermark/demo/report.xml
@@ -1,22 +1,16 @@
-
-
- Demo report
+
+ Watermark Demo report
res.users
qweb-pdf
report_qweb_pdf_watermark.demo_report_view
report_qweb_pdf_watermark.demo_report_view
+ docs[:1].company_id.logo
report
-
- Demo report
- res.users
- report_qweb_pdf_watermark.demo_report_view
- docs[:1].company_id.logo
-
@@ -30,5 +24,4 @@
-
diff --git a/report_qweb_pdf_watermark/models/__init__.py b/report_qweb_pdf_watermark/models/__init__.py
index 5db6f5b43..a305da900 100644
--- a/report_qweb_pdf_watermark/models/__init__.py
+++ b/report_qweb_pdf_watermark/models/__init__.py
@@ -1,4 +1,5 @@
# © 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import res_company
from . import report
diff --git a/report_qweb_pdf_watermark/models/report.py b/report_qweb_pdf_watermark/models/report.py
index 9362d13da..b5845228c 100644
--- a/report_qweb_pdf_watermark/models/report.py
+++ b/report_qweb_pdf_watermark/models/report.py
@@ -9,13 +9,13 @@ from PIL import Image
from odoo import api, fields, models
from odoo.tools.safe_eval import safe_eval
+logger = getLogger(__name__)
+
try:
# we need this to be sure PIL has loaded PDF support
from PIL import PdfImagePlugin # noqa: F401
except ImportError:
- pass
-
-logger = getLogger(__name__)
+ logger.error("ImportError: The PdfImagePlugin could not be imported")
try:
from PyPDF2 import PdfFileReader, PdfFileWriter # pylint: disable=W0404
@@ -27,7 +27,13 @@ except ImportError:
class Report(models.Model):
_inherit = "ir.actions.report"
- pdf_watermark = fields.Binary("Watermark")
+ use_company_watermark = fields.Boolean(
+ default=False,
+ help="Use the pdf watermark defined globally in the company settings.",
+ )
+ pdf_watermark = fields.Binary(
+ "Watermark", help="Upload an pdf file to use as an watermark on this report."
+ )
pdf_watermark_expression = fields.Char(
"Watermark expression",
help="An expression yielding the base64 "
@@ -42,6 +48,17 @@ class Report(models.Model):
)
return super(Report, self)._render_qweb_pdf(res_ids=res_ids, data=data)
+ def pdf_has_usable_pages(self, numpages):
+ if numpages < 1:
+ logger.error("Your watermark pdf does not contain any pages")
+ return False
+ if numpages > 1:
+ logger.debug(
+ "Your watermark pdf contains more than one page, "
+ "all but the first one will be ignored"
+ )
+ return True
+
@api.model
def _run_wkhtmltopdf(
self,
@@ -65,6 +82,8 @@ class Report(models.Model):
watermark = None
if self.pdf_watermark:
watermark = b64decode(self.pdf_watermark)
+ elif self.use_company_watermark and self.env.company.pdf_watermark:
+ watermark = b64decode(self.env.company.pdf_watermark)
elif docids:
watermark = safe_eval(
self.pdf_watermark_expression or "None",
@@ -100,14 +119,8 @@ class Report(models.Model):
logger.error("No usable watermark found, got %s...", watermark[:100])
return result
- if pdf_watermark.numPages < 1:
- logger.error("Your watermark pdf does not contain any pages")
+ if not self.pdf_has_usable_pages(pdf_watermark.numPages):
return result
- if pdf_watermark.numPages > 1:
- logger.debug(
- "Your watermark pdf contains more than one page, "
- "all but the first one will be ignored"
- )
for page in PdfFileReader(BytesIO(result)).pages:
watermark_page = pdf.addBlankPage(
diff --git a/report_qweb_pdf_watermark/models/res_company.py b/report_qweb_pdf_watermark/models/res_company.py
new file mode 100644
index 000000000..a7bbf87f1
--- /dev/null
+++ b/report_qweb_pdf_watermark/models/res_company.py
@@ -0,0 +1,10 @@
+# Copyright 2022 360 ERP ()
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
+
+from odoo import fields, models
+
+
+class ResCompany(models.Model):
+ _inherit = "res.company"
+
+ pdf_watermark = fields.Binary("Watermark")
diff --git a/report_qweb_pdf_watermark/readme/CONTRIBUTORS.rst b/report_qweb_pdf_watermark/readme/CONTRIBUTORS.rst
index 475c9d681..ccce2bb44 100644
--- a/report_qweb_pdf_watermark/readme/CONTRIBUTORS.rst
+++ b/report_qweb_pdf_watermark/readme/CONTRIBUTORS.rst
@@ -3,3 +3,4 @@
* Rod Schouteden
* Robin Goots
* Foram Shah
+* Emiel van Bokhoven
diff --git a/report_qweb_pdf_watermark/readme/HISTORY.rst b/report_qweb_pdf_watermark/readme/HISTORY.rst
index 236854067..a87254f69 100644
--- a/report_qweb_pdf_watermark/readme/HISTORY.rst
+++ b/report_qweb_pdf_watermark/readme/HISTORY.rst
@@ -14,3 +14,10 @@
~~~~~~~~~~~~~~~~~~~~~~~
* [MIG] Migration to V14.
+
+
+15.0.1.0.0 (2022-01-11)
+~~~~~~~~~~~~~~~~~~~~~~~
+
+* [MIG] Migration to V15.
+* Define pdf watermark in company settings
diff --git a/report_qweb_pdf_watermark/readme/USAGE.rst b/report_qweb_pdf_watermark/readme/USAGE.rst
index 13dff9371..a725032f1 100644
--- a/report_qweb_pdf_watermark/readme/USAGE.rst
+++ b/report_qweb_pdf_watermark/readme/USAGE.rst
@@ -3,3 +3,18 @@ To use this module, you need to:
#. go to your report
#. select a PDF or image to use as watermark. Note that resolutions and size must match, otherwise you'll have funny results
#. You can also fill in an expression that returns the data (base64 encoded) to be used as watermark
+
+To use the Company watermark, you need to:
+
+#. go to settings --> company --> update info
+#. upload an pdf watermark
+#. go to settings --> technical --> reporting --> reports
+#. Select the report where you want to use it.
+#. On the 'Advanced Properties' tab of the notebook check 'use company watermark'
+
+### Demo
+And demo report is available (if you have demo data installed) on the users form view.
+
+#. go to Configuration --> users
+#. Select an users
+#. Click the print button --> Watermark Demo report.
diff --git a/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py b/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py
index 0ad4beba4..68d3fd8ad 100644
--- a/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py
+++ b/report_qweb_pdf_watermark/tests/test_report_qweb_pdf_watermark.py
@@ -23,11 +23,33 @@ class TestReportQwebPdfWatermark(HttpCase):
# and now we should have three again
self._test_report_images(3)
- def _test_report_images(self, number):
- report = self.env["ir.model.data"].xmlid_to_object(
- "report_qweb_pdf_watermark.demo_report"
+ # test use company watermark
+ self.env.ref("report_qweb_pdf_watermark.demo_report").write(
+ {"pdf_watermark": False}
)
+ self.env.ref("report_qweb_pdf_watermark.demo_report").write(
+ {"use_company_watermark": True}
+ )
+ self.env.ref("base.main_company").write(
+ {"pdf_watermark": self.env.user.company_id.logo}
+ )
+ self._test_report_images(3)
+
+ def _test_report_images(self, number):
+ report = self.env.ref("report_qweb_pdf_watermark.demo_report")
pdf, _ = report.with_context(force_report_rendering=True)._render_qweb_pdf(
self.env["res.users"].search([]).ids
)
self.assertEqual(pdf.count(b"/Subtype /Image"), number)
+
+ def test_pdf_has_usable_pages(self):
+ # test 0
+ numpages = 0
+ # pdf_has_usable_pages(self, pdf_watermark)
+ self.assertFalse(self.env["ir.actions.report"].pdf_has_usable_pages(numpages))
+ # test 1
+ numpages = 1
+ self.assertTrue(self.env["ir.actions.report"].pdf_has_usable_pages(numpages))
+ # test 2
+ numpages = 2
+ self.assertTrue(self.env["ir.actions.report"].pdf_has_usable_pages(numpages))
diff --git a/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml b/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml
index fd3fbcb89..98b493f2b 100644
--- a/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml
+++ b/report_qweb_pdf_watermark/views/ir_actions_report_xml.xml
@@ -6,14 +6,19 @@
+
diff --git a/report_qweb_pdf_watermark/views/layout_templates.xml b/report_qweb_pdf_watermark/views/layout_templates.xml
deleted file mode 100644
index 50819c373..000000000
--- a/report_qweb_pdf_watermark/views/layout_templates.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/report_qweb_pdf_watermark/views/res_company.xml b/report_qweb_pdf_watermark/views/res_company.xml
new file mode 100644
index 000000000..66a55d487
--- /dev/null
+++ b/report_qweb_pdf_watermark/views/res_company.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ res.company
+
+
+
+
+
+
+
+
+
+
+