Skip to content

Commit

Permalink
[ADD][16.0] module report_format_option
Browse files Browse the repository at this point in the history
  • Loading branch information
AungKoKoLin1997 authored and bealdav committed May 31, 2024
1 parent 604ec7b commit e5ed3a7
Show file tree
Hide file tree
Showing 16 changed files with 721 additions and 0 deletions.
1 change: 1 addition & 0 deletions report_csv/readme/ROADMAP.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Define report_format_option module as a dependency of this current module
88 changes: 88 additions & 0 deletions report_format_option/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
====================
Report Format Option
====================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e3b9cc2a66291d03027c6100d82df8a6a0934f1802a392fe2ff1cad39557fe0d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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-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/16.0/report_format_option
: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-16-0/reporting-engine-16-0-report_format_option
: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=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This is a technical module designed to add encoding fields to the ir.actions.report model and is applied to Text type reports.
The module is expected to be a dependency of other reporting modules (e.g., report_csv).

**Table of contents**

.. contents::
:local:

Configuration
=============

In case the exported report should be encoded in another system than UTF-8, following
fields of the report record (*Settings > Technical > Reports*) should be populated accordingly.

* Encoding: set an encoding system (such as cp932)
* Encode Error Handling: select 'Ignore' or 'Replace' as necessary.
* 'Ignore': in case of an encoding error, the problematic character will be removed from the exported file.
* 'Replace': in case of an encoding error, the problematic character will be replaced with '?' symbol.
* Leaving the field blank: in case of an encoding error, the report generation fails with an error message.
* Line Ending: Select the type of line ending, 'CRLF' or 'CR', as necessary.
* 'CRLF': 'Carriage Return' + 'Line Feed' (Windows)
* 'CR': 'Carriage Return' (classic Mac OS)
* Leaving this field blank defaults to using 'LF' (Line Feed), the default behavior of Odoo.

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_format_option%0Aversion:%2016.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
~~~~~~~

* Quartile Limited

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 <https://github.com/OCA/reporting-engine/tree/16.0/report_format_option>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions report_format_option/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
14 changes: 14 additions & 0 deletions report_format_option/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Copyright 2024 Quartile Limited
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
{
"name": "Report Format Option",
"author": "Quartile Limited, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/reporting-engine",
"category": "Reporting",
"version": "16.0.1.0.0",
"license": "LGPL-3",
"depends": ["base"],
"data": ["views/ir_actions_report_views.xml"],
"demo": ["demo/report_demo.xml"],
"installable": True,
}
18 changes: 18 additions & 0 deletions report_format_option/demo/report_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<odoo>
<!-- Demo report action -->
<record id="action_report_demo" model="ir.actions.report">
<field name="name">Demo Text Report</field>
<field name="model">res.partner</field>
<field name="report_type">qweb-text</field>
<field name="report_name">report_format_option.demo_report_template</field>
<field name="report_file">report_format_option.demo_report_template</field>
<field name="binding_model_id" ref="base.model_res_partner" />
</record>

<!-- Demo report template -->
<template id="demo_report_template">
<t t-foreach="docs" t-as="doc">
<p>Hello, <t t-esc="doc.name" />!</p>
</t>
</template>
</odoo>
1 change: 1 addition & 0 deletions report_format_option/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import ir_actions_report
63 changes: 63 additions & 0 deletions report_format_option/models/ir_actions_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Copyright 2024 Quartile Limited
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).

from odoo import api, fields, models


class IrActionReport(models.Model):
_inherit = "ir.actions.report"

encoding = fields.Char(
help="Encoding to be applied to the generated CSV file. e.g. cp932"
)
encode_error_handling = fields.Selection(
selection=[("ignore", "Ignore"), ("replace", "Replace")],
help="If nothing is selected, CSV export will fail with an error message when "
"there is a character that fail to be encoded.",
)
show_encoding = fields.Boolean(
compute="_compute_show_encoding",
help="Technical field to control the visibility of the encoding field.",
)
line_ending = fields.Selection(
[("crlf", "CRLF (\\r\\n)"), ("cr", "CR (\\r)")],
help="Select the type of line ending in case the report needs "
"to be output with other line ending than 'LF'.",
)
show_line_ending = fields.Boolean(
compute="_compute_show_line_ending",
help="Technical field to control the visibility of the line ending field.",
)

def _compute_show_encoding(self):
"""Extend this method to show the encoding field in the report form."""
for report in self:
report.show_encoding = False
if report.report_type == "qweb-text":
report.show_encoding = True

Check warning on line 37 in report_format_option/models/ir_actions_report.py

View check run for this annotation

Codecov / codecov/patch

report_format_option/models/ir_actions_report.py#L37

Added line #L37 was not covered by tests

def _compute_show_line_ending(self):
"""Extend this method to show the line ending field in the report form."""
for report in self:
report.show_line_ending = False
if report.report_type == "qweb-text":
report.show_line_ending = True

Check warning on line 44 in report_format_option/models/ir_actions_report.py

View check run for this annotation

Codecov / codecov/patch

report_format_option/models/ir_actions_report.py#L44

Added line #L44 was not covered by tests

@api.model
def _render_qweb_text(self, report_ref, docids, data=None):
content, content_type = super()._render_qweb_text(report_ref, docids, data)
report = self._get_report(report_ref)
if not report.encoding and not report.line_ending:
return content, content_type
content_str = content.decode("utf-8")
if report.line_ending == "crlf":
content_str = content_str.replace("\n", "\r\n")
elif report.line_ending == "cr":
content_str = content_str.replace("\n", "\r")
# If specific encoding is set on the report, use it; otherwise, fallback to utf-8
encoding = report.encoding or "utf-8"
encode_options = {}
if report.encode_error_handling:
encode_options["errors"] = report.encode_error_handling

Check warning on line 61 in report_format_option/models/ir_actions_report.py

View check run for this annotation

Codecov / codecov/patch

report_format_option/models/ir_actions_report.py#L61

Added line #L61 was not covered by tests
content = content_str.encode(encoding, **encode_options)
return content, content_type
12 changes: 12 additions & 0 deletions report_format_option/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
In case the exported report should be encoded in another system than UTF-8, following
fields of the report record (*Settings > Technical > Reports*) should be populated accordingly.

* Encoding: set an encoding system (such as cp932)
* Encode Error Handling: select 'Ignore' or 'Replace' as necessary.
* 'Ignore': in case of an encoding error, the problematic character will be removed from the exported file.
* 'Replace': in case of an encoding error, the problematic character will be replaced with '?' symbol.
* Leaving the field blank: in case of an encoding error, the report generation fails with an error message.
* Line Ending: Select the type of line ending, 'CRLF' or 'CR', as necessary.
* 'CRLF': 'Carriage Return' + 'Line Feed' (Windows)
* 'CR': 'Carriage Return' (classic Mac OS)
* Leaving this field blank defaults to using 'LF' (Line Feed), the default behavior of Odoo.
2 changes: 2 additions & 0 deletions report_format_option/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This is a technical module designed to add encoding fields to the ir.actions.report model and is applied to Text type reports.
The module is expected to be a dependency of other reporting modules (e.g., report_csv).
1 change: 1 addition & 0 deletions report_format_option/readme/ROADMAP.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Make this module as a dependency of report_csv
Loading

0 comments on commit e5ed3a7

Please sign in to comment.