Skip to content
Snippets Groups Projects
Commit 06d149a3 authored by Lucas Perais (lpe)'s avatar Lucas Perais (lpe)
Browse files

[FIX] l10n_be_intrastat, _2019: support rounding to 2 decimals

Before this commit, values were rounded to the unit, which was part of the former specs
of the Intrastat report

After this commit, we make the intrastat 2019 comply with the new spec, which is to round
value, price and weight to two decimals

See the spec here: https://www.nbb.be/doc/dq/f_pdf_ex/nieuwsbriefintrastat_n28_2018_fr.pdf



OPW 2031682

closes odoo/odoo#34700

Signed-off-by: default avatarLucas Perais (lpe) <lpe@odoo.com>
parent 0ec0a4a3
No related branches found
No related tags found
No related merge requests found
......@@ -4,8 +4,10 @@
import base64
import xml.etree.ElementTree as ET
from collections import namedtuple
from functools import partial
from odoo import api, exceptions, fields, models, _
from odoo.tools import float_round, float_is_zero
INTRASTAT_XMLNS = 'http://www.onegate.eu/2010-01-01'
......@@ -102,7 +104,16 @@ class XmlDeclaration(models.TransientModel):
'res_id': self.id,
}
def _get_rounding_digits(self):
"""A hook to not break behavior
Allows to programmatically set with what precision
the price, weight and values will be rounded"""
return 0
def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode):
round_digits = self._get_rounding_digits()
_round = partial(float_round, precision_digits=round_digits)
self._set_Dim(item, 'EXSEQCODE', unicode(numlgn))
self._set_Dim(item, 'EXTRF', unicode(linekey.EXTRF))
self._set_Dim(item, 'EXCNT', unicode(linekey.EXCNT))
......@@ -112,9 +123,9 @@ class XmlDeclaration(models.TransientModel):
if extendedmode:
self._set_Dim(item, 'EXTPC', unicode(linekey.EXTPC))
self._set_Dim(item, 'EXDELTRM', unicode(linekey.EXDELTRM))
self._set_Dim(item, 'EXTXVAL', unicode(round(amounts[0], 0)).replace(".", ","))
self._set_Dim(item, 'EXWEIGHT', unicode(round(amounts[1], 0)).replace(".", ","))
self._set_Dim(item, 'EXUNITS', unicode(round(amounts[2], 0)).replace(".", ","))
self._set_Dim(item, 'EXTXVAL', unicode(_round(amounts[0])).replace(".", ","))
self._set_Dim(item, 'EXWEIGHT', unicode(_round(amounts[1])).replace(".", ","))
self._set_Dim(item, 'EXUNITS', unicode(_round(amounts[2])).replace(".", ","))
def _get_intrastat_linekey(self, declcode, inv_line, dispatchmode, extendedmode):
IntrastatRegion = self.env['l10n_be_intrastat.region']
......@@ -296,7 +307,7 @@ class XmlDeclaration(models.TransientModel):
numlgn = 0
for linekey in entries:
amounts = entries[linekey]
if round(amounts[0], 0) == 0:
if float_is_zero(amounts[0], precision_digits=self._get_rounding_digits()):
continue
numlgn += 1
item = ET.SubElement(datas, 'Item')
......
......@@ -11,6 +11,15 @@ class XmlDeclaration(models.TransientModel):
"""
_inherit = "l10n_be_intrastat_xml.xml_decl"
def _get_rounding_digits(self):
"""
@override
https://www.nbb.be/doc/dq/f_pdf_ex/nieuwsbriefintrastat_n28_2018_fr.pdf
Chapter 3
"""
return 2
def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode):
super(XmlDeclaration, self)._build_intrastat_line(numlgn, item, linekey, amounts, dispatchmode, extendedmode)
if dispatchmode:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment