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,213 @@
=============================
Report Display Name in Footer
=============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:36608933c95d495c5b1ec36cf366820be3d8ccb5b4646203cd2dd7bc3224e359
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/licence-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_display_name_in_footer
: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_display_name_in_footer
: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 pagination functionality in reports to display
the name of the document on each page of PDFs, allowing you to know
which document each page belongs to and in what order they should
appear.
Pagination will appear on the left side and document name on the right
side of the footer.
Implementation Details
~~~~~~~~~~~~~~~~~~~~~~
The pagination and document name positioning is implemented differently
across report layouts:
**Layouts using ``replace`` (``Standard``, ``Folder``):**
- The entire report_footer container div is **replaced** to recreate the
structure with the pagination moved below the company footer
- This approach is necessary because these layouts use
``<div t-field="company.report_footer"/>`` instead of ``<span>``, and
you cannot add child elements inside the element.
- The original pagination div is deleted first, then the new structure
is created with both the company footer and pagination in the correct
order
**Other layouts (``Striped``, ``Boxed``, ``Bold``, ``Bubble``,
``Wave``):**
- Elements are repositioned using ``move`` operations or by adding CSS
classes (``float-start``, ``float-end``)
In all cases, the comma separator originally present in the document
name is removed by modifying the ``t-out`` attribute.
.. 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
===================
Printing the name of the document on footer is only allowed by default
to invoices by setting ``account.display_name_in_footer`` to True.
This module was developed because there is no way to print other
document names on each page of reports.
It will be useful for you if you want to print the name of the document
in the footer pages to quickly know what page belongs to what document.
Also you can define what documents will have the document name in its
footer.
Configuration
=============
To configure this module, you need to:
1. Go to System parameters and create or edit
``report.display_name_in_footer_models`` parameter.
2. Add desired model names separated by comma.
- If you want to print name on all reports, just write 'all' on the
value.
- If you want to exclude certain models, add '-' before model name.
3. Examples:
- Only few models: sale.order,purchase.order,stock.picking
- All models: all
- All models except two: all,-sale.order,-purchase.order
4. The field printed in the report will be *name* for any type of
document. If your document doesn't have this field, please exclude
from the list with '-' and the name of the model.
5. Compatible on all document layout:
- Light
- Boxed
- Bold
- Striped
- Bubble
- Wave
- Folder
6. Compatible report types:
- PDF
Usage
=====
To use this module, you need to:
1. Go to System Parameters.
2. Add your desired models or use 'all' to show document name on all
type of documents.
3. Print a report for you desired model.
4. Check Footer to see document name.
Known issues / Roadmap
======================
When this module is checking if the model has to display the name in the
footer is done at the level of the initial model of the report you are
printing.
Examples of strange cases/uses: *stock_picking_batch_print_pickings* and
*stock_picking_batch_print_invoices* modules print the delivery notes or
invoices of the Pickings associated with the Batch, but the report is
being launched from the Batch. So, the header and footer belongs to the
Batch.
Within that report, calls are made to the invoice or delivery note
reports, but the check to see if the name of the document has to be
printed in the footer is done on the Batch.
Therefore, if you set the configuration parameter to "stock.picking,
account.move" , the names printed from that report will not appear. By
setting it to "stock.picking.batch", the module will establish that all
the documents contained in that report (whether invoices or delivery
notes) must include the name in 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_display_name_in_footer%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/>`__)
- 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_display_name_in_footer>`_ 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,22 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
{
"name": "Report Display Name in Footer",
"summary": "Show document name in report footer",
"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/report_templates.xml",
],
}

View File

@@ -0,0 +1,22 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_display_name_in_footer
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-06-14 17:42+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: report_display_name_in_footer
#: model:ir.model,name:report_display_name_in_footer.model_ir_actions_report
msgid "Report Action"
msgstr "Azione resoconto"

View File

@@ -0,0 +1,25 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_display_name_in_footer
#
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_display_name_in_footer
#: model_terms:ir.ui.view,arch_db:report_display_name_in_footer.external_layout_folder_display_name_on_footer
#: model_terms:ir.ui.view,arch_db:report_display_name_in_footer.external_layout_standard_display_name_on_footer
msgid "Page <span class=\"page\"/> / <span class=\"topage\"/>"
msgstr ""
#. module: report_display_name_in_footer
#: model:ir.model,name:report_display_name_in_footer.model_ir_actions_report
msgid "Report Action"
msgstr ""

View File

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

View File

@@ -0,0 +1,21 @@
from odoo import models
class IrActionsReport(models.Model):
_inherit = "ir.actions.report"
def _pre_render_qweb_pdf(self, report_ref, res_ids=None, data=None):
dnf_models = set(
self.env["ir.config_parameter"]
.sudo()
.get_param("report.display_name_in_footer_models", default="")
.replace(" ", "")
.split(",")
)
report_model = self._get_report(report_ref).model
if (
report_model in dnf_models or "all" in dnf_models
) and f"-{report_model}" not in dnf_models:
data = data and dict(data) or {}
data.update({"display_name_in_footer": True})
return super()._pre_render_qweb_pdf(report_ref, res_ids=res_ids, data=data)

View File

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

View File

@@ -0,0 +1,33 @@
To configure this module, you need to:
1. Go to System parameters and create `report.display_name_in_footer_models`
parameter.
2. Add desired model names separated by comma.
- If you want to print name on all reports, just write 'all' on the value.
- If you want to exclude certain models, add '-' before model name.
3. Examples:
- Only few models: sale.order,purchase.order,stock.picking
- All models: all
- All models except two: all,-sale.order,-purchase.order
4. The field printed in the report will be _name_ for any type of document. If your
document doesn't have this field, please exclude from the list with '-' and the name
of the model.
5. Compatible with all document layouts:
- Light
- Boxed
- Bold
- Striped
- Bubble
- Wave
- Folder
6. Compatible report types:
- PDF

View File

@@ -0,0 +1,10 @@
Printing the name of the document on footer is only allowed by default to invoices by
setting `account.display_name_in_footer` to True.
This module was developed because there is no way to print other document names on each
page of reports.
It will be useful for you if you want to print the name of the document in the footer
pages to quickly know what page belongs to what document.
Also you can define what documents will have the document name in its footer.

View File

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

View File

@@ -0,0 +1,6 @@
This module extends the pagination functionality in reports to display the name of the
document on each page of PDFs, allowing you to know which document each page belongs to
and in what order they should appear.
Pagination will appear on the left side and document name on the right side of the
footer.

View File

@@ -0,0 +1,32 @@
When this module is checking if the model has to display the name in the footer
is done at the level of the initial model of the report you are printing.
Examples of strange cases/uses:
*stock_picking_batch_print_pickings* and *stock_picking_batch_print_invoices* modules
print the delivery notes or invoices of the Pickings associated with the Batch,
but the report is being launched from the Batch. So, the header and footer
belongs to the Batch.
Within that report, calls are made to the invoice or delivery note reports,
but the check to see if the name of the document has to be printed in the
footer is done on the Batch.
Therefore, if you set the configuration parameter to "stock.picking, account.move"
, the names printed from that report will not appear.
By setting it to "stock.picking.batch", the module will establish that all the
documents contained in that report (whether invoices or delivery notes)
must include the name in the footer.
### Implementation Details
The pagination and document name positioning is implemented differently across report layouts:
**Layouts using `replace` (`Standard`, `Folder`):**
- The entire report_footer container div is **replaced** to recreate the structure with the pagination moved below the company footer
- This approach is necessary because these layouts use `<div t-field="company.report_footer"/>` instead of `<span>`, and you cannot add child elements inside the element.
- The original pagination div is deleted first, then the new structure is created with both the company footer and pagination in the correct order
**Other layouts (`Striped`, `Boxed`, `Bold`, `Bubble`, `Wave`):**
- Elements are repositioned using `move` operations or by adding CSS classes (`float-start`, `float-end`)
In all cases, the comma separator originally present in the document name is removed by modifying the `t-out` attribute.

View File

@@ -0,0 +1,6 @@
To use this module, you need to:
1. Go to System Parameters.
2. Add your desired models or use 'all' to show document name on all type of documents.
3. Print a report for you desired model.
4. Check Footer to see document name.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,544 @@
<!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>Report Display Name in Footer</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" id="report-display-name-in-footer">
<h1 class="title">Report Display Name in Footer</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:36608933c95d495c5b1ec36cf366820be3d8ccb5b4646203cd2dd7bc3224e359
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/reporting-engine/tree/18.0/report_display_name_in_footer"><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_display_name_in_footer"><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 pagination functionality in reports to display
the name of the document on each page of PDFs, allowing you to know
which document each page belongs to and in what order they should
appear.</p>
<p>Pagination will appear on the left side and document name on the right
side of the footer.</p>
<div class="section" id="implementation-details">
<h1>Implementation Details</h1>
<p>The pagination and document name positioning is implemented differently
across report layouts:</p>
<p><strong>Layouts using ``replace`` (``Standard``, ``Folder``):</strong></p>
<ul class="simple">
<li>The entire report_footer container div is <strong>replaced</strong> to recreate the
structure with the pagination moved below the company footer</li>
<li>This approach is necessary because these layouts use
<tt class="docutils literal">&lt;div <span class="pre">t-field=&quot;company.report_footer&quot;/&gt;</span></tt> instead of <tt class="docutils literal">&lt;span&gt;</tt>, and
you cannot add child elements inside the element.</li>
<li>The original pagination div is deleted first, then the new structure
is created with both the company footer and pagination in the correct
order</li>
</ul>
<p><strong>Other layouts (``Striped``, ``Boxed``, ``Bold``, ``Bubble``,
``Wave``):</strong></p>
<ul class="simple">
<li>Elements are repositioned using <tt class="docutils literal">move</tt> operations or by adding CSS
classes (<tt class="docutils literal"><span class="pre">float-start</span></tt>, <tt class="docutils literal"><span class="pre">float-end</span></tt>)</li>
</ul>
<p>In all cases, the comma separator originally present in the document
name is removed by modifying the <tt class="docutils literal"><span class="pre">t-out</span></tt> attribute.</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="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h2><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h2>
<p>Printing the name of the document on footer is only allowed by default
to invoices by setting <tt class="docutils literal">account.display_name_in_footer</tt> to True.</p>
<p>This module was developed because there is no way to print other
document names on each page of reports.</p>
<p>It will be useful for you if you want to print the name of the document
in the footer pages to quickly know what page belongs to what document.</p>
<p>Also you can define what documents will have the document name in its
footer.</p>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-2">Configuration</a></h2>
<p>To configure this module, you need to:</p>
<ol class="arabic simple">
<li>Go to System parameters and create or edit
<tt class="docutils literal">report.display_name_in_footer_models</tt> parameter.</li>
<li>Add desired model names separated by comma.<ul>
<li>If you want to print name on all reports, just write all on the
value.</li>
<li>If you want to exclude certain models, add - before model name.</li>
</ul>
</li>
<li>Examples:<ul>
<li>Only few models: sale.order,purchase.order,stock.picking</li>
<li>All models: all</li>
<li>All models except two: all,-sale.order,-purchase.order</li>
</ul>
</li>
<li>The field printed in the report will be <em>name</em> for any type of
document. If your document doesnt have this field, please exclude
from the list with - and the name of the model.</li>
<li>Compatible on all document layout:<ul>
<li>Light</li>
<li>Boxed</li>
<li>Bold</li>
<li>Striped</li>
<li>Bubble</li>
<li>Wave</li>
<li>Folder</li>
</ul>
</li>
<li>Compatible report types:<ul>
<li>PDF</li>
</ul>
</li>
</ol>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-3">Usage</a></h2>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to System Parameters.</li>
<li>Add your desired models or use all to show document name on all
type of documents.</li>
<li>Print a report for you desired model.</li>
<li>Check Footer to see document name.</li>
</ol>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h2>
<p>When this module is checking if the model has to display the name in the
footer is done at the level of the initial model of the report you are
printing.</p>
<p>Examples of strange cases/uses: <em>stock_picking_batch_print_pickings</em> and
<em>stock_picking_batch_print_invoices</em> modules print the delivery notes or
invoices of the Pickings associated with the Batch, but the report is
being launched from the Batch. So, the header and footer belongs to the
Batch.</p>
<p>Within that report, calls are made to the invoice or delivery note
reports, but the check to see if the name of the document has to be
printed in the footer is done on the Batch.</p>
<p>Therefore, if you set the configuration parameter to “stock.picking,
account.move” , the names printed from that report will not appear. By
setting it to “stock.picking.batch”, the module will establish that all
the documents contained in that report (whether invoices or delivery
notes) must include the name in the footer.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h2>
<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_display_name_in_footer%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">
<h2><a class="toc-backref" href="#toc-entry-6">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-7">Authors</a></h3>
<ul class="simple">
<li>Moduon</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-8">Contributors</a></h3>
<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>Joel Estrada (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h3>
<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_display_name_in_footer">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>
</body>
</html>

View File

@@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="external_layout_striped_display_name_on_footer"
inherit_id="web.external_layout_striped"
priority="999"
>
<xpath
expr="//div[@t-field='company.report_footer']/..//span[hasclass('topage')]/.."
position="attributes"
>
<attribute name="class" add="float-start" separator=" " />
</xpath>
<xpath
expr="//div[@t-field='company.report_footer']/..//div[@t-out='o.name']"
position="attributes"
>
<attribute name="class" add="float-end" separator=" " />
</xpath>
<xpath expr="//div[@t-field='company.report_footer']" position="after">
<div>
<xpath
expr="//div[@t-field='company.report_footer']/..//span[hasclass('topage')]/.."
position="move"
/>
<xpath
expr="//div[@t-field='company.report_footer']/..//div[@t-out='o.name']"
position="move"
/>
</div>
</xpath>
<!-- Remove the comma "," -->
<xpath expr="//div[@t-out='o.name']" position="attributes">
<attribute name="t-out">o.name</attribute>
</xpath>
</template>
<template
id="external_layout_boxed_display_name_on_footer"
inherit_id="web.external_layout_boxed"
priority="999"
>
<xpath expr="//span[@t-field='company.report_footer']/.." position="inside">
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf'&quot;][contains(@t-attf-class, 'text-muted')]"
position="move"
/>
</xpath>
<!-- Remove the comma "," -->
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf' and display_name_in_footer&quot;]"
position="attributes"
>
<attribute name="t-out">str(o.name)</attribute>
</xpath>
</template>
<template
id="external_layout_standard_display_name_on_footer"
inherit_id="web.external_layout_standard"
priority="999"
>
<!-- Delete the original Page div -->
<xpath
expr="//div[@t-if=&quot;report_type == 'pdf'&quot;][hasclass('text-nowrap')]"
position="replace"
/>
<!-- Replace the report_footer div to create a div and add pages manually -->
<xpath
expr="//div[hasclass('flex-grow-1') and hasclass('text-start') and hasclass('me-2')]"
position="replace"
>
<div class="flex-grow-1 text-start me-2">
<div t-field="company.report_footer" />
<div
t-if="report_type == 'pdf'"
class="text-nowrap text-muted"
>Page <span class="page" /> / <span class="topage" /></div>
</div>
</xpath>
</template>
<template
id="external_layout_bold_display_name_on_footer"
inherit_id="web.external_layout_bold"
priority="999"
>
<xpath expr="//span[@t-field='company.report_footer']/.." position="inside">
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf'&quot;][contains(@t-attf-class, 'text-muted')]"
position="move"
/>
</xpath>
<!-- Remove the comma "," -->
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf' and display_name_in_footer&quot;]"
position="attributes"
>
<attribute name="t-out">str(o.name)</attribute>
</xpath>
</template>
<template
id="external_layout_bubble_display_name_on_footer"
inherit_id="web.external_layout_bubble"
priority="999"
>
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf'&quot;][hasclass('text-muted')][not(@t-out)]"
position="attributes"
>
<attribute name="class" add="float-start" separator=" " />
</xpath>
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf' and display_name_in_footer&quot;]"
position="attributes"
>
<attribute name="class" add="float-end" separator=" " />
<!-- Remove the comma "," -->
<attribute name="t-out">str(o.name)</attribute>
</xpath>
</template>
<template
id="external_layout_wave_display_name_on_footer"
inherit_id="web.external_layout_wave"
priority="999"
>
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf'&quot;][hasclass('text-muted')][not(@t-out)]"
position="attributes"
>
<attribute name="class" add="float-start" separator=" " />
</xpath>
<xpath
expr="//span[@t-if=&quot;report_type == 'pdf' and display_name_in_footer&quot;]"
position="attributes"
>
<attribute name="class" add="float-end" separator=" " />
<!-- Remove the comma "," -->
<attribute name="t-out">str(o.name)</attribute>
</xpath>
</template>
<template
id="external_layout_folder_display_name_on_footer"
inherit_id="web.external_layout_folder"
priority="999"
>
<!-- Delete the original Page div -->
<xpath
expr="//div[@t-if=&quot;report_type == 'pdf'&quot;][hasclass('text-nowrap')]"
position="replace"
/>
<!-- Replace the report_footer div to create a div and add pages manually -->
<xpath
expr="//div[hasclass('flex-grow-1') and hasclass('text-start') and hasclass('me-2')]"
position="replace"
>
<div class="flex-grow-1 text-start me-2">
<div t-field="company.report_footer" />
<div
t-if="report_type == 'pdf'"
class="text-nowrap text-muted"
>Page <span class="page" /> / <span class="topage" /></div>
</div>
</xpath>
</template>
</odoo>