From e286a3317fe55ab5e131aeae9c78132435d8f092 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 19 Sep 2025 21:29:57 +0200 Subject: [PATCH] [REF] split mis_builder into mis_builder and mis_builder_report_xlsx module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Stéphane Bidoul --- mis_builder/README.rst | 6 +- mis_builder/__manifest__.py | 4 +- .../migrations/18.0.2.0.0/pre-migration.py | 36 ++ mis_builder/models/mis_report_instance.py | 6 - mis_builder/models/mis_report_style.py | 40 -- mis_builder/report/__init__.py | 1 - mis_builder/static/description/index.html | 114 +++-- .../src/components/mis_report_widget.esm.js | 10 - .../src/components/mis_report_widget.xml | 2 - mis_builder/tests/test_mis_report_instance.py | 16 - mis_builder/tests/test_render.py | 72 --- mis_builder/views/mis_report_instance.xml | 20 - mis_builder_report_xlsx/README.rst | 112 +++++ mis_builder_report_xlsx/__init__.py | 2 + mis_builder_report_xlsx/__manifest__.py | 25 + mis_builder_report_xlsx/models/__init__.py | 2 + .../models/mis_report_instance.py | 22 + .../models/mis_report_style.py | 52 ++ mis_builder_report_xlsx/pyproject.toml | 3 + .../readme/CONTRIBUTORS.md | 2 + mis_builder_report_xlsx/readme/DESCRIPTION.md | 2 + mis_builder_report_xlsx/readme/ROADMAP.md | 5 + mis_builder_report_xlsx/readme/USAGE.md | 10 + mis_builder_report_xlsx/report/__init__.py | 1 + .../report/mis_report_instance_xlsx.py | 6 +- .../report/mis_report_instance_xlsx.xml | 0 .../static/description/index.html | 451 ++++++++++++++++++ .../description/mis_report_instance_list.png | Bin 0 -> 23603 bytes .../mis_report_instance_preview_form.png | Bin 0 -> 25291 bytes .../src/components/mis_report_widget.esm.js | 14 + .../src/components/mis_report_widget.xml | 13 + mis_builder_report_xlsx/tests/__init__.py | 2 + .../tests/test_mis_report_instance.py | 28 ++ mis_builder_report_xlsx/tests/test_render.py | 84 ++++ .../views/mis_report_instance.xml | 52 ++ 35 files changed, 977 insertions(+), 238 deletions(-) create mode 100644 mis_builder/migrations/18.0.2.0.0/pre-migration.py create mode 100644 mis_builder_report_xlsx/README.rst create mode 100644 mis_builder_report_xlsx/__init__.py create mode 100644 mis_builder_report_xlsx/__manifest__.py create mode 100644 mis_builder_report_xlsx/models/__init__.py create mode 100644 mis_builder_report_xlsx/models/mis_report_instance.py create mode 100644 mis_builder_report_xlsx/models/mis_report_style.py create mode 100644 mis_builder_report_xlsx/pyproject.toml create mode 100644 mis_builder_report_xlsx/readme/CONTRIBUTORS.md create mode 100644 mis_builder_report_xlsx/readme/DESCRIPTION.md create mode 100644 mis_builder_report_xlsx/readme/ROADMAP.md create mode 100644 mis_builder_report_xlsx/readme/USAGE.md create mode 100644 mis_builder_report_xlsx/report/__init__.py rename {mis_builder => mis_builder_report_xlsx}/report/mis_report_instance_xlsx.py (97%) rename {mis_builder => mis_builder_report_xlsx}/report/mis_report_instance_xlsx.xml (100%) create mode 100644 mis_builder_report_xlsx/static/description/index.html create mode 100644 mis_builder_report_xlsx/static/description/mis_report_instance_list.png create mode 100644 mis_builder_report_xlsx/static/description/mis_report_instance_preview_form.png create mode 100644 mis_builder_report_xlsx/static/src/components/mis_report_widget.esm.js create mode 100644 mis_builder_report_xlsx/static/src/components/mis_report_widget.xml create mode 100644 mis_builder_report_xlsx/tests/__init__.py create mode 100644 mis_builder_report_xlsx/tests/test_mis_report_instance.py create mode 100644 mis_builder_report_xlsx/tests/test_render.py create mode 100644 mis_builder_report_xlsx/views/mis_report_instance.xml diff --git a/mis_builder/README.rst b/mis_builder/README.rst index 823dc3906..8a5930929 100644 --- a/mis_builder/README.rst +++ b/mis_builder/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - =========== MIS Builder =========== @@ -17,7 +13,7 @@ MIS Builder .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status :alt: Production/Stable -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |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%2Fmis--builder-lightgray.png?logo=github diff --git a/mis_builder/__manifest__.py b/mis_builder/__manifest__.py index 492413377..b831aaf3e 100644 --- a/mis_builder/__manifest__.py +++ b/mis_builder/__manifest__.py @@ -3,7 +3,7 @@ { "name": "MIS Builder", - "version": "18.0.1.7.3", + "version": "18.0.2.0.0", "category": "Reporting", "summary": """ Build 'Management Information System' Reports and Dashboards @@ -13,7 +13,6 @@ "depends": [ "account", "board", - "report_xlsx", # OCA/reporting-engine "date_range", # OCA/server-ux ], "data": [ @@ -26,7 +25,6 @@ "security/ir.model.access.csv", "security/mis_builder_security.xml", "report/mis_report_instance_qweb.xml", - "report/mis_report_instance_xlsx.xml", ], "assets": { "web.assets_backend": [ diff --git a/mis_builder/migrations/18.0.2.0.0/pre-migration.py b/mis_builder/migrations/18.0.2.0.0/pre-migration.py new file mode 100644 index 000000000..33bac7a12 --- /dev/null +++ b/mis_builder/migrations/18.0.2.0.0/pre-migration.py @@ -0,0 +1,36 @@ +import logging + +from openupgradelib import openupgrade + +_logger = logging.getLogger(__name__) + +xmlid_renames = [ + ("mis_builder.xls_export", "mis_builder_report_xlsx.xls_export"), +] + + +@openupgrade.migrate() +def migrate(env, version): + env.cr.execute(""" + SELECT count(*) + FROM ir_module_module + WHERE name = 'mis_builder_report_xlsx'""") + if env.cr.fetchone()[0] == 0: + _logger.error( + "Unable to found the module mis_builder_report_xlsx.\n" + " The module mis_builder has been refactored" + " and splitted into another module named" + " 'mis_builder_report_xlsx'." + " If you don't get this module in your addons path" + " the feature to export in XLSX will be lost.\n" + " More information:" + " https://github.com/OCA/mis-builder/pull/728" + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE ir_module_module + SET state='to upgrade' + WHERE name = 'mis_builder_report_xlsx' AND state='uninstalled'""", + ) + openupgrade.rename_xmlids(env.cr, xmlid_renames) diff --git a/mis_builder/models/mis_report_instance.py b/mis_builder/models/mis_report_instance.py index 640c6cf37..64c735213 100644 --- a/mis_builder/models/mis_report_instance.py +++ b/mis_builder/models/mis_report_instance.py @@ -792,12 +792,6 @@ def print_pdf(self): .report_action(self, data=dict(dummy=True)) # required to propagate context ) - def export_xls(self): - self.ensure_one() - return self.env.ref("mis_builder.xls_export").report_action( - self, data=dict(dummy=True) - ) # required to propagate context - def display_settings(self): assert len(self.ids) <= 1 view_id = self.env.ref("mis_builder.mis_report_instance_view_form") diff --git a/mis_builder/models/mis_report_style.py b/mis_builder/models/mis_report_style.py index 287984d0b..88444ed3b 100644 --- a/mis_builder/models/mis_report_style.py +++ b/mis_builder/models/mis_report_style.py @@ -74,16 +74,6 @@ def check_positive_val(self): ("xx-large", "xx-large"), ] - _font_size_to_xlsx_size = { - "medium": 11, - "xx-small": 5, - "x-small": 7, - "small": 9, - "large": 13, - "x-large": 15, - "xx-large": 17, - } - # style name name = fields.Char(string="Style name", required=True) @@ -309,36 +299,6 @@ def compare_and_render( delta_r = self.render(lang, delta_style, delta_type, delta, sign="+") return delta, delta_r, delta_style, delta_type - @api.model - def to_xlsx_style(self, var_type, props, no_indent=False): - xlsx_attributes = [ - ("italic", props.font_style == "italic"), - ("bold", props.font_weight == "bold"), - ("font_size", self._font_size_to_xlsx_size.get(props.font_size, 11)), - ("font_color", props.color), - ("bg_color", props.background_color), - ] - if var_type == TYPE_NUM: - num_format = "#,##0" - if props.dp: - num_format += "." - num_format += "0" * props.dp - if props.prefix: - num_format = f'"{props.prefix} "{num_format}' - if props.suffix: - num_format = f'{num_format}" {props.suffix}"' - xlsx_attributes.append(("num_format", num_format)) - elif var_type == TYPE_PCT: - num_format = "0" - if props.dp: - num_format += "." - num_format += "0" * props.dp - num_format += "%" - xlsx_attributes.append(("num_format", num_format)) - if props.indent_level is not None and not no_indent: - xlsx_attributes.append(("indent", props.indent_level)) - return dict([a for a in xlsx_attributes if a[1] is not None]) - @api.model def to_css_style(self, props, no_indent=False): css_attributes = [ diff --git a/mis_builder/report/__init__.py b/mis_builder/report/__init__.py index 6f814d60b..dbe8a08b8 100644 --- a/mis_builder/report/__init__.py +++ b/mis_builder/report/__init__.py @@ -2,4 +2,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import mis_report_instance_qweb -from . import mis_report_instance_xlsx diff --git a/mis_builder/static/description/index.html b/mis_builder/static/description/index.html index b43076c19..931fceef3 100644 --- a/mis_builder/static/description/index.html +++ b/mis_builder/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +MIS Builder -
+
+

