[ADD] module 'report_wkhtmltopdf_param'
parent
f7aedaef19
commit
e61b805ab8
|
@ -0,0 +1,70 @@
|
||||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
|
||||||
|
========================
|
||||||
|
Report Wkhtmltopdf Param
|
||||||
|
========================
|
||||||
|
|
||||||
|
This module allows you to add new parameters for a paper format which are
|
||||||
|
then forwarded to wkhtmltopdf command as arguments. To display the arguments
|
||||||
|
that wkhtmltopdf accepts go to your command line and type 'wkhtmltopdf -H'.
|
||||||
|
|
||||||
|
A commonly used parameter in Odoo is *--disable-smart-shrinking*, that will
|
||||||
|
disable the automatic resizing of the PDF when converting. This is
|
||||||
|
important when you intend to have a layout that conforms to certain alignment.
|
||||||
|
It is very common whenever you need to conform the PDF to a predefined
|
||||||
|
layoyut (e.g. checks, official forms,...).
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
#. Go to *Settings* and press 'Activate the developer mode (with assets)'
|
||||||
|
#. Go to *Settings - Technical - Reports - Paper Format*
|
||||||
|
#. Add additional parameters indicating the command argument name (remember to
|
||||||
|
add prefix -- or -) and value.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||||
|
:alt: Try me on Runbot
|
||||||
|
:target: https://runbot.odoo-community.org/runbot/143/10.0
|
||||||
|
|
||||||
|
|
||||||
|
Bug Tracker
|
||||||
|
===========
|
||||||
|
|
||||||
|
Bugs are tracked on `GitHub Issues
|
||||||
|
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please
|
||||||
|
check there if your issue has already been reported. If you spotted it first,
|
||||||
|
help us smashing it by providing a detailed and welcomed feedback.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
|
||||||
|
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Miku Laitinen <miku@avoin.systems>
|
||||||
|
* Jordi Ballester <jordi.ballester@eficent.com>
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. image:: https://odoo-community.org/logo.png
|
||||||
|
:alt: Odoo Community Association
|
||||||
|
:target: https://odoo-community.org
|
||||||
|
|
||||||
|
This module is maintained by the OCA.
|
||||||
|
|
||||||
|
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||||
|
mission is to support the collaborative development of Odoo features and
|
||||||
|
promote its widespread use.
|
||||||
|
|
||||||
|
To contribute to this module, please visit https://odoo-community.org.
|
|
@ -0,0 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from . import models
|
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
# noinspection PyStatementEffect
|
||||||
|
{
|
||||||
|
"name": "Report Wkhtmltopdf Param",
|
||||||
|
"version": "10.0.1.0.1",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"summary": """
|
||||||
|
Add new parameters for a paper format to be used by wkhtmltopdf
|
||||||
|
command as arguments.
|
||||||
|
""",
|
||||||
|
"author": "Avoin.Systems,"
|
||||||
|
"Eficent,"
|
||||||
|
"Odoo Community Association (OCA)",
|
||||||
|
"website": "https://avoin.systems",
|
||||||
|
"category": "Technical Settings",
|
||||||
|
"depends": [
|
||||||
|
"report",
|
||||||
|
],
|
||||||
|
"data": [
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"views/paperformat.xml",
|
||||||
|
],
|
||||||
|
"installable": True,
|
||||||
|
"auto_install": False,
|
||||||
|
"application": False,
|
||||||
|
"active": False,
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from . import report_paperformat_parameter
|
||||||
|
from . import report_paperformat
|
||||||
|
from . import report
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# Copyright 2017 Eficent Business and IT Consulting Services, S.L.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import models
|
||||||
|
|
||||||
|
|
||||||
|
class Report(models.Model):
|
||||||
|
_inherit = 'report'
|
||||||
|
|
||||||
|
def _build_wkhtmltopdf_args(self, paperformat,
|
||||||
|
specific_paperformat_args=None):
|
||||||
|
# noinspection PyUnresolvedReferences,PyProtectedMember
|
||||||
|
command_args = super(Report, self)._build_wkhtmltopdf_args(
|
||||||
|
paperformat,
|
||||||
|
specific_paperformat_args
|
||||||
|
)
|
||||||
|
|
||||||
|
for param in paperformat.custom_params:
|
||||||
|
command_args.extend([param.name])
|
||||||
|
if param.value:
|
||||||
|
command_args.extend([param.value])
|
||||||
|
|
||||||
|
return command_args
|
|
@ -0,0 +1,42 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# Copyright 2017 Eficent Business and IT Consulting Services, S.L.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Paper(models.Model):
|
||||||
|
_inherit = 'report.paperformat'
|
||||||
|
|
||||||
|
custom_params = fields.One2many(
|
||||||
|
'report.paperformat.parameter',
|
||||||
|
'paperformat_id',
|
||||||
|
'Custom Parameters',
|
||||||
|
help='Custom Parameters passed forward as wkhtmltopdf '
|
||||||
|
'command arguments'
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.constrains('custom_params')
|
||||||
|
def _check_recursion(self):
|
||||||
|
for paperformat in self:
|
||||||
|
sample_html = """
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html style="height: 0;">
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<span itemprop="name">Hello World!</span>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
contenthtml = [tuple([1, sample_html])]
|
||||||
|
content = self.env['report']._run_wkhtmltopdf(
|
||||||
|
[], [], contenthtml, False, paperformat, False, False, False)
|
||||||
|
if not content:
|
||||||
|
raise ValidationError(_(
|
||||||
|
"Failed to create a PDF using the provided parameters."))
|
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class ReportPaperformatParameter(models.Model):
|
||||||
|
_name = 'report.paperformat.parameter'
|
||||||
|
_description = 'wkhtmltopdf parameters'
|
||||||
|
|
||||||
|
paperformat_id = fields.Many2one(
|
||||||
|
'report.paperformat',
|
||||||
|
'Paper Format',
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
name = fields.Char(
|
||||||
|
'Name',
|
||||||
|
required=True,
|
||||||
|
help='The command argument name. Remember to add prefix -- or -'
|
||||||
|
)
|
||||||
|
|
||||||
|
value = fields.Char(
|
||||||
|
'Value',
|
||||||
|
)
|
|
@ -0,0 +1,3 @@
|
||||||
|
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||||
|
"paperformat_parameter_access_portal","ir_actions_report_paperformat_parameter group_portal","model_report_paperformat_parameter","base.group_portal",1,0,0,0
|
||||||
|
"paperformat_parameter_access_employee","ir_actions_report_paperformat_parameter group_hr_user","model_report_paperformat_parameter",,1,0,1,0
|
|
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# Copyright 2017 Eficent Business and IT Consulting Services, S.L.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
from . import test_report_paperformat
|
|
@ -0,0 +1,33 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2017 Avoin.Systems
|
||||||
|
# Copyright 2017 Eficent Business and IT Consulting Services, S.L.
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
import odoo.tests
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
@odoo.tests.common.at_install(False)
|
||||||
|
@odoo.tests.common.post_install(True)
|
||||||
|
class TestWkhtmltopdf(odoo.tests.TransactionCase):
|
||||||
|
def test_wkhtmltopdf_incorrect_parameter(self):
|
||||||
|
for report_paperformat in self.env['report.paperformat'].search([]):
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
report_paperformat.update({
|
||||||
|
'custom_params': [(0, 0, {
|
||||||
|
'name': 'bad-parameter'
|
||||||
|
})]})
|
||||||
|
|
||||||
|
def test_wkhtmltopdf_valid_parameter(self):
|
||||||
|
for report_paperformat in self.env['report.paperformat'].search([]):
|
||||||
|
error = False
|
||||||
|
try:
|
||||||
|
report_paperformat.update({
|
||||||
|
'custom_params': [(0, 0, {
|
||||||
|
'name': '--disable-smart-shrinking'
|
||||||
|
})]})
|
||||||
|
except ValidationError:
|
||||||
|
error = True
|
||||||
|
self.assertEquals(error, False,
|
||||||
|
"There was an error adding wkhtmltopdf "
|
||||||
|
"parameter --disable-smart-shrinking")
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<!-- FORM: report.paperformat -->
|
||||||
|
<record id="paperformat_view_form_custom" model="ir.ui.view">
|
||||||
|
<field name="name">paperformat with custom parameters</field>
|
||||||
|
<field name="model">report.paperformat</field>
|
||||||
|
<field name="inherit_id" ref="report.paperformat_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="report_ids" position="after">
|
||||||
|
<field name="custom_params">
|
||||||
|
<tree editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="value"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Loading…
Reference in New Issue