Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
==================
Report Footer HTML
==================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:1e21324ad4ea42f55bb3ba77bf29867f0daf562f1a2c122dbe3188a01a557437
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github
:target: https://github.com/OCA/reporting-engine/tree/18.0/report_footer_html
: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-18-0/reporting-engine-18-0-report_footer_html
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the report configuration in order to display HTML
content inside Report Footer on chosen reports.
Implementation Details
~~~~~~~~~~~~~~~~~~~~~~
The footer is injected into various report layouts. In some cases, the
native footer div is **replaced** instead of just adding content before
it:
- **``Bubble``**: The div is replaced to move the vertical separator bar
that splits the footer content, ensuring a clean layout with the
custom footer displayed above the native one.
- **``Standard``, ``Folder``, ``Boxed`` and ``Bold``**: The div is
replaced and the footer layout is modified to ensure the HTML footer
content occupies the full width instead of appearing inline with other
elements.
In other layouts (``striped``, ``wave``), the custom footer is simply
inserted before the native footer without replacing it, as the layout
structure handles the distribution correctly.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Use Cases / Context
===================
This module was developed because sometimes you want to personalize your
Report Footer with extra information in some reports.
Usage
=====
To use this module, you need to:
1. Go to a Report that you want to personalize footer.
2. Add some image or HTML to this report on Advanced Properties page.
3. Change Paperformat of this Report and adjust *Bottom Margin (mm)*
accordingly.
Known issues / Roadmap
======================
- Due to Odoo limitations, hyperlinked text does not work in report
footers.
- Links can only be added by pasting the full URL directly into the
footer.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_footer_html%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Moduon
Contributors
------------
- Eduardo de Miguel (`Moduon <https://www.moduon.team/>`__)
- Rafael Blasco (`Moduon <https://www.moduon.team/>`__)
- David Vidal (`Moduon <https://www.moduon.team/>`__)
- Joel Estrada (`Moduon <https://www.moduon.team/>`__)
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.
.. |maintainer-Shide| image:: https://github.com/Shide.png?size=40px
:target: https://github.com/Shide
:alt: Shide
.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px
:target: https://github.com/rafaelbn
:alt: rafaelbn
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-Shide| |maintainer-rafaelbn|
This module is part of the `OCA/reporting-engine <https://github.com/OCA/reporting-engine/tree/18.0/report_footer_html>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,23 @@
# Copyright 2025 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
{
"name": "Report Footer HTML",
"summary": "Show HTML content in desired Footer Reports",
"version": "18.0.1.0.0",
"development_status": "Alpha",
"category": "Tools",
"website": "https://github.com/OCA/reporting-engine",
"author": "Moduon, Odoo Community Association (OCA)",
"maintainers": ["Shide", "rafaelbn"],
"license": "LGPL-3",
"application": False,
"installable": True,
"depends": [
"web",
],
"data": [
"views/ir_actions_report_view.xml",
"views/report_templates.xml",
],
}

View File

@@ -0,0 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_footer_html
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-12 13:27+0000\n"
"PO-Revision-Date: 2025-11-12 14:27+0100\n"
"Last-Translator: Joel Estrada Castellano <joel@moduon.team>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.5\n"
#. module: report_footer_html
#: model:ir.model.fields,field_description:report_footer_html.field_ir_actions_report__footer_html
msgid "Extra Footer"
msgstr "Pie de página extra"
#. module: report_footer_html
#: model:ir.model,name:report_footer_html.model_ir_actions_report
msgid "Report Action"
msgstr "Acción de informe"
#. module: report_footer_html
#: model:ir.model.fields,help:report_footer_html.field_ir_actions_report__footer_html
msgid ""
"This HTML will be displayed in the footer of this report.\n"
"It's recommended to change Paper Format to a new one that fits correctly to this report by adjusting 'Bottom Margin (mm)' accordingly."
msgstr ""
"Este HTML se mostrará en el pie de página de este informe.\n"
"Se recomienda cambiar el Formato de Papel a uno nuevo que encaje correctamente con este informe ajustando el 'Margen Inferior (mm)' según corresponda."

View File

@@ -0,0 +1,35 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_footer_html
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-12 13:27+0000\n"
"PO-Revision-Date: 2025-11-12 14:28+0100\n"
"Last-Translator: Joel Estrada Castellano <joel@moduon.team>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.5\n"
#. module: report_footer_html
#: model:ir.model.fields,field_description:report_footer_html.field_ir_actions_report__footer_html
msgid "Extra Footer"
msgstr "Extra piè di pagina"
#. module: report_footer_html
#: model:ir.model,name:report_footer_html.model_ir_actions_report
msgid "Report Action"
msgstr "Azione report"
#. module: report_footer_html
#: model:ir.model.fields,help:report_footer_html.field_ir_actions_report__footer_html
msgid ""
"This HTML will be displayed in the footer of this report.\n"
"It's recommended to change Paper Format to a new one that fits correctly to this report by adjusting 'Bottom Margin (mm)' accordingly."
msgstr ""

View File

@@ -0,0 +1,31 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_footer_html
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: report_footer_html
#: model:ir.model.fields,field_description:report_footer_html.field_ir_actions_report__footer_html
msgid "Extra Footer"
msgstr ""
#. module: report_footer_html
#: model:ir.model,name:report_footer_html.model_ir_actions_report
msgid "Report Action"
msgstr ""
#. module: report_footer_html
#: model:ir.model.fields,help:report_footer_html.field_ir_actions_report__footer_html
msgid ""
"This HTML will be displayed in the footer of this report.\n"
"It's recommended to change Paper Format to a new one that fits correctly to this report by adjusting 'Bottom Margin (mm)' accordingly."
msgstr ""

View File

@@ -0,0 +1 @@
from . import ir_actions_report

View File

@@ -0,0 +1,22 @@
# Copyright 2025 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
from odoo import fields, models
class IrActionsReport(models.Model):
_inherit = "ir.actions.report"
footer_html = fields.Html(
string="Extra Footer",
help="This HTML will be displayed in the footer of this report.\n"
"It's recommended to change Paper Format to a new one that fits "
"correctly to this report by adjusting 'Bottom Margin (mm)' accordingly.",
)
def _render_template(self, template, values=None):
values = values and dict(values) or {}
report = self.sudo().search([("report_name", "=", template)], limit=1)
if report.report_type in ("qweb-pdf", "qweb-html"):
values["footer_html"] = report.footer_html
return super()._render_template(template, values=values)

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1 @@
This module was developed because sometimes you want to personalize your Report Footer with extra information in some reports.

View File

@@ -0,0 +1,4 @@
- Eduardo de Miguel ([Moduon](https://www.moduon.team/))
- Rafael Blasco ([Moduon](https://www.moduon.team/))
- David Vidal ([Moduon](https://www.moduon.team/))
- Joel Estrada ([Moduon](https://www.moduon.team/))

View File

@@ -0,0 +1,11 @@
This module extends the report configuration in order to display HTML content inside Report Footer on chosen reports.
### Implementation Details
The footer is injected into various report layouts. In some cases, the native footer div is **replaced** instead of just adding content before it:
- **`Bubble`**: The div is replaced to move the vertical separator bar that splits the footer content, ensuring a clean layout with the custom footer displayed above the native one.
- **`Standard`, `Folder`, `Boxed` and `Bold`**: The div is replaced and the footer layout is modified to ensure the HTML footer content occupies the full width instead of appearing inline with other elements.
In other layouts (`striped`, `wave`), the custom footer is simply inserted before the native footer without replacing it, as the layout structure handles the distribution correctly.

View File

@@ -0,0 +1,2 @@
- Due to Odoo limitations, hyperlinked text does not work in report footers.
- Links can only be added by pasting the full URL directly into the footer.

View File

@@ -0,0 +1,5 @@
To use this module, you need to:
1. Go to a Report that you want to personalize footer.
1. Add some image or HTML to this report on Advanced Properties page.
1. Change Paperformat of this Report and adjust *Bottom Margin (mm)* accordingly.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,486 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="report-footer-html">
<h1>Report Footer HTML</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:1e21324ad4ea42f55bb3ba77bf29867f0daf562f1a2c122dbe3188a01a557437
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/reporting-engine/tree/18.0/report_footer_html"><img alt="OCA/reporting-engine" src="https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/reporting-engine-18-0/reporting-engine-18-0-report_footer_html"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends the report configuration in order to display HTML
content inside Report Footer on chosen reports.</p>
<div class="section" id="implementation-details">
<h2>Implementation Details</h2>
<p>The footer is injected into various report layouts. In some cases, the
native footer div is <strong>replaced</strong> instead of just adding content before
it:</p>
<ul class="simple">
<li><strong>``Bubble``</strong>: The div is replaced to move the vertical separator bar
that splits the footer content, ensuring a clean layout with the
custom footer displayed above the native one.</li>
<li><strong>``Standard``, ``Folder``, ``Boxed`` and ``Bold``</strong>: The div is
replaced and the footer layout is modified to ensure the HTML footer
content occupies the full width instead of appearing inline with other
elements.</li>
</ul>
<p>In other layouts (<tt class="docutils literal">striped</tt>, <tt class="docutils literal">wave</tt>), the custom footer is simply
inserted before the native footer without replacing it, as the layout
structure handles the distribution correctly.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h3><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h3>
<p>This module was developed because sometimes you want to personalize your
Report Footer with extra information in some reports.</p>
</div>
<div class="section" id="usage">
<h3><a class="toc-backref" href="#toc-entry-2">Usage</a></h3>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to a Report that you want to personalize footer.</li>
<li>Add some image or HTML to this report on Advanced Properties page.</li>
<li>Change Paperformat of this Report and adjust <em>Bottom Margin (mm)</em>
accordingly.</li>
</ol>
</div>
<div class="section" id="known-issues-roadmap">
<h3><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h3>
<ul class="simple">
<li>Due to Odoo limitations, hyperlinked text does not work in report
footers.</li>
<li>Links can only be added by pasting the full URL directly into the
footer.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h3><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h3>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/reporting-engine/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_footer_html%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h3><a class="toc-backref" href="#toc-entry-5">Credits</a></h3>
<div class="section" id="authors">
<h4><a class="toc-backref" href="#toc-entry-6">Authors</a></h4>
<ul class="simple">
<li>Moduon</li>
</ul>
</div>
<div class="section" id="contributors">
<h4><a class="toc-backref" href="#toc-entry-7">Contributors</a></h4>
<ul class="simple">
<li>Eduardo de Miguel (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
<li>Rafael Blasco (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
<li>David Vidal (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
<li>Joel Estrada (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h4><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h4>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/Shide"><img alt="Shide" src="https://github.com/Shide.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/rafaelbn"><img alt="rafaelbn" src="https://github.com/rafaelbn.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/reporting-engine/tree/18.0/report_footer_html">OCA/reporting-engine</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2025 Moduon Team
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<record model="ir.ui.view" id="act_report_xml_view">
<field name="name">ir.actions.report.footer_html.form</field>
<field name="model">ir.actions.report</field>
<field name="inherit_id" ref="base.act_report_xml_view" />
<field name="arch" type="xml">
<xpath expr="//page[@name='advanced']/group" position="inside">
<field
name="footer_html"
widget="html"
options='{"safe": True}'
invisible="report_type not in ['qweb-pdf', 'qweb-html']"
/>
</xpath>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2025 Moduon Team
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<template id="footer_html_template">
<div
t-if="not is_html_empty(footer_html)"
t-out="footer_html"
class="mb-2 mt-1 w-100"
/>
</template>
<template
id="external_layout_striped_footer_html"
inherit_id="web.external_layout_striped"
priority="999"
>
<xpath expr="//div[@t-field='company.report_footer']" position="before">
<t t-call="report_footer_html.footer_html_template" />
</xpath>
</template>
<template
id="external_layout_boxed_footer_html"
inherit_id="web.external_layout_boxed"
priority="999"
>
<xpath
expr="//div[@t-attf-class=&quot;{{'d-flex' if is_html_empty(company.report_header) else 'row' }} o_footer_content border-top pt-2&quot;]"
position="attributes"
>
<attribute
name="t-attf-class"
>o_footer_content border-top pt-2 d-block</attribute>
</xpath>
<xpath expr="//span[@t-field='company.report_footer']" position="before">
<t t-call="report_footer_html.footer_html_template" />
</xpath>
</template>
<template
id="external_layout_bold_footer_html"
inherit_id="web.external_layout_bold"
priority="999"
>
<xpath
expr="//div[@t-attf-class=&quot;{{'d-flex' if is_html_empty(company.report_header) else 'row' }} o_footer_content border-top pt-2&quot;]"
position="attributes"
>
<attribute
name="t-attf-class"
>o_footer_content border-top pt-2 d-block</attribute>
</xpath>
<xpath expr="//span[@t-field='company.report_footer']" position="before">
<t t-call="report_footer_html.footer_html_template" />
</xpath>
</template>
<template
id="external_layout_standard_footer_html"
inherit_id="web.external_layout_standard"
priority="999"
>
<xpath
expr="//div[hasclass('o_footer_content') and hasclass('d-flex')]"
position="attributes"
>
<attribute name="class">o_footer_content border-top pt-2 d-block</attribute>
</xpath>
<xpath expr="//div[@t-field='company.report_footer']" position="replace">
<div>
<t t-call="report_footer_html.footer_html_template" />
<span t-field="company.report_footer" />
</div>
</xpath>
</template>
<template
id="external_layout_bubble_footer_html"
inherit_id="web.external_layout_bubble"
priority="999"
>
<xpath expr="//div[@t-field='company.report_footer']" position="replace">
<div class="border-top pt-2">
<t t-call="report_footer_html.footer_html_template" />
<div t-field="company.report_footer" />
</div>
</xpath>
</template>
<template
id="external_layout_wave_footer_html"
inherit_id="web.external_layout_wave"
priority="999"
>
<xpath expr="//div[@t-field='company.report_footer']" position="before">
<t t-call="report_footer_html.footer_html_template" />
</xpath>
</template>
<template
id="external_layout_folder_footer_html"
inherit_id="web.external_layout_folder"
priority="999"
>
<xpath
expr="//div[hasclass('o_footer_content') and hasclass('d-flex')]"
position="attributes"
>
<attribute name="class">o_footer_content border-top pt-2 d-block</attribute>
</xpath>
<xpath expr="//div[@t-field='company.report_footer']" position="replace">
<div>
<t t-call="report_footer_html.footer_html_template" />
<span t-field="company.report_footer" />
</div>
</xpath>
</template>
</odoo>