From 661f59ba2344f66a1a7b27cbb9428ed428012a38 Mon Sep 17 00:00:00 2001 From: Tonow-c2c Date: Tue, 18 Aug 2020 17:35:30 +0200 Subject: [PATCH] [ADD][13.0] new module report_layout_config --- report_layout_config/README.rst | 82 ++++ report_layout_config/__init__.py | 4 + report_layout_config/__manifest__.py | 20 + report_layout_config/data/report_layout.xml | 14 + report_layout_config/models/__init__.py | 2 + .../models/base_document_layout.py | 46 ++ report_layout_config/models/res_company.py | 19 + report_layout_config/readme/CONTRIBUTORS.rst | 1 + report_layout_config/readme/DESCRIPTION.rst | 2 + report_layout_config/readme/USAGE.rst | 4 + .../static/description/index.html | 436 ++++++++++++++++++ .../static/img/preview_standard.png | Bin 0 -> 5686 bytes .../static/pdf/preview_standard.pdf | Bin 0 -> 27399 bytes .../templates/report_templates.xml | 109 +++++ .../views/document_layout.xml | 53 +++ 15 files changed, 792 insertions(+) create mode 100644 report_layout_config/README.rst create mode 100644 report_layout_config/__init__.py create mode 100644 report_layout_config/__manifest__.py create mode 100644 report_layout_config/data/report_layout.xml create mode 100644 report_layout_config/models/__init__.py create mode 100644 report_layout_config/models/base_document_layout.py create mode 100644 report_layout_config/models/res_company.py create mode 100644 report_layout_config/readme/CONTRIBUTORS.rst create mode 100644 report_layout_config/readme/DESCRIPTION.rst create mode 100644 report_layout_config/readme/USAGE.rst create mode 100644 report_layout_config/static/description/index.html create mode 100644 report_layout_config/static/img/preview_standard.png create mode 100644 report_layout_config/static/pdf/preview_standard.pdf create mode 100644 report_layout_config/templates/report_templates.xml create mode 100644 report_layout_config/views/document_layout.xml diff --git a/report_layout_config/README.rst b/report_layout_config/README.rst new file mode 100644 index 000000000..164a0b9ac --- /dev/null +++ b/report_layout_config/README.rst @@ -0,0 +1,82 @@ +=========================== +Report layout configuration +=========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github + :target: https://github.com/OCA/reporting-engine/tree/13.0/report_layout_config + :alt: OCA/reporting-engine +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/reporting-engine-13-0/reporting-engine-13-0-report_layout_config + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/143/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides new report template. +With possibility to add image to replace header and footer. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* In Setting/General Setting/Business Documents: + * Click on Configure Document Layout + * On the wizard choose Layout images + * Set the `Full header image` + `Full footer image` + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Thomas Nowicki + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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. + +This module is part of the `OCA/reporting-engine `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_layout_config/__init__.py b/report_layout_config/__init__.py new file mode 100644 index 000000000..9a14fd06d --- /dev/null +++ b/report_layout_config/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2020 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/report_layout_config/__manifest__.py b/report_layout_config/__manifest__.py new file mode 100644 index 000000000..3d5e7cc26 --- /dev/null +++ b/report_layout_config/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2020 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Report layout configuration", + "summary": "Add possibility to easily modify the global report layout", + "version": "13.0.1.0.0", + "category": "Reporting", + "website": "http://github.com/OCA/reporting-engine", + "author": "Camptocamp, " "Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["web", "base"], + "data": [ + "views/document_layout.xml", + "templates/report_templates.xml", + "data/report_layout.xml", + ], + "application": False, + "installable": True, +} diff --git a/report_layout_config/data/report_layout.xml b/report_layout_config/data/report_layout.xml new file mode 100644 index 000000000..480a10408 --- /dev/null +++ b/report_layout_config/data/report_layout.xml @@ -0,0 +1,14 @@ + + + + Layout images + + /report_layout_config/static/img/preview_standard.png + /report_layout_config/static/pdf/preview_standard.pdf + + diff --git a/report_layout_config/models/__init__.py b/report_layout_config/models/__init__.py new file mode 100644 index 000000000..290c7e138 --- /dev/null +++ b/report_layout_config/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_company +from . import base_document_layout diff --git a/report_layout_config/models/base_document_layout.py b/report_layout_config/models/base_document_layout.py new file mode 100644 index 000000000..f2579cc77 --- /dev/null +++ b/report_layout_config/models/base_document_layout.py @@ -0,0 +1,46 @@ +# Copyright 2020 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class BaseDocumentLayout(models.TransientModel): + _inherit = "base.document.layout" + + full_header_img = fields.Binary( + related="company_id.full_header_img", readonly=False + ) + full_footer_img = fields.Binary( + related="company_id.full_footer_img", readonly=False + ) + + need_images_layout = fields.Boolean( + compute="_compute_need_images_layout", readonly=True + ) + + @api.depends("report_layout_id") + def _compute_need_images_layout(self): + self.ensure_one() + img_lay = self.env.ref("report_layout_config.external_layout_images").view_id + self.need_images_layout = self.external_report_layout_id == img_lay + + @api.depends( + "report_layout_id", + "logo", + "font", + "primary_color", + "secondary_color", + "full_footer_img", + "full_header_img", + ) + def _compute_preview(self): + self.ensure_one() + if not self.need_images_layout or not self.report_layout_id: + super()._compute_preview() + else: + ir_qweb = self.env["ir.qweb"] + qweb_ctx = self.env["ir.ui.view"]._prepare_qcontext() + qweb_ctx.update({"company": self}) + self.preview = ir_qweb.render( + "report_layout_config.layout_preview", qweb_ctx + ) diff --git a/report_layout_config/models/res_company.py b/report_layout_config/models/res_company.py new file mode 100644 index 000000000..f2ff4f40b --- /dev/null +++ b/report_layout_config/models/res_company.py @@ -0,0 +1,19 @@ +# Copyright 2020 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + full_header_img = fields.Binary( + string="Full header image", + help="This image will replace all header.", + attachment=True, + ) + full_footer_img = fields.Binary( + string="Full footer image", + help="This image will replace all footer.", + attachment=True, + ) diff --git a/report_layout_config/readme/CONTRIBUTORS.rst b/report_layout_config/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0a9139f76 --- /dev/null +++ b/report_layout_config/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Thomas Nowicki diff --git a/report_layout_config/readme/DESCRIPTION.rst b/report_layout_config/readme/DESCRIPTION.rst new file mode 100644 index 000000000..1283e67d0 --- /dev/null +++ b/report_layout_config/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module provides new report template +with possibility to add image to replace header and footer. diff --git a/report_layout_config/readme/USAGE.rst b/report_layout_config/readme/USAGE.rst new file mode 100644 index 000000000..32584e7b9 --- /dev/null +++ b/report_layout_config/readme/USAGE.rst @@ -0,0 +1,4 @@ +* In Setting/General Setting/Business Documents: + * Click on Configure Document Layout + * On the wizard choose Layout images + * Set the `Full header image` + `Full footer image` diff --git a/report_layout_config/static/description/index.html b/report_layout_config/static/description/index.html new file mode 100644 index 000000000..3a8cf5d4b --- /dev/null +++ b/report_layout_config/static/description/index.html @@ -0,0 +1,436 @@ + + + + + + +Report layout configuration + + + +
+