MIS Builder

- - -Odoo Community Association - -
-

MIS Builder

-

Production/Stable License: AGPL-3 OCA/mis-builder Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/mis-builder Translate me on Weblate Try me on Runboat

This module allows you to build Management Information Systems dashboards. Such style of reports presents KPI in rows and time periods in columns. Reports mainly fetch data from account moves, but can also @@ -446,7 +441,7 @@

MIS Builder

-

Installation

+

Installation

Your preferred way to install addons will work with MIS Builder.

An easy way to install it with all its dependencies is using pip:

-

Usage

+

Usage

To configure this module, you need to:

  • Go to Accounting > Configuration > MIS Reporting > MIS Report @@ -485,7 +480,7 @@

    Usage

-

Development

+

Development

A typical extension is to provide a mechanism to filter reports on analytic dimensions or operational units. To implement this, you can override _get_additional_move_line_filter and _get_additional_filter @@ -495,7 +490,7 @@

Development

different columns to show different analytic accounts.

-

Changelog

+

Changelog

-

18.0.1.7.2 (2025-10-29)

+

18.0.1.7.2 (2025-10-29)

-

Bugfixes

+

Bugfixes

  • Fix computation of currency conversion rates (#737)
  • @@ -515,9 +510,9 @@

    Bugfixes

-

18.0.1.5.0 (2025-10-27)

+

18.0.1.5.0 (2025-10-27)

-

Features

+

Features

  • Introduction of annotations on report cells. Added notes will be pinted when exporting to PDF and Excel. @@ -526,9 +521,9 @@

    Features

-

17.0.1.0.2 (2024-11-11)

+

17.0.1.0.2 (2024-11-11)

-

Features

+

Features

  • Add support for branch companies. (#648)
  • @@ -536,7 +531,7 @@

    Features

-

16.0.5.1.9 (2024-02-09)

+

16.0.5.1.9 (2024-02-09)

Bugfixes

-

16.0.5.1.8 (2024-02-08)

+

16.0.5.1.8 (2024-02-08)

Bugfixes

-

16.0.5.1.0 (2023-04-04)

+

16.0.5.1.0 (2023-04-04)

Features

  • Improve UX by adding the option to edit the pivot date directly on the @@ -561,7 +556,7 @@

    16.0.5.1.0 (2023-04-04)

-

16.0.5.0.0 (2023-04-01)

+

16.0.5.0.0 (2023-04-01)

Features

-

15.0.4.0.5 (2022-07-19)

+

15.0.4.0.5 (2022-07-19)

Bugfixes

-

15.0.4.0.4 (2022-07-19)

+

15.0.4.0.4 (2022-07-19)

Bugfixes

-

15.0.4.0.2 (2022-02-16)

+

15.0.4.0.2 (2022-02-16)

Bugfixes

  • Fix access right issue when clicking the “Save” button on a MIS Report @@ -626,7 +621,7 @@

    15.0.4.0.2 (2022-02-16)

-

14.0.4.0.0 (2022-01-08)

+

14.0.4.0.0 (2022-01-08)

Features

-

14.0.3.6.7 (2021-06-02)

+

14.0.3.6.7 (2021-06-02)

Bugfixes

  • When on a MIS Report Instance, if you wanted to generate a new line of @@ -671,7 +666,7 @@

    14.0.3.6.7 (2021-06-02)

-

14.0.3.6.6 (2021-04-23)

+

14.0.3.6.6 (2021-04-23)

Bugfixes

  • Fix drilldown action name when the account model has been customized. @@ -679,7 +674,7 @@

    14.0.3.6.6 (2021-04-23)

-

14.0.3.6.5 (2021-04-23)

+

14.0.3.6.5 (2021-04-23)

Bugfixes

-

14.0.3.6.4 (2021-04-06)

+

14.0.3.6.4 (2021-04-06)

Features

-

13.0.3.6.3 (2020-08-28)

+

13.0.3.6.3 (2020-08-28)

Bugfixes

  • Having a “Compare columns” added on a KPI with an associated style @@ -717,7 +712,7 @@

    13.0.3.6.3 (2020-08-28)

-

13.0.3.6.2 (2020-04-22)

+

13.0.3.6.2 (2020-04-22)

Bugfixes

  • The “Settings” button is now displayed for users with the “Show full @@ -726,7 +721,7 @@

    13.0.3.6.2 (2020-04-22)

-

13.0.3.6.1 (2020-04-22)

+

13.0.3.6.1 (2020-04-22)

Bugfixes

-

13.0.3.6.0 (2020-03-28)

+

13.0.3.6.0 (2020-03-28)

Features

  • Add column-level filters on analytic account and analytic tags. These @@ -753,11 +748,11 @@

    13.0.3.6.0 (2020-03-28)

-

12.0.3.5.0 (2019-10-26)

+

12.0.3.5.0 (2019-10-26)

Features

  • The account_id field of the model selected in ‘Move lines source’ @@ -797,7 +792,7 @@

    12.0.3.5.0 (2019-10-26)

-

12.0.3.4.0 (2019-07-09)

+

12.0.3.4.0 (2019-07-09)

Features

-

12.0.3.3.0 (2019-01-26)

+

12.0.3.3.0 (2019-01-26)

Features

Dynamic analytic filters in report preview are not yet available in 11, this requires an update to the JS widget that proved difficult to @@ -873,7 +868,7 @@

12.0.3.3.0 (2019-01-26)

analytic_account_id field.

-

11.0.3.2.2 (2018-06-30)

+

11.0.3.2.2 (2018-06-30)

-

11.0.3.2.1 (2018-05-29)

+

11.0.3.2.1 (2018-05-29)

  • [FIX] Missing comparison operator for AccountingNone leading to errors in pbal computations @@ -891,7 +886,7 @@

    11.0.3.2.1 (2018-05-29)

-

10.0.3.2.0 (2018-05-02)

+

10.0.3.2.0 (2018-05-02)

-

11.0.3.1.2 (2018-02-04)

+

11.0.3.1.2 (2018-02-04)

Migration to Odoo 11. No new feature. (#67)

-

10.0.3.1.1 (2017-11-14)

+

10.0.3.1.1 (2017-11-14)

New features:

  • [ADD] month and year relative periods, easier to use than date ranges @@ -949,7 +944,7 @@

    10.0.3.1.1 (2017-11-14)

-

10.0.3.0.4 (2017-10-14)

+

10.0.3.0.4 (2017-10-14)

Bug fix:

-

10.0.3.0.3 (2017-10-03)

+

10.0.3.0.3 (2017-10-03)

Bug fix:

-

10.0.3.0.2 (2017-10-01)

+

10.0.3.0.2 (2017-10-01)

New features:

  • [ADD] Alternative move line source per report column. This makes mis @@ -1010,7 +1005,7 @@

    10.0.3.0.2 (2017-10-01)

-

10.0.2.0.3 (unreleased)

+

10.0.2.0.3 (unreleased)

  • [IMP] more robust behaviour in presence of missing expressions
  • [FIX] indent style
  • @@ -1023,7 +1018,7 @@

    10.0.2.0.3 (unreleased)

-

9.0.2.0.2 (2016-09-27)

+

9.0.2.0.2 (2016-09-27)

  • [IMP] Add refresh button in mis report preview.
  • [IMP] Widget code changes to allow to add fields in the widget more @@ -1031,7 +1026,7 @@

    9.0.2.0.2 (2016-09-27)

-

9.0.2.0.1 (2016-05-26)

+

9.0.2.0.1 (2016-05-26)

  • [IMP] remove unused argument in declare_and_compute_period() for a cleaner API. This is a breaking API changing merged in urgency before @@ -1039,7 +1034,7 @@

    9.0.2.0.1 (2016-05-26)

-

9.0.2.0.0 (2016-05-24)

+

9.0.2.0.0 (2016-05-24)

Part of the work for this release has been done at the Sorrento sprint April 26-29, 2016. The rest (ie a major refactoring) has been done in the weeks after.

@@ -1088,7 +1083,7 @@

9.0.2.0.0 (2016-05-24)

-

8.0.1.0.0 (2016-04-27)

+

8.0.1.0.0 (2016-04-27)

-

8.0.0.2.0

+

8.0.0.2.0

Pre-history. Or rather, you need to look at the git log.

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed @@ -1126,15 +1121,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -1184,6 +1179,5 @@

Maintainers

-
diff --git a/mis_builder/static/src/components/mis_report_widget.esm.js b/mis_builder/static/src/components/mis_report_widget.esm.js index c00d6177a..d8a07e0bb 100644 --- a/mis_builder/static/src/components/mis_report_widget.esm.js +++ b/mis_builder/static/src/components/mis_report_widget.esm.js @@ -168,16 +168,6 @@ export class MisReportWidget extends Component { this.action.doAction(action); } - async exportXls() { - const action = await this.orm.call( - "mis.report.instance", - "export_xls", - [this._instanceId()], - {context: this.context} - ); - this.action.doAction(action); - } - async displaySettings() { const action = await this.orm.call( "mis.report.instance", diff --git a/mis_builder/static/src/components/mis_report_widget.xml b/mis_builder/static/src/components/mis_report_widget.xml index 0f55c7932..99319806a 100644 --- a/mis_builder/static/src/components/mis_report_widget.xml +++ b/mis_builder/static/src/components/mis_report_widget.xml @@ -32,8 +32,6 @@ Refresh - + + + diff --git a/mis_builder_report_xlsx/tests/__init__.py b/mis_builder_report_xlsx/tests/__init__.py new file mode 100644 index 000000000..606f85fc5 --- /dev/null +++ b/mis_builder_report_xlsx/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_mis_report_instance +from . import test_render diff --git a/mis_builder_report_xlsx/tests/test_mis_report_instance.py b/mis_builder_report_xlsx/tests/test_mis_report_instance.py new file mode 100644 index 000000000..38277453d --- /dev/null +++ b/mis_builder_report_xlsx/tests/test_mis_report_instance.py @@ -0,0 +1,28 @@ +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tools import test_reports + +from odoo.addons.mis_builder.tests.test_mis_report_instance import TestMisReportInstance + + +class TestMisReportInstanceReportXlsx(TestMisReportInstance): + @classmethod + def setUpClass(cls): + super().setUpClass() + + def test_xlsx(self): + self.report_instance.export_xls() # get action + with self.assertLogs("odoo.tools.test_reports", level="WARNING") as log_catcher: + test_reports.try_report( + self.env.cr, + self.env.uid, + "mis_builder_report_xlsx.xls_export", + [self.report_instance.id], + report_type="xlsx", + ) + self.assertIn( + "Report mis_builder_report_xlsx.xls_export" + ' produced a "xlsx" chunk, cannot examine it', + log_catcher.output[0], + ) diff --git a/mis_builder_report_xlsx/tests/test_render.py b/mis_builder_report_xlsx/tests/test_render.py new file mode 100644 index 000000000..523e13e42 --- /dev/null +++ b/mis_builder_report_xlsx/tests/test_render.py @@ -0,0 +1,84 @@ +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + + +from odoo.addons.mis_builder.models.mis_report_style import TYPE_NUM, TYPE_PCT, TYPE_STR +from odoo.addons.mis_builder.tests.test_render import TestRendering + + +class TestRenderingReportXlsx(TestRendering): + @classmethod + def setUpClass(cls): + super().setUpClass() + + def test_xlsx(self): + self.style.color_inherit = False + self.style.color = "#FF0000" + self.style.background_color_inherit = False + self.style.background_color = "#0000FF" + self.style.suffix_inherit = False + self.style.suffix = "s" + self.style.prefix_inherit = False + self.style.prefix = "p" + self.style.dp_inherit = False + self.style.dp = 2 + self.style.font_style_inherit = False + self.style.font_style = "italic" + self.style.font_weight_inherit = False + self.style.font_weight = "bold" + self.style.font_size_inherit = False + self.style.font_size = "small" + self.style.indent_level_inherit = False + self.style.indent_level = 2 + style_props = self.style_obj.merge([self.style]) + xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props) + self.assertEqual( + xlsx, + { + "italic": True, + "bold": True, + "font_size": 9, + "font_color": "#FF0000", + "bg_color": "#0000FF", + "num_format": '"p "#,##0.00" s"', + "indent": 2, + }, + ) + xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props, no_indent=True) + self.assertEqual( + xlsx, + { + "italic": True, + "bold": True, + "font_size": 9, + "font_color": "#FF0000", + "bg_color": "#0000FF", + "num_format": '"p "#,##0.00" s"', + }, + ) + # percent type ignore prefix and suffix + xlsx = self.style_obj.to_xlsx_style(TYPE_PCT, style_props, no_indent=True) + self.assertEqual( + xlsx, + { + "italic": True, + "bold": True, + "font_size": 9, + "font_color": "#FF0000", + "bg_color": "#0000FF", + "num_format": "0.00%", + }, + ) + + # str type have no num_format style + xlsx = self.style_obj.to_xlsx_style(TYPE_STR, style_props, no_indent=True) + self.assertEqual( + xlsx, + { + "italic": True, + "bold": True, + "font_size": 9, + "font_color": "#FF0000", + "bg_color": "#0000FF", + }, + ) diff --git a/mis_builder_report_xlsx/views/mis_report_instance.xml b/mis_builder_report_xlsx/views/mis_report_instance.xml new file mode 100644 index 000000000..e6753ee66 --- /dev/null +++ b/mis_builder_report_xlsx/views/mis_report_instance.xml @@ -0,0 +1,52 @@ + + + + mis.report.instance + + + + + + + + mis.report.instance + + + + + + + + mis.report.instance + + + +