From 88fd24faa9cbc5e6a36ba4ab06de764077d423e8 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Mon, 19 Dec 2016 02:06:11 +0100 Subject: [PATCH] Monkey-patching of formatLang to have clean display of float that are integers --- base_usability/__init__.py | 1 + base_usability/report_sxw.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 base_usability/report_sxw.py diff --git a/base_usability/__init__.py b/base_usability/__init__.py index a0c9233..32f4452 100644 --- a/base_usability/__init__.py +++ b/base_usability/__init__.py @@ -3,3 +3,4 @@ from . import partner from . import mail from . import misc +from . import report_sxw diff --git a/base_usability/report_sxw.py b/base_usability/report_sxw.py new file mode 100644 index 0000000..d1ce3b1 --- /dev/null +++ b/base_usability/report_sxw.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, api +from odoo.report import report_sxw +from openerp.tools import float_compare + + +class BaseUsabilityInstalled(models.AbstractModel): + _name = "base.usability.installed" + + +formatLang_original = report_sxw.rml_parse.formatLang + + +def formatLang( + self, value, digits=None, date=False, date_time=False, grouping=True, + monetary=False, dp=False, currency_obj=False, int_no_digits=True): + with api.Environment.manage(): + env = api.Environment(self.cr, self.uid, {}) + if ( + 'base.usability.installed' in env and + int_no_digits and + isinstance(value, float) and + dp): + prec = env['decimal.precision'].precision_get(dp) + if not float_compare(value, int(value), precision_digits=prec): + digits = 0 + dp = False + res = formatLang_original( + self, value, digits=digits, date=date, date_time=date_time, + grouping=grouping, monetary=monetary, dp=dp, currency_obj=currency_obj) + return res + +report_sxw.rml_parse.formatLang = formatLang