Report layout configuration

+ + +

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runbot

+

This module provides new report template. +With possibility to add image to replace header and footer.

+

Table of contents

+ +
+

Usage

+
    +
  • +
    In Setting/General Setting/Business Documents:
    +
      +
    • Click on Configure Document Layout
    • +
    • On the wizard choose Layout images
    • +
    • Set the Full header image + Full footer image
    • +
    +
    +
    +
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

This module is part of the OCA/reporting-engine project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/report_layout_config/static/img/preview_standard.png b/report_layout_config/static/img/preview_standard.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd596ed9b53069e6cdb26d450c218a123f7df12 GIT binary patch literal 5686 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

g4E~E2G+mEm@<#z8?C~-A8 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 F{{hiX;28h_ literal 0 HcmV?d00001 diff --git a/report_layout_config/templates/report_templates.xml b/report_layout_config/templates/report_templates.xml new file mode 100644 index 000000000..e3f142b63 --- /dev/null +++ b/report_layout_config/templates/report_templates.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + diff --git a/report_layout_config/views/document_layout.xml b/report_layout_config/views/document_layout.xml new file mode 100644 index 000000000..07e4609d9 --- /dev/null +++ b/report_layout_config/views/document_layout.xml @@ -0,0 +1,53 @@ + + + + base.document.layout + base.document.layout + + + + {'invisible': [('need_images_layout', '=', True)]} + + + {'invisible': [('need_images_layout', '=', True)]} + + + {'invisible': [('need_images_layout', '=', True)]} + + + {'invisible': [('need_images_layout', '=', True)]} + + + {'invisible': [('need_images_layout', '=', True)]} + + + + + + + + max-width: 450px; + + + +